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 28 matching lines...) Expand all Loading... | |
39 } | 39 } |
40 | 40 |
41 ExtensionsGuestViewMessageFilter::~ExtensionsGuestViewMessageFilter() { | 41 ExtensionsGuestViewMessageFilter::~ExtensionsGuestViewMessageFilter() { |
42 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 42 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
43 } | 43 } |
44 | 44 |
45 void ExtensionsGuestViewMessageFilter::OverrideThreadForMessage( | 45 void ExtensionsGuestViewMessageFilter::OverrideThreadForMessage( |
46 const IPC::Message& message, | 46 const IPC::Message& message, |
47 BrowserThread::ID* thread) { | 47 BrowserThread::ID* thread) { |
48 switch (message.type()) { | 48 switch (message.type()) { |
49 case ExtensionsGuestViewHostMsg_AttachToEmbedderFrame::ID: | |
49 case ExtensionsGuestViewHostMsg_CreateMimeHandlerViewGuest::ID: | 50 case ExtensionsGuestViewHostMsg_CreateMimeHandlerViewGuest::ID: |
50 case ExtensionsGuestViewHostMsg_ResizeGuest::ID: | 51 case ExtensionsGuestViewHostMsg_ResizeGuest::ID: |
51 *thread = BrowserThread::UI; | 52 *thread = BrowserThread::UI; |
52 break; | 53 break; |
53 default: | 54 default: |
54 break; | 55 break; |
55 } | 56 } |
56 } | 57 } |
57 | 58 |
58 void ExtensionsGuestViewMessageFilter::OnDestruct() const { | 59 void ExtensionsGuestViewMessageFilter::OnDestruct() const { |
59 // Destroy the filter on the IO thread since that's where its weak pointers | 60 // Destroy the filter on the IO thread since that's where its weak pointers |
60 // are being used. | 61 // are being used. |
61 BrowserThread::DeleteOnIOThread::Destruct(this); | 62 BrowserThread::DeleteOnIOThread::Destruct(this); |
62 } | 63 } |
63 | 64 |
64 bool ExtensionsGuestViewMessageFilter::OnMessageReceived( | 65 bool ExtensionsGuestViewMessageFilter::OnMessageReceived( |
65 const IPC::Message& message) { | 66 const IPC::Message& message) { |
66 bool handled = true; | 67 bool handled = true; |
67 IPC_BEGIN_MESSAGE_MAP(ExtensionsGuestViewMessageFilter, message) | 68 IPC_BEGIN_MESSAGE_MAP(ExtensionsGuestViewMessageFilter, message) |
69 IPC_MESSAGE_HANDLER(ExtensionsGuestViewHostMsg_AttachToEmbedderFrame, | |
70 OnAttachToEmbedderFrame) | |
68 IPC_MESSAGE_HANDLER(ExtensionsGuestViewHostMsg_CanExecuteContentScriptSync, | 71 IPC_MESSAGE_HANDLER(ExtensionsGuestViewHostMsg_CanExecuteContentScriptSync, |
69 OnCanExecuteContentScript) | 72 OnCanExecuteContentScript) |
70 IPC_MESSAGE_HANDLER(ExtensionsGuestViewHostMsg_CreateMimeHandlerViewGuest, | 73 IPC_MESSAGE_HANDLER(ExtensionsGuestViewHostMsg_CreateMimeHandlerViewGuest, |
71 OnCreateMimeHandlerViewGuest) | 74 OnCreateMimeHandlerViewGuest) |
72 IPC_MESSAGE_HANDLER(ExtensionsGuestViewHostMsg_ResizeGuest, OnResizeGuest) | 75 IPC_MESSAGE_HANDLER(ExtensionsGuestViewHostMsg_ResizeGuest, OnResizeGuest) |
73 IPC_MESSAGE_UNHANDLED(handled = false) | 76 IPC_MESSAGE_UNHANDLED(handled = false) |
74 IPC_END_MESSAGE_MAP() | 77 IPC_END_MESSAGE_MAP() |
75 return handled; | 78 return handled; |
76 } | 79 } |
77 | 80 |
81 void ExtensionsGuestViewMessageFilter::OnAttachToEmbedderFrame( | |
82 int embedder_local_render_frame_id, | |
83 int element_instance_id, | |
84 int guest_instance_id, | |
85 const base::DictionaryValue& params) { | |
86 auto manager = GuestViewManager::FromBrowserContext(browser_context_); | |
87 DCHECK(manager); | |
88 content::WebContents* guest_web_contents = | |
89 manager->GetGuestByInstanceIDSafely(guest_instance_id, | |
90 render_process_id_); | |
91 DCHECK(guest_web_contents); | |
92 auto guest = WebViewGuest::FromWebContents(guest_web_contents); | |
dcheng
2015/05/28 22:23:37
Warning: personal opinion ahead.
I think it's nic
lazyboy
2015/05/29 00:02:24
OK.
Done.
| |
93 DCHECK(guest); | |
94 content::WebContents* owner_web_contents = guest->owner_web_contents(); | |
95 DCHECK(owner_web_contents); | |
96 auto embedder_frame = RenderFrameHost::FromID(render_process_id_, | |
97 embedder_local_render_frame_id); | |
98 guest_web_contents->AttachToOuterWebContentsFrame(owner_web_contents, | |
99 embedder_frame); | |
100 | |
101 manager->AttachGuest(render_process_id_, element_instance_id, | |
102 guest_instance_id, params); | |
103 | |
104 owner_web_contents->GetMainFrame()->Send( | |
105 new ExtensionsGuestViewMsg_GuestReady(element_instance_id)); | |
106 | |
107 guest->WillAttach( | |
108 owner_web_contents, element_instance_id, false, | |
109 base::Bind(&ExtensionsGuestViewMessageFilter::WillAttachCallback, this, | |
110 guest)); | |
111 } | |
112 | |
113 void ExtensionsGuestViewMessageFilter::WillAttachCallback( | |
114 extensions::WebViewGuest* guest) { | |
115 guest->DidAttach(MSG_ROUTING_NONE); | |
116 } | |
117 | |
78 void ExtensionsGuestViewMessageFilter::OnCanExecuteContentScript( | 118 void ExtensionsGuestViewMessageFilter::OnCanExecuteContentScript( |
79 int render_view_id, | 119 int render_view_id, |
80 int script_id, | 120 int script_id, |
81 bool* allowed) { | 121 bool* allowed) { |
82 WebViewRendererState::WebViewInfo info; | 122 WebViewRendererState::WebViewInfo info; |
83 WebViewRendererState::GetInstance()->GetInfo(render_process_id_, | 123 WebViewRendererState::GetInstance()->GetInfo(render_process_id_, |
84 render_view_id, &info); | 124 render_view_id, &info); |
85 | 125 |
86 *allowed = | 126 *allowed = |
87 info.content_script_ids.find(script_id) != info.content_script_ids.end(); | 127 info.content_script_ids.find(script_id) != info.content_script_ids.end(); |
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
175 element_instance_id, | 215 element_instance_id, |
176 guest_instance_id, | 216 guest_instance_id, |
177 attach_params); | 217 attach_params); |
178 | 218 |
179 rfh->Send( | 219 rfh->Send( |
180 new ExtensionsGuestViewMsg_CreateMimeHandlerViewGuestACK( | 220 new ExtensionsGuestViewMsg_CreateMimeHandlerViewGuestACK( |
181 element_instance_id)); | 221 element_instance_id)); |
182 } | 222 } |
183 | 223 |
184 } // namespace extensions | 224 } // namespace extensions |
OLD | NEW |