summaryrefslogtreecommitdiffstats
path: root/content
diff options
context:
space:
mode:
authorlevin@chromium.org <levin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-05-27 23:05:07 +0000
committerlevin@chromium.org <levin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-05-27 23:05:07 +0000
commitd812fd16eb8499b79df4eb31af5a347d18ce9993 (patch)
tree5a94e6e9690efb19864f358dd34b2d532adda610 /content
parent9944df0b36e0f0768da9095124d2fa7340a360d8 (diff)
downloadchromium_src-d812fd16eb8499b79df4eb31af5a347d18ce9993.zip
chromium_src-d812fd16eb8499b79df4eb31af5a347d18ce9993.tar.gz
chromium_src-d812fd16eb8499b79df4eb31af5a347d18ce9993.tar.bz2
Remove polling for page size changes when determining preferred size changes.
BUG=44850, 56693 TEST=Verified that the extension browser popup and notification and NTP resizes correctly. Also, got someone who was frequently hitting bug 56693 to run with this change and it no longer occurred for them. Review URL: http://codereview.chromium.org/7086006 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@87110 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content')
-rw-r--r--content/renderer/render_view.cc39
-rw-r--r--content/renderer/render_view.h12
2 files changed, 17 insertions, 34 deletions
diff --git a/content/renderer/render_view.cc b/content/renderer/render_view.cc
index 5ae9676..7f22503 100644
--- a/content/renderer/render_view.cc
+++ b/content/renderer/render_view.cc
@@ -2713,30 +2713,26 @@ void RenderView::logCrossFramePropertyAccess(WebFrame* frame,
frame, target, cross_origin, property_name, event_id));
}
-void RenderView::didChangeContentsSize(WebFrame* frame, const WebSize& size) {
- CheckPreferredSize();
-}
-
-void RenderView::mayHaveChangedRenderedSize(WebFrame* frame) {
+void RenderView::didUpdateLayout(WebFrame* frame) {
+ // We don't always want to set up a timer, only if we've been put in that
+ // mode by getting a |ViewMsg_EnablePreferredSizeChangedMode|
+ // message.
if (!send_preferred_size_changes_ || !webview())
return;
- // If we hit this code path, then stop the deprecated timer.
- check_preferred_size_timer_.Stop();
- preferred_size_change_timer_.Stop();
- preferred_size_change_timer_.Start(TimeDelta::FromMilliseconds(10), this,
- &RenderView::CheckPreferredSize);
+
+ if (check_preferred_size_timer_.IsRunning())
+ return;
+ check_preferred_size_timer_.Start(TimeDelta::FromMilliseconds(0), this,
+ &RenderView::CheckPreferredSize);
}
void RenderView::CheckPreferredSize() {
// We don't always want to send the change messages over IPC, only if we've
- // be put in that mode by getting a |ViewMsg_EnablePreferredSizeChangedMode|
+ // been put in that mode by getting a |ViewMsg_EnablePreferredSizeChangedMode|
// message.
if (!send_preferred_size_changes_ || !webview())
return;
- // WebCore likes to tell us things have changed even when they haven't, so
- // cache the width and height and only send the IPC message when we're sure
- // they're different.
gfx::Size size(webview()->mainFrame()->contentsPreferredWidth(),
webview()->mainFrame()->documentElementScrollHeight());
@@ -3447,15 +3443,10 @@ void RenderView::OnEnablePreferredSizeChangedMode(int flags) {
return;
send_preferred_size_changes_ = true;
- // WebKit doesn't send a notification of the effective height of the page
- // changes, so poll for it.
- // TODO: Add a notification for this to WebKit, remove polling. After that's
- // done, rename kPreferredSizeHeightThisIsSlow to kPreferredSizeHeight.
- // http://crbug.com/44850
- if (flags & kPreferredSizeHeightThisIsSlow) {
- preferred_size_change_timer_.Start(TimeDelta::FromMilliseconds(10), this,
- &RenderView::CheckPreferredSize);
- }
+ // Start off with an initial preferred size notification (in case
+ // |didUpdateLayout| was already called).
+ if (webview())
+ didUpdateLayout(webview()->mainFrame());
}
void RenderView::OnDisableScrollbarsForSmallWindows(
@@ -3737,7 +3728,7 @@ webkit::ppapi::PluginInstance* RenderView::GetBitmapForOptimizedPluginPaint(
}
gfx::Point RenderView::GetScrollOffset() {
- WebKit::WebSize scroll_offset = webview()->mainFrame()->scrollOffset();
+ WebSize scroll_offset = webview()->mainFrame()->scrollOffset();
return gfx::Point(scroll_offset.width, scroll_offset.height);
}
diff --git a/content/renderer/render_view.h b/content/renderer/render_view.h
index f6bf925..157955c 100644
--- a/content/renderer/render_view.h
+++ b/content/renderer/render_view.h
@@ -544,9 +544,7 @@ class RenderView : public RenderWidget,
bool cross_origin,
const WebKit::WebString& property_name,
unsigned long long event_id);
- virtual void didChangeContentsSize(WebKit::WebFrame* frame,
- const WebKit::WebSize& size);
- virtual void mayHaveChangedRenderedSize(WebKit::WebFrame* frame);
+ virtual void didUpdateLayout(WebKit::WebFrame* frame);
virtual void didChangeScrollOffset(WebKit::WebFrame* frame);
virtual void reportFindInPageMatchCount(int request_id,
int count,
@@ -828,8 +826,7 @@ class RenderView : public RenderWidget,
const WebKit::WebURLError& original_error,
const std::string& html);
- // Check whether the preferred size has changed. This is called periodically
- // by preferred_size_change_timer_.
+ // Check whether the preferred size has changed.
void CheckPreferredSize();
// This callback is triggered when DownloadFavicon completes, either
@@ -1028,11 +1025,6 @@ class RenderView : public RenderWidget,
// when layout() recomputes but doesn't actually change sizes.
gfx::Size preferred_size_;
- // Nasty hack. WebKit does not send us events when the preferred size changes,
- // so we must poll it. See also:
- // https://bugs.webkit.org/show_bug.cgi?id=32807.
- base::RepeatingTimer<RenderView> preferred_size_change_timer_;
-
// Used to delay determining the preferred size (to avoid intermediate
// states for the sizes).
base::OneShotTimer<RenderView> check_preferred_size_timer_;