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

Unified Diff: android_webview/renderer/aw_render_view_ext.cc

Issue 23899004: Use contents size for android_webview layout. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 3 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: android_webview/renderer/aw_render_view_ext.cc
diff --git a/android_webview/renderer/aw_render_view_ext.cc b/android_webview/renderer/aw_render_view_ext.cc
index 14cbb17a9a880b876a4af24abb469dd613fd04cc..fb114c8f0061122b1f7dc4670f8cae40e05464ab 100644
--- a/android_webview/renderer/aw_render_view_ext.cc
+++ b/android_webview/renderer/aw_render_view_ext.cc
@@ -11,6 +11,7 @@
#include "base/bind.h"
#include "base/strings/string_piece.h"
#include "base/strings/utf_string_conversions.h"
+#include "base/time/time.h"
#include "content/public/common/url_constants.h"
#include "content/public/renderer/android_content_detection_prefixes.h"
#include "content/public/renderer/document_state.h"
@@ -143,7 +144,9 @@ void PopulateHitTestData(const GURL& absolute_link_url,
} // namespace
AwRenderViewExt::AwRenderViewExt(content::RenderView* render_view)
- : content::RenderViewObserver(render_view), page_scale_factor_(0.0f) {
+ : content::RenderViewObserver(render_view),
+ page_scale_factor_(0.0f),
+ send_contents_size_updates_(false) {
render_view->GetWebView()->setPermissionClient(this);
}
@@ -165,6 +168,8 @@ bool AwRenderViewExt::OnMessageReceived(const IPC::Message& message) {
OnResetScrollAndScaleState)
IPC_MESSAGE_HANDLER(AwViewMsg_SetInitialPageScale, OnSetInitialPageScale)
IPC_MESSAGE_HANDLER(AwViewMsg_SetBackgroundColor, OnSetBackgroundColor)
+ IPC_MESSAGE_HANDLER(AwViewMsg_EnableContentsSizeNotifications,
+ OnEnableContentsSizeNotifications)
IPC_MESSAGE_UNHANDLED(handled = false)
IPC_END_MESSAGE_MAP()
return handled;
@@ -214,6 +219,18 @@ void AwRenderViewExt::DidCommitCompositorFrame() {
UpdatePageScaleFactor();
}
+void AwRenderViewExt::DidUpdateLayout() {
+ if (!send_contents_size_updates_)
+ return;
+
+ if (check_contents_size_timer_.IsRunning())
+ return;
+
+ check_contents_size_timer_.Start(FROM_HERE,
+ base::TimeDelta::FromMilliseconds(0), this,
+ &AwRenderViewExt::CheckContentsSize);
+}
+
void AwRenderViewExt::UpdatePageScaleFactor() {
if (page_scale_factor_ != render_view()->GetWebView()->pageScaleFactor()) {
page_scale_factor_ = render_view()->GetWebView()->pageScaleFactor();
@@ -222,6 +239,30 @@ void AwRenderViewExt::UpdatePageScaleFactor() {
}
}
+void AwRenderViewExt::OnEnableContentsSizeNotifications() {
+ send_contents_size_updates_ = true;
+ last_sent_contents_size_ = gfx::Size();
+ CheckContentsSize();
+}
+
+void AwRenderViewExt::CheckContentsSize() {
+ if (!send_contents_size_updates_)
+ return;
+
+ if (!render_view()->GetWebView() ||
+ !render_view()->GetWebView()->mainFrame())
+ return;
+
+ gfx::Size contents_size =
+ render_view()->GetWebView()->mainFrame()->contentsSize();
+
+ if (contents_size == last_sent_contents_size_)
+ return;
+
+ last_sent_contents_size_ = contents_size;
+ Send(new AwViewHostMsg_OnContentsSizeChanged(routing_id(), contents_size));
+}
+
void AwRenderViewExt::Navigate(const GURL& url) {
// Navigate is called only on NEW navigations, so WebImageCache won't be freed
// when the user just clicks on links, but only when a navigation is started,

Powered by Google App Engine
This is Rietveld 408576698