Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(58)

Side by Side Diff: extensions/browser/guest_view/guest_view_message_filter.cc

Issue 972313002: Make <webview> use out-of-process iframe architecture. (Closed) Base URL: ssh://saopaulo.wat/mnt/dev/shared/src@testoopif2z-better-chrome
Patch Set: Revert unused changes from previous attempt + more cleanup. Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "extensions/browser/guest_view/guest_view_message_filter.h" 5 #include "extensions/browser/guest_view/guest_view_message_filter.h"
6 6
7 #include "content/public/browser/browser_thread.h" 7 #include "content/public/browser/browser_thread.h"
8 #include "content/public/browser/render_frame_host.h" 8 #include "content/public/browser/render_frame_host.h"
9 #include "content/public/browser/render_view_host.h" 9 #include "content/public/browser/render_view_host.h"
10 #include "extensions/browser/guest_view/guest_view_base.h" 10 #include "extensions/browser/guest_view/guest_view_base.h"
11 #include "extensions/browser/guest_view/guest_view_manager.h" 11 #include "extensions/browser/guest_view/guest_view_manager.h"
12 #include "extensions/browser/guest_view/mime_handler_view/mime_handler_view_cons tants.h" 12 #include "extensions/browser/guest_view/mime_handler_view/mime_handler_view_cons tants.h"
13 #include "extensions/browser/guest_view/mime_handler_view/mime_handler_view_gues t.h" 13 #include "extensions/browser/guest_view/mime_handler_view/mime_handler_view_gues t.h"
14 #include "extensions/browser/guest_view/web_view/web_view_guest.h"
14 #include "extensions/common/guest_view/guest_view_messages.h" 15 #include "extensions/common/guest_view/guest_view_messages.h"
15 #include "ipc/ipc_message_macros.h" 16 #include "ipc/ipc_message_macros.h"
16 17
17 using content::BrowserContext; 18 using content::BrowserContext;
18 using content::BrowserThread; 19 using content::BrowserThread;
19 using content::RenderFrameHost; 20 using content::RenderFrameHost;
20 using content::WebContents; 21 using content::WebContents;
21 22
22 namespace extensions { 23 namespace extensions {
23 24
24 GuestViewMessageFilter::GuestViewMessageFilter(int render_process_id, 25 GuestViewMessageFilter::GuestViewMessageFilter(int render_process_id,
25 BrowserContext* context) 26 BrowserContext* context)
26 : BrowserMessageFilter(GuestViewMsgStart), 27 : BrowserMessageFilter(GuestViewMsgStart),
27 render_process_id_(render_process_id), 28 render_process_id_(render_process_id),
28 browser_context_(context), 29 browser_context_(context),
29 weak_ptr_factory_(this) { 30 weak_ptr_factory_(this) {
30 DCHECK_CURRENTLY_ON(BrowserThread::UI); 31 DCHECK_CURRENTLY_ON(BrowserThread::UI);
31 } 32 }
32 33
33 GuestViewMessageFilter::~GuestViewMessageFilter() { 34 GuestViewMessageFilter::~GuestViewMessageFilter() {
34 DCHECK_CURRENTLY_ON(BrowserThread::IO); 35 DCHECK_CURRENTLY_ON(BrowserThread::IO);
35 } 36 }
36 37
37 void GuestViewMessageFilter::OverrideThreadForMessage( 38 void GuestViewMessageFilter::OverrideThreadForMessage(
38 const IPC::Message& message, 39 const IPC::Message& message,
39 BrowserThread::ID* thread) { 40 BrowserThread::ID* thread) {
40 switch (message.type()) { 41 switch (message.type()) {
41 case GuestViewHostMsg_AttachGuest::ID: 42 case GuestViewHostMsg_AttachGuest::ID:
42 case GuestViewHostMsg_CreateMimeHandlerViewGuest::ID: 43 case GuestViewHostMsg_CreateMimeHandlerViewGuest::ID:
44 case GuestViewHostMsg_AttachLocalFrameToGuest::ID:
43 *thread = BrowserThread::UI; 45 *thread = BrowserThread::UI;
44 break; 46 break;
45 default: 47 default:
46 break; 48 break;
47 } 49 }
48 } 50 }
49 51
50 void GuestViewMessageFilter::OnDestruct() const { 52 void GuestViewMessageFilter::OnDestruct() const {
51 // Destroy the filter on the IO thread since that's where its weak pointers 53 // Destroy the filter on the IO thread since that's where its weak pointers
52 // are being used. 54 // are being used.
53 BrowserThread::DeleteOnIOThread::Destruct(this); 55 BrowserThread::DeleteOnIOThread::Destruct(this);
54 } 56 }
55 57
56 bool GuestViewMessageFilter::OnMessageReceived(const IPC::Message& message) { 58 bool GuestViewMessageFilter::OnMessageReceived(const IPC::Message& message) {
57 bool handled = true; 59 bool handled = true;
58 IPC_BEGIN_MESSAGE_MAP(GuestViewMessageFilter, message) 60 IPC_BEGIN_MESSAGE_MAP(GuestViewMessageFilter, message)
59 IPC_MESSAGE_HANDLER(GuestViewHostMsg_AttachGuest, OnAttachGuest) 61 IPC_MESSAGE_HANDLER(GuestViewHostMsg_AttachGuest, OnAttachGuest)
60 IPC_MESSAGE_HANDLER(GuestViewHostMsg_CreateMimeHandlerViewGuest, 62 IPC_MESSAGE_HANDLER(GuestViewHostMsg_CreateMimeHandlerViewGuest,
61 OnCreateMimeHandlerViewGuest) 63 OnCreateMimeHandlerViewGuest)
64 IPC_MESSAGE_HANDLER(GuestViewHostMsg_AttachLocalFrameToGuest,
65 OnAttachLocalFrameToGuest)
62 IPC_MESSAGE_UNHANDLED(handled = false) 66 IPC_MESSAGE_UNHANDLED(handled = false)
63 IPC_END_MESSAGE_MAP() 67 IPC_END_MESSAGE_MAP()
64 return handled; 68 return handled;
65 } 69 }
66 70
67 void GuestViewMessageFilter::OnAttachGuest( 71 void GuestViewMessageFilter::OnAttachGuest(
68 int element_instance_id, 72 int element_instance_id,
69 int guest_instance_id, 73 int guest_instance_id,
70 const base::DictionaryValue& params) { 74 const base::DictionaryValue& params) {
71 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 75 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
105 base::DictionaryValue create_params; 109 base::DictionaryValue create_params;
106 create_params.SetString(mime_handler_view::kViewId, view_id); 110 create_params.SetString(mime_handler_view::kViewId, view_id);
107 create_params.SetInteger(guestview::kElementWidth, element_size.width()); 111 create_params.SetInteger(guestview::kElementWidth, element_size.width());
108 create_params.SetInteger(guestview::kElementHeight, element_size.height()); 112 create_params.SetInteger(guestview::kElementHeight, element_size.height());
109 manager->CreateGuest(MimeHandlerViewGuest::Type, 113 manager->CreateGuest(MimeHandlerViewGuest::Type,
110 embedder_web_contents, 114 embedder_web_contents,
111 create_params, 115 create_params,
112 callback); 116 callback);
113 } 117 }
114 118
119 void GuestViewMessageFilter::OnAttachLocalFrameToGuest(
120 int embedder_local_render_frame_id,
121 int element_instance_id,
122 int guest_instance_id) {
123 auto guest_manager = GuestViewManager::FromBrowserContext(browser_context_);
124 DCHECK(guest_manager);
125 content::WebContents* guest_web_contents =
126 guest_manager->GetGuestByInstanceIDHack(guest_instance_id);
Fady Samuel 2015/03/04 20:44:47 Why are you exposing this? This is a security issu
lazyboy 2015/04/01 21:47:58 This is temporary and will be fixed.
127 DCHECK(guest_web_contents);
128 auto guest = WebViewGuest::FromWebContents(guest_web_contents);
129 DCHECK(guest);
130 content::WebContents* owner_web_contents = guest->owner_web_contents();
131 DCHECK(owner_web_contents);
132 int render_view_proxy_routing_id =
133 guest_web_contents->AttachLocalFrameToGuest(
134 owner_web_contents,
135 embedder_local_render_frame_id,
136 guest_instance_id);
137
138 owner_web_contents->GetMainFrame()->Send(
139 new GuestViewMsg_ContentWindowReady(
140 element_instance_id,
141 render_view_proxy_routing_id));
142 }
143
115 void GuestViewMessageFilter::MimeHandlerViewGuestCreatedCallback( 144 void GuestViewMessageFilter::MimeHandlerViewGuestCreatedCallback(
116 int element_instance_id, 145 int element_instance_id,
117 int embedder_render_process_id, 146 int embedder_render_process_id,
118 int embedder_render_frame_id, 147 int embedder_render_frame_id,
119 const gfx::Size& element_size, 148 const gfx::Size& element_size,
120 WebContents* web_contents) { 149 WebContents* web_contents) {
121 auto manager = GuestViewManager::FromBrowserContext(browser_context_); 150 auto manager = GuestViewManager::FromBrowserContext(browser_context_);
122 if (!manager) 151 if (!manager)
123 return; 152 return;
124 153
(...skipping 13 matching lines...) Expand all
138 manager->AttachGuest(embedder_render_process_id, 167 manager->AttachGuest(embedder_render_process_id,
139 element_instance_id, 168 element_instance_id,
140 guest_instance_id, 169 guest_instance_id,
141 attach_params); 170 attach_params);
142 171
143 rfh->Send( 172 rfh->Send(
144 new GuestViewMsg_CreateMimeHandlerViewGuestACK(element_instance_id)); 173 new GuestViewMsg_CreateMimeHandlerViewGuestACK(element_instance_id));
145 } 174 }
146 175
147 } // namespace extensions 176 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698