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()25SettingsPrivateSetPrefFunction::~SettingsPrivateSetPrefFunction() { 26 } 27 Run()28ExtensionFunction::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()62SettingsPrivateGetAllPrefsFunction::~SettingsPrivateGetAllPrefsFunction() { 63 } 64 Run()65ExtensionFunction::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()76SettingsPrivateGetPrefFunction::~SettingsPrivateGetPrefFunction() { 77 } 78 Run()79ExtensionFunction::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