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

Side by Side Diff: extensions/browser/extension_message_filter.cc

Issue 880123002: Move GuestView IPCs out of ExtensionMessageFilter to GuestViewMessageFilter (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fixed AppShell Created 5 years, 10 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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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/extension_message_filter.h" 5 #include "extensions/browser/extension_message_filter.h"
6 6
7 #include "components/crx_file/id_util.h" 7 #include "components/crx_file/id_util.h"
8 #include "content/public/browser/browser_thread.h" 8 #include "content/public/browser/browser_thread.h"
9 #include "content/public/browser/render_frame_host.h" 9 #include "content/public/browser/render_frame_host.h"
10 #include "content/public/browser/render_process_host.h" 10 #include "content/public/browser/render_process_host.h"
11 #include "content/public/browser/render_view_host.h" 11 #include "content/public/browser/render_view_host.h"
12 #include "content/public/browser/resource_dispatcher_host.h" 12 #include "content/public/browser/resource_dispatcher_host.h"
13 #include "extensions/browser/blob_holder.h" 13 #include "extensions/browser/blob_holder.h"
14 #include "extensions/browser/event_router.h" 14 #include "extensions/browser/event_router.h"
15 #include "extensions/browser/extension_function_dispatcher.h" 15 #include "extensions/browser/extension_function_dispatcher.h"
16 #include "extensions/browser/extension_system.h" 16 #include "extensions/browser/extension_system.h"
17 #include "extensions/browser/guest_view/guest_view_base.h"
18 #include "extensions/browser/guest_view/guest_view_manager.h"
19 #include "extensions/browser/guest_view/mime_handler_view/mime_handler_view_cons tants.h"
20 #include "extensions/browser/guest_view/mime_handler_view/mime_handler_view_gues t.h"
21 #include "extensions/browser/info_map.h" 17 #include "extensions/browser/info_map.h"
22 #include "extensions/browser/process_manager.h" 18 #include "extensions/browser/process_manager.h"
23 #include "extensions/common/extension.h" 19 #include "extensions/common/extension.h"
24 #include "extensions/common/extension_messages.h" 20 #include "extensions/common/extension_messages.h"
25 #include "ipc/ipc_message_macros.h" 21 #include "ipc/ipc_message_macros.h"
26 22
27 using content::BrowserThread; 23 using content::BrowserThread;
28 using content::RenderProcessHost; 24 using content::RenderProcessHost;
29 25
30 namespace extensions { 26 namespace extensions {
(...skipping 10 matching lines...) Expand all
41 37
42 ExtensionMessageFilter::~ExtensionMessageFilter() { 38 ExtensionMessageFilter::~ExtensionMessageFilter() {
43 DCHECK_CURRENTLY_ON(BrowserThread::IO); 39 DCHECK_CURRENTLY_ON(BrowserThread::IO);
44 } 40 }
45 41
46 void ExtensionMessageFilter::OverrideThreadForMessage( 42 void ExtensionMessageFilter::OverrideThreadForMessage(
47 const IPC::Message& message, 43 const IPC::Message& message,
48 BrowserThread::ID* thread) { 44 BrowserThread::ID* thread) {
49 switch (message.type()) { 45 switch (message.type()) {
50 case ExtensionHostMsg_AddListener::ID: 46 case ExtensionHostMsg_AddListener::ID:
51 case ExtensionHostMsg_AttachGuest::ID:
52 case ExtensionHostMsg_RemoveListener::ID: 47 case ExtensionHostMsg_RemoveListener::ID:
53 case ExtensionHostMsg_AddLazyListener::ID: 48 case ExtensionHostMsg_AddLazyListener::ID:
54 case ExtensionHostMsg_CreateMimeHandlerViewGuest::ID:
55 case ExtensionHostMsg_RemoveLazyListener::ID: 49 case ExtensionHostMsg_RemoveLazyListener::ID:
56 case ExtensionHostMsg_AddFilteredListener::ID: 50 case ExtensionHostMsg_AddFilteredListener::ID:
57 case ExtensionHostMsg_RemoveFilteredListener::ID: 51 case ExtensionHostMsg_RemoveFilteredListener::ID:
58 case ExtensionHostMsg_ShouldSuspendAck::ID: 52 case ExtensionHostMsg_ShouldSuspendAck::ID:
59 case ExtensionHostMsg_SuspendAck::ID: 53 case ExtensionHostMsg_SuspendAck::ID:
60 case ExtensionHostMsg_TransferBlobsAck::ID: 54 case ExtensionHostMsg_TransferBlobsAck::ID:
61 *thread = BrowserThread::UI; 55 *thread = BrowserThread::UI;
62 break; 56 break;
63 default: 57 default:
64 break; 58 break;
65 } 59 }
66 } 60 }
67 61
68 void ExtensionMessageFilter::OnDestruct() const { 62 void ExtensionMessageFilter::OnDestruct() const {
69 // Destroy the filter on the IO thread since that's where its weak pointers 63 // Destroy the filter on the IO thread since that's where its weak pointers
70 // are being used. 64 // are being used.
71 BrowserThread::DeleteOnIOThread::Destruct(this); 65 BrowserThread::DeleteOnIOThread::Destruct(this);
72 } 66 }
73 67
74 bool ExtensionMessageFilter::OnMessageReceived(const IPC::Message& message) { 68 bool ExtensionMessageFilter::OnMessageReceived(const IPC::Message& message) {
75 bool handled = true; 69 bool handled = true;
76 IPC_BEGIN_MESSAGE_MAP(ExtensionMessageFilter, message) 70 IPC_BEGIN_MESSAGE_MAP(ExtensionMessageFilter, message)
77 IPC_MESSAGE_HANDLER(ExtensionHostMsg_AddListener, 71 IPC_MESSAGE_HANDLER(ExtensionHostMsg_AddListener,
78 OnExtensionAddListener) 72 OnExtensionAddListener)
79 IPC_MESSAGE_HANDLER(ExtensionHostMsg_RemoveListener, 73 IPC_MESSAGE_HANDLER(ExtensionHostMsg_RemoveListener,
80 OnExtensionRemoveListener) 74 OnExtensionRemoveListener)
81 IPC_MESSAGE_HANDLER(ExtensionHostMsg_AddLazyListener, 75 IPC_MESSAGE_HANDLER(ExtensionHostMsg_AddLazyListener,
82 OnExtensionAddLazyListener) 76 OnExtensionAddLazyListener)
83 IPC_MESSAGE_HANDLER(ExtensionHostMsg_AttachGuest,
84 OnExtensionAttachGuest)
85 IPC_MESSAGE_HANDLER(ExtensionHostMsg_CreateMimeHandlerViewGuest,
86 OnExtensionCreateMimeHandlerViewGuest)
87 IPC_MESSAGE_HANDLER(ExtensionHostMsg_RemoveLazyListener, 77 IPC_MESSAGE_HANDLER(ExtensionHostMsg_RemoveLazyListener,
88 OnExtensionRemoveLazyListener) 78 OnExtensionRemoveLazyListener)
89 IPC_MESSAGE_HANDLER(ExtensionHostMsg_AddFilteredListener, 79 IPC_MESSAGE_HANDLER(ExtensionHostMsg_AddFilteredListener,
90 OnExtensionAddFilteredListener) 80 OnExtensionAddFilteredListener)
91 IPC_MESSAGE_HANDLER(ExtensionHostMsg_RemoveFilteredListener, 81 IPC_MESSAGE_HANDLER(ExtensionHostMsg_RemoveFilteredListener,
92 OnExtensionRemoveFilteredListener) 82 OnExtensionRemoveFilteredListener)
93 IPC_MESSAGE_HANDLER(ExtensionHostMsg_ShouldSuspendAck, 83 IPC_MESSAGE_HANDLER(ExtensionHostMsg_ShouldSuspendAck,
94 OnExtensionShouldSuspendAck) 84 OnExtensionShouldSuspendAck)
95 IPC_MESSAGE_HANDLER(ExtensionHostMsg_SuspendAck, 85 IPC_MESSAGE_HANDLER(ExtensionHostMsg_SuspendAck,
96 OnExtensionSuspendAck) 86 OnExtensionSuspendAck)
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
150 } 140 }
151 141
152 void ExtensionMessageFilter::OnExtensionAddLazyListener( 142 void ExtensionMessageFilter::OnExtensionAddLazyListener(
153 const std::string& extension_id, const std::string& event_name) { 143 const std::string& extension_id, const std::string& event_name) {
154 EventRouter* router = EventRouter::Get(browser_context_); 144 EventRouter* router = EventRouter::Get(browser_context_);
155 if (!router) 145 if (!router)
156 return; 146 return;
157 router->AddLazyEventListener(event_name, extension_id); 147 router->AddLazyEventListener(event_name, extension_id);
158 } 148 }
159 149
160 void ExtensionMessageFilter::OnExtensionAttachGuest(
161 int routing_id,
162 int element_instance_id,
163 int guest_instance_id,
164 const base::DictionaryValue& params) {
165 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
166 GuestViewManager* manager =
167 GuestViewManager::FromBrowserContext(browser_context_);
168 if (!manager)
169 return;
170
171 manager->AttachGuest(render_process_id_,
172 routing_id,
173 element_instance_id,
174 guest_instance_id,
175 params);
176 }
177
178 void ExtensionMessageFilter::OnExtensionCreateMimeHandlerViewGuest(
179 int render_frame_id,
180 const std::string& view_id,
181 int element_instance_id,
182 const gfx::Size& element_size) {
183 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
184 GuestViewManager* manager =
185 GuestViewManager::FromBrowserContext(browser_context_);
186 if (!manager)
187 return;
188
189 content::RenderFrameHost* rfh =
190 content::RenderFrameHost::FromID(render_process_id_, render_frame_id);
191 content::WebContents* embedder_web_contents =
192 content::WebContents::FromRenderFrameHost(rfh);
193 if (!embedder_web_contents)
194 return;
195
196 GuestViewManager::WebContentsCreatedCallback callback =
197 base::Bind(&ExtensionMessageFilter::MimeHandlerViewGuestCreatedCallback,
198 this,
199 element_instance_id,
200 render_process_id_,
201 render_frame_id,
202 element_size);
203
204 base::DictionaryValue create_params;
205 create_params.SetString(mime_handler_view::kViewId, view_id);
206 create_params.SetInteger(guestview::kElementWidth, element_size.width());
207 create_params.SetInteger(guestview::kElementHeight, element_size.height());
208 manager->CreateGuest(MimeHandlerViewGuest::Type,
209 embedder_web_contents,
210 create_params,
211 callback);
212 }
213
214 void ExtensionMessageFilter::OnExtensionRemoveLazyListener( 150 void ExtensionMessageFilter::OnExtensionRemoveLazyListener(
215 const std::string& extension_id, const std::string& event_name) { 151 const std::string& extension_id, const std::string& event_name) {
216 EventRouter* router = EventRouter::Get(browser_context_); 152 EventRouter* router = EventRouter::Get(browser_context_);
217 if (!router) 153 if (!router)
218 return; 154 return;
219 router->RemoveLazyEventListener(event_name, extension_id); 155 router->RemoveLazyEventListener(event_name, extension_id);
220 } 156 }
221 157
222 void ExtensionMessageFilter::OnExtensionAddFilteredListener( 158 void ExtensionMessageFilter::OnExtensionAddFilteredListener(
223 const std::string& extension_id, 159 const std::string& extension_id,
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
284 DCHECK_CURRENTLY_ON(BrowserThread::IO); 220 DCHECK_CURRENTLY_ON(BrowserThread::IO);
285 ExtensionFunctionDispatcher::DispatchOnIOThread( 221 ExtensionFunctionDispatcher::DispatchOnIOThread(
286 extension_info_map_.get(), 222 extension_info_map_.get(),
287 browser_context_, 223 browser_context_,
288 render_process_id_, 224 render_process_id_,
289 weak_ptr_factory_.GetWeakPtr(), 225 weak_ptr_factory_.GetWeakPtr(),
290 routing_id, 226 routing_id,
291 params); 227 params);
292 } 228 }
293 229
294 void ExtensionMessageFilter::MimeHandlerViewGuestCreatedCallback(
295 int element_instance_id,
296 int embedder_render_process_id,
297 int embedder_render_frame_id,
298 const gfx::Size& element_size,
299 content::WebContents* web_contents) {
300 GuestViewManager* manager =
301 GuestViewManager::FromBrowserContext(browser_context_);
302 if (!manager)
303 return;
304
305 MimeHandlerViewGuest* guest_view =
306 MimeHandlerViewGuest::FromWebContents(web_contents);
307 if (!guest_view)
308 return;
309 int guest_instance_id = guest_view->guest_instance_id();
310
311 content::RenderFrameHost* rfh = content::RenderFrameHost::FromID(
312 embedder_render_process_id, embedder_render_frame_id);
313 if (!rfh)
314 return;
315
316 base::DictionaryValue attach_params;
317 attach_params.SetInteger(guestview::kElementWidth, element_size.width());
318 attach_params.SetInteger(guestview::kElementHeight, element_size.height());
319 manager->AttachGuest(embedder_render_process_id,
320 rfh->GetRenderViewHost()->GetRoutingID(),
321 element_instance_id,
322 guest_instance_id,
323 attach_params);
324
325 rfh->Send(
326 new ExtensionMsg_CreateMimeHandlerViewGuestACK(element_instance_id));
327 }
328
329 } // namespace extensions 230 } // namespace extensions
OLDNEW
« no previous file with comments | « extensions/browser/extension_message_filter.h ('k') | extensions/browser/guest_view/guest_view_message_filter.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698