| // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "android_webview/renderer/aw_render_view_ext.h" |
| #include "android_webview/common/render_view_messages.h" |
| #include "content/public/renderer/render_frame.h" |
| #include "content/public/renderer/render_view.h" |
| #include "third_party/WebKit/public/web/WebFrame.h" |
| #include "third_party/WebKit/public/web/WebView.h" |
| |
| namespace android_webview { |
| |
| AwRenderViewExt::AwRenderViewExt(content::RenderView* render_view) |
| : content::RenderViewObserver(render_view) {} |
| |
| AwRenderViewExt::~AwRenderViewExt() {} |
| |
| // static |
| void AwRenderViewExt::RenderViewCreated(content::RenderView* render_view) { |
| new AwRenderViewExt(render_view); // |render_view| takes ownership. |
| } |
| |
| void AwRenderViewExt::DidCommitCompositorFrame() { |
| PostCheckContentsSize(); |
| } |
| |
| void AwRenderViewExt::DidUpdateLayout() { |
| PostCheckContentsSize(); |
| } |
| |
| void AwRenderViewExt::PostCheckContentsSize() { |
| if (check_contents_size_timer_.IsRunning()) |
| return; |
| |
| check_contents_size_timer_.Start(FROM_HERE, |
| base::TimeDelta::FromMilliseconds(0), this, |
| &AwRenderViewExt::CheckContentsSize); |
| } |
| |
| void AwRenderViewExt::CheckContentsSize() { |
| blink::WebView* webview = render_view()->GetWebView(); |
| if (!webview) |
| return; |
| |
| gfx::Size contents_size; |
| |
| blink::WebFrame* main_frame = webview->mainFrame(); |
| if (main_frame) |
| contents_size = main_frame->contentsSize(); |
| |
| // Fall back to contentsPreferredMinimumSize if the mainFrame is reporting a |
| // 0x0 size (this happens during initial load). |
| if (contents_size.IsEmpty()) { |
| contents_size = webview->contentsPreferredMinimumSize(); |
| } |
| |
| if (contents_size == last_sent_contents_size_) |
| return; |
| |
| last_sent_contents_size_ = contents_size; |
| render_view()->GetMainRenderFrame()->Send( |
| new AwViewHostMsg_OnContentsSizeChanged( |
| render_view()->GetMainRenderFrame()->GetRoutingID(), |
| contents_size)); |
| } |
| |
| } // namespace android_webview |