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

Side by Side Diff: extensions/browser/mojo/mime_handler_view_service.cc

Issue 2719333002: second stage
Patch Set: Need to get around resource loading without web/ Created 3 years, 9 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
(Empty)
1 // Copyright 2017 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "extensions/browser/mojo/mime_handler_view_service.h"
6 #include "components/guest_view/browser/guest_view_manager.h"
7 #include "components/guest_view/browser/guest_view_manager_delegate.h"
8 #include "content/public/browser/browser_context.h"
9 #include "content/public/browser/render_frame_host.h"
10 #include "content/public/browser/web_contents.h"
11 #include "extensions/browser/api/extensions_api_client.h"
12 #include "extensions/browser/guest_view/mime_handler_view/mime_handler_view_cons tants.h"
13 #include "extensions/browser/guest_view/mime_handler_view/mime_handler_view_gues t.h"
14
15 namespace extensions {
16
17 using content::BrowserContext;
18 using content::RenderFrameHost;
19 using content::WebContents;
20 using guest_view::GuestViewManager;
21
22 namespace {
23 GuestViewManager* GetGuestViewManager(BrowserContext* browser_context) {
24 GuestViewManager* manager =
25 GuestViewManager::FromBrowserContext(browser_context);
26 if (!manager) {
27 manager = GuestViewManager::CreateWithDelegate(
28 browser_context,
29 ExtensionsAPIClient::Get()->CreateGuestViewManagerDelegate(
30 browser_context));
31 }
32 return manager;
33 }
34 }
35
36 // static
37 void MimeHandlerViewService::Create(
38 int32_t render_frame_process_id,
39 int32_t render_frame_routing_id,
40 blink::mojom::MimeHandlerViewServiceRequest request) {
41 if (auto* render_frame_host = RenderFrameHost::FromID(
42 render_frame_process_id, render_frame_routing_id)) {
43 new MimeHandlerViewService(render_frame_process_id, render_frame_routing_id,
44 std::move(request));
45 }
46 }
47
48 MimeHandlerViewService::MimeHandlerViewService(
49 int32_t render_frame_process_id,
50 int32_t render_frame_routing_id,
51 blink::mojom::MimeHandlerViewServiceRequest request)
52 : render_frame_process_id_(render_frame_process_id),
53 render_frame_routing_id_(render_frame_routing_id),
54 binding_(this, std::move(request)) {}
55
56 MimeHandlerViewService::~MimeHandlerViewService() {}
57
58 void MimeHandlerViewService::CreateMimeHandlerViewGuest(
59 int element_instance_id,
60 const std::string& mime_type,
61 const std::string& view_id,
62 const GURL& resource_url) {
63 RenderFrameHost* container_frame = RenderFrameHost::FromID(
64 render_frame_process_id_, render_frame_routing_id_);
65 if (!container_frame || !container_frame->GetParent())
66 delete this;
67
68 WebContents* owner_contents =
69 WebContents::FromRenderFrameHost(container_frame);
70
71 guest_view::GuestViewManager::WebContentsCreatedCallback
72 web_contents_created_callback =
73 base::Bind(&MimeHandlerViewService::OnGuestWebContentsCreated,
74 base::Unretained(this), element_instance_id, resource_url);
75
76 base::DictionaryValue create_params;
77 // TODO(ekaramad): We need a viewId here or the guest will never get created.
78 create_params.SetString(mime_handler_view::kViewId, view_id);
79 // TODO(ekaramad): Do we need initial size?
80
81 GetGuestViewManager(owner_contents->GetBrowserContext())
82 ->CreateGuest(MimeHandlerViewGuest::Type, owner_contents, create_params,
83 web_contents_created_callback);
84 }
85
86 void MimeHandlerViewService::OnGuestWebContentsCreated(
87 int32_t element_instance_id,
88 const GURL& resource_url,
89 WebContents* guest_web_contents) {
90 if (!guest_web_contents)
91 delete this;
92
93 MimeHandlerViewGuest* guest_view =
94 guest_view::GuestViewBase::FromWebContents(guest_web_contents)
95 ->As<MimeHandlerViewGuest>();
96
97 RenderFrameHost* container_frame = RenderFrameHost::FromID(
98 render_frame_process_id_, render_frame_routing_id_);
99
100 guest_view->SetEmbedderFrame(render_frame_process_id_,
101 container_frame->GetParent()->GetRoutingID());
102
103 WebContents* outer_contents =
104 WebContents::FromRenderFrameHost(container_frame);
105
106 base::DictionaryValue attach_params;
107 GetGuestViewManager(outer_contents->GetBrowserContext())
108 ->AttachGuest(render_frame_process_id_, element_instance_id,
109 guest_view->guest_instance_id(), attach_params);
110
111 guest_web_contents->AttachToOuterWebContentsFrame(outer_contents,
112 container_frame);
113 guest_view->DidAttachToOuterFrame();
114
115 // At this stage, the RenderFrameHost exposing this service is now destroyed.
116 delete this;
117 }
118
119 } // namespace extensions.
OLDNEW
« no previous file with comments | « extensions/browser/mojo/mime_handler_view_service.h ('k') | third_party/WebKit/Source/bindings/core/v8/ScriptController.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698