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

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: sync Created 5 years, 6 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 30 matching lines...) Expand all
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698