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/extensions_guest_view_message_filter.h" | 5 #include "extensions/browser/guest_view/extensions_guest_view_message_filter.h" |
6 | 6 |
7 #include "components/guest_view/browser/guest_view_base.h" | 7 #include "components/guest_view/browser/guest_view_base.h" |
8 #include "components/guest_view/browser/guest_view_manager.h" | 8 #include "components/guest_view/browser/guest_view_manager.h" |
9 #include "content/public/browser/browser_thread.h" | 9 #include "content/public/browser/browser_thread.h" |
10 #include "content/public/browser/render_frame_host.h" | 10 #include "content/public/browser/render_frame_host.h" |
(...skipping 30 matching lines...) Expand all Loading... | |
41 context) {} | 41 context) {} |
42 | 42 |
43 ExtensionsGuestViewMessageFilter::~ExtensionsGuestViewMessageFilter() { | 43 ExtensionsGuestViewMessageFilter::~ExtensionsGuestViewMessageFilter() { |
44 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 44 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
45 } | 45 } |
46 | 46 |
47 void ExtensionsGuestViewMessageFilter::OverrideThreadForMessage( | 47 void ExtensionsGuestViewMessageFilter::OverrideThreadForMessage( |
48 const IPC::Message& message, | 48 const IPC::Message& message, |
49 BrowserThread::ID* thread) { | 49 BrowserThread::ID* thread) { |
50 switch (message.type()) { | 50 switch (message.type()) { |
51 case ExtensionsGuestViewHostMsg_AttachToEmbedderFrame::ID: | |
51 case ExtensionsGuestViewHostMsg_CreateMimeHandlerViewGuest::ID: | 52 case ExtensionsGuestViewHostMsg_CreateMimeHandlerViewGuest::ID: |
52 case ExtensionsGuestViewHostMsg_ResizeGuest::ID: | 53 case ExtensionsGuestViewHostMsg_ResizeGuest::ID: |
53 *thread = BrowserThread::UI; | 54 *thread = BrowserThread::UI; |
54 break; | 55 break; |
55 default: | 56 default: |
56 GuestViewMessageFilter::OverrideThreadForMessage(message, thread); | 57 GuestViewMessageFilter::OverrideThreadForMessage(message, thread); |
57 } | 58 } |
58 } | 59 } |
59 | 60 |
60 bool ExtensionsGuestViewMessageFilter::OnMessageReceived( | 61 bool ExtensionsGuestViewMessageFilter::OnMessageReceived( |
61 const IPC::Message& message) { | 62 const IPC::Message& message) { |
62 bool handled = true; | 63 bool handled = true; |
63 IPC_BEGIN_MESSAGE_MAP(ExtensionsGuestViewMessageFilter, message) | 64 IPC_BEGIN_MESSAGE_MAP(ExtensionsGuestViewMessageFilter, message) |
65 IPC_MESSAGE_HANDLER(ExtensionsGuestViewHostMsg_AttachToEmbedderFrame, | |
66 OnAttachToEmbedderFrame) | |
64 IPC_MESSAGE_HANDLER(ExtensionsGuestViewHostMsg_CanExecuteContentScriptSync, | 67 IPC_MESSAGE_HANDLER(ExtensionsGuestViewHostMsg_CanExecuteContentScriptSync, |
65 OnCanExecuteContentScript) | 68 OnCanExecuteContentScript) |
66 IPC_MESSAGE_HANDLER(ExtensionsGuestViewHostMsg_CreateMimeHandlerViewGuest, | 69 IPC_MESSAGE_HANDLER(ExtensionsGuestViewHostMsg_CreateMimeHandlerViewGuest, |
67 OnCreateMimeHandlerViewGuest) | 70 OnCreateMimeHandlerViewGuest) |
68 IPC_MESSAGE_HANDLER(ExtensionsGuestViewHostMsg_ResizeGuest, OnResizeGuest) | 71 IPC_MESSAGE_HANDLER(ExtensionsGuestViewHostMsg_ResizeGuest, OnResizeGuest) |
69 IPC_MESSAGE_UNHANDLED( | 72 IPC_MESSAGE_UNHANDLED( |
70 handled = GuestViewMessageFilter::OnMessageReceived(message)) | 73 handled = GuestViewMessageFilter::OnMessageReceived(message)) |
71 IPC_END_MESSAGE_MAP() | 74 IPC_END_MESSAGE_MAP() |
72 return handled; | 75 return handled; |
73 } | 76 } |
74 | 77 |
75 GuestViewManager* ExtensionsGuestViewMessageFilter:: | 78 GuestViewManager* ExtensionsGuestViewMessageFilter:: |
76 GetOrCreateGuestViewManager() { | 79 GetOrCreateGuestViewManager() { |
77 auto manager = GuestViewManager::FromBrowserContext(browser_context_); | 80 auto manager = GuestViewManager::FromBrowserContext(browser_context_); |
78 if (!manager) { | 81 if (!manager) { |
79 manager = GuestViewManager::CreateWithDelegate( | 82 manager = GuestViewManager::CreateWithDelegate( |
80 browser_context_, | 83 browser_context_, |
81 scoped_ptr<GuestViewManagerDelegate>( | 84 scoped_ptr<GuestViewManagerDelegate>( |
82 new ExtensionsGuestViewManagerDelegate(browser_context_))); | 85 new ExtensionsGuestViewManagerDelegate(browser_context_))); |
83 } | 86 } |
84 return manager; | 87 return manager; |
85 } | 88 } |
86 | 89 |
90 void ExtensionsGuestViewMessageFilter::OnAttachToEmbedderFrame( | |
91 int embedder_local_render_frame_id, | |
92 int element_instance_id, | |
93 int guest_instance_id, | |
94 const base::DictionaryValue& params) { | |
95 auto* manager = GuestViewManager::FromBrowserContext(browser_context_); | |
96 DCHECK(manager); | |
97 content::WebContents* guest_web_contents = | |
98 manager->GetGuestByInstanceIDSafely(guest_instance_id, | |
99 render_process_id_); | |
100 DCHECK(guest_web_contents); | |
101 auto* guest = WebViewGuest::FromWebContents(guest_web_contents); | |
Fady Samuel
2015/06/18 04:47:07
Why do this for WebViewGuest and not GuestViewBas
lazyboy
2015/06/22 19:43:20
Done.
| |
102 DCHECK(guest); | |
103 content::WebContents* owner_web_contents = guest->owner_web_contents(); | |
104 DCHECK(owner_web_contents); | |
105 auto* embedder_frame = RenderFrameHost::FromID( | |
106 render_process_id_, embedder_local_render_frame_id); | |
107 guest_web_contents->AttachToOuterWebContentsFrame(owner_web_contents, | |
108 embedder_frame); | |
109 | |
110 manager->AttachGuest(render_process_id_, element_instance_id, | |
111 guest_instance_id, params); | |
112 | |
113 owner_web_contents->GetMainFrame()->Send( | |
114 new ExtensionsGuestViewMsg_AttachToEmbedderFrame_ACK( | |
115 element_instance_id)); | |
116 | |
117 guest->WillAttach( | |
118 owner_web_contents, element_instance_id, false, | |
119 base::Bind(&ExtensionsGuestViewMessageFilter::WillAttachCallback, this, | |
120 guest)); | |
121 } | |
122 | |
123 void ExtensionsGuestViewMessageFilter::WillAttachCallback( | |
124 extensions::WebViewGuest* guest) { | |
125 guest->DidAttach(MSG_ROUTING_NONE); | |
126 } | |
127 | |
87 void ExtensionsGuestViewMessageFilter::OnCanExecuteContentScript( | 128 void ExtensionsGuestViewMessageFilter::OnCanExecuteContentScript( |
88 int render_view_id, | 129 int render_view_id, |
89 int script_id, | 130 int script_id, |
90 bool* allowed) { | 131 bool* allowed) { |
91 WebViewRendererState::WebViewInfo info; | 132 WebViewRendererState::WebViewInfo info; |
92 WebViewRendererState::GetInstance()->GetInfo(render_process_id_, | 133 WebViewRendererState::GetInstance()->GetInfo(render_process_id_, |
93 render_view_id, &info); | 134 render_view_id, &info); |
94 | 135 |
95 *allowed = | 136 *allowed = |
96 info.content_script_ids.find(script_id) != info.content_script_ids.end(); | 137 info.content_script_ids.find(script_id) != info.content_script_ids.end(); |
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
176 element_instance_id, | 217 element_instance_id, |
177 guest_instance_id, | 218 guest_instance_id, |
178 attach_params); | 219 attach_params); |
179 | 220 |
180 rfh->Send( | 221 rfh->Send( |
181 new ExtensionsGuestViewMsg_CreateMimeHandlerViewGuestACK( | 222 new ExtensionsGuestViewMsg_CreateMimeHandlerViewGuestACK( |
182 element_instance_id)); | 223 element_instance_id)); |
183 } | 224 } |
184 | 225 |
185 } // namespace extensions | 226 } // namespace extensions |
OLD | NEW |