Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(21)

Unified Diff: LayoutTests/fast/loader/scroll-position-restoration-for-history-api.html

Issue 927213004: Accept options in history APIs to allow scroll restoration to be disabled (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: rebase Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: LayoutTests/fast/loader/scroll-position-restoration-for-history-api.html
diff --git a/LayoutTests/fast/loader/scroll-position-restoration-for-history-api.html b/LayoutTests/fast/loader/scroll-position-restoration-for-history-api.html
new file mode 100644
index 0000000000000000000000000000000000000000..14429b5c111740a629f912be6d3e4e368f21f5eb
--- /dev/null
+++ b/LayoutTests/fast/loader/scroll-position-restoration-for-history-api.html
@@ -0,0 +1,76 @@
+<!DOCTYPE html>
+<style>
+body {
+ height: 2000px;
+ width: 2000px;
+}
+</style>
+
+<div id='console'></div>
+<script src="../../resources/js-test.js"></script>
+<script>
+window.jsTestIsAsync = true;
+description('This test verifies that navigating to entries created by ' +
+ 'pushState or replaceState correctly restores scroll position ' +
+ 'correctly and respects "scrollRestoration" flag.');
+
+var tests = {
+ '#1': {type: 'push', expectedScroll: [50, 100]},
+ '#2': {type: 'replace', expectedScroll: [100, 200]},
+ '#3': {type: 'push', expectedScroll: [150, 300], options: {scrollRestoration: 'auto'}},
+ '#4': {type: 'replace', expectedScroll: [200, 400], options: {scrollRestoration: 'auto'}},
+ /* Scroll position should not be restored for these two. */
+ // TODO(majidvp): uncomment these test cases once chromium side CL (https://crrev.com/959783003) lands
+ // '#5': {type: 'push', expectedScroll: [0, 0], options: {scrollRestoration: 'manual'}},
+ // '#6': {type: 'replace', expectedScroll: [0, 0], options: {scrollRestoration: 'manual'}}
+};
+
+// Navigation steps:
+// 1. Create a history entry using pushState then scroll
+// 2. Create a history entry and replace it then scroll
+// 3-6. Repeat 1 & 2 with different option values
+// 7. Navigate away and come back
+// 8-13. Verify 6 to 1 and keep navigating back
+function handleNavigation() {
+ if (window.name !== 'verification phase') {
+ for (var key in tests) {
+ var test = tests[key];
+ var args = [{key: key}, '', key];
+ if ('options' in test)
+ args.push(test.options);
+
+ if (test.type == 'push') {
+ history.pushState.apply(history, args);
+ } else {
+ history.pushState(null, '', key);
+ history.replaceState.apply(history, args);
+ }
+
+ window.scrollBy(50, 100);
+ }
+
+ setTimeout(function() {
+ window.name = 'verification phase';
+ window.location.href = 'resources/empty-document-goes-back.html';
+ }, 0);
+ } else {
+ var key = location.hash,
+ test = tests[key];
+
+ debug('verifying ' + key);
+ shouldBeEqualToString('history.state.key', '' + key);
+ shouldBe('document.body.scrollLeft', test.expectedScroll[0].toString());
+ shouldBe('document.body.scrollTop', test.expectedScroll[1].toString());
+
+ if (key !== '#1') {
+ window.history.back();
+ } else {
+ window.name = '';
+ finishJSTest();
+ }
+ }
+}
+
+window.addEventListener('pageshow', handleNavigation);
+window.addEventListener('hashchange', handleNavigation);
+</script>

Powered by Google App Engine
This is Rietveld 408576698