| Index: components/guest_view/renderer/guest_view_container.cc
|
| diff --git a/components/guest_view/renderer/guest_view_container.cc b/components/guest_view/renderer/guest_view_container.cc
|
| index 0ec3d5fe8c0a7f506fdad6d0c778f52460528d7c..4d5c34193f55b535ac8684f1d4d51b868bb30386 100644
|
| --- a/components/guest_view/renderer/guest_view_container.cc
|
| +++ b/components/guest_view/renderer/guest_view_container.cc
|
| @@ -5,12 +5,14 @@
|
| #include "components/guest_view/renderer/guest_view_container.h"
|
|
|
| #include "base/macros.h"
|
| +#include "base/threading/thread_task_runner_handle.h"
|
| #include "components/guest_view/common/guest_view_constants.h"
|
| #include "components/guest_view/common/guest_view_messages.h"
|
| #include "components/guest_view/renderer/guest_view_request.h"
|
| #include "content/public/renderer/render_frame.h"
|
| #include "content/public/renderer/render_frame_observer.h"
|
| #include "content/public/renderer/render_view.h"
|
| +#include "ui/gfx/geometry/size.h"
|
|
|
| namespace {
|
|
|
| @@ -53,6 +55,7 @@ GuestViewContainer::GuestViewContainer(content::RenderFrame* render_frame)
|
| render_frame_(render_frame),
|
| in_destruction_(false),
|
| destruction_isolate_(nullptr),
|
| + element_resize_isolate_(nullptr),
|
| weak_ptr_factory_(this) {
|
| render_frame_lifetime_observer_.reset(
|
| new RenderFrameLifetimeObserver(this, render_frame_));
|
| @@ -223,6 +226,45 @@ void GuestViewContainer::DidDestroyElement() {
|
| Destroy(false);
|
| }
|
|
|
| +void GuestViewContainer::RegisterElementResizeCallback(
|
| + v8::Local<v8::Function> callback,
|
| + v8::Isolate* isolate) {
|
| + element_resize_callback_.Reset(isolate, callback);
|
| + element_resize_isolate_ = isolate;
|
| +}
|
| +
|
| +void GuestViewContainer::DidResizeElement(const gfx::Size& new_size) {
|
| + // Call the element resize callback, if one is registered.
|
| + if (element_resize_callback_.IsEmpty())
|
| + return;
|
| +
|
| + base::ThreadTaskRunnerHandle::Get()->PostTask(
|
| + FROM_HERE,
|
| + base::Bind(&GuestViewContainer::CallElementResizeCallback,
|
| + weak_ptr_factory_.GetWeakPtr(), new_size));
|
| +}
|
| +
|
| +void GuestViewContainer::CallElementResizeCallback(
|
| + const gfx::Size& new_size) {
|
| + v8::HandleScope handle_scope(element_resize_isolate_);
|
| + v8::Local<v8::Function> callback = v8::Local<v8::Function>::New(
|
| + element_resize_isolate_, element_resize_callback_);
|
| + v8::Local<v8::Context> context = callback->CreationContext();
|
| + if (context.IsEmpty())
|
| + return;
|
| +
|
| + const int argc = 2;
|
| + v8::Local<v8::Value> argv[argc] = {
|
| + v8::Integer::New(element_resize_isolate_, new_size.width()),
|
| + v8::Integer::New(element_resize_isolate_, new_size.height())};
|
| +
|
| + v8::Context::Scope context_scope(context);
|
| + v8::MicrotasksScope microtasks(
|
| + element_resize_isolate_, v8::MicrotasksScope::kDoNotRunMicrotasks);
|
| +
|
| + callback->Call(context->Global(), argc, argv);
|
| +}
|
| +
|
| base::WeakPtr<content::BrowserPluginDelegate> GuestViewContainer::GetWeakPtr() {
|
| return weak_ptr_factory_.GetWeakPtr();
|
| }
|
|
|