summaryrefslogtreecommitdiffstats
path: root/chrome/renderer/prerender
diff options
context:
space:
mode:
authormmenke@chromium.org <mmenke@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-06-30 19:54:20 +0000
committermmenke@chromium.org <mmenke@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-06-30 19:54:20 +0000
commit9a31e7f2ee3c632f829cd34490ba22995c401291 (patch)
tree90af46a27c32a71dd4e5358e42e2a15382f1b45b /chrome/renderer/prerender
parentb48532fded2bbd1d9b1781c3ba6f645fc54a3070 (diff)
downloadchromium_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.cc11
-rw-r--r--chrome/renderer/prerender/prerender_helper.h4
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_;