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 |