OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/extensions/api/preference/preference_api.h" | 5 #include "chrome/browser/extensions/api/preference/preference_api.h" |
6 | 6 |
7 #include <map> | 7 #include <map> |
8 #include <utility> | 8 #include <utility> |
9 | 9 |
10 #include "base/memory/singleton.h" | 10 #include "base/memory/singleton.h" |
11 #include "base/stl_util.h" | 11 #include "base/stl_util.h" |
12 #include "base/stringprintf.h" | 12 #include "base/stringprintf.h" |
13 #include "base/values.h" | 13 #include "base/values.h" |
14 #include "chrome/browser/extensions/api/preference/preference_api_constants.h" | 14 #include "chrome/browser/extensions/api/preference/preference_api_constants.h" |
15 #include "chrome/browser/extensions/api/preference/preference_helpers.h" | 15 #include "chrome/browser/extensions/api/preference/preference_helpers.h" |
16 #include "chrome/browser/extensions/api/proxy/proxy_api.h" | 16 #include "chrome/browser/extensions/api/proxy/proxy_api.h" |
17 #include "chrome/browser/extensions/extension_prefs.h" | 17 #include "chrome/browser/extensions/extension_prefs.h" |
18 #include "chrome/browser/extensions/extension_prefs_scope.h" | 18 #include "chrome/browser/extensions/extension_prefs_scope.h" |
19 #include "chrome/browser/extensions/extension_service.h" | 19 #include "chrome/browser/extensions/extension_service.h" |
20 #include "chrome/browser/prefs/pref_service.h" | 20 #include "chrome/browser/prefs/pref_service.h" |
21 #include "chrome/browser/profiles/profile.h" | 21 #include "chrome/browser/profiles/profile.h" |
22 #include "chrome/common/chrome_notification_types.h" | 22 #include "chrome/common/chrome_notification_types.h" |
23 #include "chrome/common/extensions/extension_error_utils.h" | |
24 #include "chrome/common/extensions/permissions/api_permission.h" | 23 #include "chrome/common/extensions/permissions/api_permission.h" |
25 #include "chrome/common/pref_names.h" | 24 #include "chrome/common/pref_names.h" |
26 #include "content/public/browser/notification_details.h" | 25 #include "content/public/browser/notification_details.h" |
27 #include "content/public/browser/notification_source.h" | 26 #include "content/public/browser/notification_source.h" |
| 27 #include "extensions/common/extension_error_utils.h" |
28 | 28 |
29 namespace keys = extensions::preference_api_constants; | 29 namespace keys = extensions::preference_api_constants; |
30 namespace helpers = extensions::preference_helpers; | 30 namespace helpers = extensions::preference_helpers; |
31 | 31 |
32 namespace extensions { | 32 namespace extensions { |
33 | 33 |
34 namespace { | 34 namespace { |
35 | 35 |
36 struct PrefMappingEntry { | 36 struct PrefMappingEntry { |
37 // Name of the preference referenced by the extension API JSON. | 37 // Name of the preference referenced by the extension API JSON. |
(...skipping 236 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
274 const PrefServiceBase::Preference* pref = | 274 const PrefServiceBase::Preference* pref = |
275 pref_service->FindPreference(browser_pref.c_str()); | 275 pref_service->FindPreference(browser_pref.c_str()); |
276 CHECK(pref); | 276 CHECK(pref); |
277 ExtensionService* extension_service = profile_->GetExtensionService(); | 277 ExtensionService* extension_service = profile_->GetExtensionService(); |
278 PrefTransformerInterface* transformer = | 278 PrefTransformerInterface* transformer = |
279 PrefMapping::GetInstance()->FindTransformerForBrowserPref(browser_pref); | 279 PrefMapping::GetInstance()->FindTransformerForBrowserPref(browser_pref); |
280 Value* transformed_value = | 280 Value* transformed_value = |
281 transformer->BrowserToExtensionPref(pref->GetValue()); | 281 transformer->BrowserToExtensionPref(pref->GetValue()); |
282 if (!transformed_value) { | 282 if (!transformed_value) { |
283 LOG(ERROR) << | 283 LOG(ERROR) << |
284 ExtensionErrorUtils::FormatErrorMessage(kConversionErrorMessage, | 284 ErrorUtils::FormatErrorMessage(kConversionErrorMessage, |
285 pref->name()); | 285 pref->name()); |
286 return; | 286 return; |
287 } | 287 } |
288 | 288 |
289 dict->Set(keys::kValue, transformed_value); | 289 dict->Set(keys::kValue, transformed_value); |
290 if (incognito) { | 290 if (incognito) { |
291 extensions::ExtensionPrefs* ep = extension_service->extension_prefs(); | 291 extensions::ExtensionPrefs* ep = extension_service->extension_prefs(); |
292 dict->SetBoolean(keys::kIncognitoSpecific, | 292 dict->SetBoolean(keys::kIncognitoSpecific, |
293 ep->HasIncognitoPrefValue(browser_pref)); | 293 ep->HasIncognitoPrefValue(browser_pref)); |
294 } | 294 } |
295 | 295 |
296 helpers::DispatchEventToExtensions(profile_, | 296 helpers::DispatchEventToExtensions(profile_, |
297 event_name, | 297 event_name, |
298 &args, | 298 &args, |
299 permission, | 299 permission, |
300 incognito, | 300 incognito, |
301 browser_pref); | 301 browser_pref); |
302 } | 302 } |
303 | 303 |
304 PreferenceFunction::~PreferenceFunction() { } | 304 PreferenceFunction::~PreferenceFunction() { } |
305 | 305 |
306 bool PreferenceFunction::ValidateBrowserPref( | 306 bool PreferenceFunction::ValidateBrowserPref( |
307 const std::string& extension_pref_key, | 307 const std::string& extension_pref_key, |
308 std::string* browser_pref_key) { | 308 std::string* browser_pref_key) { |
309 APIPermission::ID permission = APIPermission::kInvalid; | 309 APIPermission::ID permission = APIPermission::kInvalid; |
310 EXTENSION_FUNCTION_VALIDATE( | 310 EXTENSION_FUNCTION_VALIDATE( |
311 PrefMapping::GetInstance()->FindBrowserPrefForExtensionPref( | 311 PrefMapping::GetInstance()->FindBrowserPrefForExtensionPref( |
312 extension_pref_key, browser_pref_key, &permission)); | 312 extension_pref_key, browser_pref_key, &permission)); |
313 if (!GetExtension()->HasAPIPermission(permission)) { | 313 if (!GetExtension()->HasAPIPermission(permission)) { |
314 error_ = ExtensionErrorUtils::FormatErrorMessage( | 314 error_ = ErrorUtils::FormatErrorMessage( |
315 keys::kPermissionErrorMessage, extension_pref_key); | 315 keys::kPermissionErrorMessage, extension_pref_key); |
316 return false; | 316 return false; |
317 } | 317 } |
318 return true; | 318 return true; |
319 } | 319 } |
320 | 320 |
321 GetPreferenceFunction::~GetPreferenceFunction() { } | 321 GetPreferenceFunction::~GetPreferenceFunction() { } |
322 | 322 |
323 bool GetPreferenceFunction::RunImpl() { | 323 bool GetPreferenceFunction::RunImpl() { |
324 std::string pref_key; | 324 std::string pref_key; |
(...skipping 30 matching lines...) Expand all Loading... |
355 incognito); | 355 incognito); |
356 result->SetString(keys::kLevelOfControl, level_of_control); | 356 result->SetString(keys::kLevelOfControl, level_of_control); |
357 | 357 |
358 // Retrieve pref value. | 358 // Retrieve pref value. |
359 PrefTransformerInterface* transformer = | 359 PrefTransformerInterface* transformer = |
360 PrefMapping::GetInstance()->FindTransformerForBrowserPref(browser_pref); | 360 PrefMapping::GetInstance()->FindTransformerForBrowserPref(browser_pref); |
361 Value* transformed_value = | 361 Value* transformed_value = |
362 transformer->BrowserToExtensionPref(pref->GetValue()); | 362 transformer->BrowserToExtensionPref(pref->GetValue()); |
363 if (!transformed_value) { | 363 if (!transformed_value) { |
364 LOG(ERROR) << | 364 LOG(ERROR) << |
365 ExtensionErrorUtils::FormatErrorMessage(kConversionErrorMessage, | 365 ErrorUtils::FormatErrorMessage(kConversionErrorMessage, |
366 pref->name()); | 366 pref->name()); |
367 return false; | 367 return false; |
368 } | 368 } |
369 result->Set(keys::kValue, transformed_value); | 369 result->Set(keys::kValue, transformed_value); |
370 | 370 |
371 // Retrieve incognito status. | 371 // Retrieve incognito status. |
372 if (incognito) { | 372 if (incognito) { |
373 extensions::ExtensionPrefs* ep = | 373 extensions::ExtensionPrefs* ep = |
374 profile_->GetExtensionService()->extension_prefs(); | 374 profile_->GetExtensionService()->extension_prefs(); |
375 result->SetBoolean(keys::kIncognitoSpecific, | 375 result->SetBoolean(keys::kIncognitoSpecific, |
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
448 error_ = error; | 448 error_ = error; |
449 bad_message_ = bad_message; | 449 bad_message_ = bad_message; |
450 return false; | 450 return false; |
451 } | 451 } |
452 | 452 |
453 // Validate also that the stored value can be converted back by the | 453 // Validate also that the stored value can be converted back by the |
454 // transformer. | 454 // transformer. |
455 scoped_ptr<Value> extensionPrefValue( | 455 scoped_ptr<Value> extensionPrefValue( |
456 transformer->BrowserToExtensionPref(browser_pref_value.get())); | 456 transformer->BrowserToExtensionPref(browser_pref_value.get())); |
457 if (!extensionPrefValue) { | 457 if (!extensionPrefValue) { |
458 error_ = ExtensionErrorUtils::FormatErrorMessage(kConversionErrorMessage, | 458 error_ = ErrorUtils::FormatErrorMessage(kConversionErrorMessage, |
459 pref->name()); | 459 pref->name()); |
460 bad_message_ = true; | 460 bad_message_ = true; |
461 return false; | 461 return false; |
462 } | 462 } |
463 | 463 |
464 prefs->SetExtensionControlledPref(extension_id(), | 464 prefs->SetExtensionControlledPref(extension_id(), |
465 browser_pref, | 465 browser_pref, |
466 scope, | 466 scope, |
467 browser_pref_value.release()); | 467 browser_pref_value.release()); |
468 return true; | 468 return true; |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
506 if (!ValidateBrowserPref(pref_key, &browser_pref)) | 506 if (!ValidateBrowserPref(pref_key, &browser_pref)) |
507 return false; | 507 return false; |
508 | 508 |
509 extensions::ExtensionPrefs* prefs = | 509 extensions::ExtensionPrefs* prefs = |
510 profile_->GetExtensionService()->extension_prefs(); | 510 profile_->GetExtensionService()->extension_prefs(); |
511 prefs->RemoveExtensionControlledPref(extension_id(), browser_pref, scope); | 511 prefs->RemoveExtensionControlledPref(extension_id(), browser_pref, scope); |
512 return true; | 512 return true; |
513 } | 513 } |
514 | 514 |
515 } // namespace extensions | 515 } // namespace extensions |
OLD | NEW |