Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(654)

Side by Side Diff: chrome/browser/extensions/api/settings_overrides/settings_overrides_api.cc

Issue 244473002: Remove NOTIFICATION_EXTENSION_UNLOADED_DEPRECATED from c/b/e/api (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 "base/lazy_instance.h" 7 #include "base/lazy_instance.h"
8 #include "base/strings/utf_string_conversions.h" 8 #include "base/strings/utf_string_conversions.h"
9 #include "chrome/browser/chrome_notification_types.h" 9 #include "chrome/browser/chrome_notification_types.h"
10 #include "chrome/browser/extensions/api/preference/preference_api.h" 10 #include "chrome/browser/extensions/api/preference/preference_api.h"
11 #include "chrome/browser/prefs/session_startup_pref.h" 11 #include "chrome/browser/prefs/session_startup_pref.h"
12 #include "chrome/browser/profiles/profile.h" 12 #include "chrome/browser/profiles/profile.h"
13 #include "chrome/browser/search_engines/template_url.h" 13 #include "chrome/browser/search_engines/template_url.h"
14 #include "chrome/browser/search_engines/template_url_service_factory.h" 14 #include "chrome/browser/search_engines/template_url_service_factory.h"
15 #include "chrome/common/extensions/manifest_handlers/settings_overrides_handler. h" 15 #include "chrome/common/extensions/manifest_handlers/settings_overrides_handler. h"
16 #include "chrome/common/pref_names.h" 16 #include "chrome/common/pref_names.h"
17 #include "content/public/browser/notification_details.h" 17 #include "content/public/browser/notification_details.h"
18 #include "content/public/browser/notification_source.h" 18 #include "content/public/browser/notification_source.h"
19 #include "extensions/browser/extension_prefs.h" 19 #include "extensions/browser/extension_prefs.h"
20 #include "extensions/browser/extension_prefs_factory.h" 20 #include "extensions/browser/extension_prefs_factory.h"
21 #include "extensions/browser/extension_registry.h"
21 #include "extensions/common/error_utils.h" 22 #include "extensions/common/error_utils.h"
22 #include "extensions/common/manifest_constants.h" 23 #include "extensions/common/manifest_constants.h"
23 24
24 namespace extensions { 25 namespace extensions {
25 26
26 namespace { 27 namespace {
27 28
28 base::LazyInstance<BrowserContextKeyedAPIFactory<SettingsOverridesAPI> > 29 base::LazyInstance<BrowserContextKeyedAPIFactory<SettingsOverridesAPI> >
29 g_factory = LAZY_INSTANCE_INITIALIZER; 30 g_factory = LAZY_INSTANCE_INITIALIZER;
30 31
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
82 search_provider.alternate_urls->at(i), install_parameter)); 83 search_provider.alternate_urls->at(i), install_parameter));
83 } 84 }
84 } 85 }
85 return data; 86 return data;
86 } 87 }
87 88
88 } // namespace 89 } // namespace
89 90
90 SettingsOverridesAPI::SettingsOverridesAPI(content::BrowserContext* context) 91 SettingsOverridesAPI::SettingsOverridesAPI(content::BrowserContext* context)
91 : profile_(Profile::FromBrowserContext(context)), 92 : profile_(Profile::FromBrowserContext(context)),
92 url_service_(TemplateURLServiceFactory::GetForProfile(profile_)) { 93 url_service_(TemplateURLServiceFactory::GetForProfile(profile_)),
93 DCHECK(profile_); 94 extension_registry_observer_(this) {
94 registrar_.Add(this, 95 extension_registry_observer_.Add(ExtensionRegistry::Get(profile_));
95 chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED,
96 content::Source<Profile>(profile_));
97 registrar_.Add(this,
98 chrome::NOTIFICATION_EXTENSION_UNLOADED_DEPRECATED,
99 content::Source<Profile>(profile_));
100 } 96 }
101 97
102 SettingsOverridesAPI::~SettingsOverridesAPI() { 98 SettingsOverridesAPI::~SettingsOverridesAPI() {
103 } 99 }
104 100
105 BrowserContextKeyedAPIFactory<SettingsOverridesAPI>* 101 BrowserContextKeyedAPIFactory<SettingsOverridesAPI>*
106 SettingsOverridesAPI::GetFactoryInstance() { 102 SettingsOverridesAPI::GetFactoryInstance() {
107 return g_factory.Pointer(); 103 return g_factory.Pointer();
108 } 104 }
109 105
(...skipping 13 matching lines...) Expand all
123 const std::string& pref_key) { 119 const std::string& pref_key) {
124 PreferenceAPI* prefs = PreferenceAPI::Get(profile_); 120 PreferenceAPI* prefs = PreferenceAPI::Get(profile_);
125 if (!prefs) 121 if (!prefs)
126 return; // Expected in unit tests. 122 return; // Expected in unit tests.
127 prefs->RemoveExtensionControlledPref( 123 prefs->RemoveExtensionControlledPref(
128 extension_id, 124 extension_id,
129 pref_key, 125 pref_key,
130 kExtensionPrefsScopeRegular); 126 kExtensionPrefsScopeRegular);
131 } 127 }
132 128
133 void SettingsOverridesAPI::Observe( 129 void SettingsOverridesAPI::OnExtensionLoaded(
134 int type, 130 content::BrowserContext* browser_context,
135 const content::NotificationSource& source, 131 const Extension* extension) {
136 const content::NotificationDetails& details) { 132 const SettingsOverrides* settings = SettingsOverrides::Get(extension);
137 switch (type) { 133 if (settings) {
138 case chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED: { 134 std::string install_parameter =
139 const Extension* extension = 135 ExtensionPrefs::Get(profile_)->GetInstallParam(extension->id());
140 content::Details<const Extension>(details).ptr(); 136 if (settings->homepage) {
141 const SettingsOverrides* settings = 137 SetPref(extension->id(),
142 SettingsOverrides::Get(extension); 138 prefs::kHomePage,
143 if (settings) { 139 new base::StringValue(SubstituteInstallParam(
144 std::string install_parameter = 140 settings->homepage->spec(), install_parameter)));
145 ExtensionPrefs::Get(profile_)->GetInstallParam(extension->id()); 141 SetPref(extension->id(),
146 if (settings->homepage) { 142 prefs::kHomePageIsNewTabPage,
147 SetPref(extension->id(), 143 new base::FundamentalValue(false));
148 prefs::kHomePage, 144 }
149 new base::StringValue(SubstituteInstallParam( 145 if (!settings->startup_pages.empty()) {
150 settings->homepage->spec(), install_parameter))); 146 SetPref(extension->id(),
151 SetPref(extension->id(), prefs::kHomePageIsNewTabPage, 147 prefs::kRestoreOnStartup,
152 new base::FundamentalValue(false)); 148 new base::FundamentalValue(SessionStartupPref::kPrefValueURLs));
149 if (settings->startup_pages.size() > 1) {
150 VLOG(1) << extensions::ErrorUtils::FormatErrorMessage(
151 kManyStartupPagesWarning,
152 manifest_keys::kSettingsOverride);
153 }
154 scoped_ptr<base::ListValue> url_list(new base::ListValue);
155 url_list->Append(new base::StringValue(SubstituteInstallParam(
156 settings->startup_pages[0].spec(), install_parameter)));
157 SetPref(
158 extension->id(), prefs::kURLsToRestoreOnStartup, url_list.release());
159 }
160 if (settings->search_engine) {
161 // Bring the preference to the correct state. Before this code set it
162 // to "true" for all search engines. Thus, we should overwrite it for
163 // all search engines.
164 if (settings->search_engine->is_default) {
165 SetPref(extension->id(),
166 prefs::kDefaultSearchProviderEnabled,
167 new base::FundamentalValue(true));
168 } else {
169 UnsetPref(extension->id(), prefs::kDefaultSearchProviderEnabled);
170 }
171 DCHECK(url_service_);
172 if (url_service_->loaded()) {
173 RegisterSearchProvider(extension);
174 } else {
175 if (!template_url_sub_) {
176 template_url_sub_ = url_service_->RegisterOnLoadedCallback(
177 base::Bind(&SettingsOverridesAPI::OnTemplateURLsLoaded,
178 base::Unretained(this)));
153 } 179 }
154 if (!settings->startup_pages.empty()) { 180 url_service_->Load();
155 SetPref(extension->id(), prefs::kRestoreOnStartup, 181 pending_extensions_.insert(extension);
156 new base::FundamentalValue(
157 SessionStartupPref::kPrefValueURLs));
158 if (settings->startup_pages.size() > 1) {
159 VLOG(1) << extensions::ErrorUtils::FormatErrorMessage(
160 kManyStartupPagesWarning, manifest_keys::kSettingsOverride);
161 }
162 scoped_ptr<base::ListValue> url_list(new base::ListValue);
163 url_list->Append(new base::StringValue(SubstituteInstallParam(
164 settings->startup_pages[0].spec(), install_parameter)));
165 SetPref(extension->id(), prefs::kURLsToRestoreOnStartup,
166 url_list.release());
167 }
168 if (settings->search_engine) {
169 // Bring the preference to the correct state. Before this code set it
170 // to "true" for all search engines. Thus, we should overwrite it for
171 // all search engines.
172 if (settings->search_engine->is_default) {
173 SetPref(extension->id(), prefs::kDefaultSearchProviderEnabled,
174 new base::FundamentalValue(true));
175 } else {
176 UnsetPref(extension->id(), prefs::kDefaultSearchProviderEnabled);
177 }
178 DCHECK(url_service_);
179 if (url_service_->loaded()) {
180 RegisterSearchProvider(extension);
181 } else {
182 if (!template_url_sub_) {
183 template_url_sub_ = url_service_->RegisterOnLoadedCallback(
184 base::Bind(&SettingsOverridesAPI::OnTemplateURLsLoaded,
185 base::Unretained(this)));
186 }
187 url_service_->Load();
188 pending_extensions_.insert(extension);
189 }
190 }
191 } 182 }
192 break;
193 }
194 case chrome::NOTIFICATION_EXTENSION_UNLOADED_DEPRECATED: {
195 const Extension* extension =
196 content::Details<UnloadedExtensionInfo>(details)->extension;
197 const SettingsOverrides* settings = SettingsOverrides::Get(extension);
198 if (settings) {
199 if (settings->homepage) {
200 UnsetPref(extension->id(), prefs::kHomePage);
201 UnsetPref(extension->id(), prefs::kHomePageIsNewTabPage);
202 }
203 if (!settings->startup_pages.empty()) {
204 UnsetPref(extension->id(), prefs::kRestoreOnStartup);
205 UnsetPref(extension->id(), prefs::kURLsToRestoreOnStartup);
206 }
207 if (settings->search_engine) {
208 DCHECK(url_service_);
209 if (url_service_->loaded())
210 url_service_->RemoveExtensionControlledTURL(extension->id());
211 else
212 pending_extensions_.erase(extension);
213 }
214 }
215 break;
216 }
217 default: {
218 NOTREACHED();
219 break;
220 } 183 }
221 } 184 }
222 } 185 }
186 void SettingsOverridesAPI::OnExtensionUnloaded(
187 content::BrowserContext* browser_context,
188 const Extension* extension,
189 UnloadedExtensionInfo::Reason reason) {
190 const SettingsOverrides* settings = SettingsOverrides::Get(extension);
191 if (settings) {
192 if (settings->homepage) {
193 UnsetPref(extension->id(), prefs::kHomePage);
194 UnsetPref(extension->id(), prefs::kHomePageIsNewTabPage);
195 }
196 if (!settings->startup_pages.empty()) {
197 UnsetPref(extension->id(), prefs::kRestoreOnStartup);
198 UnsetPref(extension->id(), prefs::kURLsToRestoreOnStartup);
199 }
200 if (settings->search_engine) {
201 DCHECK(url_service_);
202 if (url_service_->loaded())
203 url_service_->RemoveExtensionControlledTURL(extension->id());
204 else
205 pending_extensions_.erase(extension);
206 }
207 }
208 }
223 209
224 void SettingsOverridesAPI::Shutdown() { 210 void SettingsOverridesAPI::Shutdown() {
225 template_url_sub_.reset(); 211 template_url_sub_.reset();
226 } 212 }
227 213
228 void SettingsOverridesAPI::OnTemplateURLsLoaded() { 214 void SettingsOverridesAPI::OnTemplateURLsLoaded() {
229 // Register search providers for pending extensions. 215 // Register search providers for pending extensions.
230 template_url_sub_.reset(); 216 template_url_sub_.reset();
231 for (PendingExtensions::const_iterator i(pending_extensions_.begin()); 217 for (PendingExtensions::const_iterator i(pending_extensions_.begin());
232 i != pending_extensions_.end(); ++i) { 218 i != pending_extensions_.end(); ++i) {
(...skipping 24 matching lines...) Expand all
257 243
258 template <> 244 template <>
259 void BrowserContextKeyedAPIFactory< 245 void BrowserContextKeyedAPIFactory<
260 SettingsOverridesAPI>::DeclareFactoryDependencies() { 246 SettingsOverridesAPI>::DeclareFactoryDependencies() {
261 DependsOn(ExtensionPrefsFactory::GetInstance()); 247 DependsOn(ExtensionPrefsFactory::GetInstance());
262 DependsOn(PreferenceAPI::GetFactoryInstance()); 248 DependsOn(PreferenceAPI::GetFactoryInstance());
263 DependsOn(TemplateURLServiceFactory::GetInstance()); 249 DependsOn(TemplateURLServiceFactory::GetInstance());
264 } 250 }
265 251
266 } // namespace extensions 252 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698