1 // Copyright 2015 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/settings_private/settings_private_api.h"
6 
7 #include <memory>
8 #include <utility>
9 
10 #include "base/values.h"
11 #include "chrome/browser/extensions/api/settings_private/settings_private_delegate.h"
12 #include "chrome/browser/extensions/api/settings_private/settings_private_delegate_factory.h"
13 #include "chrome/browser/profiles/profile.h"
14 #include "chrome/browser/ui/zoom/chrome_zoom_level_prefs.h"
15 #include "chrome/common/extensions/api/settings_private.h"
16 #include "content/public/common/page_zoom.h"
17 #include "extensions/browser/extension_function_registry.h"
18 
19 namespace extensions {
20 
21 ////////////////////////////////////////////////////////////////////////////////
22 // SettingsPrivateSetPrefFunction
23 ////////////////////////////////////////////////////////////////////////////////
24 
~SettingsPrivateSetPrefFunction()25 SettingsPrivateSetPrefFunction::~SettingsPrivateSetPrefFunction() {
26 }
27 
Run()28 ExtensionFunction::ResponseAction SettingsPrivateSetPrefFunction::Run() {
29   std::unique_ptr<api::settings_private::SetPref::Params> parameters =
30       api::settings_private::SetPref::Params::Create(*args_);
31   EXTENSION_FUNCTION_VALIDATE(parameters.get());
32 
33   SettingsPrivateDelegate* delegate =
34       SettingsPrivateDelegateFactory::GetForBrowserContext(browser_context());
35   DCHECK(delegate);
36 
37   settings_private::SetPrefResult result =
38       delegate->SetPref(parameters->name, parameters->value.get());
39   switch (result) {
40     case settings_private::SetPrefResult::SUCCESS:
41       return RespondNow(OneArgument(std::make_unique<base::Value>(true)));
42     case settings_private::SetPrefResult::PREF_NOT_MODIFIABLE:
43       // Not an error, but return false to indicate setting the pref failed.
44       return RespondNow(OneArgument(std::make_unique<base::Value>(false)));
45     case settings_private::SetPrefResult::PREF_NOT_FOUND:
46       return RespondNow(Error("Pref not found: *", parameters->name));
47     case settings_private::SetPrefResult::PREF_TYPE_MISMATCH:
48       return RespondNow(Error("Incorrect type used for value of pref *",
49                               parameters->name));
50     case settings_private::SetPrefResult::PREF_TYPE_UNSUPPORTED:
51       return RespondNow(Error("Unsupported type used for value of pref *",
52                               parameters->name));
53   }
54   NOTREACHED();
55   return RespondNow(OneArgument(std::make_unique<base::Value>(false)));
56 }
57 
58 ////////////////////////////////////////////////////////////////////////////////
59 // SettingsPrivateGetAllPrefsFunction
60 ////////////////////////////////////////////////////////////////////////////////
61 
~SettingsPrivateGetAllPrefsFunction()62 SettingsPrivateGetAllPrefsFunction::~SettingsPrivateGetAllPrefsFunction() {
63 }
64 
Run()65 ExtensionFunction::ResponseAction SettingsPrivateGetAllPrefsFunction::Run() {
66   SettingsPrivateDelegate* delegate =
67       SettingsPrivateDelegateFactory::GetForBrowserContext(browser_context());
68   DCHECK(delegate);
69   return RespondNow(OneArgument(delegate->GetAllPrefs()));
70 }
71 
72 ////////////////////////////////////////////////////////////////////////////////
73 // SettingsPrivateGetPrefFunction
74 ////////////////////////////////////////////////////////////////////////////////
75 
~SettingsPrivateGetPrefFunction()76 SettingsPrivateGetPrefFunction::~SettingsPrivateGetPrefFunction() {
77 }
78 
Run()79 ExtensionFunction::ResponseAction SettingsPrivateGetPrefFunction::Run() {
80   std::unique_ptr<api::settings_private::GetPref::Params> parameters =
81       api::settings_private::GetPref::Params::Create(*args_);
82   EXTENSION_FUNCTION_VALIDATE(parameters.get());
83 
84   SettingsPrivateDelegate* delegate =
85       SettingsPrivateDelegateFactory::GetForBrowserContext(browser_context());
86   DCHECK(delegate);
87 
88   std::unique_ptr<base::Value> value = delegate->GetPref(parameters->name);
89   if (value->is_none())
90     return RespondNow(Error("Pref * does not exist", parameters->name));
91   else
92     return RespondNow(OneArgument(std::move(value)));
93 }
94 
95 ////////////////////////////////////////////////////////////////////////////////
96 // SettingsPrivateGetDefaultZoomFunction
97 ////////////////////////////////////////////////////////////////////////////////
98 
99 SettingsPrivateGetDefaultZoomFunction::
~SettingsPrivateGetDefaultZoomFunction()100     ~SettingsPrivateGetDefaultZoomFunction() {
101 }
102 
103 ExtensionFunction::ResponseAction
Run()104     SettingsPrivateGetDefaultZoomFunction::Run() {
105   SettingsPrivateDelegate* delegate =
106       SettingsPrivateDelegateFactory::GetForBrowserContext(browser_context());
107   DCHECK(delegate);
108   return RespondNow(OneArgument(delegate->GetDefaultZoom()));
109 }
110 
111 ////////////////////////////////////////////////////////////////////////////////
112 // SettingsPrivateSetDefaultZoomFunction
113 ////////////////////////////////////////////////////////////////////////////////
114 
115 SettingsPrivateSetDefaultZoomFunction::
~SettingsPrivateSetDefaultZoomFunction()116     ~SettingsPrivateSetDefaultZoomFunction() {
117 }
118 
119 ExtensionFunction::ResponseAction
Run()120     SettingsPrivateSetDefaultZoomFunction::Run() {
121   std::unique_ptr<api::settings_private::SetDefaultZoom::Params> parameters =
122       api::settings_private::SetDefaultZoom::Params::Create(*args_);
123   EXTENSION_FUNCTION_VALIDATE(parameters.get());
124 
125   SettingsPrivateDelegate* delegate =
126       SettingsPrivateDelegateFactory::GetForBrowserContext(browser_context());
127   DCHECK(delegate);
128   delegate->SetDefaultZoom(parameters->zoom);
129   return RespondNow(OneArgument(std::make_unique<base::Value>(true)));
130 }
131 
132 }  // namespace extensions
133