Index: extensions/renderer/guest_view/extensions_guest_view_container.cc |
diff --git a/extensions/renderer/guest_view/extensions_guest_view_container.cc b/extensions/renderer/guest_view/extensions_guest_view_container.cc |
index ca5960debd08b370f9822dd47d5473f775309148..c23e60420b0b9c059988cf1b421759c1096e93c5 100644 |
--- a/extensions/renderer/guest_view/extensions_guest_view_container.cc |
+++ b/extensions/renderer/guest_view/extensions_guest_view_container.cc |
@@ -141,7 +141,8 @@ ExtensionsGuestViewContainer::ExtensionsGuestViewContainer( |
content::RenderFrame* render_frame) |
: GuestViewContainer(render_frame), |
ready_(false), |
- destruction_isolate_(nullptr) { |
+ destruction_isolate_(nullptr), |
+ element_resize_isolate_(nullptr) { |
} |
ExtensionsGuestViewContainer::~ExtensionsGuestViewContainer() { |
@@ -162,7 +163,7 @@ ExtensionsGuestViewContainer::~ExtensionsGuestViewContainer() { |
v8::Context::Scope context_scope(context); |
blink::WebScopedMicrotaskSuppression suppression; |
- callback->Call(context->Global(), 0, nullptr); |
+ callback->Call(context->Global(), 0 /* argc */, nullptr); |
} |
ExtensionsGuestViewContainer* ExtensionsGuestViewContainer::FromID( |
@@ -186,6 +187,40 @@ void ExtensionsGuestViewContainer::RegisterDestructionCallback( |
destruction_isolate_ = isolate; |
} |
+void ExtensionsGuestViewContainer::RegisterElementResizeCallback( |
+ v8::Handle<v8::Function> callback, |
+ v8::Isolate* isolate) { |
+ element_resize_callback_.reset(callback); |
+ element_resize_isolate_ = isolate; |
+} |
+ |
+void ExtensionsGuestViewContainer::OnElementResize(const gfx::Size& old_size, |
+ const gfx::Size& new_size) { |
+ // Call the element resize callback, if one is registered. |
+ if (element_resize_callback_.IsEmpty()) |
+ return; |
+ |
+ v8::HandleScope handle_scope(element_resize_isolate_); |
+ v8::Handle<v8::Function> callback = |
+ element_resize_callback_.NewHandle(element_resize_isolate_); |
+ v8::Handle<v8::Context> context = callback->CreationContext(); |
+ if (context.IsEmpty()) |
+ return; |
+ |
+ const int argc = 4; |
+ v8::Handle<v8::Value> argv[argc] = { |
+ v8::Integer::New(element_resize_isolate_, old_size.width()), |
+ v8::Integer::New(element_resize_isolate_, old_size.height()), |
+ v8::Integer::New(element_resize_isolate_, new_size.width()), |
+ v8::Integer::New(element_resize_isolate_, new_size.height()) |
+ }; |
+ |
+ v8::Context::Scope context_scope(context); |
+ blink::WebScopedMicrotaskSuppression suppression; |
+ |
+ callback->Call(context->Global(), argc, argv); |
+} |
+ |
bool ExtensionsGuestViewContainer::OnMessageReceived( |
const IPC::Message& message) { |
OnHandleCallback(message); |