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

Unified Diff: chrome/browser/guest_view/web_view/web_view_guest.cc

Issue 427883002: <webview>: Move autosize from content to chrome (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@remove_frame_url
Patch Set: Works Created 6 years, 5 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: chrome/browser/guest_view/web_view/web_view_guest.cc
diff --git a/chrome/browser/guest_view/web_view/web_view_guest.cc b/chrome/browser/guest_view/web_view/web_view_guest.cc
index a40447731215b6656c8b6dbae7222f9843672386..a08cf67c2fce5757484562b4b71f048968d90dd9 100644
--- a/chrome/browser/guest_view/web_view/web_view_guest.cc
+++ b/chrome/browser/guest_view/web_view/web_view_guest.cc
@@ -297,6 +297,20 @@ void WebViewGuest::CreateWebContents(
}
void WebViewGuest::DidAttachToEmbedder() {
+ extra_params()->GetBoolean(webview::kAttributeAutoSize, &auto_size_enabled_);
+
+ int max_height = 0;
+ int max_width = 0;
+ extra_params()->GetInteger(webview::kAttributeMaxHeight, &max_height);
lazyboy 2014/07/31 04:24:22 Do we need to DCHECK if GetInteger() returns true/
Fady Samuel 2014/08/01 18:12:52 Well we just rely on these being the default value
+ extra_params()->GetInteger(webview::kAttributeMaxWidth, &max_width);
+ max_auto_size_.SetSize(max_width, max_height);
+
+ int min_height = 0;
+ int min_width = 0;
+ extra_params()->GetInteger(webview::kAttributeMinHeight, &min_height);
+ extra_params()->GetInteger(webview::kAttributeMinWidth, &min_width);
+ min_auto_size_.SetSize(min_width, min_height);
+
std::string name;
if (extra_params()->GetString(webview::kName, &name)) {
// If the guest window's name is empty, then the WebView tag's name is
@@ -700,7 +714,8 @@ WebViewGuest::WebViewGuest(content::BrowserContext* browser_context,
chromevox_injected_(false),
current_zoom_factor_(1.0),
find_helper_(this),
- javascript_dialog_helper_(this) {
+ javascript_dialog_helper_(this),
+ auto_size_enabled_(false) {
}
WebViewGuest::~WebViewGuest() {
@@ -802,6 +817,12 @@ void WebViewGuest::RenderViewReady() {
// The guest RenderView should always live in an isolated guest process.
CHECK(guest_web_contents()->GetRenderProcessHost()->IsIsolatedGuest());
Send(new ChromeViewMsg_SetName(guest_web_contents()->GetRoutingID(), name_));
+ content::RenderViewHost* rvh = guest_web_contents()->GetRenderViewHost();
+ if (auto_size_enabled_)
+ rvh->EnableAutoResize(min_auto_size_, max_auto_size_);
+ else
+ rvh->DisableAutoResize(element_size_);
+
}
void WebViewGuest::ReportFrameNameChange(const std::string& name) {
@@ -880,15 +901,11 @@ content::WebContents* WebViewGuest::CreateNewGuestWindow(
create_params);
}
-void WebViewGuest::SizeChanged(const gfx::Size& old_size,
- const gfx::Size& new_size) {
- scoped_ptr<base::DictionaryValue> args(new base::DictionaryValue());
- args->SetInteger(webview::kOldHeight, old_size.height());
- args->SetInteger(webview::kOldWidth, old_size.width());
- args->SetInteger(webview::kNewHeight, new_size.height());
- args->SetInteger(webview::kNewWidth, new_size.width());
- DispatchEventToEmbedder(
- new GuestViewBase::Event(webview::kEventSizeChanged, args.Pass()));
+void WebViewGuest::GuestSizeChanged(const gfx::Size& old_size,
+ const gfx::Size& new_size) {
+ if (!auto_size_enabled_)
+ return;
+ DispatchSizeChangedEvent(old_size, new_size);
}
void WebViewGuest::RequestMediaAccessPermission(
@@ -911,6 +928,11 @@ void WebViewGuest::CanDownload(
callback);
}
+void WebViewGuest::ElementSizeChanged(const gfx::Size& old_size,
+ const gfx::Size& new_size) {
+ element_size_ = new_size;
+}
+
void WebViewGuest::RequestPointerLockPermission(
bool user_gesture,
bool last_unlocked_by_target,
@@ -951,6 +973,31 @@ void WebViewGuest::RunFileChooser(WebContents* web_contents,
embedder_web_contents()->GetDelegate()->RunFileChooser(web_contents, params);
}
+void WebViewGuest::SetAutoSize(bool enabled,
+ const gfx::Size& min_size,
+ const gfx::Size& max_size) {
+ min_auto_size_ = gfx::Size(std::min(max_size.width(), min_size.width()),
+ std::min(max_size.height(), min_size.height()));
+ max_auto_size_ = gfx::Size(std::max(max_size.width(), min_size.width()),
+ std::max(max_size.height(), min_size.height()));
+ enabled &= !!max_auto_size_.width() && !!max_auto_size_.height();
+ if (!enabled && !auto_size_enabled_)
+ return;
+
+ auto_size_enabled_ = enabled;
+
+ if (!attached())
+ return;
+
+ content::RenderViewHost* rvh = guest_web_contents()->GetRenderViewHost();
+ if (auto_size_enabled_) {
+ rvh->EnableAutoResize(min_auto_size_, max_auto_size_);
+ } else {
+ rvh->DisableAutoResize(element_size_);
+ DispatchSizeChangedEvent(guest_size_, element_size_);
+ }
+}
+
void WebViewGuest::NavigateGuest(const std::string& src) {
GURL url = ResolveURL(src);
@@ -1052,6 +1099,18 @@ bool WebViewGuest::HandleKeyboardShortcuts(
return false;
}
+void WebViewGuest::DispatchSizeChangedEvent(const gfx::Size& old_size,
+ const gfx::Size& new_size) {
+ guest_size_ = new_size;
+ scoped_ptr<base::DictionaryValue> args(new base::DictionaryValue());
+ args->SetInteger(webview::kOldHeight, old_size.height());
+ args->SetInteger(webview::kOldWidth, old_size.width());
+ args->SetInteger(webview::kNewHeight, new_size.height());
+ args->SetInteger(webview::kNewWidth, new_size.width());
+ DispatchEventToEmbedder(
+ new GuestViewBase::Event(webview::kEventSizeChanged, args.Pass()));
+}
+
void WebViewGuest::ShowContextMenu(int request_id,
const MenuItemVector* items) {
if (!pending_menu_.get())

Powered by Google App Engine
This is Rietveld 408576698