[gold] triagelog-page-sk: Fix broken back/forward browser buttons.
Bug: skia:9525
Change-Id: I8a419e90223d6abe92f61fb8bfd8e634fd7c9647
Reviewed-on: https://skia-review.googlesource.com/c/buildbot/+/255312
Commit-Queue: Leandro Lovisolo <lovisolo@google.com>
Reviewed-by: Kevin Lubick <kjlubick@google.com>
diff --git a/golden/modules/triagelog-page-sk/triagelog-page-sk.js b/golden/modules/triagelog-page-sk/triagelog-page-sk.js
index db3ec02..8d7ef49 100644
--- a/golden/modules/triagelog-page-sk/triagelog-page-sk.js
+++ b/golden/modules/triagelog-page-sk/triagelog-page-sk.js
@@ -92,15 +92,14 @@
constructor() {
super(template);
- this._entries = []; // Log entries fetched from the server.
- this._details = false; // Reflected in the URL.
- this._pageOffset = 0; // Reflected in the URL.
- this._pageSize = 0; // Reflected in the URL.
- this._totalEntries = 0; // Total number of entries in the server.
- this._urlParamsLoaded = false; // Whether URL params have been read.
+ this._entries = []; // Log entries fetched from the server.
+ this._details = false; // Reflected in the URL.
+ this._pageOffset = 0; // Reflected in the URL.
+ this._pageSize = 0; // Reflected in the URL.
+ this._totalEntries = 0; // Total number of entries in the server.
// stateReflector will trigger on DomReady.
- this._stateChanged = stateReflector(
+ this._pushStateToURL = stateReflector(
/*getState*/() => {
return {
// Provide empty values.
@@ -109,17 +108,12 @@
'details': this._details,
}
}, /*setState*/(newState) => {
- // Default values if not specified.
this._pageOffset = newState.offset || 0;
this._pageSize = newState.page_size || 20;
this._details = newState.details || false;
-
- if (!this._urlParamsLoaded) {
- // Initial page load/fetch.
- this._urlParamsLoaded = true;
- this._fetchEntries();
- }
+ this._pushStateToURL(); // Reflect default values in the URL.
this._render();
+ this._fetchEntries();
});
}
@@ -130,7 +124,7 @@
_detailsHandler(e) {
this._details = e.target.checked;
- this._stateChanged();
+ this._pushStateToURL();
this._render();
this._fetchEntries();
}
@@ -138,7 +132,7 @@
_pageChanged(e) {
this._pageOffset =
Math.max(0, this._pageOffset + e.detail.delta * this._pageSize);
- this._stateChanged();
+ this._pushStateToURL();
this._render();
this._fetchEntries();
}
@@ -160,10 +154,6 @@
}
_fetch(url, method = 'GET') {
- if (!this._urlParamsLoaded) {
- return;
- }
-
// Force only one fetch at a time. Abort any outstanding requests.
if (this._fetchController) {
this._fetchController.abort();
@@ -186,7 +176,7 @@
this._pageOffset = json.pagination.offset || 0;
this._pageSize = json.pagination.size || 0;
this._totalEntries = json.pagination.total || 0;
- this._stateChanged();
+ this._pushStateToURL();
this._render();
this._sendDone();
})
diff --git a/golden/modules/triagelog-page-sk/triagelog-page-sk_test.js b/golden/modules/triagelog-page-sk/triagelog-page-sk_test.js
index bc099d9..808a4a7 100644
--- a/golden/modules/triagelog-page-sk/triagelog-page-sk_test.js
+++ b/golden/modules/triagelog-page-sk/triagelog-page-sk_test.js
@@ -155,6 +155,59 @@
expectShowDetailsCheckboxToBeChecked();
expectSecondPageOfResultsDetailsVisible();
});
+
+ it('responds to back and forward browser buttons', async () => {
+ fetchMock.get(
+ '/json/triagelog?details=false&offset=0&size=20', firstPage);
+ fetchMock.get(
+ '/json/triagelog?details=false&offset=0&size=3', firstPage);
+ fetchMock.get(
+ '/json/triagelog?details=true&offset=0&size=3', firstPageWithDetails);
+ fetchMock.get(
+ '/json/triagelog?details=false&offset=3&size=3', secondPage);
+ fetchMock.get(
+ '/json/triagelog?details=true&offset=3&size=3', secondPageWithDetails);
+
+ await loadTriagelogPageSk(); // Load first page of results by default.
+ expectQueryStringToEqual('?page_size=3');
+ expectFirstPageOfResultsDetailsHidden();
+
+ await toggleDetails(); // Show details.
+ expectQueryStringToEqual('?details=true&page_size=3');
+ expectFirstPageOfResultsDetailsVisible();
+
+ await goToNextPageOfResults();
+ expectQueryStringToEqual('?details=true&offset=3&page_size=3');
+ expectSecondPageOfResultsDetailsVisible();
+
+ await toggleDetails(); // Hide details.
+ expectQueryStringToEqual('?offset=3&page_size=3');
+ expectSecondPageOfResultsDetailsHidden();
+
+ await goBack();
+ expectQueryStringToEqual('?details=true&offset=3&page_size=3');
+ expectSecondPageOfResultsDetailsVisible();
+
+ await goBack();
+ expectQueryStringToEqual('?details=true&page_size=3');
+ expectFirstPageOfResultsDetailsVisible();
+
+ await goBack();
+ expectQueryStringToEqual('?page_size=3');
+ expectFirstPageOfResultsDetailsHidden();
+
+ await goForward();
+ expectQueryStringToEqual('?details=true&page_size=3');
+ expectFirstPageOfResultsDetailsVisible();
+
+ await goForward();
+ expectQueryStringToEqual('?details=true&offset=3&page_size=3');
+ expectSecondPageOfResultsDetailsVisible();
+
+ await goForward();
+ expectQueryStringToEqual('?offset=3&page_size=3');
+ expectSecondPageOfResultsDetailsHidden();
+ });
});
describe('RPC error', () => {
@@ -194,6 +247,18 @@
return event;
}
+ function goBack() {
+ const event = eventPromise('end-task');
+ history.back();
+ return event;
+ }
+
+ function goForward() {
+ const event = eventPromise('end-task');
+ history.forward();
+ return event;
+ }
+
function expectQueryStringToEqual(expected) {
expect(window.location.search).to.equal(expected);
}