Index: content/browser/manifest/manifest_browsertest.cc |
diff --git a/content/browser/manifest/manifest_browsertest.cc b/content/browser/manifest/manifest_browsertest.cc |
index 75b08dca1b6fb3360fc0aa0bf6fafbbfe4cd7dc0..f6905a996bb381d089558d73762c06d0be27e0f6 100644 |
--- a/content/browser/manifest/manifest_browsertest.cc |
+++ b/content/browser/manifest/manifest_browsertest.cc |
@@ -312,4 +312,57 @@ IN_PROC_BROWSER_TEST_F(ManifestBrowserTest, Navigation) { |
} |
} |
+// If a page has a manifest and the page is navigated using pushState (ie. same |
+// page), it should keep its manifest state. |
+IN_PROC_BROWSER_TEST_F(ManifestBrowserTest, PushStateNavigation) { |
+ ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); |
+ GURL test_url = |
+ embedded_test_server()->GetURL("/manifest/dummy-manifest.html"); |
+ |
+ { |
+ TestNavigationObserver navigation_observer(shell()->web_contents(), 1); |
+ shell()->LoadURL(test_url); |
+ navigation_observer.Wait(); |
+ } |
+ |
+ { |
+ TestNavigationObserver navigation_observer(shell()->web_contents(), 1); |
+ ASSERT_TRUE(content::ExecuteScript( |
+ shell()->web_contents(), |
+ "history.pushState({foo: \"bar\"}, 'page', 'page.html');")); |
+ navigation_observer.Wait(); |
+ } |
+ |
+ GetManifestAndWait(); |
+ EXPECT_FALSE(manifest().IsEmpty()); |
+ EXPECT_EQ(0u, console_error_count()); |
+} |
+ |
+// If a page has a manifest and is navigated using an anchor (ie. same page), it |
+// should keep its manifest state. |
+IN_PROC_BROWSER_TEST_F(ManifestBrowserTest, AnchorNavigation) { |
+ ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); |
+ GURL test_url = |
+ embedded_test_server()->GetURL("/manifest/dummy-manifest.html"); |
+ |
+ { |
+ TestNavigationObserver navigation_observer(shell()->web_contents(), 1); |
+ shell()->LoadURL(test_url); |
+ navigation_observer.Wait(); |
+ } |
+ |
+ { |
+ TestNavigationObserver navigation_observer(shell()->web_contents(), 1); |
+ ASSERT_TRUE(content::ExecuteScript( |
+ shell()->web_contents(), |
+ "var a = document.createElement('a'); a.href='#foo';" |
+ "document.body.appendChild(a); a.click();")); |
+ navigation_observer.Wait(); |
+ } |
+ |
+ GetManifestAndWait(); |
+ EXPECT_FALSE(manifest().IsEmpty()); |
+ EXPECT_EQ(0u, console_error_count()); |
+} |
+ |
} // namespace content |