Commit 3a9c415a authored by EhsanK's avatar EhsanK Committed by Commit Bot

Use base::Optional for both |view_rect_| and |element_size_|

This CL allows creation of MimeHandlerViewGuest even when element size is
0x0. This is specifically important for Google slides pages where an
<embed> of size 0 is used for print previewing the page. Essentially,
we need to makes sure for such <embed>'s the guest is created (after
attaching) and embed.postMessage works fine.

Bug : 763812

Change-Id: I7ad0cd0898aee2e1b5d6b15dd9bfdcb100a8e16b
Reviewed-on: https://chromium-review.googlesource.com/667900
Commit-Queue: Ehsan Karamad <ekaramad@chromium.org>
Reviewed-by: default avatarKevin McNee <mcnee@chromium.org>
Reviewed-by: default avatarFady Samuel <fsamuel@chromium.org>
Cr-Commit-Position: refs/heads/master@{#502847}
parent ac87e663
......@@ -263,10 +263,12 @@ void BrowserPlugin::OnGuestReady(int browser_plugin_instance_id,
const viz::FrameSinkId& frame_sink_id) {
guest_crashed_ = false;
frame_sink_id_ = frame_sink_id;
gfx::Rect view_rect = view_rect_;
if (!view_rect_)
return;
gfx::Rect view_rect = *view_rect_;
view_rect_ = gfx::Rect();
if (!view_rect.IsEmpty())
ViewRectsChanged(view_rect);
ViewRectsChanged(view_rect);
}
void BrowserPlugin::OnSetCursor(int browser_plugin_instance_id,
......@@ -321,7 +323,8 @@ void BrowserPlugin::UpdateInternalInstanceId() {
}
void BrowserPlugin::ViewRectsChanged(const gfx::Rect& view_rect) {
bool rect_size_changed = view_rect_.size() != view_rect.size();
bool rect_size_changed =
!view_rect_ || view_rect_->size() != view_rect.size();
if (rect_size_changed || !local_surface_id_.is_valid()) {
local_surface_id_ = local_surface_id_allocator_.GenerateId();
if (compositing_helper_ && enable_surface_synchronization_ &&
......@@ -343,11 +346,11 @@ void BrowserPlugin::ViewRectsChanged(const gfx::Rect& view_rect) {
if (attached()) {
// Let the browser know about the updated view rect.
BrowserPluginManager::Get()->Send(new BrowserPluginHostMsg_UpdateGeometry(
browser_plugin_instance_id_, view_rect_, local_surface_id_));
browser_plugin_instance_id_, *view_rect_, local_surface_id_));
}
if (rect_size_changed && delegate_)
delegate_->DidResizeElement(view_rect_.size());
delegate_->DidResizeElement(view_rect_->size());
}
void BrowserPlugin::UpdateGuestFocusState(blink::WebFocusType focus_type) {
......
......@@ -11,6 +11,7 @@
#include "base/macros.h"
#include "base/memory/weak_ptr.h"
#include "base/optional.h"
#include "base/sequenced_task_runner_helpers.h"
#include "components/viz/common/surfaces/frame_sink_id.h"
#include "components/viz/common/surfaces/local_surface_id.h"
......@@ -145,7 +146,7 @@ class CONTENT_EXPORT BrowserPlugin : public blink::WebPlugin,
~BrowserPlugin() override;
gfx::Rect view_rect() const { return view_rect_; }
gfx::Rect view_rect() const { return view_rect_.value_or(gfx::Rect()); }
void UpdateInternalInstanceId();
......@@ -175,7 +176,7 @@ class CONTENT_EXPORT BrowserPlugin : public blink::WebPlugin,
const int render_frame_routing_id_;
blink::WebPluginContainer* container_;
// The plugin's rect in css pixels.
gfx::Rect view_rect_;
base::Optional<gfx::Rect> view_rect_;
bool guest_crashed_;
bool plugin_focused_;
// Tracks the visibility of the browser plugin regardless of the whole
......
......@@ -317,7 +317,7 @@ void MimeHandlerViewContainer::OnMimeHandlerViewGuestOnLoadCompleted(
}
void MimeHandlerViewContainer::CreateMimeHandlerViewGuestIfNecessary() {
if (guest_created_ || element_size_.IsEmpty() || view_id_.empty())
if (guest_created_ || !element_size_.has_value() || view_id_.empty())
return;
// The loader has completed loading |view_id_| so we can dispose it.
......@@ -334,7 +334,7 @@ void MimeHandlerViewContainer::CreateMimeHandlerViewGuestIfNecessary() {
render_frame()->Send(
new ExtensionsGuestViewHostMsg_CreateMimeHandlerViewGuest(
render_frame()->GetRoutingID(), view_id_, element_instance_id(),
element_size_));
*element_size_));
guest_created_ = true;
}
......
......@@ -12,6 +12,7 @@
#include "base/macros.h"
#include "base/memory/weak_ptr.h"
#include "base/optional.h"
#include "components/guest_view/renderer/guest_view_container.h"
#include "third_party/WebKit/public/web/WebAssociatedURLLoaderClient.h"
#include "ui/gfx/geometry/size.h"
......@@ -122,7 +123,7 @@ class MimeHandlerViewContainer : public guest_view::GuestViewContainer,
bool guest_loaded_;
// The size of the element.
gfx::Size element_size_;
base::Optional<gfx::Size> element_size_;
base::WeakPtrFactory<MimeHandlerViewContainer> weak_factory_;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment