OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 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 | 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/settings_overrides/settings_overrides_ap
i.h" | 5 #include "chrome/browser/extensions/api/settings_overrides/settings_overrides_ap
i.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 #include <utility> | 8 #include <utility> |
9 | 9 |
10 #include "base/lazy_instance.h" | 10 #include "base/lazy_instance.h" |
11 #include "base/memory/ptr_util.h" | 11 #include "base/memory/ptr_util.h" |
12 #include "base/strings/utf_string_conversions.h" | 12 #include "base/strings/utf_string_conversions.h" |
13 #include "chrome/browser/extensions/api/preference/preference_api.h" | 13 #include "chrome/browser/extensions/api/preference/preference_api.h" |
14 #include "chrome/browser/prefs/session_startup_pref.h" | 14 #include "chrome/browser/prefs/session_startup_pref.h" |
15 #include "chrome/browser/profiles/profile.h" | 15 #include "chrome/browser/profiles/profile.h" |
16 #include "chrome/browser/search_engines/template_url_service_factory.h" | 16 #include "chrome/browser/search_engines/template_url_service_factory.h" |
17 #include "chrome/common/extensions/manifest_handlers/settings_overrides_handler.
h" | 17 #include "chrome/common/extensions/manifest_handlers/settings_overrides_handler.
h" |
18 #include "chrome/common/pref_names.h" | 18 #include "chrome/common/pref_names.h" |
19 #include "components/search_engines/search_engines_pref_names.h" | 19 #include "components/search_engines/search_engines_pref_names.h" |
20 #include "components/search_engines/template_url.h" | 20 #include "components/search_engines/template_url.h" |
21 #include "components/search_engines/template_url_prepopulate_data.h" | 21 #include "components/search_engines/template_url_prepopulate_data.h" |
| 22 #include "components/search_engines/util.h" |
22 #include "extensions/browser/extension_prefs.h" | 23 #include "extensions/browser/extension_prefs.h" |
23 #include "extensions/browser/extension_prefs_factory.h" | 24 #include "extensions/browser/extension_prefs_factory.h" |
24 #include "extensions/browser/extension_registry.h" | 25 #include "extensions/browser/extension_registry.h" |
25 #include "extensions/common/error_utils.h" | 26 #include "extensions/common/error_utils.h" |
26 #include "extensions/common/manifest_constants.h" | 27 #include "extensions/common/manifest_constants.h" |
27 | 28 |
28 namespace extensions { | 29 namespace extensions { |
29 | 30 |
30 namespace { | 31 namespace { |
31 | 32 |
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
136 SettingsOverridesAPI::~SettingsOverridesAPI() { | 137 SettingsOverridesAPI::~SettingsOverridesAPI() { |
137 } | 138 } |
138 | 139 |
139 BrowserContextKeyedAPIFactory<SettingsOverridesAPI>* | 140 BrowserContextKeyedAPIFactory<SettingsOverridesAPI>* |
140 SettingsOverridesAPI::GetFactoryInstance() { | 141 SettingsOverridesAPI::GetFactoryInstance() { |
141 return g_factory.Pointer(); | 142 return g_factory.Pointer(); |
142 } | 143 } |
143 | 144 |
144 void SettingsOverridesAPI::SetPref(const std::string& extension_id, | 145 void SettingsOverridesAPI::SetPref(const std::string& extension_id, |
145 const std::string& pref_key, | 146 const std::string& pref_key, |
146 base::Value* value) { | 147 base::Value* value) const { |
147 PreferenceAPI* prefs = PreferenceAPI::Get(profile_); | 148 PreferenceAPI* prefs = PreferenceAPI::Get(profile_); |
148 if (!prefs) | 149 if (!prefs) |
149 return; // Expected in unit tests. | 150 return; // Expected in unit tests. |
150 prefs->SetExtensionControlledPref(extension_id, | 151 prefs->SetExtensionControlledPref(extension_id, |
151 pref_key, | 152 pref_key, |
152 kExtensionPrefsScopeRegular, | 153 kExtensionPrefsScopeRegular, |
153 value); | 154 value); |
154 } | 155 } |
155 | 156 |
156 void SettingsOverridesAPI::UnsetPref(const std::string& extension_id, | 157 void SettingsOverridesAPI::UnsetPref(const std::string& extension_id, |
157 const std::string& pref_key) { | 158 const std::string& pref_key) const { |
158 PreferenceAPI* prefs = PreferenceAPI::Get(profile_); | 159 PreferenceAPI* prefs = PreferenceAPI::Get(profile_); |
159 if (!prefs) | 160 if (!prefs) |
160 return; // Expected in unit tests. | 161 return; // Expected in unit tests. |
161 prefs->RemoveExtensionControlledPref( | 162 prefs->RemoveExtensionControlledPref( |
162 extension_id, | 163 extension_id, |
163 pref_key, | 164 pref_key, |
164 kExtensionPrefsScopeRegular); | 165 kExtensionPrefsScopeRegular); |
165 } | 166 } |
166 | 167 |
167 void SettingsOverridesAPI::OnExtensionLoaded( | 168 void SettingsOverridesAPI::OnExtensionLoaded( |
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
229 if (settings) { | 230 if (settings) { |
230 if (settings->homepage) { | 231 if (settings->homepage) { |
231 UnsetPref(extension->id(), prefs::kHomePage); | 232 UnsetPref(extension->id(), prefs::kHomePage); |
232 UnsetPref(extension->id(), prefs::kHomePageIsNewTabPage); | 233 UnsetPref(extension->id(), prefs::kHomePageIsNewTabPage); |
233 } | 234 } |
234 if (!settings->startup_pages.empty()) { | 235 if (!settings->startup_pages.empty()) { |
235 UnsetPref(extension->id(), prefs::kRestoreOnStartup); | 236 UnsetPref(extension->id(), prefs::kRestoreOnStartup); |
236 UnsetPref(extension->id(), prefs::kURLsToRestoreOnStartup); | 237 UnsetPref(extension->id(), prefs::kURLsToRestoreOnStartup); |
237 } | 238 } |
238 if (settings->search_engine) { | 239 if (settings->search_engine) { |
| 240 if (settings->search_engine->is_default) { |
| 241 // Current extension can be overriding DSE. |
| 242 UnsetPref(extension->id(), |
| 243 DefaultSearchManager::kDefaultSearchProviderDataPrefName); |
| 244 } |
239 DCHECK(url_service_); | 245 DCHECK(url_service_); |
240 if (url_service_->loaded()) { | 246 if (url_service_->loaded()) { |
241 url_service_->RemoveExtensionControlledTURL( | 247 url_service_->RemoveExtensionControlledTURL( |
242 extension->id(), TemplateURL::NORMAL_CONTROLLED_BY_EXTENSION); | 248 extension->id(), TemplateURL::NORMAL_CONTROLLED_BY_EXTENSION); |
243 } else { | 249 } else { |
244 pending_extensions_.erase(extension); | 250 pending_extensions_.erase(extension); |
245 } | 251 } |
246 } | 252 } |
247 } | 253 } |
248 } | 254 } |
(...skipping 26 matching lines...) Expand all Loading... |
275 ExtensionPrefs* prefs = ExtensionPrefs::Get(profile_); | 281 ExtensionPrefs* prefs = ExtensionPrefs::Get(profile_); |
276 info->install_time = prefs->GetInstallTime(extension->id()); | 282 info->install_time = prefs->GetInstallTime(extension->id()); |
277 std::string install_parameter = prefs->GetInstallParam(extension->id()); | 283 std::string install_parameter = prefs->GetInstallParam(extension->id()); |
278 std::unique_ptr<TemplateURLData> data = ConvertSearchProvider( | 284 std::unique_ptr<TemplateURLData> data = ConvertSearchProvider( |
279 profile_->GetPrefs(), *settings->search_engine, install_parameter); | 285 profile_->GetPrefs(), *settings->search_engine, install_parameter); |
280 data->show_in_default_list = info->wants_to_be_default_engine; | 286 data->show_in_default_list = info->wants_to_be_default_engine; |
281 auto turl = base::MakeUnique<TemplateURL>( | 287 auto turl = base::MakeUnique<TemplateURL>( |
282 *data, TemplateURL::NORMAL_CONTROLLED_BY_EXTENSION); | 288 *data, TemplateURL::NORMAL_CONTROLLED_BY_EXTENSION); |
283 | 289 |
284 url_service_->AddExtensionControlledTURL(std::move(turl), std::move(info)); | 290 url_service_->AddExtensionControlledTURL(std::move(turl), std::move(info)); |
| 291 |
| 292 if (settings->search_engine->is_default) { |
| 293 // Override current DSE pref to have extension overriden value. |
| 294 SetPref(extension->id(), |
| 295 DefaultSearchManager::kDefaultSearchProviderDataPrefName, |
| 296 TemplateUrlDataToDictionary(*data).release()); |
| 297 } |
285 } | 298 } |
286 | 299 |
287 template <> | 300 template <> |
288 void BrowserContextKeyedAPIFactory< | 301 void BrowserContextKeyedAPIFactory< |
289 SettingsOverridesAPI>::DeclareFactoryDependencies() { | 302 SettingsOverridesAPI>::DeclareFactoryDependencies() { |
290 DependsOn(ExtensionPrefsFactory::GetInstance()); | 303 DependsOn(ExtensionPrefsFactory::GetInstance()); |
291 DependsOn(PreferenceAPI::GetFactoryInstance()); | 304 DependsOn(PreferenceAPI::GetFactoryInstance()); |
292 DependsOn(TemplateURLServiceFactory::GetInstance()); | 305 DependsOn(TemplateURLServiceFactory::GetInstance()); |
293 } | 306 } |
294 | 307 |
295 } // namespace extensions | 308 } // namespace extensions |
OLD | NEW |