summaryrefslogtreecommitdiffstats
path: root/chrome/common
diff options
context:
space:
mode:
authorpam@chromium.org <pam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-10-15 22:09:53 +0000
committerpam@chromium.org <pam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-10-15 22:09:53 +0000
commitb6cf240f37f8e953558b1c24bff3568debc76d3f (patch)
treedad9fa103eb311f2ec030bfbe4f5b8a8a69c5033 /chrome/common
parent034837b1ac16b04ea7022d142f6a06f86984b41b (diff)
downloadchromium_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')
-rw-r--r--chrome/common/extensions/extension.cc7
-rw-r--r--chrome/common/extensions/extension.h5
-rw-r--r--chrome/common/extensions/extension_permission_set.cc8
-rw-r--r--chrome/common/extensions/extension_permission_set.h1
-rw-r--r--chrome/common/extensions/extension_permission_set_unittest.cc5
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.