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