summaryrefslogtreecommitdiffstats
path: root/chrome/browser/renderer_host
diff options
context:
space:
mode:
authorrafaelw@chromium.org <rafaelw@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-04-28 03:09:53 +0000
committerrafaelw@chromium.org <rafaelw@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-04-28 03:09:53 +0000
commit6dfed102065bda2e23541a5bf871b97258174fe3 (patch)
tree4b182c22eb74adcdd4ede2315062b991946b1005 /chrome/browser/renderer_host
parent26e607f289bc2f5ca82ee804969572606e1c0738 (diff)
downloadchromium_src-6dfed102065bda2e23541a5bf871b97258174fe3.zip
chromium_src-6dfed102065bda2e23541a5bf871b97258174fe3.tar.gz
chromium_src-6dfed102065bda2e23541a5bf871b97258174fe3.tar.bz2
Implement tabs.createWindow extension api call. Required: (a) new RVHDelegate & TabContentsDelegate method(s) CreateExtensionFunctionDispatcher() so that the dispatcher could be created with (an optional) browser attached to it, while avoiding having render_host depend on browser.h
BUG=11092: R=aa,mpComplete,darin,pkasting Review URL: http://codereview.chromium.org/79070 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@14710 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/renderer_host')
-rw-r--r--chrome/browser/renderer_host/render_view_host.cc5
-rw-r--r--chrome/browser/renderer_host/render_view_host_delegate.h11
2 files changed, 14 insertions, 2 deletions
diff --git a/chrome/browser/renderer_host/render_view_host.cc b/chrome/browser/renderer_host/render_view_host.cc
index 21b8d34..bd4f092 100644
--- a/chrome/browser/renderer_host/render_view_host.cc
+++ b/chrome/browser/renderer_host/render_view_host.cc
@@ -890,8 +890,8 @@ void RenderViewHost::OnMsgNavigate(const IPC::Message& msg) {
if (PageTransition::IsMainFrame(validated_params.transition)) {
ExtensionFunctionDispatcher* new_efd = NULL;
if (validated_params.url.SchemeIs(chrome::kExtensionScheme)) {
- new_efd = new ExtensionFunctionDispatcher(this,
- validated_params.url.host());
+ new_efd = delegate()->CreateExtensionFunctionDispatcher(this,
+ validated_params.url.host());
}
extension_function_dispatcher_.reset(new_efd);
}
@@ -1352,6 +1352,7 @@ void RenderViewHost::OnExtensionRequest(const std::string& name,
int callback_id) {
// TODO(aa): Here is where we can check that this renderer was supposed to be
// able to call extension APIs.
+ DCHECK(extension_function_dispatcher_.get());
extension_function_dispatcher_->HandleRequest(name, args, callback_id);
}
diff --git a/chrome/browser/renderer_host/render_view_host_delegate.h b/chrome/browser/renderer_host/render_view_host_delegate.h
index ba69b03..18b1f38 100644
--- a/chrome/browser/renderer_host/render_view_host_delegate.h
+++ b/chrome/browser/renderer_host/render_view_host_delegate.h
@@ -19,7 +19,10 @@
#include "webkit/glue/webpreferences.h"
#include "webkit/glue/window_open_disposition.h"
+#include "chrome/browser/extensions/extension_function_dispatcher.h"
+
class AutofillForm;
+class ExtensionFunctionDispatcher;
class NavigationEntry;
class Profile;
class RenderProcessHost;
@@ -147,6 +150,14 @@ class RenderViewHostDelegate {
// Retrieves the profile to be used.
virtual Profile* GetProfile() const = 0;
+ // Create a new browser window to be sized, shown and contents managed
+ // by the caller.
+ virtual ExtensionFunctionDispatcher *CreateExtensionFunctionDispatcher(
+ RenderViewHost* render_view_host,
+ const std::string& extension_id) {
+ return NULL;
+ }
+
// Return this object cast to a WebContents, if it is one.
virtual WebContents* GetAsWebContents() { return NULL; }