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

Unified Diff: extensions/browser/guest_view/guest_view_base.cc

Issue 847893002: Implemented explicit resizing from guestview. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Another small fix. Created 5 years, 11 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
« no previous file with comments | « extensions/browser/guest_view/guest_view_base.h ('k') | extensions/common/api/guest_view_internal.json » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: extensions/browser/guest_view/guest_view_base.cc
diff --git a/extensions/browser/guest_view/guest_view_base.cc b/extensions/browser/guest_view/guest_view_base.cc
index 3559f06d1516e7d3a44e1563d02bc1fc3c5bce94..f01cd6b7ae53b68e51990f24e7ecc1e022a6a2c8 100644
--- a/extensions/browser/guest_view/guest_view_base.cc
+++ b/extensions/browser/guest_view/guest_view_base.cc
@@ -52,6 +52,9 @@ static base::LazyInstance<WebContentsGuestViewMap> webcontents_guestview_map =
} // namespace
+SetSizeParams::SetSizeParams() {}
+SetSizeParams::~SetSizeParams() {}
+
GuestViewBase::Event::Event(const std::string& name,
scoped_ptr<base::DictionaryValue> args)
: name_(name), args_(args.Pass()) {
@@ -219,38 +222,58 @@ void GuestViewBase::InitWithWebContents(
&view_instance_id_);
if (CanRunInDetachedState())
- SetUpAutoSize(create_params);
+ SetUpSizing(create_params);
// Give the derived class an opportunity to perform additional initialization.
DidInitialize(create_params);
}
-void GuestViewBase::SetAutoSize(bool enabled,
- const gfx::Size& min_size,
- const gfx::Size& max_size) {
+void GuestViewBase::SetSize(const SetSizeParams& params) {
+ bool enable_auto_size =
+ params.enable_auto_size ? *params.enable_auto_size : auto_size_enabled_;
+ gfx::Size min_size = params.min_size ? *params.min_size : min_auto_size_;
+ gfx::Size max_size = params.max_size ? *params.max_size : max_auto_size_;
+
+ if (params.normal_size)
+ normal_size_ = *params.normal_size;
+
min_auto_size_ = min_size;
min_auto_size_.SetToMin(max_size);
max_auto_size_ = max_size;
max_auto_size_.SetToMax(min_size);
- enabled &= !min_auto_size_.IsEmpty() && !max_auto_size_.IsEmpty() &&
- IsAutoSizeSupported();
- if (!enabled && !auto_size_enabled_)
- return;
-
- auto_size_enabled_ = enabled;
-
- if (!attached() && !CanRunInDetachedState())
- return;
+ enable_auto_size &= !min_auto_size_.IsEmpty() && !max_auto_size_.IsEmpty() &&
+ IsAutoSizeSupported();
content::RenderViewHost* rvh = web_contents()->GetRenderViewHost();
- if (auto_size_enabled_) {
+ if (enable_auto_size) {
+ // Autosize is being enabled.
rvh->EnableAutoResize(min_auto_size_, max_auto_size_);
+ normal_size_.SetSize(0, 0);
} else {
- rvh->DisableAutoResize(element_size_);
- guest_size_ = element_size_;
- GuestSizeChangedDueToAutoSize(guest_size_, element_size_);
+ // Autosize is being disabled.
+ // Use default width/height if missing from partially defined normal size.
+ if (normal_size_.width() && !normal_size_.height())
+ normal_size_.set_height(guestview::kDefaultHeight);
+ if (!normal_size_.width() && normal_size_.height())
+ normal_size_.set_width(guestview::kDefaultWidth);
+
+ gfx::Size new_size = !normal_size_.IsEmpty() ? normal_size_ :
+ !guest_size_.IsEmpty() ? guest_size_ :
+ gfx::Size(guestview::kDefaultWidth, guestview::kDefaultHeight);
+ if (auto_size_enabled_) {
+ // Autosize was previously enabled.
+ rvh->DisableAutoResize(new_size);
+ GuestSizeChangedDueToAutoSize(guest_size_, new_size);
+ } else {
+ // Autosize was already disabled.
+ guest_sizer_->SizeContents(new_size);
+ }
+ // TODO (paulmeyer): Launch the onResize event here.
+ guest_size_ = new_size;
}
+
+ auto_size_enabled_ = enable_auto_size;
}
// static
@@ -329,7 +352,7 @@ bool GuestViewBase::ZoomPropagatesFromEmbedderToGuest() const {
void GuestViewBase::DidAttach(int guest_proxy_routing_id) {
opener_lifetime_observer_.reset();
- SetUpAutoSize(*attach_params());
+ SetUpSizing(*attach_params());
// Give the derived class an opportunity to perform some actions.
DidAttachToEmbedder();
@@ -352,11 +375,11 @@ void GuestViewBase::DidDetach() {
}
void GuestViewBase::ElementSizeChanged(const gfx::Size& size) {
- element_size_ = size;
-
// Only resize if needed.
- if (!size.IsEmpty())
- guest_sizer_->SizeContents(size);
+ if (size.IsEmpty())
+ return;
+
+ guest_sizer_->SizeContents(size);
}
WebContents* GuestViewBase::GetOwnerWebContents() const {
@@ -597,7 +620,7 @@ void GuestViewBase::CompleteInit(
callback.Run(guest_web_contents);
}
-void GuestViewBase::SetUpAutoSize(const base::DictionaryValue& params) {
+void GuestViewBase::SetUpSizing(const base::DictionaryValue& params) {
// Read the autosize parameters passed in from the embedder.
bool auto_size_enabled = false;
params.GetBoolean(guestview::kAttributeAutoSize, &auto_size_enabled);
@@ -612,11 +635,22 @@ void GuestViewBase::SetUpAutoSize(const base::DictionaryValue& params) {
params.GetInteger(guestview::kAttributeMinHeight, &min_height);
params.GetInteger(guestview::kAttributeMinWidth, &min_width);
- // Call SetAutoSize to apply all the appropriate validation and clipping of
+ // Set the normal size to the element size so that the guestview will fit the
+ // element initially if autosize is disabled.
+ int normal_height = 0;
+ int normal_width = 0;
+ params.GetInteger(guestview::kElementHeight, &normal_height);
+ params.GetInteger(guestview::kElementWidth, &normal_width);
+
+ SetSizeParams set_size_params;
+ set_size_params.enable_auto_size.reset(new bool(auto_size_enabled));
+ set_size_params.min_size.reset(new gfx::Size(min_width, min_height));
+ set_size_params.max_size.reset(new gfx::Size(max_width, max_height));
+ set_size_params.normal_size.reset(new gfx::Size(normal_width, normal_height));
+
+ // Call SetSize to apply all the appropriate validation and clipping of
// values.
- SetAutoSize(auto_size_enabled,
- gfx::Size(min_width, min_height),
- gfx::Size(max_width, max_height));
+ SetSize(set_size_params);
}
void GuestViewBase::StartTrackingEmbedderZoomLevel() {
« no previous file with comments | « extensions/browser/guest_view/guest_view_base.h ('k') | extensions/common/api/guest_view_internal.json » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698