summaryrefslogtreecommitdiffstats
path: root/content/browser/tab_contents
diff options
context:
space:
mode:
Diffstat (limited to 'content/browser/tab_contents')
-rw-r--r--content/browser/tab_contents/background_contents.h1
-rw-r--r--content/browser/tab_contents/tab_contents.cc16
-rw-r--r--content/browser/tab_contents/tab_contents.h3
3 files changed, 17 insertions, 3 deletions
diff --git a/content/browser/tab_contents/background_contents.h b/content/browser/tab_contents/background_contents.h
index ef03cd4..e544fde 100644
--- a/content/browser/tab_contents/background_contents.h
+++ b/content/browser/tab_contents/background_contents.h
@@ -67,6 +67,7 @@ class BackgroundContents : public RenderViewHostDelegate,
virtual void DidNavigate(RenderViewHost* render_view_host,
const ViewHostMsg_FrameNavigate_Params& params);
virtual WebPreferences GetWebkitPrefs();
+ virtual void ProcessWebUIMessage(const ViewHostMsg_DomMessage_Params& params);
virtual void RunJavaScriptMessage(const std::wstring& message,
const std::wstring& default_prompt,
const GURL& frame_url,
diff --git a/content/browser/tab_contents/tab_contents.cc b/content/browser/tab_contents/tab_contents.cc
index 408eb4b..6c72691 100644
--- a/content/browser/tab_contents/tab_contents.cc
+++ b/content/browser/tab_contents/tab_contents.cc
@@ -366,9 +366,6 @@ void TabContents::AddObservers() {
}
bool TabContents::OnMessageReceived(const IPC::Message& message) {
- if (web_ui() && web_ui()->OnMessageReceived(message))
- return true;
-
ObserverListBase<TabContentsObserver>::Iterator it(observers_);
TabContentsObserver* observer;
while ((observer = it.GetNext()) != NULL)
@@ -2010,6 +2007,19 @@ void TabContents::DomOperationResponse(const std::string& json_string,
int automation_id) {
}
+void TabContents::ProcessWebUIMessage(
+ const ExtensionHostMsg_DomMessage_Params& params) {
+ if (!render_manager_.web_ui()) {
+ // This can happen if someone uses window.open() to open an extension URL
+ // from a non-extension context.
+ render_view_host()->Send(new ExtensionMsg_Response(
+ render_view_host()->routing_id(), params.request_id, false, "",
+ "Access to extension API denied."));
+ return;
+ }
+ render_manager_.web_ui()->ProcessWebUIMessage(params);
+}
+
void TabContents::ProcessExternalHostMessage(const std::string& message,
const std::string& origin,
const std::string& target) {
diff --git a/content/browser/tab_contents/tab_contents.h b/content/browser/tab_contents/tab_contents.h
index f690393..17992dc 100644
--- a/content/browser/tab_contents/tab_contents.h
+++ b/content/browser/tab_contents/tab_contents.h
@@ -73,6 +73,7 @@ class TabContentsObserver;
class TabContentsSSLHelper;
class TabContentsView;
class URLPattern;
+struct ExtensionHostMsg_DomMessage_Params;
struct RendererPreferences;
struct ThumbnailScore;
struct ViewHostMsg_FrameNavigate_Params;
@@ -806,6 +807,8 @@ class TabContents : public PageNavigator,
WindowOpenDisposition disposition);
virtual void DomOperationResponse(const std::string& json_string,
int automation_id);
+ virtual void ProcessWebUIMessage(
+ const ExtensionHostMsg_DomMessage_Params& params);
virtual void ProcessExternalHostMessage(const std::string& message,
const std::string& origin,
const std::string& target);