summaryrefslogtreecommitdiffstats
path: root/content/browser/renderer_host
diff options
context:
space:
mode:
authoracolwell@chromium.org <acolwell@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-04-27 17:23:24 +0000
committeracolwell@chromium.org <acolwell@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-04-27 17:23:24 +0000
commit16544bdf5b6500a7390d738a46f3cff017590582 (patch)
treea497bac31ca891c82fb2f656bd969feac8650d41 /content/browser/renderer_host
parent5ce7a3eebe8ccb16f1cd1e04fbcfa1c7c2d9fdf2 (diff)
downloadchromium_src-16544bdf5b6500a7390d738a46f3cff017590582.zip
chromium_src-16544bdf5b6500a7390d738a46f3cff017590582.tar.gz
chromium_src-16544bdf5b6500a7390d738a46f3cff017590582.tar.bz2
Revert 83168 - Revert "Revert 83100 - Remove weird dependency on extensions from webui.Re-plumb extension request messages in a more sane way.Before, each RVH had ProcessWebUIMessage(), which wasserving as a manual way of plumbing both WebUI andextension messages to the right place, even though onlya few RVHD responded to either message.Instead of this, we now just teach more of the stack howto handle IPC messages in general, and delegate them upthrough the stack, giving each layer a chance to handlethem if it knows how.The result is simpler and smaller:179 insertions(+), 252 deletions(-)BUG=80311Review URL: http://codereview.chromium.org/6901021"This reverts commit 643b280cedd9f0b76948686f39f50f295aba362f.TBR=mpcomplete@chromium.org
TBR=aa@chromium.org This is still causing check_deps failures. Review URL: http://codereview.chromium.org/6902074 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@83172 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content/browser/renderer_host')
-rw-r--r--content/browser/renderer_host/render_view_host.cc36
-rw-r--r--content/browser/renderer_host/render_view_host.h3
-rw-r--r--content/browser/renderer_host/render_view_host_delegate.h6
3 files changed, 45 insertions, 0 deletions
diff --git a/content/browser/renderer_host/render_view_host.cc b/content/browser/renderer_host/render_view_host.cc
index b6fd42f..0b7a4a4 100644
--- a/content/browser/renderer_host/render_view_host.cc
+++ b/content/browser/renderer_host/render_view_host.cc
@@ -21,6 +21,7 @@
#include "chrome/browser/profiles/profile.h"
#include "chrome/common/chrome_constants.h"
#include "chrome/common/chrome_switches.h"
+#include "chrome/common/extensions/extension_messages.h"
#include "chrome/common/icon_messages.h"
#include "chrome/common/render_messages.h"
#include "chrome/common/translate_errors.h"
@@ -762,6 +763,7 @@ bool RenderViewHost::OnMessageReceived(const IPC::Message& msg) {
OnMsgDidContentsPreferredSizeChange)
IPC_MESSAGE_HANDLER(ViewHostMsg_DomOperationResponse,
OnMsgDomOperationResponse)
+ IPC_MESSAGE_HANDLER(ViewHostMsg_WebUISend, OnMsgWebUISend)
IPC_MESSAGE_HANDLER(ViewHostMsg_ForwardMessageToExternalHost,
OnMsgForwardMessageToExternalHost)
IPC_MESSAGE_HANDLER(ViewHostMsg_SetTooltipText, OnMsgSetTooltipText)
@@ -1086,6 +1088,40 @@ void RenderViewHost::OnMsgDomOperationResponse(
Details<DomOperationNotificationDetails>(&details));
}
+void RenderViewHost::OnMsgWebUISend(
+ const GURL& source_url, const std::string& message,
+ const std::string& content) {
+ if (!ChildProcessSecurityPolicy::GetInstance()->
+ HasWebUIBindings(process()->id())) {
+ NOTREACHED() << "Blocked unauthorized use of WebUIBindings.";
+ return;
+ }
+
+ scoped_ptr<Value> value;
+ if (!content.empty()) {
+ value.reset(base::JSONReader::Read(content, false));
+ if (!value.get() || !value->IsType(Value::TYPE_LIST)) {
+ // The page sent us something that we didn't understand.
+ // This probably indicates a programming error.
+ NOTREACHED() << "Invalid JSON argument in OnMsgWebUISend.";
+ return;
+ }
+ }
+
+ ExtensionHostMsg_DomMessage_Params params;
+ params.name = message;
+ if (value.get())
+ params.arguments.Swap(static_cast<ListValue*>(value.get()));
+ params.source_url = source_url;
+ // WebUI doesn't use these values yet.
+ // TODO(aa): When WebUI is ported to ExtensionFunctionDispatcher, send real
+ // values here.
+ params.request_id = -1;
+ params.has_callback = false;
+ params.user_gesture = false;
+ delegate_->ProcessWebUIMessage(params);
+}
+
void RenderViewHost::OnMsgForwardMessageToExternalHost(
const std::string& message, const std::string& origin,
const std::string& target) {
diff --git a/content/browser/renderer_host/render_view_host.h b/content/browser/renderer_host/render_view_host.h
index 281bfeb..c9e7027 100644
--- a/content/browser/renderer_host/render_view_host.h
+++ b/content/browser/renderer_host/render_view_host.h
@@ -544,6 +544,9 @@ class RenderViewHost : public RenderWidgetHost {
void OnMsgDidContentsPreferredSizeChange(const gfx::Size& new_size);
void OnMsgDomOperationResponse(const std::string& json_string,
int automation_id);
+ void OnMsgWebUISend(const GURL& source_url,
+ const std::string& message,
+ const std::string& content);
void OnMsgForwardMessageToExternalHost(const std::string& message,
const std::string& origin,
const std::string& target);
diff --git a/content/browser/renderer_host/render_view_host_delegate.h b/content/browser/renderer_host/render_view_host_delegate.h
index f95a76d..f4f0783 100644
--- a/content/browser/renderer_host/render_view_host_delegate.h
+++ b/content/browser/renderer_host/render_view_host_delegate.h
@@ -45,6 +45,7 @@ class SkBitmap;
class SSLClientAuthHandler;
class SSLAddCertHandler;
class TabContents;
+struct ExtensionHostMsg_DomMessage_Params;
struct ViewHostMsg_CreateWindow_Params;
struct ViewHostMsg_FrameNavigate_Params;
struct WebApplicationInfo;
@@ -488,6 +489,11 @@ class RenderViewHostDelegate : public IPC::Channel::Listener {
virtual void DomOperationResponse(const std::string& json_string,
int automation_id) {}
+ // A message was sent from HTML-based UI.
+ // By default we ignore such messages.
+ virtual void ProcessWebUIMessage(
+ const ExtensionHostMsg_DomMessage_Params& params) {}
+
// A message for external host. By default we ignore such messages.
// |receiver| can be a receiving script and |message| is any
// arbitrary string that makes sense to the receiver.