diff options
Diffstat (limited to 'content/browser/tab_contents')
-rw-r--r-- | content/browser/tab_contents/background_contents.h | 1 | ||||
-rw-r--r-- | content/browser/tab_contents/tab_contents.cc | 16 | ||||
-rw-r--r-- | content/browser/tab_contents/tab_contents.h | 3 |
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); |