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 15f4554ecabcb7b67f5450d95d05231866d7c014..46c628b5e0e9daef079c0ec483d2841ebce44365 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,29 @@ RenderFrameHostImpl* ToRFHI(RenderFrameHost* render_frame_host) { |
return static_cast<RenderFrameHostImpl*>(render_frame_host); |
} |
+// Implementation of ContentBrowserClient that overrides IsPrerendering() and |
+// allows consumers to set an arbitrary value. Note that by default, |
+// ContentBrowserClient returns false for IsPrerendering() so unless |
+// set_prerender_override() is called, this will have no effect. |
+class PrerenderTestContentBrowserClient : public TestContentBrowserClient { |
+ public: |
+ PrerenderTestContentBrowserClient() |
+ : prerender_override_(false) |
+ {} |
+ ~PrerenderTestContentBrowserClient() override {} |
+ |
+ void set_prerender_override(bool prerender_override) { |
+ prerender_override_ = prerender_override; |
+ } |
+ |
+ bool IsPrerendering(RenderFrameHost* render_frame_host) override { |
+ return prerender_override_; |
+ } |
+ |
+ private: |
+ bool prerender_override_; |
+}; |
+ |
} // anonymous namespace |
using RenderFrameHostImplBrowserTest = ContentBrowserTest; |
@@ -75,4 +100,39 @@ IN_PROC_BROWSER_TEST_F(RenderFrameHostImplBrowserTest, IsFocused_Widget) { |
EXPECT_FALSE(ToRFHI(web_contents->GetMainFrame())->IsFocused()); |
} |
+// 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, |
+ ToRFHI(web_contents->GetMainFrame())->GetVisibilityState()); |
+ |
+ web_contents->WasHidden(); |
+ EXPECT_EQ(blink::WebPageVisibilityStateHidden, |
+ ToRFHI(web_contents->GetMainFrame())->GetVisibilityState()); |
+} |
+ |
+// Test that a frame is marked as prerendered if |
+// ContentBrowserClient::IsPrerendering() returns true. |
+IN_PROC_BROWSER_TEST_F(RenderFrameHostImplBrowserTest, |
+ GetVisibilityState_Prerender) { |
+ 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, |
+ ToRFHI(web_contents->GetMainFrame())->GetVisibilityState()); |
+ |
+ new_client.set_prerender_override(true); |
+ EXPECT_EQ(blink::WebPageVisibilityStatePrerender, |
+ ToRFHI(web_contents->GetMainFrame())->GetVisibilityState()); |
+ |
+ SetBrowserClientForTesting(old_client); |
+} |
+ |
} // namespace content |