Merge "Move gerrit event emitter to services"
This commit is contained in:
@@ -28,7 +28,6 @@ import {PolymerElement} from '@polymer/polymer/polymer-element.js';
|
|||||||
import {htmlTemplate} from './gr-error-manager_html.js';
|
import {htmlTemplate} from './gr-error-manager_html.js';
|
||||||
import {BaseUrlBehavior} from '../../../behaviors/base-url-behavior/base-url-behavior.js';
|
import {BaseUrlBehavior} from '../../../behaviors/base-url-behavior/base-url-behavior.js';
|
||||||
import {authService} from '../../shared/gr-rest-api-interface/gr-auth.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';
|
import {appContext} from '../../../services/app-context.js';
|
||||||
|
|
||||||
const HIDE_ALERT_TIMEOUT_MS = 5000;
|
const HIDE_ALERT_TIMEOUT_MS = 5000;
|
||||||
@@ -93,6 +92,7 @@ class GrErrorManager extends mixinBehaviors( [
|
|||||||
this._authErrorHandlerDeregistrationHook;
|
this._authErrorHandlerDeregistrationHook;
|
||||||
|
|
||||||
this.reporting = appContext.reportingService;
|
this.reporting = appContext.reportingService;
|
||||||
|
this.eventEmitter = appContext.eventEmitter;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @override */
|
/** @override */
|
||||||
@@ -106,7 +106,7 @@ class GrErrorManager extends mixinBehaviors( [
|
|||||||
this.listen(document, 'show-auth-required', '_handleAuthRequired');
|
this.listen(document, 'show-auth-required', '_handleAuthRequired');
|
||||||
|
|
||||||
this._authErrorHandlerDeregistrationHook =
|
this._authErrorHandlerDeregistrationHook =
|
||||||
gerritEventEmitter.on('auth-error',
|
this.eventEmitter.on('auth-error',
|
||||||
event => {
|
event => {
|
||||||
this._handleAuthError(event.message, event.action);
|
this._handleAuthError(event.message, event.action);
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -50,7 +50,7 @@ import {GrReviewerSuggestionsProvider, SUGGESTIONS_PROVIDERS_USERS_TYPES} from '
|
|||||||
import {util} from '../scripts/util.js';
|
import {util} from '../scripts/util.js';
|
||||||
import page from 'page/page.mjs';
|
import page from 'page/page.mjs';
|
||||||
import {Auth} from './shared/gr-rest-api-interface/gr-auth.js';
|
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 {GrAdminApi} from './plugins/gr-admin-api/gr-admin-api.js';
|
||||||
import {GrAnnotationActionsContext} from './shared/gr-js-api-interface/gr-annotation-actions-context.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';
|
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.util = util;
|
||||||
window.page = page;
|
window.page = page;
|
||||||
window.Auth = Auth;
|
window.Auth = Auth;
|
||||||
window.EventEmitter = EventEmitter;
|
window.EventEmitter = appContext.eventEmitter;
|
||||||
window.GrAdminApi = GrAdminApi;
|
window.GrAdminApi = GrAdminApi;
|
||||||
window.GrAnnotationActionsContext = GrAnnotationActionsContext;
|
window.GrAnnotationActionsContext = GrAnnotationActionsContext;
|
||||||
window.GrAnnotationActionsInterface = GrAnnotationActionsInterface;
|
window.GrAnnotationActionsInterface = GrAnnotationActionsInterface;
|
||||||
|
|||||||
@@ -38,6 +38,7 @@ import {PolymerElement} from '@polymer/polymer/polymer-element.js';
|
|||||||
import {htmlTemplate} from './gr-app_html.js';
|
import {htmlTemplate} from './gr-app_html.js';
|
||||||
import {SafeTypes} from '../behaviors/safe-types-behavior/safe-types-behavior.js';
|
import {SafeTypes} from '../behaviors/safe-types-behavior/safe-types-behavior.js';
|
||||||
import {initGerritPluginApi} from './shared/gr-js-api-interface/gr-gerrit.js';
|
import {initGerritPluginApi} from './shared/gr-js-api-interface/gr-gerrit.js';
|
||||||
|
import {appContext} from '../services/app-context.js';
|
||||||
|
|
||||||
security.polymer_resin.install({
|
security.polymer_resin.install({
|
||||||
allowedIdentifierPrefixes: [''],
|
allowedIdentifierPrefixes: [''],
|
||||||
@@ -57,4 +58,4 @@ class GrApp extends GestureEventListeners(
|
|||||||
customElements.define(GrApp.is, GrApp);
|
customElements.define(GrApp.is, GrApp);
|
||||||
|
|
||||||
initGlobalVariables();
|
initGlobalVariables();
|
||||||
initGerritPluginApi();
|
initGerritPluginApi(appContext);
|
||||||
|
|||||||
@@ -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();
|
|
||||||
@@ -21,8 +21,8 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import {pluginLoader} from './gr-plugin-loader.js';
|
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 {getRestAPI, send} from './gr-api-utils.js';
|
||||||
|
import {appContext} from '../../../services/app-context.js';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Trigger the preinstalls for bundled plugins.
|
* Trigger the preinstalls for bundled plugins.
|
||||||
@@ -146,9 +146,11 @@ function initGerritPluginsMethods(globalGerritObj) {
|
|||||||
return pluginLoader.isPluginLoaded(pathOrUrl);
|
return pluginLoader.isPluginLoaded(pathOrUrl);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const eventEmitter = appContext.eventEmitter;
|
||||||
|
|
||||||
// TODO(taoalpha): List all internal supported event names.
|
// TODO(taoalpha): List all internal supported event names.
|
||||||
// Also convert this to inherited class once we move Gerrit to class.
|
// Also convert this to inherited class once we move Gerrit to class.
|
||||||
globalGerritObj._eventEmitter = gerritEventEmitter;
|
globalGerritObj._eventEmitter = eventEmitter;
|
||||||
['addListener',
|
['addListener',
|
||||||
'dispatch',
|
'dispatch',
|
||||||
'emit',
|
'emit',
|
||||||
@@ -180,7 +182,7 @@ function initGerritPluginsMethods(globalGerritObj) {
|
|||||||
* });
|
* });
|
||||||
* });
|
* });
|
||||||
*/
|
*/
|
||||||
globalGerritObj[method] = gerritEventEmitter[method]
|
globalGerritObj[method] = eventEmitter[method]
|
||||||
.bind(gerritEventEmitter);
|
.bind(eventEmitter);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,7 +15,7 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
import {BaseUrlBehavior} from '../../../behaviors/base-url-behavior/base-url-behavior.js';
|
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_AUTH_CHECK_WAIT_TIME_MS = 1000 * 30; // 30s
|
||||||
const MAX_GET_TOKEN_RETRIES = 2;
|
const MAX_GET_TOKEN_RETRIES = 2;
|
||||||
@@ -34,6 +34,7 @@ export class Auth {
|
|||||||
this._status = Auth.STATUS.UNDETERMINED;
|
this._status = Auth.STATUS.UNDETERMINED;
|
||||||
this._authCheckPromise = null;
|
this._authCheckPromise = null;
|
||||||
this._last_auth_check_time = Date.now();
|
this._last_auth_check_time = Date.now();
|
||||||
|
this.eventEmitter = appContext.eventEmitter;
|
||||||
}
|
}
|
||||||
|
|
||||||
get baseUrl() {
|
get baseUrl() {
|
||||||
@@ -83,7 +84,7 @@ export class Auth {
|
|||||||
if (this._status === status) return;
|
if (this._status === status) return;
|
||||||
|
|
||||||
if (this._status === Auth.STATUS.AUTHED) {
|
if (this._status === Auth.STATUS.AUTHED) {
|
||||||
gerritEventEmitter.emit('auth-error', {
|
this.eventEmitter.emit('auth-error', {
|
||||||
message: Auth.CREDS_EXPIRED_MSG, action: 'Refresh credentials',
|
message: Auth.CREDS_EXPIRED_MSG, action: 'Refresh credentials',
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ limitations under the License.
|
|||||||
import '../../../test/common-test-setup.js';
|
import '../../../test/common-test-setup.js';
|
||||||
import {BaseUrlBehavior} from '../../../behaviors/base-url-behavior/base-url-behavior.js';
|
import {BaseUrlBehavior} from '../../../behaviors/base-url-behavior/base-url-behavior.js';
|
||||||
import {Auth, authService} from './gr-auth.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', () => {
|
suite('gr-auth', () => {
|
||||||
let auth;
|
let auth;
|
||||||
@@ -161,7 +161,7 @@ suite('gr-auth', () => {
|
|||||||
clock.tick(1000 * 10000);
|
clock.tick(1000 * 10000);
|
||||||
fakeFetch.returns(Promise.resolve({status: 403}));
|
fakeFetch.returns(Promise.resolve({status: 403}));
|
||||||
const emitStub = sinon.stub();
|
const emitStub = sinon.stub();
|
||||||
gerritEventEmitter.emit = emitStub;
|
appContext.eventEmitter.emit = emitStub;
|
||||||
auth.authCheck().then(authed2 => {
|
auth.authCheck().then(authed2 => {
|
||||||
assert.isFalse(authed2);
|
assert.isFalse(authed2);
|
||||||
assert.equal(auth.status, Auth.STATUS.NOT_AUTHED);
|
assert.equal(auth.status, Auth.STATUS.NOT_AUTHED);
|
||||||
@@ -179,7 +179,7 @@ suite('gr-auth', () => {
|
|||||||
clock.tick(1000 * 10000);
|
clock.tick(1000 * 10000);
|
||||||
fakeFetch.returns(Promise.reject(new Error('random error')));
|
fakeFetch.returns(Promise.reject(new Error('random error')));
|
||||||
const emitStub = sinon.stub();
|
const emitStub = sinon.stub();
|
||||||
gerritEventEmitter.emit = emitStub;
|
appContext.eventEmitter.emit = emitStub;
|
||||||
auth.authCheck().then(authed2 => {
|
auth.authCheck().then(authed2 => {
|
||||||
assert.isFalse(authed2);
|
assert.isFalse(authed2);
|
||||||
assert.isTrue(emitStub.called);
|
assert.isTrue(emitStub.called);
|
||||||
@@ -197,7 +197,7 @@ suite('gr-auth', () => {
|
|||||||
clock.tick(1000 * 10000);
|
clock.tick(1000 * 10000);
|
||||||
fakeFetch.returns(Promise.resolve({status: 204}));
|
fakeFetch.returns(Promise.resolve({status: 204}));
|
||||||
const emitStub = sinon.stub();
|
const emitStub = sinon.stub();
|
||||||
gerritEventEmitter.emit = emitStub;
|
appContext.eventEmitter.emit = emitStub;
|
||||||
auth.authCheck().then(authed2 => {
|
auth.authCheck().then(authed2 => {
|
||||||
assert.isTrue(authed2);
|
assert.isTrue(authed2);
|
||||||
assert.isFalse(emitStub.called);
|
assert.isFalse(emitStub.called);
|
||||||
@@ -215,7 +215,7 @@ suite('gr-auth', () => {
|
|||||||
clock.tick(1000 * 10000);
|
clock.tick(1000 * 10000);
|
||||||
fakeFetch.returns(Promise.reject(new Error('random error')));
|
fakeFetch.returns(Promise.reject(new Error('random error')));
|
||||||
const emitStub = sinon.stub();
|
const emitStub = sinon.stub();
|
||||||
gerritEventEmitter.emit = emitStub;
|
appContext.eventEmitter.emit = emitStub;
|
||||||
auth.authCheck().then(authed2 => {
|
auth.authCheck().then(authed2 => {
|
||||||
assert.isFalse(authed2);
|
assert.isFalse(authed2);
|
||||||
assert.isFalse(emitStub.called);
|
assert.isFalse(emitStub.called);
|
||||||
|
|||||||
@@ -17,6 +17,7 @@
|
|||||||
import {appContext} from './app-context.js';
|
import {appContext} from './app-context.js';
|
||||||
import {FlagsService} from './flags.js';
|
import {FlagsService} from './flags.js';
|
||||||
import {GrReporting} from './gr-reporting/gr-reporting.js';
|
import {GrReporting} from './gr-reporting/gr-reporting.js';
|
||||||
|
import {EventEmitter} from './gr-event-interface/gr-event-interface.js';
|
||||||
|
|
||||||
const initializedServices = new Map();
|
const initializedServices = new Map();
|
||||||
|
|
||||||
@@ -46,6 +47,6 @@ export function initAppContext() {
|
|||||||
addService('flagsService', () => new FlagsService());
|
addService('flagsService', () => new FlagsService());
|
||||||
addService('reportingService',
|
addService('reportingService',
|
||||||
() => new GrReporting(appContext.flagsService));
|
() => new GrReporting(appContext.flagsService));
|
||||||
|
addService('eventEmitter', () => new EventEmitter());
|
||||||
Object.defineProperties(appContext, registeredServices);
|
Object.defineProperties(appContext, registeredServices);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,4 +24,5 @@
|
|||||||
export const appContext = {
|
export const appContext = {
|
||||||
flagsService: null,
|
flagsService: null,
|
||||||
reportingService: null,
|
reportingService: null,
|
||||||
|
eventEmitter: null,
|
||||||
};
|
};
|
||||||
@@ -30,10 +30,10 @@ limitations under the License.
|
|||||||
</test-fixture>
|
</test-fixture>
|
||||||
|
|
||||||
<script type="module">
|
<script type="module">
|
||||||
import '../../../test/common-test-setup.js';
|
import '../../test/common-test-setup.js';
|
||||||
import '../gr-js-api-interface/gr-js-api-interface.js';
|
import '../../elements/shared/gr-js-api-interface/gr-js-api-interface.js';
|
||||||
import {EventEmitter} from './gr-event-interface.js';
|
import {EventEmitter} from './gr-event-interface.js';
|
||||||
import {_testOnly_initGerritPluginApi} from '../gr-js-api-interface/gr-gerrit.js';
|
import {_testOnly_initGerritPluginApi} from '../../elements/shared/gr-js-api-interface/gr-gerrit.js';
|
||||||
|
|
||||||
const pluginApi = _testOnly_initGerritPluginApi();
|
const pluginApi = _testOnly_initGerritPluginApi();
|
||||||
|
|
||||||
@@ -91,16 +91,6 @@ setup(() => {
|
|||||||
assert.equal(cleanups.length, 0);
|
assert.equal(cleanups.length, 0);
|
||||||
|
|
||||||
_testOnly_resetPluginLoader();
|
_testOnly_resetPluginLoader();
|
||||||
|
|
||||||
initAppContext();
|
|
||||||
function setMock(serviceName, setupMock) {
|
|
||||||
Object.defineProperty(appContext, serviceName, {
|
|
||||||
get() {
|
|
||||||
return setupMock;
|
|
||||||
},
|
|
||||||
});
|
|
||||||
}
|
|
||||||
setMock('reportingService', grReportingMock);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
if (isKarmaTest() || window.stub) {
|
if (isKarmaTest() || window.stub) {
|
||||||
@@ -125,6 +115,16 @@ if (isKarmaTest() || window.stub) {
|
|||||||
throw new Error('window.stub must be set after wct sets it');
|
throw new Error('window.stub must be set after wct sets it');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
initAppContext();
|
||||||
|
function setMock(serviceName, setupMock) {
|
||||||
|
Object.defineProperty(appContext, serviceName, {
|
||||||
|
get() {
|
||||||
|
return setupMock;
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
setMock('reportingService', grReportingMock);
|
||||||
|
|
||||||
teardown(() => {
|
teardown(() => {
|
||||||
// WCT incorrectly uses teardown method in the 'fixture' and 'stub'
|
// WCT incorrectly uses teardown method in the 'fixture' and 'stub'
|
||||||
// implementations. This leads to slowdown WCT tests after each tests.
|
// implementations. This leads to slowdown WCT tests after each tests.
|
||||||
|
|||||||
@@ -146,7 +146,6 @@ const elements = [
|
|||||||
'settings/gr-settings-view/gr-settings-view_test.html',
|
'settings/gr-settings-view/gr-settings-view_test.html',
|
||||||
'settings/gr-ssh-editor/gr-ssh-editor_test.html',
|
'settings/gr-ssh-editor/gr-ssh-editor_test.html',
|
||||||
'settings/gr-watched-projects-editor/gr-watched-projects-editor_test.html',
|
'settings/gr-watched-projects-editor/gr-watched-projects-editor_test.html',
|
||||||
'shared/gr-event-interface/gr-event-interface_test.html',
|
|
||||||
'shared/gr-account-entry/gr-account-entry_test.html',
|
'shared/gr-account-entry/gr-account-entry_test.html',
|
||||||
'shared/gr-account-label/gr-account-label_test.html',
|
'shared/gr-account-label/gr-account-label_test.html',
|
||||||
'shared/gr-account-list/gr-account-list_test.html',
|
'shared/gr-account-list/gr-account-list_test.html',
|
||||||
@@ -256,6 +255,7 @@ const services = [
|
|||||||
'flags_test.html',
|
'flags_test.html',
|
||||||
'gr-reporting/gr-reporting_test.html',
|
'gr-reporting/gr-reporting_test.html',
|
||||||
'gr-reporting/gr-reporting_mock_test.html',
|
'gr-reporting/gr-reporting_mock_test.html',
|
||||||
|
'gr-event-interface/gr-event-interface_test.html',
|
||||||
];
|
];
|
||||||
for (let file of services) {
|
for (let file of services) {
|
||||||
file = servicesPath + file;
|
file = servicesPath + file;
|
||||||
|
|||||||
Reference in New Issue
Block a user