diff options
author | pam@chromium.org <pam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-10-15 22:09:53 +0000 |
---|---|---|
committer | pam@chromium.org <pam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-10-15 22:09:53 +0000 |
commit | b6cf240f37f8e953558b1c24bff3568debc76d3f (patch) | |
tree | dad9fa103eb311f2ec030bfbe4f5b8a8a69c5033 /chrome/common | |
parent | 034837b1ac16b04ea7022d142f6a06f86984b41b (diff) | |
download | chromium_src-b6cf240f37f8e953558b1c24bff3568debc76d3f.zip chromium_src-b6cf240f37f8e953558b1c24bff3568debc76d3f.tar.gz chromium_src-b6cf240f37f8e953558b1c24bff3568debc76d3f.tar.bz2 |
Revert 105661 - Revert 105659 - Delay network requests on startup if any webRequest or webNavigation extensions are enabled.
[Relanding 105659. This will re-cause failures in chrome_frame_net_tests, to be fixed in the next CL.]
Add a webRequest extension API permission, used to tell when an extension uses that API and therefore wants to delay startup. Use the "tabs" warning for it.
Also clean up the UserScriptListener, which never released requests individually and so doesn't need to track them individually either, and makes the RequestQueue handle bulk releases by its delegates instead.
BUG=99450
TEST=unit_tests.exe --gtest_filter=NetworkDelayListenerTest.*
Review URL: http://codereview.chromium.org/8205001
TBR=pam@chromium.org
Review URL: http://codereview.chromium.org/8296017
TBR=pam@chromium.org
Review URL: http://codereview.chromium.org/8308003
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@105686 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/common')
5 files changed, 22 insertions, 4 deletions
diff --git a/chrome/common/extensions/extension.cc b/chrome/common/extensions/extension.cc index 94112ba..8d80814 100644 --- a/chrome/common/extensions/extension.cc +++ b/chrome/common/extensions/extension.cc @@ -2835,6 +2835,13 @@ bool Extension::ShowConfigureContextMenus() const { return location() != Extension::COMPONENT; } +bool Extension::ImplicitlyDelaysNetworkStartup() const { + // Network requests should be deferred until any extensions that might want + // to observe or modify them are loaded. + return HasAPIPermission(ExtensionAPIPermission::kWebNavigation) || + HasAPIPermission(ExtensionAPIPermission::kWebRequest); +} + bool Extension::IsDisallowedExperimentalPermission( ExtensionAPIPermission::ID permission) const { return permission == ExtensionAPIPermission::kExperimental && diff --git a/chrome/common/extensions/extension.h b/chrome/common/extensions/extension.h index 4eaf58b..bdf493f 100644 --- a/chrome/common/extensions/extension.h +++ b/chrome/common/extensions/extension.h @@ -422,6 +422,11 @@ class Extension : public base::RefCountedThreadSafe<Extension> { // Whether context menu should be shown for page and browser actions. bool ShowConfigureContextMenus() const; + // Whether network requests should be delayed on browser startup until the + // extension's background page has loaded, even if the extension doesn't + // explicitly request a delay. + bool ImplicitlyDelaysNetworkStartup() const; + // Returns the Homepage URL for this extension. If homepage_url was not // specified in the manifest, this returns the Google Gallery URL. For // third-party extensions, this returns a blank GURL. diff --git a/chrome/common/extensions/extension_permission_set.cc b/chrome/common/extensions/extension_permission_set.cc index fd74af3..f68b58e 100644 --- a/chrome/common/extensions/extension_permission_set.cc +++ b/chrome/common/extensions/extension_permission_set.cc @@ -313,9 +313,11 @@ ExtensionPermissionsInfo::ExtensionPermissionsInfo() IDS_EXTENSION_PROMPT_WARNING_TTS_ENGINE, ExtensionPermissionMessage::kTtsEngine, none); RegisterPermission( - ExtensionAPIPermission::kWebNavigation, "webNavigation", - IDS_EXTENSION_PROMPT_WARNING_TABS, - ExtensionPermissionMessage::kTabs, none); + ExtensionAPIPermission::kWebNavigation, "webNavigation", 0, + ExtensionPermissionMessage::kNone, none); + RegisterPermission( + ExtensionAPIPermission::kWebRequest, "webRequest", 0, + ExtensionPermissionMessage::kNone, none); RegisterPermission( ExtensionAPIPermission::kWebSocketProxyPrivate, "webSocketProxyPrivate", 0, diff --git a/chrome/common/extensions/extension_permission_set.h b/chrome/common/extensions/extension_permission_set.h index 7250174..d7a92cd 100644 --- a/chrome/common/extensions/extension_permission_set.h +++ b/chrome/common/extensions/extension_permission_set.h @@ -122,6 +122,7 @@ class ExtensionAPIPermission { kTtsEngine, kUnlimitedStorage, kWebNavigation, + kWebRequest, kWebSocketProxyPrivate, kWebstorePrivate, kEnumBoundary diff --git a/chrome/common/extensions/extension_permission_set_unittest.cc b/chrome/common/extensions/extension_permission_set_unittest.cc index 5392217..57826cc 100644 --- a/chrome/common/extensions/extension_permission_set_unittest.cc +++ b/chrome/common/extensions/extension_permission_set_unittest.cc @@ -621,8 +621,11 @@ TEST(ExtensionPermissionSetTest, PermissionMessages) { // permissions. skip.insert(ExtensionAPIPermission::kCookie); - // The proxy permission is warned as part of host permission checks. + // The proxy, webNavigation, and webRequest permissions are warned as part of + // host permission checks. skip.insert(ExtensionAPIPermission::kProxy); + skip.insert(ExtensionAPIPermission::kWebNavigation); + skip.insert(ExtensionAPIPermission::kWebRequest); // This permission requires explicit user action (context menu handler) // so we won't prompt for it for now. |