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

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

Issue 376033002: Adding MimeHandlerView. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@pending-zork-patch2
Patch Set: add switch to control feature, remove a DCHECK from extension_message_filter Created 6 years, 3 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_process_host.h" 10 #include "content/public/browser/render_process_host.h"
11 #include "content/public/browser/render_view_host.h"
10 #include "content/public/browser/resource_dispatcher_host.h" 12 #include "content/public/browser/resource_dispatcher_host.h"
11 #include "extensions/browser/blob_holder.h" 13 #include "extensions/browser/blob_holder.h"
12 #include "extensions/browser/event_router.h" 14 #include "extensions/browser/event_router.h"
13 #include "extensions/browser/extension_function_dispatcher.h" 15 #include "extensions/browser/extension_function_dispatcher.h"
14 #include "extensions/browser/extension_system.h" 16 #include "extensions/browser/extension_system.h"
17 #include "extensions/browser/guest_view/guest_view_base.h"
15 #include "extensions/browser/guest_view/guest_view_manager.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"
16 #include "extensions/browser/info_map.h" 21 #include "extensions/browser/info_map.h"
17 #include "extensions/browser/process_manager.h" 22 #include "extensions/browser/process_manager.h"
18 #include "extensions/common/extension.h" 23 #include "extensions/common/extension.h"
19 #include "extensions/common/extension_messages.h" 24 #include "extensions/common/extension_messages.h"
20 #include "ipc/ipc_message_macros.h" 25 #include "ipc/ipc_message_macros.h"
21 26
22 using content::BrowserThread; 27 using content::BrowserThread;
23 using content::RenderProcessHost; 28 using content::RenderProcessHost;
24 29
25 namespace extensions { 30 namespace extensions {
(...skipping 13 matching lines...) Expand all
39 } 44 }
40 45
41 void ExtensionMessageFilter::OverrideThreadForMessage( 46 void ExtensionMessageFilter::OverrideThreadForMessage(
42 const IPC::Message& message, 47 const IPC::Message& message,
43 BrowserThread::ID* thread) { 48 BrowserThread::ID* thread) {
44 switch (message.type()) { 49 switch (message.type()) {
45 case ExtensionHostMsg_AddListener::ID: 50 case ExtensionHostMsg_AddListener::ID:
46 case ExtensionHostMsg_AttachGuest::ID: 51 case ExtensionHostMsg_AttachGuest::ID:
47 case ExtensionHostMsg_RemoveListener::ID: 52 case ExtensionHostMsg_RemoveListener::ID:
48 case ExtensionHostMsg_AddLazyListener::ID: 53 case ExtensionHostMsg_AddLazyListener::ID:
54 case ExtensionHostMsg_CreateMimeHandlerViewGuest::ID:
49 case ExtensionHostMsg_RemoveLazyListener::ID: 55 case ExtensionHostMsg_RemoveLazyListener::ID:
50 case ExtensionHostMsg_AddFilteredListener::ID: 56 case ExtensionHostMsg_AddFilteredListener::ID:
51 case ExtensionHostMsg_RemoveFilteredListener::ID: 57 case ExtensionHostMsg_RemoveFilteredListener::ID:
52 case ExtensionHostMsg_ShouldSuspendAck::ID: 58 case ExtensionHostMsg_ShouldSuspendAck::ID:
53 case ExtensionHostMsg_SuspendAck::ID: 59 case ExtensionHostMsg_SuspendAck::ID:
54 case ExtensionHostMsg_TransferBlobsAck::ID: 60 case ExtensionHostMsg_TransferBlobsAck::ID:
55 *thread = BrowserThread::UI; 61 *thread = BrowserThread::UI;
56 break; 62 break;
57 default: 63 default:
58 break; 64 break;
(...skipping 10 matching lines...) Expand all
69 bool handled = true; 75 bool handled = true;
70 IPC_BEGIN_MESSAGE_MAP(ExtensionMessageFilter, message) 76 IPC_BEGIN_MESSAGE_MAP(ExtensionMessageFilter, message)
71 IPC_MESSAGE_HANDLER(ExtensionHostMsg_AddListener, 77 IPC_MESSAGE_HANDLER(ExtensionHostMsg_AddListener,
72 OnExtensionAddListener) 78 OnExtensionAddListener)
73 IPC_MESSAGE_HANDLER(ExtensionHostMsg_RemoveListener, 79 IPC_MESSAGE_HANDLER(ExtensionHostMsg_RemoveListener,
74 OnExtensionRemoveListener) 80 OnExtensionRemoveListener)
75 IPC_MESSAGE_HANDLER(ExtensionHostMsg_AddLazyListener, 81 IPC_MESSAGE_HANDLER(ExtensionHostMsg_AddLazyListener,
76 OnExtensionAddLazyListener) 82 OnExtensionAddLazyListener)
77 IPC_MESSAGE_HANDLER(ExtensionHostMsg_AttachGuest, 83 IPC_MESSAGE_HANDLER(ExtensionHostMsg_AttachGuest,
78 OnExtensionAttachGuest) 84 OnExtensionAttachGuest)
85 IPC_MESSAGE_HANDLER(ExtensionHostMsg_CreateMimeHandlerViewGuest,
86 OnExtensionCreateMimeHandlerViewGuest)
79 IPC_MESSAGE_HANDLER(ExtensionHostMsg_RemoveLazyListener, 87 IPC_MESSAGE_HANDLER(ExtensionHostMsg_RemoveLazyListener,
80 OnExtensionRemoveLazyListener) 88 OnExtensionRemoveLazyListener)
81 IPC_MESSAGE_HANDLER(ExtensionHostMsg_AddFilteredListener, 89 IPC_MESSAGE_HANDLER(ExtensionHostMsg_AddFilteredListener,
82 OnExtensionAddFilteredListener) 90 OnExtensionAddFilteredListener)
83 IPC_MESSAGE_HANDLER(ExtensionHostMsg_RemoveFilteredListener, 91 IPC_MESSAGE_HANDLER(ExtensionHostMsg_RemoveFilteredListener,
84 OnExtensionRemoveFilteredListener) 92 OnExtensionRemoveFilteredListener)
85 IPC_MESSAGE_HANDLER(ExtensionHostMsg_ShouldSuspendAck, 93 IPC_MESSAGE_HANDLER(ExtensionHostMsg_ShouldSuspendAck,
86 OnExtensionShouldSuspendAck) 94 OnExtensionShouldSuspendAck)
87 IPC_MESSAGE_HANDLER(ExtensionHostMsg_SuspendAck, 95 IPC_MESSAGE_HANDLER(ExtensionHostMsg_SuspendAck,
88 OnExtensionSuspendAck) 96 OnExtensionSuspendAck)
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
160 if (!manager) 168 if (!manager)
161 return; 169 return;
162 170
163 manager->AttachGuest(render_process_id_, 171 manager->AttachGuest(render_process_id_,
164 routing_id, 172 routing_id,
165 element_instance_id, 173 element_instance_id,
166 guest_instance_id, 174 guest_instance_id,
167 params); 175 params);
168 } 176 }
169 177
178 void ExtensionMessageFilter::OnExtensionCreateMimeHandlerViewGuest(
179 int render_frame_id,
180 const std::string& src,
181 const std::string& mime_type,
182 int element_instance_id) {
183 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
184 extensions::GuestViewManager* manager =
185 extensions::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 src);
203 base::DictionaryValue create_params;
204 create_params.SetString(mimehandlerview::kMimeType, mime_type);
205 manager->CreateGuest(MimeHandlerViewGuest::Type,
206 "",
207 embedder_web_contents,
208 create_params,
209 callback);
210 }
211
170 void ExtensionMessageFilter::OnExtensionRemoveLazyListener( 212 void ExtensionMessageFilter::OnExtensionRemoveLazyListener(
171 const std::string& extension_id, const std::string& event_name) { 213 const std::string& extension_id, const std::string& event_name) {
172 EventRouter* router = EventRouter::Get(browser_context_); 214 EventRouter* router = EventRouter::Get(browser_context_);
173 if (!router) 215 if (!router)
174 return; 216 return;
175 router->RemoveLazyEventListener(event_name, extension_id); 217 router->RemoveLazyEventListener(event_name, extension_id);
176 } 218 }
177 219
178 void ExtensionMessageFilter::OnExtensionAddFilteredListener( 220 void ExtensionMessageFilter::OnExtensionAddFilteredListener(
179 const std::string& extension_id, 221 const std::string& extension_id,
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
245 DCHECK_CURRENTLY_ON(BrowserThread::IO); 287 DCHECK_CURRENTLY_ON(BrowserThread::IO);
246 ExtensionFunctionDispatcher::DispatchOnIOThread( 288 ExtensionFunctionDispatcher::DispatchOnIOThread(
247 extension_info_map_.get(), 289 extension_info_map_.get(),
248 browser_context_, 290 browser_context_,
249 render_process_id_, 291 render_process_id_,
250 weak_ptr_factory_.GetWeakPtr(), 292 weak_ptr_factory_.GetWeakPtr(),
251 routing_id, 293 routing_id,
252 params); 294 params);
253 } 295 }
254 296
297 void ExtensionMessageFilter::MimeHandlerViewGuestCreatedCallback(
298 int element_instance_id,
299 int embedder_render_process_id,
300 int embedder_render_frame_id,
301 const std::string& src,
302 content::WebContents* web_contents) {
303 extensions::GuestViewManager* manager =
304 extensions::GuestViewManager::FromBrowserContext(browser_context_);
305 if (!manager)
306 return;
307
308 extensions::GuestViewBase* guest_view =
309 extensions::GuestViewBase::FromWebContents(web_contents);
Fady Samuel 2014/09/04 17:31:07 Be more specific: MimeHandlerViewGuest::FromWebCon
lazyboy 2014/09/04 18:59:33 Thanks. Done.
310 if (!guest_view)
311 return;
312 int guest_instance_id = guest_view->guest_instance_id();
313
314 content::RenderFrameHost* rfh = content::RenderFrameHost::FromID(
315 embedder_render_process_id, embedder_render_frame_id);
316 if (!rfh)
317 return;
318
319 base::DictionaryValue attach_params;
320 attach_params.SetString(mimehandlerview::kSrc, src);
321 manager->AttachGuest(embedder_render_process_id,
322 rfh->GetRenderViewHost()->GetRoutingID(),
323 element_instance_id,
324 guest_instance_id,
325 attach_params);
326
327 IPC::Message* msg =
328 new ExtensionMsg_CreateMimeHandlerViewGuestACK(element_instance_id);
329 msg->set_routing_id(rfh->GetRoutingID());
330 rfh->Send(msg);
331 }
332
255 } // namespace extensions 333 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698