diff options
author | mpcomplete@chromium.org <mpcomplete@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-02-25 22:10:50 +0000 |
---|---|---|
committer | mpcomplete@chromium.org <mpcomplete@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-02-25 22:10:50 +0000 |
commit | db7331aecb1f0c01aecf4cd4627d08a8d5b08bc2 (patch) | |
tree | 5a33fc21cb1628462f9e365add27aeaf058d60fc /chrome/renderer/extensions | |
parent | f56abff188b90b7f2d67a094930d7d9407df507d (diff) | |
download | chromium_src-db7331aecb1f0c01aecf4cd4627d08a8d5b08bc2.zip chromium_src-db7331aecb1f0c01aecf4cd4627d08a8d5b08bc2.tar.gz chromium_src-db7331aecb1f0c01aecf4cd4627d08a8d5b08bc2.tar.bz2 |
Allow users to enable extensions in incognito. Requires
--enable-experimental-extension-apis . The UI needs work. Tab and window
events are hooked up so that they work with incognito tabs/windows when
enabled.
BUG=32365
BUG=36292
Review URL: http://codereview.chromium.org/657041
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@40057 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/renderer/extensions')
3 files changed, 31 insertions, 2 deletions
diff --git a/chrome/renderer/extensions/extension_api_client_unittest.cc b/chrome/renderer/extensions/extension_api_client_unittest.cc index 39d275f..7158a8c 100644 --- a/chrome/renderer/extensions/extension_api_client_unittest.cc +++ b/chrome/renderer/extensions/extension_api_client_unittest.cc @@ -80,7 +80,7 @@ TEST_F(ExtensionAPIClientTest, CallbackDispatching) { "function callback(result) {" " assert(typeof result == 'object', 'result not object');" " assert(JSON.stringify(result) == '{\"id\":1,\"index\":1,\"windowId\":1," - "\"selected\":true," + "\"selected\":true,\"incognito\":false," "\"url\":\"http://www.google.com/\"}'," " 'incorrect result');" " console.log('pass')" @@ -103,7 +103,7 @@ TEST_F(ExtensionAPIClientTest, CallbackDispatching) { // Now send the callback a response ExtensionProcessBindings::HandleResponse( callback_id, true, "{\"id\":1,\"index\":1,\"windowId\":1,\"selected\":true," - "\"url\":\"http://www.google.com/\"}", ""); + "\"incognito\":false,\"url\":\"http://www.google.com/\"}", ""); // And verify that it worked ASSERT_EQ("pass", GetConsoleMessage()); diff --git a/chrome/renderer/extensions/extension_process_bindings.cc b/chrome/renderer/extensions/extension_process_bindings.cc index f065dd9..694c276 100644 --- a/chrome/renderer/extensions/extension_process_bindings.cc +++ b/chrome/renderer/extensions/extension_process_bindings.cc @@ -55,6 +55,9 @@ typedef std::map<std::string, bool> PermissionsMap; // A map of extension ID to permissions map. typedef std::map<std::string, PermissionsMap> ExtensionPermissionsMap; +// A map of extension ID to whether this extension was enabled in incognito. +typedef std::map<std::string, bool> IncognitoEnabledMap; + const char kExtensionName[] = "chrome/ExtensionProcessBindings"; const char* kExtensionDeps[] = { BaseJsV8Extension::kName, @@ -68,6 +71,7 @@ struct SingletonData { std::set<std::string> function_names_; PageActionIdMap page_action_ids_; ExtensionPermissionsMap permissions_; + std::map<std::string, bool> incognito_enabled_map_; }; static std::set<std::string>* GetFunctionNameSet() { @@ -82,6 +86,10 @@ static PermissionsMap* GetPermissionsMap(const std::string& extension_id) { return &Singleton<SingletonData>()->permissions_[extension_id]; } +static std::map<std::string, bool>* GetIncognitoEnabledMap() { + return &Singleton<SingletonData>()->incognito_enabled_map_; +} + static void GetActiveExtensionIDs(std::set<std::string>* extension_ids) { ExtensionPermissionsMap& permissions = Singleton<SingletonData>()->permissions_; @@ -237,6 +245,8 @@ class ExtensionImpl : public ExtensionBase { return v8::FunctionTemplate::New(GetPopupParentWindow); } else if (name->Equals(v8::String::New("SetExtensionActionIcon"))) { return v8::FunctionTemplate::New(SetExtensionActionIcon); + } else if (name->Equals(v8::String::New("CanAccessIncognito"))) { + return v8::FunctionTemplate::New(CanAccessIncognito); } return ExtensionBase::GetNativeFunction(name); @@ -495,6 +505,16 @@ class ExtensionImpl : public ExtensionBase { return StartRequestCommon(args, dict); } + // Returns true if the extension can access incognito data. + static v8::Handle<v8::Value> CanAccessIncognito(const v8::Arguments& args) { + std::string extension_id = ExtensionIdForCurrentContext(); + if (extension_id.empty()) + return v8::False(); + + bool enabled = (*GetIncognitoEnabledMap())[extension_id]; + return v8::Boolean::New(enabled); + } + static v8::Handle<v8::Value> GetRenderViewId(const v8::Arguments& args) { RenderView* renderview = bindings_utils::GetRenderViewForCurrentContext(); if (!renderview) @@ -520,6 +540,11 @@ void ExtensionProcessBindings::SetFunctionNames( ExtensionImpl::SetFunctionNames(names); } +void ExtensionProcessBindings::SetIncognitoEnabled( + const std::string& extension_id, bool enabled) { + (*GetIncognitoEnabledMap())[extension_id] = enabled; +} + // static void ExtensionProcessBindings::HandleResponse(int request_id, bool success, const std::string& response, diff --git a/chrome/renderer/extensions/extension_process_bindings.h b/chrome/renderer/extensions/extension_process_bindings.h index 2fd7613..93c7d24 100644 --- a/chrome/renderer/extensions/extension_process_bindings.h +++ b/chrome/renderer/extensions/extension_process_bindings.h @@ -46,6 +46,10 @@ class ExtensionProcessBindings { static void SetHostPermissions(const GURL& extension_url, const std::vector<URLPattern>& permissions); + // Sets whether incognito is enabled for a particular extension. + static void SetIncognitoEnabled(const std::string& extension_id, + bool enabled); + // Check if the extension in the currently running context has permission to // access the given extension function. Must be called with a valid V8 // context in scope. |