From dff87d3b22613bac0656830e49ecea9994cde481 Mon Sep 17 00:00:00 2001 From: Milutin Kristofic Date: Mon, 15 Jun 2020 20:50:30 +0200 Subject: [PATCH] Move gerrit event emitter to services Change-Id: Ie0705dc3fe6a90074ecf715363e6f0f3cfdd625e --- .../core/gr-error-manager/gr-error-manager.js | 4 ++-- .../app/elements/gr-app-global-var-init.js | 4 ++-- polygerrit-ui/app/elements/gr-app.js | 3 ++- .../gr-event-emitter/gr-event-emitter.js | 21 ------------------- .../shared/gr-js-api-interface/gr-gerrit.js | 10 +++++---- .../shared/gr-rest-api-interface/gr-auth.js | 5 +++-- .../gr-rest-api-interface/gr-auth_test.html | 10 ++++----- .../app/services/app-context-init.js | 3 ++- polygerrit-ui/app/services/app-context.js | 1 + .../gr-event-interface/gr-event-interface.js | 0 .../gr-event-interface_test.html | 6 +++--- polygerrit-ui/app/test/common-test-setup.js | 20 +++++++++--------- polygerrit-ui/app/test/tests.js | 2 +- 13 files changed, 37 insertions(+), 52 deletions(-) delete mode 100644 polygerrit-ui/app/elements/shared/gr-event-emitter/gr-event-emitter.js rename polygerrit-ui/app/{elements/shared => services}/gr-event-interface/gr-event-interface.js (100%) rename polygerrit-ui/app/{elements/shared => services}/gr-event-interface/gr-event-interface_test.html (94%) diff --git a/polygerrit-ui/app/elements/core/gr-error-manager/gr-error-manager.js b/polygerrit-ui/app/elements/core/gr-error-manager/gr-error-manager.js index 9f6d0507f5..6cd2491433 100644 --- a/polygerrit-ui/app/elements/core/gr-error-manager/gr-error-manager.js +++ b/polygerrit-ui/app/elements/core/gr-error-manager/gr-error-manager.js @@ -28,7 +28,6 @@ import {PolymerElement} from '@polymer/polymer/polymer-element.js'; import {htmlTemplate} from './gr-error-manager_html.js'; import {BaseUrlBehavior} from '../../../behaviors/base-url-behavior/base-url-behavior.js'; import {authService} from '../../shared/gr-rest-api-interface/gr-auth.js'; -import {gerritEventEmitter} from '../../shared/gr-event-emitter/gr-event-emitter.js'; import {appContext} from '../../../services/app-context.js'; const HIDE_ALERT_TIMEOUT_MS = 5000; @@ -93,6 +92,7 @@ class GrErrorManager extends mixinBehaviors( [ this._authErrorHandlerDeregistrationHook; this.reporting = appContext.reportingService; + this.eventEmitter = appContext.eventEmitter; } /** @override */ @@ -106,7 +106,7 @@ class GrErrorManager extends mixinBehaviors( [ this.listen(document, 'show-auth-required', '_handleAuthRequired'); this._authErrorHandlerDeregistrationHook = - gerritEventEmitter.on('auth-error', + this.eventEmitter.on('auth-error', event => { this._handleAuthError(event.message, event.action); }); diff --git a/polygerrit-ui/app/elements/gr-app-global-var-init.js b/polygerrit-ui/app/elements/gr-app-global-var-init.js index 2c166f53f1..8c1161cb84 100644 --- a/polygerrit-ui/app/elements/gr-app-global-var-init.js +++ b/polygerrit-ui/app/elements/gr-app-global-var-init.js @@ -50,7 +50,7 @@ import {GrReviewerSuggestionsProvider, SUGGESTIONS_PROVIDERS_USERS_TYPES} from ' import {util} from '../scripts/util.js'; import page from 'page/page.mjs'; import {Auth} from './shared/gr-rest-api-interface/gr-auth.js'; -import {EventEmitter} from './shared/gr-event-interface/gr-event-interface.js'; +import {appContext} from '../services/app-context.js'; import {GrAdminApi} from './plugins/gr-admin-api/gr-admin-api.js'; import {GrAnnotationActionsContext} from './shared/gr-js-api-interface/gr-annotation-actions-context.js'; import {GrAnnotationActionsInterface} from './shared/gr-js-api-interface/gr-annotation-actions-js-api.js'; @@ -104,7 +104,7 @@ export function initGlobalVariables() { window.util = util; window.page = page; window.Auth = Auth; - window.EventEmitter = EventEmitter; + window.EventEmitter = appContext.eventEmitter; window.GrAdminApi = GrAdminApi; window.GrAnnotationActionsContext = GrAnnotationActionsContext; window.GrAnnotationActionsInterface = GrAnnotationActionsInterface; diff --git a/polygerrit-ui/app/elements/gr-app.js b/polygerrit-ui/app/elements/gr-app.js index 410539cacc..13009554b0 100644 --- a/polygerrit-ui/app/elements/gr-app.js +++ b/polygerrit-ui/app/elements/gr-app.js @@ -38,6 +38,7 @@ import {PolymerElement} from '@polymer/polymer/polymer-element.js'; import {htmlTemplate} from './gr-app_html.js'; import {SafeTypes} from '../behaviors/safe-types-behavior/safe-types-behavior.js'; import {initGerritPluginApi} from './shared/gr-js-api-interface/gr-gerrit.js'; +import {appContext} from '../services/app-context.js'; security.polymer_resin.install({ allowedIdentifierPrefixes: [''], @@ -57,4 +58,4 @@ class GrApp extends GestureEventListeners( customElements.define(GrApp.is, GrApp); initGlobalVariables(); -initGerritPluginApi(); +initGerritPluginApi(appContext); diff --git a/polygerrit-ui/app/elements/shared/gr-event-emitter/gr-event-emitter.js b/polygerrit-ui/app/elements/shared/gr-event-emitter/gr-event-emitter.js deleted file mode 100644 index cfe4c4fc87..0000000000 --- a/polygerrit-ui/app/elements/shared/gr-event-emitter/gr-event-emitter.js +++ /dev/null @@ -1,21 +0,0 @@ -/** - * @license - * Copyright (C) 2020 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import {EventEmitter} from '../gr-event-interface/gr-event-interface.js'; - -// TODO(dmfilippov): move to appContext -export const gerritEventEmitter = new EventEmitter(); diff --git a/polygerrit-ui/app/elements/shared/gr-js-api-interface/gr-gerrit.js b/polygerrit-ui/app/elements/shared/gr-js-api-interface/gr-gerrit.js index ef57ae9948..ce65755cc8 100644 --- a/polygerrit-ui/app/elements/shared/gr-js-api-interface/gr-gerrit.js +++ b/polygerrit-ui/app/elements/shared/gr-js-api-interface/gr-gerrit.js @@ -21,8 +21,8 @@ */ import {pluginLoader} from './gr-plugin-loader.js'; -import {gerritEventEmitter} from '../gr-event-emitter/gr-event-emitter.js'; import {getRestAPI, send} from './gr-api-utils.js'; +import {appContext} from '../../../services/app-context.js'; /** * Trigger the preinstalls for bundled plugins. @@ -146,9 +146,11 @@ function initGerritPluginsMethods(globalGerritObj) { return pluginLoader.isPluginLoaded(pathOrUrl); }; + const eventEmitter = appContext.eventEmitter; + // TODO(taoalpha): List all internal supported event names. // Also convert this to inherited class once we move Gerrit to class. - globalGerritObj._eventEmitter = gerritEventEmitter; + globalGerritObj._eventEmitter = eventEmitter; ['addListener', 'dispatch', 'emit', @@ -180,7 +182,7 @@ function initGerritPluginsMethods(globalGerritObj) { * }); * }); */ - globalGerritObj[method] = gerritEventEmitter[method] - .bind(gerritEventEmitter); + globalGerritObj[method] = eventEmitter[method] + .bind(eventEmitter); }); } diff --git a/polygerrit-ui/app/elements/shared/gr-rest-api-interface/gr-auth.js b/polygerrit-ui/app/elements/shared/gr-rest-api-interface/gr-auth.js index 6663f07723..50a837dcc8 100644 --- a/polygerrit-ui/app/elements/shared/gr-rest-api-interface/gr-auth.js +++ b/polygerrit-ui/app/elements/shared/gr-rest-api-interface/gr-auth.js @@ -15,7 +15,7 @@ * limitations under the License. */ import {BaseUrlBehavior} from '../../../behaviors/base-url-behavior/base-url-behavior.js'; -import {gerritEventEmitter} from '../gr-event-emitter/gr-event-emitter.js'; +import {appContext} from '../../../services/app-context.js'; const MAX_AUTH_CHECK_WAIT_TIME_MS = 1000 * 30; // 30s const MAX_GET_TOKEN_RETRIES = 2; @@ -34,6 +34,7 @@ export class Auth { this._status = Auth.STATUS.UNDETERMINED; this._authCheckPromise = null; this._last_auth_check_time = Date.now(); + this.eventEmitter = appContext.eventEmitter; } get baseUrl() { @@ -83,7 +84,7 @@ export class Auth { if (this._status === status) return; if (this._status === Auth.STATUS.AUTHED) { - gerritEventEmitter.emit('auth-error', { + this.eventEmitter.emit('auth-error', { message: Auth.CREDS_EXPIRED_MSG, action: 'Refresh credentials', }); } diff --git a/polygerrit-ui/app/elements/shared/gr-rest-api-interface/gr-auth_test.html b/polygerrit-ui/app/elements/shared/gr-rest-api-interface/gr-auth_test.html index f919cbbd74..f3abdb085f 100644 --- a/polygerrit-ui/app/elements/shared/gr-rest-api-interface/gr-auth_test.html +++ b/polygerrit-ui/app/elements/shared/gr-rest-api-interface/gr-auth_test.html @@ -28,7 +28,7 @@ limitations under the License. import '../../../test/common-test-setup.js'; import {BaseUrlBehavior} from '../../../behaviors/base-url-behavior/base-url-behavior.js'; import {Auth, authService} from './gr-auth.js'; -import {gerritEventEmitter} from '../gr-event-emitter/gr-event-emitter.js'; +import {appContext} from '../../../services/app-context.js'; suite('gr-auth', () => { let auth; @@ -161,7 +161,7 @@ suite('gr-auth', () => { clock.tick(1000 * 10000); fakeFetch.returns(Promise.resolve({status: 403})); const emitStub = sinon.stub(); - gerritEventEmitter.emit = emitStub; + appContext.eventEmitter.emit = emitStub; auth.authCheck().then(authed2 => { assert.isFalse(authed2); assert.equal(auth.status, Auth.STATUS.NOT_AUTHED); @@ -179,7 +179,7 @@ suite('gr-auth', () => { clock.tick(1000 * 10000); fakeFetch.returns(Promise.reject(new Error('random error'))); const emitStub = sinon.stub(); - gerritEventEmitter.emit = emitStub; + appContext.eventEmitter.emit = emitStub; auth.authCheck().then(authed2 => { assert.isFalse(authed2); assert.isTrue(emitStub.called); @@ -197,7 +197,7 @@ suite('gr-auth', () => { clock.tick(1000 * 10000); fakeFetch.returns(Promise.resolve({status: 204})); const emitStub = sinon.stub(); - gerritEventEmitter.emit = emitStub; + appContext.eventEmitter.emit = emitStub; auth.authCheck().then(authed2 => { assert.isTrue(authed2); assert.isFalse(emitStub.called); @@ -215,7 +215,7 @@ suite('gr-auth', () => { clock.tick(1000 * 10000); fakeFetch.returns(Promise.reject(new Error('random error'))); const emitStub = sinon.stub(); - gerritEventEmitter.emit = emitStub; + appContext.eventEmitter.emit = emitStub; auth.authCheck().then(authed2 => { assert.isFalse(authed2); assert.isFalse(emitStub.called); diff --git a/polygerrit-ui/app/services/app-context-init.js b/polygerrit-ui/app/services/app-context-init.js index 983314e6e3..fa6a44bfff 100644 --- a/polygerrit-ui/app/services/app-context-init.js +++ b/polygerrit-ui/app/services/app-context-init.js @@ -17,6 +17,7 @@ import {appContext} from './app-context.js'; import {FlagsService} from './flags.js'; import {GrReporting} from './gr-reporting/gr-reporting.js'; +import {EventEmitter} from './gr-event-interface/gr-event-interface.js'; const initializedServices = new Map(); @@ -46,6 +47,6 @@ export function initAppContext() { addService('flagsService', () => new FlagsService()); addService('reportingService', () => new GrReporting(appContext.flagsService)); - + addService('eventEmitter', () => new EventEmitter()); Object.defineProperties(appContext, registeredServices); } diff --git a/polygerrit-ui/app/services/app-context.js b/polygerrit-ui/app/services/app-context.js index 62b396d192..d82750e0c2 100644 --- a/polygerrit-ui/app/services/app-context.js +++ b/polygerrit-ui/app/services/app-context.js @@ -24,4 +24,5 @@ export const appContext = { flagsService: null, reportingService: null, + eventEmitter: null, }; \ No newline at end of file diff --git a/polygerrit-ui/app/elements/shared/gr-event-interface/gr-event-interface.js b/polygerrit-ui/app/services/gr-event-interface/gr-event-interface.js similarity index 100% rename from polygerrit-ui/app/elements/shared/gr-event-interface/gr-event-interface.js rename to polygerrit-ui/app/services/gr-event-interface/gr-event-interface.js diff --git a/polygerrit-ui/app/elements/shared/gr-event-interface/gr-event-interface_test.html b/polygerrit-ui/app/services/gr-event-interface/gr-event-interface_test.html similarity index 94% rename from polygerrit-ui/app/elements/shared/gr-event-interface/gr-event-interface_test.html rename to polygerrit-ui/app/services/gr-event-interface/gr-event-interface_test.html index 74936adea4..ef2c539df8 100644 --- a/polygerrit-ui/app/elements/shared/gr-event-interface/gr-event-interface_test.html +++ b/polygerrit-ui/app/services/gr-event-interface/gr-event-interface_test.html @@ -30,10 +30,10 @@ limitations under the License.