diff options
author | mmenke@chromium.org <mmenke@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-06-30 19:54:20 +0000 |
---|---|---|
committer | mmenke@chromium.org <mmenke@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-06-30 19:54:20 +0000 |
commit | 9a31e7f2ee3c632f829cd34490ba22995c401291 (patch) | |
tree | 90af46a27c32a71dd4e5358e42e2a15382f1b45b /chrome/renderer/prerender | |
parent | b48532fded2bbd1d9b1781c3ba6f645fc54a3070 (diff) | |
download | chromium_src-9a31e7f2ee3c632f829cd34490ba22995c401291.zip chromium_src-9a31e7f2ee3c632f829cd34490ba22995c401291.tar.gz chromium_src-9a31e7f2ee3c632f829cd34490ba22995c401291.tar.bz2 |
Fix visibility state of prerendered pages opened
in a new background tab not updating.
Also adds a couple tests for the visibility API.
BUG=87926
TEST=PrerenderBrowserTest.PrerenderVisibilityBackgroundTab, PrerenderBrowserTest.PrerenderVisibilityForegroundTab, PrerenderBrowserTest.PrerenderVisibility
Review URL: http://codereview.chromium.org/7282013
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@91182 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/renderer/prerender')
-rw-r--r-- | chrome/renderer/prerender/prerender_helper.cc | 11 | ||||
-rw-r--r-- | chrome/renderer/prerender/prerender_helper.h | 4 |
2 files changed, 15 insertions, 0 deletions
diff --git a/chrome/renderer/prerender/prerender_helper.cc b/chrome/renderer/prerender/prerender_helper.cc index 053f4ef..67092dc 100644 --- a/chrome/renderer/prerender/prerender_helper.cc +++ b/chrome/renderer/prerender/prerender_helper.cc @@ -10,6 +10,7 @@ #include "content/renderer/navigation_state.h" #include "content/renderer/render_view.h" #include "third_party/WebKit/Source/WebKit/chromium/public/WebFrame.h" +#include "third_party/WebKit/Source/WebKit/chromium/public/WebView.h" // Helper macro for histograms. #define RECORD_PLT(tag, perceived_page_load_time) { \ @@ -29,6 +30,7 @@ PrerenderHelper::PrerenderHelper(RenderView* render_view) RenderViewObserverTracker<PrerenderHelper>(render_view), is_prerendering_(true), has_unrecorded_data_(false) { + UpdateVisibilityState(); } PrerenderHelper::~PrerenderHelper() { @@ -155,10 +157,19 @@ void PrerenderHelper::OnSetIsPrerendering(bool is_prerendering) { is_prerendering_ = false; prerender_display_time_ = base::Time::Now(); + UpdateVisibilityState(); } bool PrerenderHelper::HasUnrecordedData() const { return !prerender_display_time_.is_null(); } +void PrerenderHelper::UpdateVisibilityState() { + if (render_view()->webview()) { + render_view()->webview()->setVisibilityState( + render_view()->visibilityState(), + false); + } +} + } // namespace prerender diff --git a/chrome/renderer/prerender/prerender_helper.h b/chrome/renderer/prerender/prerender_helper.h index a2db36f..5c2c87c 100644 --- a/chrome/renderer/prerender/prerender_helper.h +++ b/chrome/renderer/prerender/prerender_helper.h @@ -49,6 +49,10 @@ class PrerenderHelper : public RenderViewObserver, // for the prerender have been recorded. bool HasUnrecordedData() const; + // Updates the visibility state of the RenderView. Must be called whenever + // prerendering starts or finishes. + void UpdateVisibilityState(); + // Tracks whether or not observed RenderView is currently prerendering. bool is_prerendering_; |