OLD | NEW |
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 Loading... |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |