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

Side by Side Diff: extensions/renderer/guest_view/extensions_guest_view_container.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: some review comments addressed Created 5 years, 8 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 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/renderer/guest_view/extensions_guest_view_container.h" 5 #include "extensions/renderer/guest_view/extensions_guest_view_container.h"
6 6
7 #include "content/public/renderer/render_frame.h" 7 #include "content/public/renderer/render_frame.h"
8 #include "content/public/renderer/render_view.h" 8 #include "content/public/renderer/render_view.h"
9 #include "extensions/common/guest_view/guest_view_constants.h" 9 #include "extensions/common/guest_view/guest_view_constants.h"
10 #include "extensions/common/guest_view/guest_view_messages.h" 10 #include "extensions/common/guest_view/guest_view_messages.h"
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
52 return; 52 return;
53 53
54 v8::Context::Scope context_scope(context); 54 v8::Context::Scope context_scope(context);
55 blink::WebScopedMicrotaskSuppression suppression; 55 blink::WebScopedMicrotaskSuppression suppression;
56 56
57 // Call the AttachGuest API's callback with the guest proxy as the first 57 // Call the AttachGuest API's callback with the guest proxy as the first
58 // parameter. 58 // parameter.
59 callback->Call(context->Global(), argc, argv.get()); 59 callback->Call(context->Global(), argc, argv.get());
60 } 60 }
61 61
62 ExtensionsGuestViewContainer::AttachIframeRequest::AttachIframeRequest(
63 GuestViewContainer* container,
64 int guest_instance_id,
65 v8::Handle<v8::Function> callback,
66 v8::Isolate* isolate)
67 : Request(container, callback, isolate),
68 guest_instance_id_(guest_instance_id) {
69 }
70
71 ExtensionsGuestViewContainer::AttachIframeRequest::~AttachIframeRequest() {
72 }
73
74 void ExtensionsGuestViewContainer::AttachIframeRequest::PerformRequest() {
75 LOG(INFO) << "AttachIframeRequest::PerformRequest, guest_instance_id: "
76 << guest_instance_id_;
77 // Only store callback.
78 DCHECK(container()->render_frame());
79 }
80
81 void ExtensionsGuestViewContainer::AttachIframeRequest::HandleResponse(
82 const IPC::Message& message) {
83 GuestViewMsg_ContentWindowReady::Param param;
84 bool message_read_status =
85 GuestViewMsg_ContentWindowReady::Read(&message, &param);
86 DCHECK(message_read_status);
87
88 // If we don't have a callback then there's nothing more to do.
89 if (!HasCallback()) {
90 LOG(INFO) << "AttachIframeRequest, no callback, bail out";
91 return;
92 }
93
94 int render_view_proxy_routing_id = get<1>(param);
95 content::RenderView* guest_proxy_render_view =
96 content::RenderView::FromRoutingID(render_view_proxy_routing_id);
97
98 // TODO(fsamuel): Should we be reporting an error to JavaScript or DCHECKing?
99 if (!guest_proxy_render_view) {
100 LOG(ERROR) << "Guest proxy render view not found, routing ID was" <<
101 render_view_proxy_routing_id;
102 return;
103 }
104
105 v8::HandleScope handle_scope(isolate());
106 blink::WebFrame* frame = guest_proxy_render_view->GetWebView()->mainFrame();
107 v8::Local<v8::Value> window = frame->mainWorldScriptContext()->Global();
108
109 const int argc = 1;
110 scoped_ptr<v8::Handle<v8::Value>[]> argv(new v8::Handle<v8::Value>[argc]);
111 argv[0] = window;
112
113 ExecuteCallbackIfAvailable(argc, argv.Pass());
114 }
115
62 ExtensionsGuestViewContainer::AttachRequest::AttachRequest( 116 ExtensionsGuestViewContainer::AttachRequest::AttachRequest(
63 GuestViewContainer* container, 117 GuestViewContainer* container,
64 int guest_instance_id, 118 int guest_instance_id,
65 scoped_ptr<base::DictionaryValue> params, 119 scoped_ptr<base::DictionaryValue> params,
66 v8::Handle<v8::Function> callback, 120 v8::Handle<v8::Function> callback,
67 v8::Isolate* isolate) 121 v8::Isolate* isolate)
68 : Request(container, callback, isolate), 122 : Request(container, callback, isolate),
69 guest_instance_id_(guest_instance_id), 123 guest_instance_id_(guest_instance_id),
70 params_(params.Pass()) { 124 params_(params.Pass()) {
71 } 125 }
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
132 ExecuteCallbackIfAvailable(0 /* argc */, nullptr); 186 ExecuteCallbackIfAvailable(0 /* argc */, nullptr);
133 } 187 }
134 188
135 ExtensionsGuestViewContainer::ExtensionsGuestViewContainer( 189 ExtensionsGuestViewContainer::ExtensionsGuestViewContainer(
136 content::RenderFrame* render_frame) 190 content::RenderFrame* render_frame)
137 : GuestViewContainer(render_frame), 191 : GuestViewContainer(render_frame),
138 ready_(false), 192 ready_(false),
139 destruction_isolate_(nullptr), 193 destruction_isolate_(nullptr),
140 element_resize_isolate_(nullptr), 194 element_resize_isolate_(nullptr),
141 weak_ptr_factory_(this) { 195 weak_ptr_factory_(this) {
196 ready_ = true;
142 } 197 }
143 198
144 ExtensionsGuestViewContainer::~ExtensionsGuestViewContainer() { 199 ExtensionsGuestViewContainer::~ExtensionsGuestViewContainer() {
145 if (element_instance_id() != guestview::kInstanceIDNone) 200 if (element_instance_id() != guestview::kInstanceIDNone)
146 g_guest_view_container_map.Get().erase(element_instance_id()); 201 g_guest_view_container_map.Get().erase(element_instance_id());
147 202
148 if (pending_response_.get()) 203 if (pending_response_.get())
149 pending_response_->ExecuteCallbackIfAvailable(0 /* argc */, nullptr); 204 pending_response_->ExecuteCallbackIfAvailable(0 /* argc */, nullptr);
150 205
151 while (pending_requests_.size() > 0) { 206 while (pending_requests_.size() > 0) {
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after
279 } 334 }
280 335
281 void ExtensionsGuestViewContainer::HandlePendingResponseCallback( 336 void ExtensionsGuestViewContainer::HandlePendingResponseCallback(
282 const IPC::Message& message) { 337 const IPC::Message& message) {
283 CHECK(pending_response_.get()); 338 CHECK(pending_response_.get());
284 linked_ptr<Request> pending_response(pending_response_.release()); 339 linked_ptr<Request> pending_response(pending_response_.release());
285 pending_response->HandleResponse(message); 340 pending_response->HandleResponse(message);
286 } 341 }
287 342
288 } // namespace extensions 343 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698