| 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,
|
|
|