diff options
author | rafaelw@chromium.org <rafaelw@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-08-31 02:48:12 +0000 |
---|---|---|
committer | rafaelw@chromium.org <rafaelw@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-08-31 02:48:12 +0000 |
commit | 583d45c199e5af7a53bb0b15e5ef0e2d6f5ead90 (patch) | |
tree | 516825f2a3da3f33527e1e145af4c020c5d13bc2 /chrome/renderer/render_thread.cc | |
parent | 3ad594ae4c38b057303eeb90d7e601a99d38a7c0 (diff) | |
download | chromium_src-583d45c199e5af7a53bb0b15e5ef0e2d6f5ead90.zip chromium_src-583d45c199e5af7a53bb0b15e5ef0e2d6f5ead90.tar.gz chromium_src-583d45c199e5af7a53bb0b15e5ef0e2d6f5ead90.tar.bz2 |
Reland r57788 - Expose Extension Bindings to Component Applications
This patch allows component (built-in) extension apps to have extension api bindings.
Note that this patch adds browser-side api permission checking for extension requests.
This is step two along the path to exposing an extension management api to the gallery (webstore).
Original Review: http://codereview.chromium.org/3163044
BUG=27431
TBR=mpcomplete
Review URL: http://codereview.chromium.org/3263007
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@57941 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/renderer/render_thread.cc')
-rw-r--r-- | chrome/renderer/render_thread.cc | 42 |
1 files changed, 28 insertions, 14 deletions
diff --git a/chrome/renderer/render_thread.cc b/chrome/renderer/render_thread.cc index 4ad6a3f..a3f0120 100644 --- a/chrome/renderer/render_thread.cc +++ b/chrome/renderer/render_thread.cc @@ -853,32 +853,46 @@ void RenderThread::EnsureWebKitInitialized() { WebScriptController::registerExtension( extensions_v8::ExternalExtension::Get()); - const WebKit::WebString kExtensionScheme = - WebKit::WebString::fromUTF8(chrome::kExtensionScheme); + // TODO(rafaelw). Note that extension-related v8 extensions are being + // bound currently based on is_extension_process_. This means that + // non-extension renderers that slip into an extension process (for example, + // an extension page opening an iframe) will be extension bindings setup. + // This should be relatively rare, and the offending page won't be able to + // make extension API requests because it'll be denied on both sides of + // the renderer by a permission check. However, this is still fairly lame + // and we should consider implementing a V8Proxy delegate that calls out + // to the render thread and makes a decision as to whether to bind these + // extensions based on the frame's url. + // See: crbug.com/53610. - WebScriptController::registerExtension( - ExtensionProcessBindings::Get(), kExtensionScheme); + if (is_extension_process_) + WebScriptController::registerExtension(ExtensionProcessBindings::Get()); WebScriptController::registerExtension( BaseJsV8Extension::Get(), EXTENSION_GROUP_CONTENT_SCRIPTS); - WebScriptController::registerExtension( - BaseJsV8Extension::Get(), kExtensionScheme); + if (is_extension_process_) + WebScriptController::registerExtension(BaseJsV8Extension::Get()); + WebScriptController::registerExtension( JsonSchemaJsV8Extension::Get(), EXTENSION_GROUP_CONTENT_SCRIPTS); - WebScriptController::registerExtension(JsonSchemaJsV8Extension::Get(), - kExtensionScheme); + if (is_extension_process_) + WebScriptController::registerExtension(JsonSchemaJsV8Extension::Get()); + WebScriptController::registerExtension( EventBindings::Get(), EXTENSION_GROUP_CONTENT_SCRIPTS); - WebScriptController::registerExtension(EventBindings::Get(), - kExtensionScheme); + if (is_extension_process_) + WebScriptController::registerExtension(EventBindings::Get()); + WebScriptController::registerExtension( RendererExtensionBindings::Get(), EXTENSION_GROUP_CONTENT_SCRIPTS); - WebScriptController::registerExtension( - RendererExtensionBindings::Get(), kExtensionScheme); - WebScriptController::registerExtension( - ExtensionApiTestV8Extension::Get(), kExtensionScheme); + if (is_extension_process_) + WebScriptController::registerExtension(RendererExtensionBindings::Get()); + WebScriptController::registerExtension( ExtensionApiTestV8Extension::Get(), EXTENSION_GROUP_CONTENT_SCRIPTS); + if (is_extension_process_) + WebScriptController::registerExtension( + ExtensionApiTestV8Extension::Get()); web_database_observer_impl_.reset(new WebDatabaseObserverImpl(this)); WebKit::WebDatabase::setObserver(web_database_observer_impl_.get()); |