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

Unified Diff: components/guest_view/renderer/guest_view_container.cc

Issue 2427893003: Fix wrong cast in ExtensionsGuestViewContainer. (Closed)
Patch Set: update deps Created 4 years, 2 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 side-by-side diff with in-line comments
Download patch
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();
}

Powered by Google App Engine
This is Rietveld 408576698