Index: content/browser/frame_host/render_frame_host_impl_browsertest.cc |
diff --git a/content/browser/frame_host/render_frame_host_impl_browsertest.cc b/content/browser/frame_host/render_frame_host_impl_browsertest.cc |
index 4eba7f06429bf81b8db04ea191bf906b787196cb..ed125866157b3e2efda37429a3cd276b4d510c4d 100644 |
--- a/content/browser/frame_host/render_frame_host_impl_browsertest.cc |
+++ b/content/browser/frame_host/render_frame_host_impl_browsertest.cc |
@@ -5,10 +5,12 @@ |
#include "content/browser/frame_host/render_frame_host_impl.h" |
#include "content/public/browser/render_frame_host.h" |
#include "content/public/browser/web_contents.h" |
+#include "content/public/common/content_client.h" |
#include "content/public/test/content_browser_test.h" |
#include "content/public/test/content_browser_test_utils.h" |
#include "content/public/test/test_utils.h" |
#include "content/shell/browser/shell.h" |
+#include "content/test/test_content_browser_client.h" |
namespace content { |
@@ -18,6 +20,36 @@ RenderFrameHostImpl* ToRFHI(RenderFrameHost* render_frame_host) { |
return static_cast<RenderFrameHostImpl*>(render_frame_host); |
} |
+// Implementation of ContentBrowserClient that overrides |
+// OverridePageVisibilityState() and allows consumers to set a value. |
+class PrerenderTestContentBrowserClient : public TestContentBrowserClient { |
+ public: |
+ PrerenderTestContentBrowserClient() |
+ : override_enabled_(false), |
+ visibility_override_(blink::WebPageVisibilityStateVisible) |
+ {} |
+ ~PrerenderTestContentBrowserClient() override {} |
+ |
+ void EnableVisibilityOverride( |
+ blink::WebPageVisibilityState visibility_override) { |
+ override_enabled_ = true; |
+ visibility_override_ = visibility_override; |
+ } |
+ |
+ void OverridePageVisibilityState( |
+ RenderFrameHost* render_frame_host, |
+ blink::WebPageVisibilityState* visibility_state) override { |
+ if (override_enabled_) |
+ *visibility_state = visibility_override_; |
+ } |
+ |
+ private: |
+ bool override_enabled_; |
+ blink::WebPageVisibilityState visibility_override_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(PrerenderTestContentBrowserClient); |
+}; |
+ |
} // anonymous namespace |
using RenderFrameHostImplBrowserTest = ContentBrowserTest; |
@@ -78,4 +110,38 @@ IN_PROC_BROWSER_TEST_F(RenderFrameHostImplBrowserTest, IsFocused_Widget) { |
#endif |
} |
+// Test that a frame is visible/hidden depending on its WebContents visibility |
+// state. |
+IN_PROC_BROWSER_TEST_F(RenderFrameHostImplBrowserTest, |
+ GetVisibilityState_Basic) { |
+ EXPECT_TRUE(NavigateToURL(shell(), GURL("data:text/html,foo"))); |
+ WebContents* web_contents = shell()->web_contents(); |
+ |
+ EXPECT_EQ(blink::WebPageVisibilityStateVisible, |
+ web_contents->GetMainFrame()->GetVisibilityState()); |
+ |
+ web_contents->WasHidden(); |
+ EXPECT_EQ(blink::WebPageVisibilityStateHidden, |
+ web_contents->GetMainFrame()->GetVisibilityState()); |
+} |
+ |
+// Test that a frame visibility can be overridden by the ContentBrowserClient. |
+IN_PROC_BROWSER_TEST_F(RenderFrameHostImplBrowserTest, |
+ GetVisibilityState_Override) { |
+ EXPECT_TRUE(NavigateToURL(shell(), GURL("data:text/html,foo"))); |
+ WebContents* web_contents = shell()->web_contents(); |
+ |
+ PrerenderTestContentBrowserClient new_client; |
+ ContentBrowserClient* old_client = SetBrowserClientForTesting(&new_client); |
+ |
+ EXPECT_EQ(blink::WebPageVisibilityStateVisible, |
+ web_contents->GetMainFrame()->GetVisibilityState()); |
+ |
+ new_client.EnableVisibilityOverride(blink::WebPageVisibilityStatePrerender); |
+ EXPECT_EQ(blink::WebPageVisibilityStatePrerender, |
+ web_contents->GetMainFrame()->GetVisibilityState()); |
+ |
+ SetBrowserClientForTesting(old_client); |
+} |
+ |
} // namespace content |