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

Side by Side Diff: extensions/browser/guest_view/extensions_guest_view_message_filter.cc

Issue 972313002: Make <webview> use out-of-process iframe architecture. (Closed) Base URL: ssh://saopaulo.wat/mnt/dev/shared/src@testoopif2z-better-chrome
Patch Set: address all comments from Nasko and Charlie, minus is_loading Created 5 years, 7 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 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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698