| 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/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 237 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 275 const PrefServiceBase::Preference* pref = | 275 const PrefServiceBase::Preference* pref = |
| 276 pref_service->FindPreference(browser_pref.c_str()); | 276 pref_service->FindPreference(browser_pref.c_str()); |
| 277 CHECK(pref); | 277 CHECK(pref); |
| 278 ExtensionService* extension_service = profile_->GetExtensionService(); | 278 ExtensionService* extension_service = profile_->GetExtensionService(); |
| 279 PrefTransformerInterface* transformer = | 279 PrefTransformerInterface* transformer = |
| 280 PrefMapping::GetInstance()->FindTransformerForBrowserPref(browser_pref); | 280 PrefMapping::GetInstance()->FindTransformerForBrowserPref(browser_pref); |
| 281 Value* transformed_value = | 281 Value* transformed_value = |
| 282 transformer->BrowserToExtensionPref(pref->GetValue()); | 282 transformer->BrowserToExtensionPref(pref->GetValue()); |
| 283 if (!transformed_value) { | 283 if (!transformed_value) { |
| 284 LOG(ERROR) << | 284 LOG(ERROR) << |
| 285 ExtensionErrorUtils::FormatErrorMessage(kConversionErrorMessage, | 285 ErrorUtils::FormatErrorMessage(kConversionErrorMessage, |
| 286 pref->name()); | 286 pref->name()); |
| 287 return; | 287 return; |
| 288 } | 288 } |
| 289 | 289 |
| 290 dict->Set(keys::kValue, transformed_value); | 290 dict->Set(keys::kValue, transformed_value); |
| 291 if (incognito) { | 291 if (incognito) { |
| 292 extensions::ExtensionPrefs* ep = extension_service->extension_prefs(); | 292 extensions::ExtensionPrefs* ep = extension_service->extension_prefs(); |
| 293 dict->SetBoolean(keys::kIncognitoSpecific, | 293 dict->SetBoolean(keys::kIncognitoSpecific, |
| 294 ep->HasIncognitoPrefValue(browser_pref)); | 294 ep->HasIncognitoPrefValue(browser_pref)); |
| 295 } | 295 } |
| 296 | 296 |
| 297 helpers::DispatchEventToExtensions(profile_, | 297 helpers::DispatchEventToExtensions(profile_, |
| 298 event_name, | 298 event_name, |
| 299 &args, | 299 &args, |
| 300 permission, | 300 permission, |
| 301 incognito, | 301 incognito, |
| 302 browser_pref); | 302 browser_pref); |
| 303 } | 303 } |
| 304 | 304 |
| 305 PreferenceFunction::~PreferenceFunction() { } | 305 PreferenceFunction::~PreferenceFunction() { } |
| 306 | 306 |
| 307 bool PreferenceFunction::ValidateBrowserPref( | 307 bool PreferenceFunction::ValidateBrowserPref( |
| 308 const std::string& extension_pref_key, | 308 const std::string& extension_pref_key, |
| 309 std::string* browser_pref_key) { | 309 std::string* browser_pref_key) { |
| 310 APIPermission::ID permission = APIPermission::kInvalid; | 310 APIPermission::ID permission = APIPermission::kInvalid; |
| 311 EXTENSION_FUNCTION_VALIDATE( | 311 EXTENSION_FUNCTION_VALIDATE( |
| 312 PrefMapping::GetInstance()->FindBrowserPrefForExtensionPref( | 312 PrefMapping::GetInstance()->FindBrowserPrefForExtensionPref( |
| 313 extension_pref_key, browser_pref_key, &permission)); | 313 extension_pref_key, browser_pref_key, &permission)); |
| 314 if (!GetExtension()->HasAPIPermission(permission)) { | 314 if (!GetExtension()->HasAPIPermission(permission)) { |
| 315 error_ = ExtensionErrorUtils::FormatErrorMessage( | 315 error_ = ErrorUtils::FormatErrorMessage( |
| 316 keys::kPermissionErrorMessage, extension_pref_key); | 316 keys::kPermissionErrorMessage, extension_pref_key); |
| 317 return false; | 317 return false; |
| 318 } | 318 } |
| 319 return true; | 319 return true; |
| 320 } | 320 } |
| 321 | 321 |
| 322 GetPreferenceFunction::~GetPreferenceFunction() { } | 322 GetPreferenceFunction::~GetPreferenceFunction() { } |
| 323 | 323 |
| 324 bool GetPreferenceFunction::RunImpl() { | 324 bool GetPreferenceFunction::RunImpl() { |
| 325 std::string pref_key; | 325 std::string pref_key; |
| (...skipping 30 matching lines...) Expand all Loading... |
| 356 incognito); | 356 incognito); |
| 357 result->SetString(keys::kLevelOfControl, level_of_control); | 357 result->SetString(keys::kLevelOfControl, level_of_control); |
| 358 | 358 |
| 359 // Retrieve pref value. | 359 // Retrieve pref value. |
| 360 PrefTransformerInterface* transformer = | 360 PrefTransformerInterface* transformer = |
| 361 PrefMapping::GetInstance()->FindTransformerForBrowserPref(browser_pref); | 361 PrefMapping::GetInstance()->FindTransformerForBrowserPref(browser_pref); |
| 362 Value* transformed_value = | 362 Value* transformed_value = |
| 363 transformer->BrowserToExtensionPref(pref->GetValue()); | 363 transformer->BrowserToExtensionPref(pref->GetValue()); |
| 364 if (!transformed_value) { | 364 if (!transformed_value) { |
| 365 LOG(ERROR) << | 365 LOG(ERROR) << |
| 366 ExtensionErrorUtils::FormatErrorMessage(kConversionErrorMessage, | 366 ErrorUtils::FormatErrorMessage(kConversionErrorMessage, |
| 367 pref->name()); | 367 pref->name()); |
| 368 return false; | 368 return false; |
| 369 } | 369 } |
| 370 result->Set(keys::kValue, transformed_value); | 370 result->Set(keys::kValue, transformed_value); |
| 371 | 371 |
| 372 // Retrieve incognito status. | 372 // Retrieve incognito status. |
| 373 if (incognito) { | 373 if (incognito) { |
| 374 extensions::ExtensionPrefs* ep = | 374 extensions::ExtensionPrefs* ep = |
| 375 profile_->GetExtensionService()->extension_prefs(); | 375 profile_->GetExtensionService()->extension_prefs(); |
| 376 result->SetBoolean(keys::kIncognitoSpecific, | 376 result->SetBoolean(keys::kIncognitoSpecific, |
| (...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 449 error_ = error; | 449 error_ = error; |
| 450 bad_message_ = bad_message; | 450 bad_message_ = bad_message; |
| 451 return false; | 451 return false; |
| 452 } | 452 } |
| 453 | 453 |
| 454 // Validate also that the stored value can be converted back by the | 454 // Validate also that the stored value can be converted back by the |
| 455 // transformer. | 455 // transformer. |
| 456 scoped_ptr<Value> extensionPrefValue( | 456 scoped_ptr<Value> extensionPrefValue( |
| 457 transformer->BrowserToExtensionPref(browser_pref_value.get())); | 457 transformer->BrowserToExtensionPref(browser_pref_value.get())); |
| 458 if (!extensionPrefValue) { | 458 if (!extensionPrefValue) { |
| 459 error_ = ExtensionErrorUtils::FormatErrorMessage(kConversionErrorMessage, | 459 error_ = ErrorUtils::FormatErrorMessage(kConversionErrorMessage, |
| 460 pref->name()); | 460 pref->name()); |
| 461 bad_message_ = true; | 461 bad_message_ = true; |
| 462 return false; | 462 return false; |
| 463 } | 463 } |
| 464 | 464 |
| 465 prefs->SetExtensionControlledPref(extension_id(), | 465 prefs->SetExtensionControlledPref(extension_id(), |
| 466 browser_pref, | 466 browser_pref, |
| 467 scope, | 467 scope, |
| 468 browser_pref_value.release()); | 468 browser_pref_value.release()); |
| 469 return true; | 469 return true; |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 507 if (!ValidateBrowserPref(pref_key, &browser_pref)) | 507 if (!ValidateBrowserPref(pref_key, &browser_pref)) |
| 508 return false; | 508 return false; |
| 509 | 509 |
| 510 extensions::ExtensionPrefs* prefs = | 510 extensions::ExtensionPrefs* prefs = |
| 511 profile_->GetExtensionService()->extension_prefs(); | 511 profile_->GetExtensionService()->extension_prefs(); |
| 512 prefs->RemoveExtensionControlledPref(extension_id(), browser_pref, scope); | 512 prefs->RemoveExtensionControlledPref(extension_id(), browser_pref, scope); |
| 513 return true; | 513 return true; |
| 514 } | 514 } |
| 515 | 515 |
| 516 } // namespace extensions | 516 } // namespace extensions |
| OLD | NEW |