Index: LayoutTests/fast/history/scroll-restoration/scroll-restoration-fragment-navigation-crossdoc.html |
diff --git a/LayoutTests/fast/history/scroll-restoration/scroll-restoration-fragment-navigation-crossdoc.html b/LayoutTests/fast/history/scroll-restoration/scroll-restoration-fragment-navigation-crossdoc.html |
new file mode 100644 |
index 0000000000000000000000000000000000000000..2f8512a99b0a0d1d2f205c6f3b831cdb570213cf |
--- /dev/null |
+++ b/LayoutTests/fast/history/scroll-restoration/scroll-restoration-fragment-navigation-crossdoc.html |
@@ -0,0 +1,74 @@ |
+<!DOCTYPE html> |
+<style> |
+ iframe { |
+ height: 300px; |
+ width: 300px; |
+ } |
+</style> |
+ |
+<body> |
+ <iframe></iframe> |
+</body> |
+ |
+<script src="../../../resources/testharness.js"></script> |
+<script src="../../../resources/testharnessreport.js"></script> |
+<script type="text/javascript"> |
+ 'use strict'; |
+ var iframe = document.querySelector('iframe'); |
+ var loadCount = 0; |
+ |
+ // The test does the following navigation steps for iframe |
+ // 1. load page-with-fragment.html#fragment |
+ // 2. load blank2 |
+ // 3. go back to page-with-fragment.html |
+ async_test(function(t) { |
+ iframe.src = './resources/page-with-fragment.html#fragment'; |
+ |
+ iframe.onload = t.step_func(function() { |
+ loadCount += 1; |
+ switch (loadCount) { |
+ case 1: |
+ t.step(function() { |
+ assert_regexp_match(iframe.contentWindow.location.href, /page-with-fragment/, 'should be on page-with-fragment page'); |
+ // wait one animation frame to ensure layout is run and fragment scrolling is complete |
+ iframe.contentWindow.requestAnimationFrame(function() { |
+ assert_equals(iframe.contentWindow.scrollY, 800, 'should scroll to fragment'); |
+ |
+ iframe.contentWindow.history.scrollRestoration = 'manual'; |
+ assert_equals(iframe.contentWindow.history.scrollRestoration, 'manual'); |
+ |
+ // navigate to new page |
+ setTimeout(function() { |
+ iframe.src = './resources/blank1.html'; |
+ }, 0); |
+ }); |
+ }); |
+ break; |
+ case 2: |
+ t.step(function() { |
+ assert_regexp_match(iframe.contentWindow.location.href, /blank1/, 'should be on second blank page'); |
+ assert_equals(iframe.contentWindow.history.scrollRestoration, 'auto', 'new page loads should set scrollRestoration to "auto"'); |
+ |
+ setTimeout(function() { |
+ iframe.contentWindow.history.back(); |
+ }, 0); |
+ }); |
+ break; |
+ case 3: |
+ t.step(function() { |
+ // coming back from history, scrollRestoration should be set to manual and respected |
+ assert_regexp_match(iframe.contentWindow.location.href, /page-with-fragment/, 'should be back on page-with-fragment page'); |
+ iframe.contentWindow.requestAnimationFrame(function() { |
+ assert_equals(iframe.contentWindow.history.scrollRestoration, 'manual', 'navigating back should retain scrollRestoration value'); |
+ assert_equals(iframe.contentWindow.scrollX, 0, 'should not scroll to fragment'); |
+ assert_equals(iframe.contentWindow.scrollY, 0, 'should not scroll to fragment'); |
+ t.done(); |
+ }); |
+ }); |
+ break; |
+ default: |
+ assert_unreached('iframe should load 3 times'); |
+ } |
+ }); |
+ }, 'Manual scroll restoration should take precedent over scrolling to fragment'); |
+</script> |