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

Side by Side Diff: chrome/browser/extensions/extension_util.cc

Issue 874683005: [Extensions] Enable the scripts-require-action feature based on all-urls pref (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Updated metrics Created 5 years, 10 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/extension_util.h" 5 #include "chrome/browser/extensions/extension_util.h"
6 6
7 #include "base/command_line.h" 7 #include "base/command_line.h"
8 #include "base/logging.h" 8 #include "base/logging.h"
9 #include "base/values.h" 9 #include "base/values.h"
10 #include "chrome/browser/extensions/extension_service.h" 10 #include "chrome/browser/extensions/extension_service.h"
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
63 // When we reload the extension the ID may be invalidated if we've passed it 63 // When we reload the extension the ID may be invalidated if we've passed it
64 // by const ref everywhere. Make a copy to be safe. http://crbug.com/103762 64 // by const ref everywhere. Make a copy to be safe. http://crbug.com/103762
65 std::string id = extension_id; 65 std::string id = extension_id;
66 ExtensionService* service = 66 ExtensionService* service =
67 ExtensionSystem::Get(context)->extension_service(); 67 ExtensionSystem::Get(context)->extension_service();
68 CHECK(service); 68 CHECK(service);
69 service->ReloadExtension(id); 69 service->ReloadExtension(id);
70 return id; 70 return id;
71 } 71 }
72 72
73 // Sets the preference for scripting on all urls to |allowed|, optionally
74 // updating the extension's active permissions (based on |update_permissions|).
75 void SetAllowedScriptingOnAllUrlsHelper(
76 content::BrowserContext* context,
77 const std::string& extension_id,
78 bool allowed,
79 bool update_permissions) {
80 // TODO(devlin): Right now, we always need to have a value for this pref.
81 // Once the scripts-require-action feature launches, we can change the set
82 // to be null if false.
83 ExtensionPrefs::Get(context)->UpdateExtensionPref(
84 extension_id,
85 kExtensionAllowedOnAllUrlsPrefName,
86 new base::FundamentalValue(allowed));
87
88 if (update_permissions) {
89 const Extension* extension =
90 ExtensionRegistry::Get(context)->enabled_extensions().GetByID(
91 extension_id);
92 if (extension) {
93 PermissionsUpdater updater(context);
94 if (allowed)
95 updater.GrantWithheldImpliedAllHosts(extension);
96 else
97 updater.WithholdImpliedAllHosts(extension);
98 }
99 }
100 }
101
73 } // namespace 102 } // namespace
74 103
75 bool IsIncognitoEnabled(const std::string& extension_id, 104 bool IsIncognitoEnabled(const std::string& extension_id,
76 content::BrowserContext* context) { 105 content::BrowserContext* context) {
77 const Extension* extension = ExtensionRegistry::Get(context)-> 106 const Extension* extension = ExtensionRegistry::Get(context)->
78 GetExtensionById(extension_id, ExtensionRegistry::ENABLED); 107 GetExtensionById(extension_id, ExtensionRegistry::ENABLED);
79 if (extension) { 108 if (extension) {
80 if (!extension->can_be_incognito_enabled()) 109 if (!extension->can_be_incognito_enabled())
81 return false; 110 return false;
82 // If this is an existing component extension we always allow it to 111 // If this is an existing component extension we always allow it to
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
169 return; 198 return;
170 199
171 ExtensionPrefs::Get(context)->SetAllowFileAccess(extension_id, allow); 200 ExtensionPrefs::Get(context)->SetAllowFileAccess(extension_id, allow);
172 201
173 ReloadExtensionIfEnabled(extension_id, context); 202 ReloadExtensionIfEnabled(extension_id, context);
174 } 203 }
175 204
176 bool AllowedScriptingOnAllUrls(const std::string& extension_id, 205 bool AllowedScriptingOnAllUrls(const std::string& extension_id,
177 content::BrowserContext* context) { 206 content::BrowserContext* context) {
178 bool allowed = false; 207 bool allowed = false;
179 return ExtensionPrefs::Get(context)->ReadPrefAsBoolean( 208 ExtensionPrefs* prefs = ExtensionPrefs::Get(context);
180 extension_id, 209 if (!prefs->ReadPrefAsBoolean(extension_id,
181 kExtensionAllowedOnAllUrlsPrefName, 210 kExtensionAllowedOnAllUrlsPrefName,
182 &allowed) && 211 &allowed)) {
183 allowed; 212 // If there is no value present, we make one, defaulting it to the value of
213 // the 'scripts require action' flag. If the flag is on, then the extension
214 // does not have permission to script on all urls by default.
215 allowed = DefaultAllowedScriptingOnAllUrls();
216 SetAllowedScriptingOnAllUrlsHelper(context, extension_id, allowed, false);
217 }
218 return allowed;
184 } 219 }
185 220
186 void SetAllowedScriptingOnAllUrls(const std::string& extension_id, 221 void SetAllowedScriptingOnAllUrls(const std::string& extension_id,
187 content::BrowserContext* context, 222 content::BrowserContext* context,
188 bool allowed) { 223 bool allowed) {
189 if (allowed == AllowedScriptingOnAllUrls(extension_id, context)) 224 if (allowed != AllowedScriptingOnAllUrls(extension_id, context))
190 return; // Nothing to do here. 225 SetAllowedScriptingOnAllUrlsHelper(context, extension_id, allowed, true);
191
192 ExtensionPrefs::Get(context)->UpdateExtensionPref(
193 extension_id,
194 kExtensionAllowedOnAllUrlsPrefName,
195 allowed ? new base::FundamentalValue(true) : NULL);
196
197 const Extension* extension =
198 ExtensionRegistry::Get(context)->enabled_extensions().GetByID(
199 extension_id);
200 if (extension) {
201 PermissionsUpdater updater(context);
202 if (allowed)
203 updater.GrantWithheldImpliedAllHosts(extension);
204 else
205 updater.WithholdImpliedAllHosts(extension);
206 }
207 } 226 }
208 227
209 bool ScriptsMayRequireActionForExtension(const Extension* extension) { 228 bool DefaultAllowedScriptingOnAllUrls() {
210 // An extension requires user action to execute scripts iff the switch to do 229 return !FeatureSwitch::scripts_require_action()->IsEnabled();
211 // so is enabled, the extension shows up in chrome:extensions (so the user can 230 }
212 // grant withheld permissions), the extension is not part of chrome or 231
213 // corporate policy, and also not on the scripting whitelist. 232 bool ScriptsMayRequireActionForExtension(
214 return FeatureSwitch::scripts_require_action()->IsEnabled() && 233 const Extension* extension,
215 extension->ShouldDisplayInExtensionSettings() && 234 const PermissionSet* permissions) {
235 // An extension may require user action to execute scripts iff the extension
236 // shows up in chrome:extensions (so the user can grant withheld permissions),
237 // is not part of chrome or corporate policy, not on the scripting whitelist,
238 // and requires enough permissions that we should withhold them.
239 return extension->ShouldDisplayInExtensionSettings() &&
216 !Manifest::IsPolicyLocation(extension->location()) && 240 !Manifest::IsPolicyLocation(extension->location()) &&
217 !Manifest::IsComponentLocation(extension->location()) && 241 !Manifest::IsComponentLocation(extension->location()) &&
218 !PermissionsData::CanExecuteScriptEverywhere(extension); 242 !PermissionsData::CanExecuteScriptEverywhere(extension) &&
243 permissions->ShouldWarnAllHosts();
219 } 244 }
220 245
221 bool IsAppLaunchable(const std::string& extension_id, 246 bool IsAppLaunchable(const std::string& extension_id,
222 content::BrowserContext* context) { 247 content::BrowserContext* context) {
223 int reason = ExtensionPrefs::Get(context)->GetDisableReasons(extension_id); 248 int reason = ExtensionPrefs::Get(context)->GetDisableReasons(extension_id);
224 return !((reason & Extension::DISABLE_UNSUPPORTED_REQUIREMENT) || 249 return !((reason & Extension::DISABLE_UNSUPPORTED_REQUIREMENT) ||
225 (reason & Extension::DISABLE_CORRUPTED)); 250 (reason & Extension::DISABLE_CORRUPTED));
226 } 251 }
227 252
228 bool IsAppLaunchableWithoutEnabling(const std::string& extension_id, 253 bool IsAppLaunchableWithoutEnabling(const std::string& extension_id,
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after
349 IDR_EXTENSION_DEFAULT_ICON); 374 IDR_EXTENSION_DEFAULT_ICON);
350 } 375 }
351 376
352 bool IsNewBookmarkAppsEnabled() { 377 bool IsNewBookmarkAppsEnabled() {
353 return base::CommandLine::ForCurrentProcess()->HasSwitch( 378 return base::CommandLine::ForCurrentProcess()->HasSwitch(
354 switches::kEnableNewBookmarkApps); 379 switches::kEnableNewBookmarkApps);
355 } 380 }
356 381
357 } // namespace util 382 } // namespace util
358 } // namespace extensions 383 } // namespace extensions
OLDNEW
« no previous file with comments | « chrome/browser/extensions/extension_util.h ('k') | chrome/browser/extensions/permissions_updater.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698