Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code

Side by Side Diff: src/plugin/PluginUserSettings.cpp

Issue 5979857238360064: Issues #1163, #1173 - refactor CPluginUserSettings (Closed)
Patch Set: Created Jan. 9, 2015, 4:36 p.m.
Left:
Right:
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/plugin/PluginUserSettings.h ('k') | test/plugin/UserSettingsTest.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /*
2 * This file is part of Adblock Plus <http://adblockplus.org/>,
sergei 2015/01/30 16:01:40 As I see we use `https` in other files, although o
3 * Copyright (C) 2006-2015 Eyeo GmbH
4 *
5 * Adblock Plus is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License version 3 as
7 * published by the Free Software Foundation.
8 *
9 * Adblock Plus is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with Adblock Plus. If not, see <http://www.gnu.org/licenses/>.
16 */
1 #include "PluginStdAfx.h" 17 #include "PluginStdAfx.h"
2 #include "PluginUserSettings.h" 18 #include "PluginUserSettings.h"
3 #include <algorithm> 19 #include <algorithm>
4 #include "PluginSettings.h" 20 #include "PluginSettings.h"
5 #include "PluginClient.h" 21 #include "PluginClient.h"
6 #include "../shared/Dictionary.h" 22 #include "../shared/Dictionary.h"
7 23 #include <unordered_map>
8 static const CString s_GetMessage = L"GetMessage"; 24
9 static const CString s_GetLanguageCount = L"GetLanguageCount"; 25 namespace
10 static const CString s_GetLanguageByIndex = L"GetLanguageByIndex"; 26 {
11 static const CString s_GetLanguageTitleByIndex = L"GetLanguageTitleByIndex"; 27 enum UserSettingsMethods
12 static const CString s_SetLanguage = L"SetLanguage"; 28 {
13 static const CString s_GetLanguage = L"GetLanguage"; 29 dispatchID_GetMessage = 0,
14 static const CString s_GetWhitelistDomains = L"GetWhitelistDomains"; 30 dispatchID_GetLanguageCount,
15 static const CString s_AddWhitelistDomain = L"AddWhitelistDomain"; 31 dispatchID_GetLanguageByIndex,
16 static const CString s_RemoveWhitelistDomain = L"RemoveWhitelistDomain"; 32 dispatchID_GetLanguageTitleByIndex,
17 static const CString s_GetAppLocale = L"GetAppLocale"; 33 dispatchID_SetLanguage,
18 static const CString s_GetDocumentationLink = L"GetDocumentationLink"; 34 dispatchID_GetLanguage,
19 static const CString s_IsAcceptableAdsEnabled = L"IsAcceptableAdsEnabled"; 35 dispatchID_GetWhitelistDomains,
20 static const CString s_SetAcceptableAdsEnabled = L"SetAcceptableAdsEnabled"; 36 dispatchID_AddWhitelistDomain,
21 static const CString s_IsUpdate = L"IsUpdate"; 37 dispatchID_RemoveWhitelistDomain,
22 static const CString s_Methods[] = {s_GetMessage, s_GetLanguageCount, s_GetLangu ageByIndex, s_GetLanguageTitleByIndex, s_SetLanguage, s_GetLanguage, s_GetWhitel istDomains, s_AddWhitelistDomain, s_RemoveWhitelistDomain, s_GetAppLocale, s_Get DocumentationLink, s_IsAcceptableAdsEnabled, s_SetAcceptableAdsEnabled, s_IsUpda te}; 38 dispatchID_GetAppLocale,
23 39 dispatchID_GetDocumentationLink,
24 CPluginUserSettings::CPluginUserSettings() 40 dispatchID_IsAcceptableAdsEnabled,
25 { 41 dispatchID_SetAcceptableAdsEnabled,
26 } 42 dispatchID_IsUpdate,
27 43 };
28 44
45 /**
46 * Auxiliary for static initialization
47 */
48 std::unordered_map<std::wstring, DISPID> InitMethodIndex()
49 {
50 std::unordered_map<std::wstring, DISPID> m;
51 // try-block for safety during static initialization
52 try
53 {
54 m.emplace(L"GetMessage", dispatchID_GetMessage);
55 m.emplace(L"GetLanguageCount", dispatchID_GetLanguageCount);
56 m.emplace(L"GetLanguageByIndex", dispatchID_GetLanguageByIndex);
57 m.emplace(L"GetLanguageTitleByIndex", dispatchID_GetLanguageTitleByIndex);
58 m.emplace(L"SetLanguage", dispatchID_SetLanguage);
59 m.emplace(L"GetLanguage", dispatchID_GetLanguage);
60 m.emplace(L"GetWhitelistDomains", dispatchID_GetWhitelistDomains);
61 m.emplace(L"AddWhitelistDomain", dispatchID_AddWhitelistDomain);
62 m.emplace(L"RemoveWhitelistDomain", dispatchID_RemoveWhitelistDomain);
63 m.emplace(L"GetAppLocale", dispatchID_GetAppLocale);
64 m.emplace(L"GetDocumentationLink", dispatchID_GetDocumentationLink);
65 m.emplace(L"IsAcceptableAdsEnabled", dispatchID_IsAcceptableAdsEnabled);
66 m.emplace(L"SetAcceptableAdsEnabled", dispatchID_SetAcceptableAdsEnabled);
67 m.emplace(L"IsUpdate", dispatchID_IsUpdate);
68 }
69 catch(...)
70 {
71 }
72 return m;
73 }
74
75 /**
76 * Static map from method names to dispatch identifiers.
77 */
78 std::unordered_map<std::wstring, DISPID> methodIndex = InitMethodIndex();
79 }
80
81 // ENTRY POINT
29 STDMETHODIMP CPluginUserSettings::QueryInterface(REFIID riid, void **ppvObj) 82 STDMETHODIMP CPluginUserSettings::QueryInterface(REFIID riid, void **ppvObj)
30 { 83 {
31 if (IID_IUnknown == riid || IID_IDispatch == riid) 84 if (!ppvObj)
32 { 85 {
33 *ppvObj = (LPVOID)this; 86 return E_POINTER;
34 return NOERROR; 87 }
35 } 88 if (riid == IID_IUnknown || riid == IID_IDispatch) // GUID comparison does not throw
36 89 {
90 *ppvObj = static_cast<void *>(this);
91 return S_OK;
92 }
37 return E_NOINTERFACE; 93 return E_NOINTERFACE;
38 } 94 }
39 95
40 96 /**
41 /* 97 * \par Limitation
42 Since CPluginUserSettings is not allocated on the heap, 'AddRef' and 'Release' d on't need reference counting, 98 * CPluginUserSettings is not allocated on the heap.
43 because CPluginUserSettings won't be deleted when reference counter == 0 99 * It appears only as a member variable in CPluginTabBase.
44 */ 100 * 'AddRef' and 'Release' don't need reference counting because they don't pre sent COM factories.
45 101 */
46 ULONG __stdcall CPluginUserSettings::AddRef() 102 ULONG __stdcall CPluginUserSettings::AddRef()
47 { 103 {
48 return 1; 104 return 1;
49 } 105 }
50 106
51
52 ULONG __stdcall CPluginUserSettings::Release() 107 ULONG __stdcall CPluginUserSettings::Release()
53 { 108 {
54 return 1; 109 return 1;
55 } 110 }
56 111
57
58 STDMETHODIMP CPluginUserSettings::GetTypeInfoCount(UINT* pctinfo) 112 STDMETHODIMP CPluginUserSettings::GetTypeInfoCount(UINT* pctinfo)
59 { 113 {
60 return E_NOTIMPL; 114 return E_NOTIMPL;
61 } 115 }
62 116
63
64 STDMETHODIMP CPluginUserSettings::GetTypeInfo(UINT itinfo, LCID lcid, ITypeInfo* * pptinfo) 117 STDMETHODIMP CPluginUserSettings::GetTypeInfo(UINT itinfo, LCID lcid, ITypeInfo* * pptinfo)
65 { 118 {
66 return E_NOTIMPL; 119 return E_NOTIMPL;
67 } 120 }
68 121
69 122 /**
70 STDMETHODIMP CPluginUserSettings::GetIDsOfNames(REFIID riid, LPOLESTR* rgszNames , UINT cNames, LCID lcid, DISPID* rgdispid) 123 * \par Limitation
71 { 124 * The specification for this method in IDispatch maps an array of names to an array of identifiers.
72 if (!rgszNames) 125 * This version only supports single-element arrays, which is enough for IE's JavaScript interpreter.
73 return E_POINTER; 126 */
74 127 STDMETHODIMP CPluginUserSettings::GetIDsOfNames(REFIID, LPOLESTR* name, UINT cou nt, LCID, DISPID* id)
75 if (!rgdispid) 128 {
76 return E_POINTER; 129 try
77 130 {
78 if (1 != cNames) 131 if (!name || !id)
132 {
133 return E_POINTER;
134 }
135 if (count != 1)
136 {
137 return E_FAIL;
138 }
139 auto item = methodIndex.find(*name); // unordered_map::find is not declared noexcept
140 if (item==methodIndex.end())
141 {
142 return DISP_E_UNKNOWNNAME;
143 }
144 *id = item->second;
145 }
146 catch (...)
147 {
79 return E_FAIL; 148 return E_FAIL;
80 149 }
81 size_t indxMethod = 0;
82 for (; indxMethod < countof(s_Methods); indxMethod++)
83 {
84 if (*rgszNames == s_Methods[indxMethod])
85 break;
86 }
87
88 if (indxMethod == countof(s_Methods))
89 return DISP_E_MEMBERNOTFOUND;
90
91 *rgdispid = static_cast<DISPID>(indxMethod);
92
93 return S_OK; 150 return S_OK;
94 } 151 }
95 152
96
97 static CString sGetLanguage()
98 {
99 CPluginSettings* settings = CPluginSettings::GetInstance();
100 return settings->GetSubscription();
101 }
102
103
104 CStringW sGetMessage(const CString& section, const CString& key) 153 CStringW sGetMessage(const CString& section, const CString& key)
105 { 154 {
106 Dictionary* dictionary = Dictionary::GetInstance(); 155 Dictionary* dictionary = Dictionary::GetInstance();
107 return CStringW(dictionary->Lookup(std::string(CW2A(section)), std::string(CW2 A(key))).c_str()); 156 return CStringW(dictionary->Lookup(std::string(CW2A(section)), std::string(CW2 A(key))).c_str());
108 } 157 }
109 158
110 std::wstring sGetMessage(const std::string& section, const std::string& key)
111 {
112 Dictionary* dictionary = Dictionary::GetInstance();
113 return dictionary->Lookup(section, key);
114 }
115
116
117 STDMETHODIMP CPluginUserSettings::Invoke(DISPID dispidMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS* pDispparams, VARIANT* pVarResult, 159 STDMETHODIMP CPluginUserSettings::Invoke(DISPID dispidMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS* pDispparams, VARIANT* pVarResult,
118 EXCEPINFO* pExcepinfo, UINT* pArgErr) 160 EXCEPINFO* pExcepinfo, UINT* pArgErr)
119 { 161 {
120 if (!pDispparams) 162 try
121 return E_POINTER; 163 {
122 164 if (!pDispparams)
123 if (!pExcepinfo) 165 {
124 return E_POINTER; 166 return E_POINTER;
125 167 }
126 if (pDispparams->cNamedArgs) 168 if (pDispparams->cNamedArgs != 0)
127 return DISP_E_NONAMEDARGS; 169 {
128 170 return DISP_E_NONAMEDARGS;
129 CPluginSettings* settings = CPluginSettings::GetInstance(); 171 }
130 172 CPluginSettings* settings = CPluginSettings::GetInstance();
131 if (dispidMember < 0 || dispidMember >= countof(s_Methods)) 173 switch (dispidMember)
132 return DISP_E_BADINDEX; 174 {
133 175 case dispatchID_GetMessage:
134 const CString& method = s_Methods[dispidMember]; 176 {
135 177 if (pDispparams->cArgs != 2)
136 if (s_GetMessage == method) 178 {
137 { 179 return DISP_E_BADPARAMCOUNT;
138 if (2 != pDispparams->cArgs) 180 }
139 return DISP_E_BADPARAMCOUNT; 181 if (pDispparams->rgvarg[0].vt != VT_BSTR || pDispparams->rgvarg[1].vt != VT_BSTR)
140 182 {
141 if (VT_BSTR != pDispparams->rgvarg[0].vt) 183 return DISP_E_TYPEMISMATCH;
142 return DISP_E_TYPEMISMATCH; 184 }
143 185 if (pVarResult)
144 if (pVarResult) 186 {
145 { 187 CComBSTR key = pDispparams->rgvarg[0].bstrVal;
146 CComBSTR key = pDispparams->rgvarg[0].bstrVal; 188 CComBSTR section = pDispparams->rgvarg[1].bstrVal;
147 CComBSTR section = pDispparams->rgvarg[1].bstrVal; 189 CStringW message = sGetMessage((BSTR)section, (BSTR)key);
148 CStringW message = sGetMessage((BSTR)section, (BSTR)key); 190
149 191 pVarResult->vt = VT_BSTR;
150 pVarResult->vt = VT_BSTR; 192 pVarResult->bstrVal = SysAllocString(message);
151 pVarResult->bstrVal = SysAllocString(message); 193 }
152 } 194 }
153 } 195 break;
154 else if (s_GetLanguageCount == method) 196 case dispatchID_GetLanguageCount:
155 { 197 {
156 if (pDispparams->cArgs) 198 if (pDispparams->cArgs != 0)
157 return DISP_E_BADPARAMCOUNT; 199 {
158 200 return DISP_E_BADPARAMCOUNT;
159 if (pVarResult) 201 }
160 { 202 if (pVarResult)
161 std::map<CString, CString> languageList = settings->GetFilterLanguageTitle List(); 203 {
162 204 std::map<CString, CString> languageList = settings->GetFilterLanguageT itleList();
163 pVarResult->vt = VT_I4; 205
164 pVarResult->lVal = static_cast<LONG>(languageList.size()); 206 pVarResult->vt = VT_I4;
165 } 207 pVarResult->lVal = static_cast<LONG>(languageList.size());
166 } 208 }
167 else if (s_GetLanguageByIndex == method) 209 }
168 { 210 break;
169 if (1 != pDispparams->cArgs) 211 case dispatchID_GetLanguageByIndex:
170 return DISP_E_BADPARAMCOUNT; 212 {
171 213 if (pDispparams->cArgs != 1)
172 if (VT_I4 != pDispparams->rgvarg[0].vt) 214 {
173 return DISP_E_TYPEMISMATCH; 215 return DISP_E_BADPARAMCOUNT;
174 216 }
175 if (pVarResult) 217 if (VT_I4 != pDispparams->rgvarg[0].vt)
176 { 218 {
177 int indx = pDispparams->rgvarg[0].lVal; 219 return DISP_E_TYPEMISMATCH;
178 220 }
179 std::map<CString, CString> languageTitleList = settings->GetFilterLanguage TitleList(); 221 if (pVarResult)
180 222 {
181 if (indx < 0 || indx >= (int)languageTitleList.size()) 223 int indx = pDispparams->rgvarg[0].lVal;
182 return DISP_E_EXCEPTION; 224
183 225 std::map<CString, CString> languageTitleList = settings->GetFilterLang uageTitleList();
184 CString language; 226
185 227 if (indx < 0 || indx >= (int)languageTitleList.size())
186 int curIndx = 0; 228 return DISP_E_EXCEPTION;
187 for(std::map<CString, CString>::const_iterator it = languageTitleList.begi n(); it != languageTitleList.end(); ++it) 229
188 { 230 CString language;
189 if (curIndx == indx) 231
190 { 232 int curIndx = 0;
191 language = it->first; 233 for(std::map<CString, CString>::const_iterator it = languageTitleList. begin(); it != languageTitleList.end(); ++it)
192 break; 234 {
193 } 235 if (curIndx == indx)
194 236 {
195 curIndx++; 237 language = it->first;
196 } 238 break;
197 239 }
198 pVarResult->vt = VT_BSTR; 240 curIndx++;
199 pVarResult->bstrVal = SysAllocString(language); 241 }
200 } 242
201 } 243 pVarResult->vt = VT_BSTR;
202 else if (s_GetLanguageTitleByIndex == method) 244 pVarResult->bstrVal = SysAllocString(language);
203 { 245 }
204 if (1 != pDispparams->cArgs) 246 }
205 return DISP_E_BADPARAMCOUNT; 247 break;
206 248 case dispatchID_GetLanguageTitleByIndex:
207 if (VT_I4 != pDispparams->rgvarg[0].vt) 249 {
208 return DISP_E_TYPEMISMATCH; 250 if (pDispparams->cArgs != 1)
209 251 {
210 if (pVarResult) 252 return DISP_E_BADPARAMCOUNT;
211 { 253 }
212 int indx = pDispparams->rgvarg[0].lVal; 254 if (VT_I4 != pDispparams->rgvarg[0].vt)
213 255 {
214 std::map<CString, CString> languageTitleList = settings->GetFilterLanguage TitleList(); 256 return DISP_E_TYPEMISMATCH;
215 257 }
216 if (indx < 0 || indx >= (int)languageTitleList.size()) 258 if (pVarResult)
217 return DISP_E_EXCEPTION; 259 {
218 260 int indx = pDispparams->rgvarg[0].lVal;
219 CString languageTitle; 261
220 262 std::map<CString, CString> languageTitleList = settings->GetFilterLang uageTitleList();
221 int curIndx = 0; 263
222 for(std::map<CString, CString>::const_iterator it = languageTitleList.begi n(); it != languageTitleList.end(); ++it) 264 if (indx < 0 || indx >= (int)languageTitleList.size())
223 { 265 return DISP_E_EXCEPTION;
224 if (curIndx == indx) 266
225 { 267 CString languageTitle;
226 languageTitle = it->second; 268
227 break; 269 int curIndx = 0;
228 } 270 for(std::map<CString, CString>::const_iterator it = languageTitleList. begin(); it != languageTitleList.end(); ++it)
229 271 {
230 curIndx++; 272 if (curIndx == indx)
231 } 273 {
232 274 languageTitle = it->second;
233 pVarResult->vt = VT_BSTR; 275 break;
234 pVarResult->bstrVal = SysAllocString(languageTitle); 276 }
235 } 277 curIndx++;
236 } 278 }
237 else if (s_SetLanguage == method) 279
238 { 280 pVarResult->vt = VT_BSTR;
239 if (1 != pDispparams->cArgs) 281 pVarResult->bstrVal = SysAllocString(languageTitle);
240 return DISP_E_BADPARAMCOUNT; 282 }
241 283 }
242 if (VT_BSTR != pDispparams->rgvarg[0].vt) 284 break;
243 return DISP_E_TYPEMISMATCH; 285 case dispatchID_SetLanguage:
244 286 {
245 CComBSTR url = pDispparams->rgvarg[0].bstrVal; 287 if (pDispparams->cArgs != 1)
246 288 {
247 settings->SetSubscription((BSTR)url); 289 return DISP_E_BADPARAMCOUNT;
248 } 290 }
249 else if (s_GetLanguage == method) 291 if (VT_BSTR != pDispparams->rgvarg[0].vt)
250 { 292 {
251 if (pDispparams->cArgs) 293 return DISP_E_TYPEMISMATCH;
252 return DISP_E_BADPARAMCOUNT; 294 }
253 295 CComBSTR url = pDispparams->rgvarg[0].bstrVal;
254 if (pVarResult) 296 settings->SetSubscription((BSTR)url);
255 { 297 }
256 CString url = settings->GetSubscription(); 298 break;
257 299 case dispatchID_GetLanguage:
258 pVarResult->vt = VT_BSTR; 300 {
259 pVarResult->bstrVal = SysAllocString(url); 301 if (pDispparams->cArgs != 0)
260 } 302 {
261 } 303 return DISP_E_BADPARAMCOUNT;
262 else if (s_GetWhitelistDomains == method) 304 }
263 { 305 if (pVarResult)
264 if (pDispparams->cArgs) 306 {
265 return DISP_E_BADPARAMCOUNT; 307 CString url = settings->GetSubscription();
266 308 pVarResult->vt = VT_BSTR;
267 if (pVarResult) 309 pVarResult->bstrVal = SysAllocString(url);
268 { 310 }
269 std::vector<std::wstring> whiteList = settings->GetWhiteListedDomainList() ; 311 }
270 CString sWhiteList; 312 break;
271 for (size_t i = 0; i < whiteList.size(); i++) 313 case dispatchID_GetWhitelistDomains:
272 { 314 {
273 if (!sWhiteList.IsEmpty()) 315 if (pDispparams->cArgs != 0)
274 { 316 {
275 sWhiteList += ','; 317 return DISP_E_BADPARAMCOUNT;
276 } 318 }
277 sWhiteList += CString(whiteList[i].c_str()); 319 if (pVarResult)
278 } 320 {
279 321 std::vector<std::wstring> whiteList = settings->GetWhiteListedDomainLi st();
280 pVarResult->vt = VT_BSTR; 322 CString sWhiteList;
281 pVarResult->bstrVal = SysAllocString(sWhiteList); 323 for (size_t i = 0; i < whiteList.size(); i++)
282 } 324 {
283 } 325 if (!sWhiteList.IsEmpty())
284 else if (s_AddWhitelistDomain == method) 326 {
285 { 327 sWhiteList += ',';
286 if (1 != pDispparams->cArgs) 328 }
287 return DISP_E_BADPARAMCOUNT; 329 sWhiteList += CString(whiteList[i].c_str());
288 330 }
289 if (VT_BSTR != pDispparams->rgvarg[0].vt) 331 pVarResult->vt = VT_BSTR;
290 return DISP_E_TYPEMISMATCH; 332 pVarResult->bstrVal = SysAllocString(sWhiteList);
291 333 }
292 CComBSTR domain = pDispparams->rgvarg[0].bstrVal; 334 }
293 if (domain.Length()) 335 break;
294 { 336 case dispatchID_AddWhitelistDomain:
295 settings->AddWhiteListedDomain((BSTR)domain); 337 {
296 } 338 if (pDispparams->cArgs != 1)
297 } 339 {
298 else if (s_RemoveWhitelistDomain == method) 340 return DISP_E_BADPARAMCOUNT;
299 { 341 }
300 if (1 != pDispparams->cArgs) 342 if (VT_BSTR != pDispparams->rgvarg[0].vt)
301 return DISP_E_BADPARAMCOUNT; 343 {
302 344 return DISP_E_TYPEMISMATCH;
303 if (VT_BSTR != pDispparams->rgvarg[0].vt) 345 }
304 return DISP_E_TYPEMISMATCH; 346 CComBSTR domain = pDispparams->rgvarg[0].bstrVal;
305 347 if (domain.Length())
306 CComBSTR domain = pDispparams->rgvarg[0].bstrVal; 348 {
307 if (domain.Length()) 349 settings->AddWhiteListedDomain((BSTR)domain);
308 { 350 }
309 settings->RemoveWhiteListedDomain((BSTR)domain); 351 }
310 } 352 break;
311 } 353 case dispatchID_RemoveWhitelistDomain:
312 else if (s_GetAppLocale == method) 354 {
313 { 355 if (pDispparams->cArgs != 1)
314 if (0 != pDispparams->cArgs) 356 {
315 return DISP_E_BADPARAMCOUNT; 357 return DISP_E_BADPARAMCOUNT;
316 358 }
317 pVarResult->vt = VT_BSTR; 359 if (VT_BSTR != pDispparams->rgvarg[0].vt)
318 pVarResult->bstrVal = SysAllocString(settings->GetAppLocale()); 360 {
319 } 361 return DISP_E_TYPEMISMATCH;
320 else if (s_GetDocumentationLink == method) 362 }
321 { 363 CComBSTR domain = pDispparams->rgvarg[0].bstrVal;
322 if (0 != pDispparams->cArgs) 364 if (domain.Length())
323 return DISP_E_BADPARAMCOUNT; 365 {
324 366 settings->RemoveWhiteListedDomain((BSTR)domain);
325 pVarResult->vt = VT_BSTR; 367 }
326 pVarResult->bstrVal = SysAllocString(settings->GetDocumentationLink()); 368 }
327 } 369 break;
328 else if (s_IsAcceptableAdsEnabled == method) 370 case dispatchID_GetAppLocale:
329 { 371 {
330 if (0 != pDispparams->cArgs) 372 if (pDispparams->cArgs != 0)
331 return DISP_E_BADPARAMCOUNT; 373 {
332 374 return DISP_E_BADPARAMCOUNT;
333 pVarResult->vt = VT_BOOL; 375 }
334 pVarResult->boolVal = CPluginClient::GetInstance()->IsAcceptableAdsEnabled() ? VARIANT_TRUE : VARIANT_FALSE; 376 pVarResult->vt = VT_BSTR;
335 } 377 pVarResult->bstrVal = SysAllocString(settings->GetAppLocale());
336 else if (s_SetAcceptableAdsEnabled == method) 378 }
337 { 379 break;
338 if (1 != pDispparams->cArgs) 380 case dispatchID_GetDocumentationLink:
339 return DISP_E_BADPARAMCOUNT; 381 {
340 382 if (pDispparams->cArgs != 0)
341 if (VT_BOOL != pDispparams->rgvarg[0].vt) 383 {
342 return DISP_E_TYPEMISMATCH; 384 return DISP_E_BADPARAMCOUNT;
343 385 }
344 bool enable = VARIANT_FALSE != pDispparams->rgvarg[0].boolVal; 386 pVarResult->vt = VT_BSTR;
345 387 pVarResult->bstrVal = SysAllocString(settings->GetDocumentationLink());
346 if (enable) 388 }
347 { 389 break;
348 CPluginClient* client = CPluginClient::GetInstance(); 390 case dispatchID_IsAcceptableAdsEnabled:
349 client->AddSubscription(client->GetPref(L"subscriptions_exceptionsurl", L" ")); 391 {
350 } 392 if (pDispparams->cArgs != 0)
351 else 393 {
352 { 394 return DISP_E_BADPARAMCOUNT;
353 CPluginClient* client = CPluginClient::GetInstance(); 395 }
354 client->RemoveSubscription(client->GetPref(L"subscriptions_exceptionsurl", L"")); 396 pVarResult->vt = VT_BOOL;
355 } 397 pVarResult->boolVal = CPluginClient::GetInstance()->IsAcceptableAdsEnabl ed() ? VARIANT_TRUE : VARIANT_FALSE;
356 } 398 }
357 else if (s_IsUpdate == method) 399 break;
358 { 400 case dispatchID_SetAcceptableAdsEnabled:
359 if (0 != pDispparams->cArgs) 401 {
360 return DISP_E_BADPARAMCOUNT; 402 if (pDispparams->cArgs != 1)
361 403 {
362 pVarResult->vt = VT_BOOL; 404 return DISP_E_BADPARAMCOUNT;
363 pVarResult->boolVal = CPluginClient::GetInstance()->GetPref(L"displayUpdateP age", false); 405 }
364 } 406 if (pDispparams->rgvarg[0].vt != VT_BOOL)
365 else 407 {
366 return DISP_E_MEMBERNOTFOUND; 408 return DISP_E_TYPEMISMATCH;
367 409 }
410 if (pDispparams->rgvarg[0].boolVal != VARIANT_FALSE)
411 {
412 CPluginClient* client = CPluginClient::GetInstance();
413 client->AddSubscription(client->GetPref(L"subscriptions_exceptionsurl" , L""));
414 }
415 else
416 {
417 CPluginClient* client = CPluginClient::GetInstance();
418 client->RemoveSubscription(client->GetPref(L"subscriptions_exceptionsu rl", L""));
419 }
420 }
421 break;
422 case dispatchID_IsUpdate:
423 {
424 if (pDispparams->cArgs != 0)
425 {
426 return DISP_E_BADPARAMCOUNT;
427 }
428 pVarResult->vt = VT_BOOL;
429 pVarResult->boolVal = CPluginClient::GetInstance()->GetPref(L"displayUpd atePage", false) ? VARIANT_TRUE : VARIANT_FALSE;
430 }
431 break;
432 default:
433 return DISP_E_MEMBERNOTFOUND;
434 break;
435 }
436 }
437 catch(...)
438 {
439 return E_FAIL;
440 }
368 return S_OK; 441 return S_OK;
369 } 442 }
370 443
OLDNEW
« no previous file with comments | « src/plugin/PluginUserSettings.h ('k') | test/plugin/UserSettingsTest.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld