Commit ae92c1ca authored by fsamuel's avatar fsamuel Committed by Commit bot

Move GuestView IPCs out of ExtensionMessageFilter to GuestViewMessageFilter

BUG=none

Review URL: https://codereview.chromium.org/880123002

Cr-Commit-Position: refs/heads/master@{#313454}
parent 36f5b4ab
...@@ -34,6 +34,7 @@ ...@@ -34,6 +34,7 @@
#include "extensions/browser/extension_message_filter.h" #include "extensions/browser/extension_message_filter.h"
#include "extensions/browser/extension_registry.h" #include "extensions/browser/extension_registry.h"
#include "extensions/browser/extension_system.h" #include "extensions/browser/extension_system.h"
#include "extensions/browser/guest_view/guest_view_message_filter.h"
#include "extensions/browser/info_map.h" #include "extensions/browser/info_map.h"
#include "extensions/browser/view_type_utils.h" #include "extensions/browser/view_type_utils.h"
#include "extensions/common/constants.h" #include "extensions/common/constants.h"
...@@ -392,6 +393,7 @@ void ChromeContentBrowserClientExtensionsPart::RenderProcessWillLaunch( ...@@ -392,6 +393,7 @@ void ChromeContentBrowserClientExtensionsPart::RenderProcessWillLaunch(
host->AddFilter(new ChromeExtensionMessageFilter(id, profile)); host->AddFilter(new ChromeExtensionMessageFilter(id, profile));
host->AddFilter(new ExtensionMessageFilter(id, profile)); host->AddFilter(new ExtensionMessageFilter(id, profile));
host->AddFilter(new GuestViewMessageFilter(id, profile));
extension_web_request_api_helpers::SendExtensionWebRequestStatusToHost(host); extension_web_request_api_helpers::SendExtensionWebRequestStatusToHost(host);
} }
......
...@@ -404,6 +404,8 @@ source_set("browser") { ...@@ -404,6 +404,8 @@ source_set("browser") {
"guest_view/guest_view_manager_factory.h", "guest_view/guest_view_manager_factory.h",
"guest_view/guest_view_manager.cc", "guest_view/guest_view_manager.cc",
"guest_view/guest_view_manager.h", "guest_view/guest_view_manager.h",
"guest_view/guest_view_message_filter.cc",
"guest_view/guest_view_message_filter.h",
"guest_view/guest_view.h", "guest_view/guest_view.h",
"guest_view/mime_handler_view/mime_handler_stream_manager.cc", "guest_view/mime_handler_view/mime_handler_stream_manager.cc",
"guest_view/mime_handler_view/mime_handler_stream_manager.h", "guest_view/mime_handler_view/mime_handler_stream_manager.h",
......
...@@ -14,10 +14,6 @@ ...@@ -14,10 +14,6 @@
#include "extensions/browser/event_router.h" #include "extensions/browser/event_router.h"
#include "extensions/browser/extension_function_dispatcher.h" #include "extensions/browser/extension_function_dispatcher.h"
#include "extensions/browser/extension_system.h" #include "extensions/browser/extension_system.h"
#include "extensions/browser/guest_view/guest_view_base.h"
#include "extensions/browser/guest_view/guest_view_manager.h"
#include "extensions/browser/guest_view/mime_handler_view/mime_handler_view_constants.h"
#include "extensions/browser/guest_view/mime_handler_view/mime_handler_view_guest.h"
#include "extensions/browser/info_map.h" #include "extensions/browser/info_map.h"
#include "extensions/browser/process_manager.h" #include "extensions/browser/process_manager.h"
#include "extensions/common/extension.h" #include "extensions/common/extension.h"
...@@ -48,10 +44,8 @@ void ExtensionMessageFilter::OverrideThreadForMessage( ...@@ -48,10 +44,8 @@ void ExtensionMessageFilter::OverrideThreadForMessage(
BrowserThread::ID* thread) { BrowserThread::ID* thread) {
switch (message.type()) { switch (message.type()) {
case ExtensionHostMsg_AddListener::ID: case ExtensionHostMsg_AddListener::ID:
case ExtensionHostMsg_AttachGuest::ID:
case ExtensionHostMsg_RemoveListener::ID: case ExtensionHostMsg_RemoveListener::ID:
case ExtensionHostMsg_AddLazyListener::ID: case ExtensionHostMsg_AddLazyListener::ID:
case ExtensionHostMsg_CreateMimeHandlerViewGuest::ID:
case ExtensionHostMsg_RemoveLazyListener::ID: case ExtensionHostMsg_RemoveLazyListener::ID:
case ExtensionHostMsg_AddFilteredListener::ID: case ExtensionHostMsg_AddFilteredListener::ID:
case ExtensionHostMsg_RemoveFilteredListener::ID: case ExtensionHostMsg_RemoveFilteredListener::ID:
...@@ -80,10 +74,6 @@ bool ExtensionMessageFilter::OnMessageReceived(const IPC::Message& message) { ...@@ -80,10 +74,6 @@ bool ExtensionMessageFilter::OnMessageReceived(const IPC::Message& message) {
OnExtensionRemoveListener) OnExtensionRemoveListener)
IPC_MESSAGE_HANDLER(ExtensionHostMsg_AddLazyListener, IPC_MESSAGE_HANDLER(ExtensionHostMsg_AddLazyListener,
OnExtensionAddLazyListener) OnExtensionAddLazyListener)
IPC_MESSAGE_HANDLER(ExtensionHostMsg_AttachGuest,
OnExtensionAttachGuest)
IPC_MESSAGE_HANDLER(ExtensionHostMsg_CreateMimeHandlerViewGuest,
OnExtensionCreateMimeHandlerViewGuest)
IPC_MESSAGE_HANDLER(ExtensionHostMsg_RemoveLazyListener, IPC_MESSAGE_HANDLER(ExtensionHostMsg_RemoveLazyListener,
OnExtensionRemoveLazyListener) OnExtensionRemoveLazyListener)
IPC_MESSAGE_HANDLER(ExtensionHostMsg_AddFilteredListener, IPC_MESSAGE_HANDLER(ExtensionHostMsg_AddFilteredListener,
...@@ -157,60 +147,6 @@ void ExtensionMessageFilter::OnExtensionAddLazyListener( ...@@ -157,60 +147,6 @@ void ExtensionMessageFilter::OnExtensionAddLazyListener(
router->AddLazyEventListener(event_name, extension_id); router->AddLazyEventListener(event_name, extension_id);
} }
void ExtensionMessageFilter::OnExtensionAttachGuest(
int routing_id,
int element_instance_id,
int guest_instance_id,
const base::DictionaryValue& params) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
GuestViewManager* manager =
GuestViewManager::FromBrowserContext(browser_context_);
if (!manager)
return;
manager->AttachGuest(render_process_id_,
routing_id,
element_instance_id,
guest_instance_id,
params);
}
void ExtensionMessageFilter::OnExtensionCreateMimeHandlerViewGuest(
int render_frame_id,
const std::string& view_id,
int element_instance_id,
const gfx::Size& element_size) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
GuestViewManager* manager =
GuestViewManager::FromBrowserContext(browser_context_);
if (!manager)
return;
content::RenderFrameHost* rfh =
content::RenderFrameHost::FromID(render_process_id_, render_frame_id);
content::WebContents* embedder_web_contents =
content::WebContents::FromRenderFrameHost(rfh);
if (!embedder_web_contents)
return;
GuestViewManager::WebContentsCreatedCallback callback =
base::Bind(&ExtensionMessageFilter::MimeHandlerViewGuestCreatedCallback,
this,
element_instance_id,
render_process_id_,
render_frame_id,
element_size);
base::DictionaryValue create_params;
create_params.SetString(mime_handler_view::kViewId, view_id);
create_params.SetInteger(guestview::kElementWidth, element_size.width());
create_params.SetInteger(guestview::kElementHeight, element_size.height());
manager->CreateGuest(MimeHandlerViewGuest::Type,
embedder_web_contents,
create_params,
callback);
}
void ExtensionMessageFilter::OnExtensionRemoveLazyListener( void ExtensionMessageFilter::OnExtensionRemoveLazyListener(
const std::string& extension_id, const std::string& event_name) { const std::string& extension_id, const std::string& event_name) {
EventRouter* router = EventRouter::Get(browser_context_); EventRouter* router = EventRouter::Get(browser_context_);
...@@ -291,39 +227,4 @@ void ExtensionMessageFilter::OnExtensionRequestForIOThread( ...@@ -291,39 +227,4 @@ void ExtensionMessageFilter::OnExtensionRequestForIOThread(
params); params);
} }
void ExtensionMessageFilter::MimeHandlerViewGuestCreatedCallback(
int element_instance_id,
int embedder_render_process_id,
int embedder_render_frame_id,
const gfx::Size& element_size,
content::WebContents* web_contents) {
GuestViewManager* manager =
GuestViewManager::FromBrowserContext(browser_context_);
if (!manager)
return;
MimeHandlerViewGuest* guest_view =
MimeHandlerViewGuest::FromWebContents(web_contents);
if (!guest_view)
return;
int guest_instance_id = guest_view->guest_instance_id();
content::RenderFrameHost* rfh = content::RenderFrameHost::FromID(
embedder_render_process_id, embedder_render_frame_id);
if (!rfh)
return;
base::DictionaryValue attach_params;
attach_params.SetInteger(guestview::kElementWidth, element_size.width());
attach_params.SetInteger(guestview::kElementHeight, element_size.height());
manager->AttachGuest(embedder_render_process_id,
rfh->GetRenderViewHost()->GetRoutingID(),
element_instance_id,
guest_instance_id,
attach_params);
rfh->Send(
new ExtensionMsg_CreateMimeHandlerViewGuestACK(element_instance_id));
}
} // namespace extensions } // namespace extensions
...@@ -64,10 +64,6 @@ class ExtensionMessageFilter : public content::BrowserMessageFilter { ...@@ -64,10 +64,6 @@ class ExtensionMessageFilter : public content::BrowserMessageFilter {
const std::string& event_name); const std::string& event_name);
void OnExtensionAddLazyListener(const std::string& extension_id, void OnExtensionAddLazyListener(const std::string& extension_id,
const std::string& event_name); const std::string& event_name);
void OnExtensionAttachGuest(int routing_id,
int element_instance_id,
int guest_instance_id,
const base::DictionaryValue& attach_params);
void OnExtensionCreateMimeHandlerViewGuest(int render_frame_id, void OnExtensionCreateMimeHandlerViewGuest(int render_frame_id,
const std::string& view_id, const std::string& view_id,
int element_instance_id, int element_instance_id,
...@@ -94,13 +90,6 @@ class ExtensionMessageFilter : public content::BrowserMessageFilter { ...@@ -94,13 +90,6 @@ class ExtensionMessageFilter : public content::BrowserMessageFilter {
int routing_id, int routing_id,
const ExtensionHostMsg_Request_Params& params); const ExtensionHostMsg_Request_Params& params);
// Runs on UI thread.
void MimeHandlerViewGuestCreatedCallback(int element_instance_id,
int embedder_render_process_id,
int embedder_render_frame_id,
const gfx::Size& element_size,
content::WebContents* web_contents);
const int render_process_id_; const int render_process_id_;
// Should only be accessed on the UI thread. // Should only be accessed on the UI thread.
......
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "extensions/browser/extension_message_filter.h"
#include "content/public/browser/browser_thread.h"
#include "content/public/browser/render_frame_host.h"
#include "content/public/browser/render_view_host.h"
#include "extensions/browser/guest_view/guest_view_base.h"
#include "extensions/browser/guest_view/guest_view_manager.h"
#include "extensions/browser/guest_view/guest_view_message_filter.h"
#include "extensions/browser/guest_view/mime_handler_view/mime_handler_view_constants.h"
#include "extensions/browser/guest_view/mime_handler_view/mime_handler_view_guest.h"
#include "extensions/common/extension_messages.h"
#include "ipc/ipc_message_macros.h"
using content::BrowserThread;
namespace extensions {
GuestViewMessageFilter::GuestViewMessageFilter(int render_process_id,
content::BrowserContext* context)
: BrowserMessageFilter(ExtensionMsgStart),
render_process_id_(render_process_id),
browser_context_(context),
weak_ptr_factory_(this) {
DCHECK_CURRENTLY_ON(BrowserThread::UI);
}
GuestViewMessageFilter::~GuestViewMessageFilter() {
DCHECK_CURRENTLY_ON(BrowserThread::IO);
}
void GuestViewMessageFilter::OverrideThreadForMessage(
const IPC::Message& message,
BrowserThread::ID* thread) {
switch (message.type()) {
case ExtensionHostMsg_AttachGuest::ID:
case ExtensionHostMsg_CreateMimeHandlerViewGuest::ID:
*thread = BrowserThread::UI;
break;
default:
break;
}
}
void GuestViewMessageFilter::OnDestruct() const {
// Destroy the filter on the IO thread since that's where its weak pointers
// are being used.
BrowserThread::DeleteOnIOThread::Destruct(this);
}
bool GuestViewMessageFilter::OnMessageReceived(const IPC::Message& message) {
bool handled = true;
IPC_BEGIN_MESSAGE_MAP(GuestViewMessageFilter, message)
IPC_MESSAGE_HANDLER(ExtensionHostMsg_AttachGuest,
OnExtensionAttachGuest)
IPC_MESSAGE_HANDLER(ExtensionHostMsg_CreateMimeHandlerViewGuest,
OnExtensionCreateMimeHandlerViewGuest)
IPC_MESSAGE_UNHANDLED(handled = false)
IPC_END_MESSAGE_MAP()
return handled;
}
void GuestViewMessageFilter::OnExtensionAttachGuest(
int routing_id,
int element_instance_id,
int guest_instance_id,
const base::DictionaryValue& params) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
GuestViewManager* manager =
GuestViewManager::FromBrowserContext(browser_context_);
if (!manager)
return;
manager->AttachGuest(render_process_id_,
routing_id,
element_instance_id,
guest_instance_id,
params);
}
void GuestViewMessageFilter::OnExtensionCreateMimeHandlerViewGuest(
int render_frame_id,
const std::string& view_id,
int element_instance_id,
const gfx::Size& element_size) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
GuestViewManager* manager =
GuestViewManager::FromBrowserContext(browser_context_);
if (!manager)
return;
content::RenderFrameHost* rfh =
content::RenderFrameHost::FromID(render_process_id_, render_frame_id);
content::WebContents* embedder_web_contents =
content::WebContents::FromRenderFrameHost(rfh);
if (!embedder_web_contents)
return;
GuestViewManager::WebContentsCreatedCallback callback =
base::Bind(&GuestViewMessageFilter::MimeHandlerViewGuestCreatedCallback,
this,
element_instance_id,
render_process_id_,
render_frame_id,
element_size);
base::DictionaryValue create_params;
create_params.SetString(mime_handler_view::kViewId, view_id);
create_params.SetInteger(guestview::kElementWidth, element_size.width());
create_params.SetInteger(guestview::kElementHeight, element_size.height());
manager->CreateGuest(MimeHandlerViewGuest::Type,
embedder_web_contents,
create_params,
callback);
}
void GuestViewMessageFilter::MimeHandlerViewGuestCreatedCallback(
int element_instance_id,
int embedder_render_process_id,
int embedder_render_frame_id,
const gfx::Size& element_size,
content::WebContents* web_contents) {
GuestViewManager* manager =
GuestViewManager::FromBrowserContext(browser_context_);
if (!manager)
return;
MimeHandlerViewGuest* guest_view =
MimeHandlerViewGuest::FromWebContents(web_contents);
if (!guest_view)
return;
int guest_instance_id = guest_view->guest_instance_id();
content::RenderFrameHost* rfh = content::RenderFrameHost::FromID(
embedder_render_process_id, embedder_render_frame_id);
if (!rfh)
return;
base::DictionaryValue attach_params;
attach_params.SetInteger(guestview::kElementWidth, element_size.width());
attach_params.SetInteger(guestview::kElementHeight, element_size.height());
manager->AttachGuest(embedder_render_process_id,
rfh->GetRenderViewHost()->GetRoutingID(),
element_instance_id,
guest_instance_id,
attach_params);
rfh->Send(
new ExtensionMsg_CreateMimeHandlerViewGuestACK(element_instance_id));
}
} // namespace extensions
// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef EXTENSIONS_BROWSER_GUEST_VIEW_GUEST_VIEW_MESSAGE_FILTER_H_
#define EXTENSIONS_BROWSER_GUEST_VIEW_GUEST_VIEW_MESSAGE_FILTER_H_
#include <string>
#include "base/macros.h"
#include "base/memory/weak_ptr.h"
#include "content/public/browser/browser_message_filter.h"
namespace base {
class DictionaryValue;
}
namespace content {
class BrowserContext;
class WebContents;
}
namespace gfx {
class Size;
}
namespace extensions {
// This class filters out incoming GuestView-specific IPC messages from the
// renderer process. It is created on the UI thread. Messages may be handled on
// the IO thread or the UI thread.
class GuestViewMessageFilter : public content::BrowserMessageFilter {
public:
GuestViewMessageFilter(int render_process_id,
content::BrowserContext* context);
int render_process_id() { return render_process_id_; }
private:
friend class content::BrowserThread;
friend class base::DeleteHelper<GuestViewMessageFilter>;
~GuestViewMessageFilter() override;
// content::BrowserMessageFilter implementation.
void OverrideThreadForMessage(const IPC::Message& message,
content::BrowserThread::ID* thread) override;
void OnDestruct() const override;
bool OnMessageReceived(const IPC::Message& message) override;
// Message handlers on the UI thread.
void OnExtensionAttachGuest(int routing_id,
int element_instance_id,
int guest_instance_id,
const base::DictionaryValue& attach_params);
void OnExtensionCreateMimeHandlerViewGuest(int render_frame_id,
const std::string& view_id,
int element_instance_id,
const gfx::Size& element_size);
// Runs on UI thread.
void MimeHandlerViewGuestCreatedCallback(int element_instance_id,
int embedder_render_process_id,
int embedder_render_frame_id,
const gfx::Size& element_size,
content::WebContents* web_contents);
const int render_process_id_;
// Should only be accessed on the UI thread.
content::BrowserContext* browser_context_;
// Weak pointers produced by this factory are bound to the IO thread.
base::WeakPtrFactory<GuestViewMessageFilter> weak_ptr_factory_;
DISALLOW_COPY_AND_ASSIGN(GuestViewMessageFilter);
};
} // namespace extensions
#endif // EXTENSIONS_BROWSER_GUEST_VIEW_GUEST_VIEW_MESSAGE_FILTER_H_
...@@ -720,6 +720,8 @@ ...@@ -720,6 +720,8 @@
'browser/guest_view/guest_view_manager_factory.h', 'browser/guest_view/guest_view_manager_factory.h',
'browser/guest_view/guest_view_manager.cc', 'browser/guest_view/guest_view_manager.cc',
'browser/guest_view/guest_view_manager.h', 'browser/guest_view/guest_view_manager.h',
'browser/guest_view/guest_view_message_filter.cc',
'browser/guest_view/guest_view_message_filter.h',
'browser/guest_view/guest_view.h', 'browser/guest_view/guest_view.h',
'browser/guest_view/mime_handler_view/mime_handler_stream_manager.cc', 'browser/guest_view/mime_handler_view/mime_handler_stream_manager.cc',
'browser/guest_view/mime_handler_view/mime_handler_stream_manager.h', 'browser/guest_view/mime_handler_view/mime_handler_stream_manager.h',
......
...@@ -15,6 +15,7 @@ ...@@ -15,6 +15,7 @@
#include "extensions/browser/extension_message_filter.h" #include "extensions/browser/extension_message_filter.h"
#include "extensions/browser/extension_protocols.h" #include "extensions/browser/extension_protocols.h"
#include "extensions/browser/extension_registry.h" #include "extensions/browser/extension_registry.h"
#include "extensions/browser/guest_view/guest_view_message_filter.h"
#include "extensions/browser/info_map.h" #include "extensions/browser/info_map.h"
#include "extensions/browser/process_map.h" #include "extensions/browser/process_map.h"
#include "extensions/common/constants.h" #include "extensions/common/constants.h"
...@@ -80,6 +81,8 @@ void ShellContentBrowserClient::RenderProcessWillLaunch( ...@@ -80,6 +81,8 @@ void ShellContentBrowserClient::RenderProcessWillLaunch(
BrowserContext* browser_context = browser_main_parts_->browser_context(); BrowserContext* browser_context = browser_main_parts_->browser_context();
host->AddFilter( host->AddFilter(
new ExtensionMessageFilter(render_process_id, browser_context)); new ExtensionMessageFilter(render_process_id, browser_context));
host->AddFilter(
new GuestViewMessageFilter(render_process_id, browser_context));
// PluginInfoMessageFilter is not required because app_shell does not have // PluginInfoMessageFilter is not required because app_shell does not have
// the concept of disabled plugins. // the concept of disabled plugins.
#if !defined(DISABLE_NACL) #if !defined(DISABLE_NACL)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment