Merge "Find out why the error-manager initiates page reloads"
diff --git a/polygerrit-ui/app/elements/core/gr-error-manager/gr-error-manager.ts b/polygerrit-ui/app/elements/core/gr-error-manager/gr-error-manager.ts
index a3a648e..07dec91 100644
--- a/polygerrit-ui/app/elements/core/gr-error-manager/gr-error-manager.ts
+++ b/polygerrit-ui/app/elements/core/gr-error-manager/gr-error-manager.ts
@@ -364,6 +364,7 @@
this._createLoginPopup()
);
this.fire('iron-announce', {text: errorText}, {bubbles: true});
+ this.reporting.reportInteraction('show-auth-error', {text: errorText});
this._refreshingCredentials = true;
this._requestCheckLoggedIn();
if (!document.hidden) {
@@ -379,11 +380,8 @@
}
_handleVisibilityChange() {
- // Ignore when the page is transitioning to hidden (or hidden is
- // undefined).
- if (document.hidden !== false) {
- return;
- }
+ // Ignore when the page is transitioning to hidden (or hidden is undefined).
+ if (document.hidden !== false) return;
// If not currently refreshing credentials and the credentials are old,
// request them to confirm their validity or (display an auth toast if it
@@ -394,6 +392,7 @@
this.knownAccountId !== undefined &&
timeSinceLastCheck > STALE_CREDENTIAL_THRESHOLD_MS
) {
+ this.reporting.reportInteraction('visibility-sign-in-check');
this._lastCredentialCheck = Date.now();
// check auth status in case:
@@ -419,7 +418,6 @@
this._authService.clearCache();
this.restApiService.getLoggedIn().then(isLoggedIn => {
- // do nothing if its refreshing
if (!this._refreshingCredentials) return;
if (!isLoggedIn) {
@@ -429,12 +427,15 @@
// in case #2, auth-error is taken care of separately
this._requestCheckLoggedIn();
} else {
- // check account
this.restApiService.getAccount().then(account => {
if (this._refreshingCredentials) {
- // If the credentials were refreshed but the account is different
+ // If the credentials were refreshed but the account is different,
// then reload the page completely.
if (account?._account_id !== this.knownAccountId) {
+ this.reporting.reportInteraction('sign-in-window-reload', {
+ oldAccount: !!this.knownAccountId,
+ newAccount: !!account?._account_id,
+ });
this._reloadPage();
return;
}
diff --git a/polygerrit-ui/app/services/gr-reporting/gr-reporting_mock.ts b/polygerrit-ui/app/services/gr-reporting/gr-reporting_mock.ts
index a6472d1..2b42a6b 100644
--- a/polygerrit-ui/app/services/gr-reporting/gr-reporting_mock.ts
+++ b/polygerrit-ui/app/services/gr-reporting/gr-reporting_mock.ts
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-import {ReportingService, Timer} from './gr-reporting';
+import {EventDetails, ReportingService, Timer} from './gr-reporting';
export class MockTimer implements Timer {
end(): this {
@@ -30,6 +30,10 @@
}
}
+const log = function (msg: string) {
+ console.info(`ReportingMock.${msg}`);
+};
+
export const grReportingMock: ReportingService = {
appStarted: () => {},
beforeLocationChanged: () => {},
@@ -43,17 +47,29 @@
getTimer: () => {
return new MockTimer();
},
- locationChanged: () => {},
- onVisibilityChange: () => {},
+ locationChanged: (page: string) => {
+ log(`locationChanged: ${page}`);
+ },
+ onVisibilityChange: () => {
+ log('onVisibilityChange');
+ },
pluginLoaded: () => {},
pluginsLoaded: () => {},
recordDraftInteraction: () => {},
reporter: () => {},
- reportErrorDialog: () => {},
- error: () => {},
- reportExecution: () => {},
+ reportErrorDialog: (message: string) => {
+ log(`reportErrorDialog: ${message}`);
+ },
+ error: () => {
+ log('error');
+ },
+ reportExecution: (id: string, details: EventDetails) => {
+ log(`reportExecution '${id}': ${JSON.stringify(details)}`);
+ },
reportExtension: () => {},
- reportInteraction: () => {},
+ reportInteraction: (eventName: string, details?: EventDetails) => {
+ log(`reportInteraction '${eventName}': ${JSON.stringify(details)}`);
+ },
reportLifeCycle: () => {},
reportRpcTiming: () => {},
setRepoName: () => {},