diff options
author | shishir@chromium.org <shishir@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-06-07 10:01:44 +0000 |
---|---|---|
committer | shishir@chromium.org <shishir@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-06-07 10:01:44 +0000 |
commit | f59203a09624ec9ce1b03237d6c987b8ced0d818 (patch) | |
tree | 2d0abb28ed4b62572691817b49dea1acf5428175 | |
parent | 703d106a23bfd28670dd830c06b13d4e74811356 (diff) | |
download | chromium_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.cc | 10 | ||||
-rw-r--r-- | chrome/renderer/chrome_content_renderer_client.h | 3 | ||||
-rw-r--r-- | chrome/renderer/prerender/prerender_helper.cc | 2 | ||||
-rw-r--r-- | chrome/renderer/prerender/prerender_helper.h | 2 | ||||
-rw-r--r-- | content/renderer/content_renderer_client.cc | 6 | ||||
-rw-r--r-- | content/renderer/content_renderer_client.h | 4 | ||||
-rw-r--r-- | content/renderer/render_view.cc | 17 | ||||
-rw-r--r-- | content/renderer/render_view_observer_tracker.h | 11 |
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_ |