| 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 |