summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorshishir@chromium.org <shishir@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-06-07 10:01:44 +0000
committershishir@chromium.org <shishir@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-06-07 10:01:44 +0000
commitf59203a09624ec9ce1b03237d6c987b8ced0d818 (patch)
tree2d0abb28ed4b62572691817b49dea1acf5428175
parent703d106a23bfd28670dd830c06b13d4e74811356 (diff)
downloadchromium_src-f59203a09624ec9ce1b03237d6c987b8ced0d818.zip
chromium_src-f59203a09624ec9ce1b03237d6c987b8ced0d818.tar.gz
chromium_src-f59203a09624ec9ce1b03237d6c987b8ced0d818.tar.bz2
Using the "prerender" state as the page visibility value when a page is in
prerender mode. BUG=None TEST=None Review URL: http://codereview.chromium.org/7054064 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@88117 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--chrome/renderer/chrome_content_renderer_client.cc10
-rw-r--r--chrome/renderer/chrome_content_renderer_client.h3
-rw-r--r--chrome/renderer/prerender/prerender_helper.cc2
-rw-r--r--chrome/renderer/prerender/prerender_helper.h2
-rw-r--r--content/renderer/content_renderer_client.cc6
-rw-r--r--content/renderer/content_renderer_client.h4
-rw-r--r--content/renderer/render_view.cc17
-rw-r--r--content/renderer/render_view_observer_tracker.h11
8 files changed, 42 insertions, 13 deletions
diff --git a/chrome/renderer/chrome_content_renderer_client.cc b/chrome/renderer/chrome_content_renderer_client.cc
index 70f45b0..88c41b4 100644
--- a/chrome/renderer/chrome_content_renderer_client.cc
+++ b/chrome/renderer/chrome_content_renderer_client.cc
@@ -547,6 +547,16 @@ void ChromeContentRendererClient::PrefetchHostName(const char* hostname,
net_predictor_->Resolve(hostname, length);
}
+bool ChromeContentRendererClient::ShouldOverridePageVisibilityState(
+ const RenderView* render_view,
+ WebKit::WebPageVisibilityState* override_state) const {
+ if (!prerender::PrerenderHelper::IsPrerendering(render_view))
+ return false;
+
+ *override_state = WebKit::WebPageVisibilityStatePrerender;
+ return true;
+}
+
void ChromeContentRendererClient::SetExtensionDispatcher(
ExtensionDispatcher* extension_dispatcher) {
extension_dispatcher_.reset(extension_dispatcher);
diff --git a/chrome/renderer/chrome_content_renderer_client.h b/chrome/renderer/chrome_content_renderer_client.h
index 5d245f8..6e22973 100644
--- a/chrome/renderer/chrome_content_renderer_client.h
+++ b/chrome/renderer/chrome_content_renderer_client.h
@@ -67,6 +67,9 @@ class ChromeContentRendererClient : public content::ContentRendererClient {
size_t length) OVERRIDE;
virtual bool IsLinkVisited(unsigned long long link_hash) OVERRIDE;
virtual void PrefetchHostName(const char* hostname, size_t length) OVERRIDE;
+ virtual bool ShouldOverridePageVisibilityState(
+ const RenderView* render_view,
+ WebKit::WebPageVisibilityState* override_state) const OVERRIDE;
// For testing.
void SetExtensionDispatcher(ExtensionDispatcher* extension_dispatcher);
diff --git a/chrome/renderer/prerender/prerender_helper.cc b/chrome/renderer/prerender/prerender_helper.cc
index 47b1d70..9353f38 100644
--- a/chrome/renderer/prerender/prerender_helper.cc
+++ b/chrome/renderer/prerender/prerender_helper.cc
@@ -34,7 +34,7 @@ PrerenderHelper::~PrerenderHelper() {
}
// static.
-bool PrerenderHelper::IsPrerendering(RenderView* render_view) {
+bool PrerenderHelper::IsPrerendering(const RenderView* render_view) {
PrerenderHelper* prerender_helper = PrerenderHelper::Get(render_view);
return (prerender_helper && prerender_helper->is_prerendering_);
}
diff --git a/chrome/renderer/prerender/prerender_helper.h b/chrome/renderer/prerender/prerender_helper.h
index 0060287..a2db36f 100644
--- a/chrome/renderer/prerender/prerender_helper.h
+++ b/chrome/renderer/prerender/prerender_helper.h
@@ -26,7 +26,7 @@ class PrerenderHelper : public RenderViewObserver,
virtual ~PrerenderHelper();
// Returns true if |render_view| is currently prerendering.
- static bool IsPrerendering(RenderView* render_view);
+ static bool IsPrerendering(const RenderView* render_view);
// Records prerender histograms. These are recorded even for pages that are
// not prerendered, for comparison to pages that are.
diff --git a/content/renderer/content_renderer_client.cc b/content/renderer/content_renderer_client.cc
index 4c1e2e2..ff5822e 100644
--- a/content/renderer/content_renderer_client.cc
+++ b/content/renderer/content_renderer_client.cc
@@ -95,4 +95,10 @@ void ContentRendererClient::PrefetchHostName(const char* hostname,
size_t length) {
}
+bool ContentRendererClient::ShouldOverridePageVisibilityState(
+ const RenderView* render_view,
+ WebKit::WebPageVisibilityState* override_state) const {
+ return false;
+}
+
} // namespace content
diff --git a/content/renderer/content_renderer_client.h b/content/renderer/content_renderer_client.h
index a315695..19d7ebd 100644
--- a/content/renderer/content_renderer_client.h
+++ b/content/renderer/content_renderer_client.h
@@ -10,6 +10,7 @@
#include "base/string16.h"
#include "content/common/content_client.h"
+#include "third_party/WebKit/Source/WebKit/chromium/public/WebPageVisibilityState.h"
class FilePath;
class GURL;
@@ -97,6 +98,9 @@ class ContentRendererClient {
size_t length);
virtual bool IsLinkVisited(unsigned long long link_hash);
virtual void PrefetchHostName(const char* hostname, size_t length);
+ virtual bool ShouldOverridePageVisibilityState(
+ const RenderView* render_view,
+ WebKit::WebPageVisibilityState* override_state) const;
};
} // namespace content
diff --git a/content/renderer/render_view.cc b/content/renderer/render_view.cc
index 423c799..57fa875 100644
--- a/content/renderer/render_view.cc
+++ b/content/renderer/render_view.cc
@@ -3856,7 +3856,7 @@ void RenderView::OnWasHidden() {
if (webview()) {
webview()->settings()->setMinimumTimerInterval(
webkit_glue::kBackgroundTabTimerInterval);
- webview()->setVisibilityState(WebKit::WebPageVisibilityStateHidden, false);
+ webview()->setVisibilityState(visibilityState(), false);
}
#if defined(OS_MACOSX)
@@ -3875,7 +3875,7 @@ void RenderView::OnWasRestored(bool needs_repainting) {
if (webview()) {
webview()->settings()->setMinimumTimerInterval(
webkit_glue::kForegroundTabTimerInterval);
- webview()->setVisibilityState(WebKit::WebPageVisibilityStateVisible, false);
+ webview()->setVisibilityState(visibilityState(), false);
}
#if defined(OS_MACOSX)
@@ -4131,10 +4131,15 @@ void RenderView::registerProtocolHandler(const WebString& scheme,
}
WebKit::WebPageVisibilityState RenderView::visibilityState() const {
- if (is_hidden())
- return WebKit::WebPageVisibilityStateHidden;
- else
- return WebKit::WebPageVisibilityStateVisible;
+ WebKit::WebPageVisibilityState current_state = is_hidden() ?
+ WebKit::WebPageVisibilityStateHidden :
+ WebKit::WebPageVisibilityStateVisible;
+ WebKit::WebPageVisibilityState override_state = current_state;
+ if (content::GetContentClient()->renderer()->
+ ShouldOverridePageVisibilityState(this,
+ &override_state))
+ return override_state;
+ return current_state;
}
bool RenderView::IsNonLocalTopLevelNavigation(
diff --git a/content/renderer/render_view_observer_tracker.h b/content/renderer/render_view_observer_tracker.h
index 1a9258a..4029931 100644
--- a/content/renderer/render_view_observer_tracker.h
+++ b/content/renderer/render_view_observer_tracker.h
@@ -36,11 +36,11 @@ class RenderView;
template <class T>
class RenderViewObserverTracker {
public:
- static T* Get(RenderView* render_view) {
+ static T* Get(const RenderView* render_view) {
return render_view_map_.Get()[render_view];
}
- explicit RenderViewObserverTracker(RenderView* render_view)
+ explicit RenderViewObserverTracker(const RenderView* render_view)
: render_view_(render_view) {
render_view_map_.Get()[render_view] = static_cast<T*>(this);
}
@@ -49,15 +49,16 @@ class RenderViewObserverTracker {
}
private:
- RenderView* render_view_;
+ const RenderView* render_view_;
- static base::LazyInstance<std::map<RenderView*, T*> > render_view_map_;
+ static base::LazyInstance<std::map<const RenderView*, T*> >
+ render_view_map_;
DISALLOW_COPY_AND_ASSIGN(RenderViewObserverTracker<T>);
};
template <class T>
-base::LazyInstance<std::map<RenderView*, T*> >
+base::LazyInstance<std::map<const RenderView*, T*> >
RenderViewObserverTracker<T>::render_view_map_(base::LINKER_INITIALIZED);
#endif // CONTENT_RENDERER_RENDER_VIEW_OBSERVER_TRACKER_H_