• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "chrome/browser/extensions/api/preference/chrome_direct_setting.h"
6 
7 #include "base/containers/hash_tables.h"
8 #include "base/lazy_instance.h"
9 #include "base/prefs/pref_service.h"
10 #include "base/values.h"
11 #include "chrome/browser/extensions/api/preference/chrome_direct_setting_api.h"
12 #include "chrome/browser/extensions/api/preference/preference_api_constants.h"
13 #include "chrome/browser/profiles/profile.h"
14 
15 namespace extensions {
16 namespace chromedirectsetting {
17 
DirectSettingFunctionBase()18 DirectSettingFunctionBase::DirectSettingFunctionBase() {}
19 
~DirectSettingFunctionBase()20 DirectSettingFunctionBase::~DirectSettingFunctionBase() {}
21 
GetPrefService()22 PrefService* DirectSettingFunctionBase::GetPrefService() {
23   return GetProfile()->GetPrefs();
24 }
25 
IsCalledFromComponentExtension()26 bool DirectSettingFunctionBase::IsCalledFromComponentExtension() {
27   return extension()->location() == Manifest::COMPONENT;
28 }
29 
GetDirectSettingFunction()30 GetDirectSettingFunction::GetDirectSettingFunction() {}
31 
RunSync()32 bool GetDirectSettingFunction::RunSync() {
33   EXTENSION_FUNCTION_VALIDATE(IsCalledFromComponentExtension());
34 
35   std::string pref_key;
36   EXTENSION_FUNCTION_VALIDATE(args_->GetString(0, &pref_key));
37   EXTENSION_FUNCTION_VALIDATE(ChromeDirectSettingAPI::Get(GetProfile())
38                                   ->IsPreferenceOnWhitelist(pref_key));
39 
40   const PrefService::Preference* preference =
41       GetPrefService()->FindPreference(pref_key.c_str());
42   EXTENSION_FUNCTION_VALIDATE(preference);
43   const base::Value* value = preference->GetValue();
44 
45   scoped_ptr<base::DictionaryValue> result(new base::DictionaryValue);
46   result->Set(preference_api_constants::kValue, value->DeepCopy());
47   SetResult(result.release());
48 
49   return true;
50 }
51 
~GetDirectSettingFunction()52 GetDirectSettingFunction::~GetDirectSettingFunction() {}
53 
SetDirectSettingFunction()54 SetDirectSettingFunction::SetDirectSettingFunction() {}
55 
RunSync()56 bool SetDirectSettingFunction::RunSync() {
57   EXTENSION_FUNCTION_VALIDATE(IsCalledFromComponentExtension());
58 
59   std::string pref_key;
60   EXTENSION_FUNCTION_VALIDATE(args_->GetString(0, &pref_key));
61   EXTENSION_FUNCTION_VALIDATE(ChromeDirectSettingAPI::Get(GetProfile())
62                                   ->IsPreferenceOnWhitelist(pref_key));
63 
64   base::DictionaryValue* details = NULL;
65   EXTENSION_FUNCTION_VALIDATE(args_->GetDictionary(1, &details));
66 
67   base::Value* value = NULL;
68   EXTENSION_FUNCTION_VALIDATE(
69       details->Get(preference_api_constants::kValue, &value));
70 
71   PrefService* pref_service = GetPrefService();
72   const PrefService::Preference* preference =
73       pref_service->FindPreference(pref_key.c_str());
74   EXTENSION_FUNCTION_VALIDATE(preference);
75 
76   EXTENSION_FUNCTION_VALIDATE(value->GetType() == preference->GetType());
77 
78   pref_service->Set(pref_key.c_str(), *value);
79 
80   return true;
81 }
82 
~SetDirectSettingFunction()83 SetDirectSettingFunction::~SetDirectSettingFunction() {}
84 
ClearDirectSettingFunction()85 ClearDirectSettingFunction::ClearDirectSettingFunction() {}
86 
RunSync()87 bool ClearDirectSettingFunction::RunSync() {
88   EXTENSION_FUNCTION_VALIDATE(IsCalledFromComponentExtension());
89 
90   std::string pref_key;
91   EXTENSION_FUNCTION_VALIDATE(args_->GetString(0, &pref_key));
92   EXTENSION_FUNCTION_VALIDATE(ChromeDirectSettingAPI::Get(GetProfile())
93                                   ->IsPreferenceOnWhitelist(pref_key));
94   GetPrefService()->ClearPref(pref_key.c_str());
95 
96   return true;
97 }
98 
~ClearDirectSettingFunction()99 ClearDirectSettingFunction::~ClearDirectSettingFunction() {}
100 
101 }  // namespace chromedirectsetting
102 }  // namespace extensions
103 
104