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

Side by Side Diff: extensions/browser/guest_view/mime_handler_view/mime_handler_view_guest.cc

Issue 2417693002: Allow MimeHandlerViewGuest be embedded inside OOPIFs (Closed)
Patch Set: Rebased Created 4 years, 1 month 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
« no previous file with comments | « extensions/browser/guest_view/mime_handler_view/mime_handler_view_guest.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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/mime_handler_view/mime_handler_view_gues t.h" 5 #include "extensions/browser/guest_view/mime_handler_view/mime_handler_view_gues t.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/strings/stringprintf.h" 9 #include "base/strings/stringprintf.h"
10 #include "components/guest_view/common/guest_view_constants.h" 10 #include "components/guest_view/common/guest_view_constants.h"
11 #include "content/public/browser/browser_thread.h" 11 #include "content/public/browser/browser_thread.h"
12 #include "content/public/browser/host_zoom_map.h" 12 #include "content/public/browser/host_zoom_map.h"
13 #include "content/public/browser/navigation_entry.h" 13 #include "content/public/browser/navigation_entry.h"
14 #include "content/public/browser/render_process_host.h" 14 #include "content/public/browser/render_process_host.h"
15 #include "content/public/browser/render_widget_host.h"
16 #include "content/public/browser/render_widget_host_view.h"
15 #include "content/public/browser/stream_handle.h" 17 #include "content/public/browser/stream_handle.h"
16 #include "content/public/browser/stream_info.h" 18 #include "content/public/browser/stream_info.h"
19 #include "content/public/common/child_process_host.h"
17 #include "content/public/common/url_constants.h" 20 #include "content/public/common/url_constants.h"
18 #include "extensions/browser/api/extensions_api_client.h" 21 #include "extensions/browser/api/extensions_api_client.h"
19 #include "extensions/browser/api/mime_handler_private/mime_handler_private.h" 22 #include "extensions/browser/api/mime_handler_private/mime_handler_private.h"
20 #include "extensions/browser/extension_registry.h" 23 #include "extensions/browser/extension_registry.h"
21 #include "extensions/browser/guest_view/mime_handler_view/mime_handler_stream_ma nager.h" 24 #include "extensions/browser/guest_view/mime_handler_view/mime_handler_stream_ma nager.h"
22 #include "extensions/browser/guest_view/mime_handler_view/mime_handler_view_cons tants.h" 25 #include "extensions/browser/guest_view/mime_handler_view/mime_handler_view_cons tants.h"
23 #include "extensions/browser/guest_view/mime_handler_view/mime_handler_view_gues t_delegate.h" 26 #include "extensions/browser/guest_view/mime_handler_view/mime_handler_view_gues t_delegate.h"
24 #include "extensions/browser/process_manager.h" 27 #include "extensions/browser/process_manager.h"
25 #include "extensions/common/constants.h" 28 #include "extensions/common/constants.h"
26 #include "extensions/common/extension_messages.h" 29 #include "extensions/common/extension_messages.h"
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
69 // static 72 // static
70 const char MimeHandlerViewGuest::Type[] = "mimehandler"; 73 const char MimeHandlerViewGuest::Type[] = "mimehandler";
71 74
72 // static 75 // static
73 GuestViewBase* MimeHandlerViewGuest::Create(WebContents* owner_web_contents) { 76 GuestViewBase* MimeHandlerViewGuest::Create(WebContents* owner_web_contents) {
74 return new MimeHandlerViewGuest(owner_web_contents); 77 return new MimeHandlerViewGuest(owner_web_contents);
75 } 78 }
76 79
77 MimeHandlerViewGuest::MimeHandlerViewGuest(WebContents* owner_web_contents) 80 MimeHandlerViewGuest::MimeHandlerViewGuest(WebContents* owner_web_contents)
78 : GuestView<MimeHandlerViewGuest>(owner_web_contents), 81 : GuestView<MimeHandlerViewGuest>(owner_web_contents),
79 delegate_(ExtensionsAPIClient::Get()->CreateMimeHandlerViewGuestDelegate( 82 delegate_(
80 this)) {} 83 ExtensionsAPIClient::Get()->CreateMimeHandlerViewGuestDelegate(this)),
84 embedder_frame_process_id_(content::ChildProcessHost::kInvalidUniqueID),
85 embedder_frame_routing_id_(MSG_ROUTING_NONE),
86 embedder_widget_routing_id_(MSG_ROUTING_NONE) {}
81 87
82 MimeHandlerViewGuest::~MimeHandlerViewGuest() { 88 MimeHandlerViewGuest::~MimeHandlerViewGuest() {
83 } 89 }
84 90
85 bool MimeHandlerViewGuest::CanUseCrossProcessFrames() { 91 bool MimeHandlerViewGuest::CanUseCrossProcessFrames() {
86 return false; 92 return false;
87 } 93 }
88 94
95 content::RenderWidgetHost* MimeHandlerViewGuest::GetOwnerRenderWidgetHost() {
96 DCHECK_NE(embedder_widget_routing_id_, MSG_ROUTING_NONE);
97 return content::RenderWidgetHost::FromID(embedder_frame_process_id_,
98 embedder_widget_routing_id_);
99 }
100
101 content::SiteInstance* MimeHandlerViewGuest::GetOwnerSiteInstance() {
102 DCHECK_NE(embedder_frame_routing_id_, MSG_ROUTING_NONE);
103 content::RenderFrameHost* rfh = content::RenderFrameHost::FromID(
104 embedder_frame_process_id_, embedder_frame_routing_id_);
105 return rfh ? rfh->GetSiteInstance() : nullptr;
106 }
107
108 bool MimeHandlerViewGuest::CanBeEmbeddedInsideCrossProcessFrames() {
109 return true;
110 }
111
112 void MimeHandlerViewGuest::SetEmbedderFrame(int process_id, int routing_id) {
113 DCHECK_NE(MSG_ROUTING_NONE, routing_id);
114 DCHECK_EQ(MSG_ROUTING_NONE, embedder_frame_routing_id_);
115
116 embedder_frame_process_id_ = process_id;
117 embedder_frame_routing_id_ = routing_id;
118
119 content::RenderFrameHost* rfh =
120 content::RenderFrameHost::FromID(process_id, routing_id);
121
122 if (rfh && rfh->GetView()) {
123 embedder_widget_routing_id_ =
124 rfh->GetView()->GetRenderWidgetHost()->GetRoutingID();
125 }
126
127 DCHECK_NE(MSG_ROUTING_NONE, embedder_widget_routing_id_);
128 }
129
89 const char* MimeHandlerViewGuest::GetAPINamespace() const { 130 const char* MimeHandlerViewGuest::GetAPINamespace() const {
90 return "mimeHandlerViewGuestInternal"; 131 return "mimeHandlerViewGuestInternal";
91 } 132 }
92 133
93 int MimeHandlerViewGuest::GetTaskPrefix() const { 134 int MimeHandlerViewGuest::GetTaskPrefix() const {
94 return IDS_EXTENSION_TASK_MANAGER_MIMEHANDLERVIEW_TAG_PREFIX; 135 return IDS_EXTENSION_TASK_MANAGER_MIMEHANDLERVIEW_TAG_PREFIX;
95 } 136 }
96 137
97 void MimeHandlerViewGuest::CreateWebContents( 138 void MimeHandlerViewGuest::CreateWebContents(
98 const base::DictionaryValue& create_params, 139 const base::DictionaryValue& create_params,
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after
233 bool MimeHandlerViewGuest::SaveFrame(const GURL& url, 274 bool MimeHandlerViewGuest::SaveFrame(const GURL& url,
234 const content::Referrer& referrer) { 275 const content::Referrer& referrer) {
235 if (!attached()) 276 if (!attached())
236 return false; 277 return false;
237 278
238 embedder_web_contents()->SaveFrame(stream_->stream_info()->original_url, 279 embedder_web_contents()->SaveFrame(stream_->stream_info()->original_url,
239 referrer); 280 referrer);
240 return true; 281 return true;
241 } 282 }
242 283
284 void MimeHandlerViewGuest::OnRenderFrameHostDeleted(int process_id,
285 int routing_id) {
286 if (process_id == embedder_frame_process_id_ &&
287 routing_id == embedder_frame_routing_id_)
288 Destroy();
289 }
290
243 void MimeHandlerViewGuest::DocumentOnLoadCompletedInMainFrame() { 291 void MimeHandlerViewGuest::DocumentOnLoadCompletedInMainFrame() {
244 // Assume the embedder WebContents is valid here. 292 // Assume the embedder WebContents is valid here.
245 DCHECK(embedder_web_contents()); 293 DCHECK(embedder_web_contents());
246 294
247 embedder_web_contents()->Send( 295 // If the guest is embedded inside a cross-process frame and the frame is
248 new ExtensionsGuestViewMsg_MimeHandlerViewGuestOnLoadCompleted( 296 // removed before the guest is properly loaded, then owner RenderWidgetHost
249 element_instance_id())); 297 // will be nullptr.
298 if (auto* rwh = GetOwnerRenderWidgetHost()) {
299 rwh->Send(new ExtensionsGuestViewMsg_MimeHandlerViewGuestOnLoadCompleted(
300 element_instance_id()));
301 }
250 } 302 }
251 303
252 base::WeakPtr<StreamContainer> MimeHandlerViewGuest::GetStream() const { 304 base::WeakPtr<StreamContainer> MimeHandlerViewGuest::GetStream() const {
253 if (!stream_) 305 if (!stream_)
254 return base::WeakPtr<StreamContainer>(); 306 return base::WeakPtr<StreamContainer>();
255 return stream_->GetWeakPtr(); 307 return stream_->GetWeakPtr();
256 } 308 }
257 309
258 } // namespace extensions 310 } // namespace extensions
OLDNEW
« no previous file with comments | « extensions/browser/guest_view/mime_handler_view/mime_handler_view_guest.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698