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

Side by Side Diff: components/guest_view/renderer/guest_view_container.cc

Issue 2427893003: Fix wrong cast in ExtensionsGuestViewContainer. (Closed)
Patch Set: update deps 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
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 "components/guest_view/renderer/guest_view_container.h" 5 #include "components/guest_view/renderer/guest_view_container.h"
6 6
7 #include "base/macros.h" 7 #include "base/macros.h"
8 #include "base/threading/thread_task_runner_handle.h"
8 #include "components/guest_view/common/guest_view_constants.h" 9 #include "components/guest_view/common/guest_view_constants.h"
9 #include "components/guest_view/common/guest_view_messages.h" 10 #include "components/guest_view/common/guest_view_messages.h"
10 #include "components/guest_view/renderer/guest_view_request.h" 11 #include "components/guest_view/renderer/guest_view_request.h"
11 #include "content/public/renderer/render_frame.h" 12 #include "content/public/renderer/render_frame.h"
12 #include "content/public/renderer/render_frame_observer.h" 13 #include "content/public/renderer/render_frame_observer.h"
13 #include "content/public/renderer/render_view.h" 14 #include "content/public/renderer/render_view.h"
15 #include "ui/gfx/geometry/size.h"
14 16
15 namespace { 17 namespace {
16 18
17 using GuestViewContainerMap = std::map<int, guest_view::GuestViewContainer*>; 19 using GuestViewContainerMap = std::map<int, guest_view::GuestViewContainer*>;
18 static base::LazyInstance<GuestViewContainerMap> g_guest_view_container_map = 20 static base::LazyInstance<GuestViewContainerMap> g_guest_view_container_map =
19 LAZY_INSTANCE_INITIALIZER; 21 LAZY_INSTANCE_INITIALIZER;
20 22
21 } // namespace 23 } // namespace
22 24
23 namespace guest_view { 25 namespace guest_view {
(...skipping 22 matching lines...) Expand all
46 void GuestViewContainer::RenderFrameLifetimeObserver::OnDestruct() { 48 void GuestViewContainer::RenderFrameLifetimeObserver::OnDestruct() {
47 container_->RenderFrameDestroyed(); 49 container_->RenderFrameDestroyed();
48 } 50 }
49 51
50 GuestViewContainer::GuestViewContainer(content::RenderFrame* render_frame) 52 GuestViewContainer::GuestViewContainer(content::RenderFrame* render_frame)
51 : ready_(false), 53 : ready_(false),
52 element_instance_id_(guest_view::kInstanceIDNone), 54 element_instance_id_(guest_view::kInstanceIDNone),
53 render_frame_(render_frame), 55 render_frame_(render_frame),
54 in_destruction_(false), 56 in_destruction_(false),
55 destruction_isolate_(nullptr), 57 destruction_isolate_(nullptr),
58 element_resize_isolate_(nullptr),
56 weak_ptr_factory_(this) { 59 weak_ptr_factory_(this) {
57 render_frame_lifetime_observer_.reset( 60 render_frame_lifetime_observer_.reset(
58 new RenderFrameLifetimeObserver(this, render_frame_)); 61 new RenderFrameLifetimeObserver(this, render_frame_));
59 } 62 }
60 63
61 GuestViewContainer::~GuestViewContainer() { 64 GuestViewContainer::~GuestViewContainer() {
62 // Note: Cleanups should be done in GuestViewContainer::Destroy(), not here. 65 // Note: Cleanups should be done in GuestViewContainer::Destroy(), not here.
63 } 66 }
64 67
65 // static. 68 // static.
(...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after
216 219
217 DCHECK(!g_guest_view_container_map.Get().count(element_instance_id)); 220 DCHECK(!g_guest_view_container_map.Get().count(element_instance_id));
218 g_guest_view_container_map.Get().insert( 221 g_guest_view_container_map.Get().insert(
219 std::make_pair(element_instance_id, this)); 222 std::make_pair(element_instance_id, this));
220 } 223 }
221 224
222 void GuestViewContainer::DidDestroyElement() { 225 void GuestViewContainer::DidDestroyElement() {
223 Destroy(false); 226 Destroy(false);
224 } 227 }
225 228
229 void GuestViewContainer::RegisterElementResizeCallback(
230 v8::Local<v8::Function> callback,
231 v8::Isolate* isolate) {
232 element_resize_callback_.Reset(isolate, callback);
233 element_resize_isolate_ = isolate;
234 }
235
236 void GuestViewContainer::DidResizeElement(const gfx::Size& new_size) {
237 // Call the element resize callback, if one is registered.
238 if (element_resize_callback_.IsEmpty())
239 return;
240
241 base::ThreadTaskRunnerHandle::Get()->PostTask(
242 FROM_HERE,
243 base::Bind(&GuestViewContainer::CallElementResizeCallback,
244 weak_ptr_factory_.GetWeakPtr(), new_size));
245 }
246
247 void GuestViewContainer::CallElementResizeCallback(
248 const gfx::Size& new_size) {
249 v8::HandleScope handle_scope(element_resize_isolate_);
250 v8::Local<v8::Function> callback = v8::Local<v8::Function>::New(
251 element_resize_isolate_, element_resize_callback_);
252 v8::Local<v8::Context> context = callback->CreationContext();
253 if (context.IsEmpty())
254 return;
255
256 const int argc = 2;
257 v8::Local<v8::Value> argv[argc] = {
258 v8::Integer::New(element_resize_isolate_, new_size.width()),
259 v8::Integer::New(element_resize_isolate_, new_size.height())};
260
261 v8::Context::Scope context_scope(context);
262 v8::MicrotasksScope microtasks(
263 element_resize_isolate_, v8::MicrotasksScope::kDoNotRunMicrotasks);
264
265 callback->Call(context->Global(), argc, argv);
266 }
267
226 base::WeakPtr<content::BrowserPluginDelegate> GuestViewContainer::GetWeakPtr() { 268 base::WeakPtr<content::BrowserPluginDelegate> GuestViewContainer::GetWeakPtr() {
227 return weak_ptr_factory_.GetWeakPtr(); 269 return weak_ptr_factory_.GetWeakPtr();
228 } 270 }
229 271
230 } // namespace guest_view 272 } // namespace guest_view
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698