提交 8871a289 编写于 作者: R Rachel Macfarlane

Make github-authentication a UI extension again

上级 6be16f9a
......@@ -11,6 +11,11 @@
"categories": [
"Other"
],
"extensionKind": [
"ui",
"workspace",
"web"
],
"activationEvents": [
"*",
"onAuthenticationRequest:github"
......
......@@ -249,7 +249,7 @@ export class MainThreadAuthentication extends Disposable implements MainThreadAu
}
$ensureProvider(id: string): Promise<void> {
return this.extensionService.activateByEvent(getAuthenticationProviderActivationEvent(id));
return this.extensionService.activateByEvent(getAuthenticationProviderActivationEvent(id), true);
}
$sendDidChangeSessions(id: string, event: modes.AuthenticationSessionsChangeEvent): void {
......
......@@ -1074,7 +1074,7 @@ export type IResolveAuthorityResult = IResolveAuthorityErrorResult | IResolveAut
export interface ExtHostExtensionServiceShape {
$resolveAuthority(remoteAuthority: string, resolveAttempt: number): Promise<IResolveAuthorityResult>;
$startExtensionHost(enabledExtensionIds: ExtensionIdentifier[]): Promise<void>;
$activateByEvent(activationEvent: string): Promise<void>;
$activateByEvent(activationEvent: string, eager?: boolean): Promise<void>;
$activate(extensionId: ExtensionIdentifier, reason: ExtensionActivationReason): Promise<boolean>;
$setRemoteEnvironment(env: { [key: string]: string | null; }): Promise<void>;
$updateRemoteConnectionData(connectionData: IRemoteConnectionData): Promise<void>;
......
......@@ -686,7 +686,11 @@ export abstract class AbstractExtHostExtensionService extends Disposable impleme
return this._startExtensionHost();
}
public $activateByEvent(activationEvent: string): Promise<void> {
public $activateByEvent(activationEvent: string, eager: boolean = true): Promise<void> {
if (eager) {
return this._activateByEvent(activationEvent, false);
}
return (
this._readyToRunExtensions.wait()
.then(_ => this._activateByEvent(activationEvent, false))
......
......@@ -186,7 +186,7 @@ export abstract class AbstractExtensionService extends Disposable implements IEx
this._startExtensionHosts(false, Array.from(this._allRequestedActivateEvents.keys()));
}
public activateByEvent(activationEvent: string): Promise<void> {
public activateByEvent(activationEvent: string, eager?: boolean): Promise<void> {
if (this._installedExtensionsReady.isOpen()) {
// Extensions have been scanned and interpreted
......@@ -205,13 +205,17 @@ export abstract class AbstractExtensionService extends Disposable implements IEx
// Record the fact that this activationEvent was requested (in case of a restart)
this._allRequestedActivateEvents.add(activationEvent);
if (eager) {
return this._activateByEvent(activationEvent, eager);
}
return this._installedExtensionsReady.wait().then(() => this._activateByEvent(activationEvent));
}
}
private _activateByEvent(activationEvent: string): Promise<void> {
private _activateByEvent(activationEvent: string, eager?: boolean): Promise<void> {
const result = Promise.all(
this._extensionHostManagers.map(extHostManager => extHostManager.activateByEvent(activationEvent))
this._extensionHostManagers.map(extHostManager => extHostManager.activateByEvent(activationEvent, eager))
).then(() => { });
this._onWillActivateByEvent.fire({
event: activationEvent,
......
......@@ -48,6 +48,7 @@ export class ExtensionHostManager extends Disposable {
*/
private _proxy: Promise<{ value: ExtHostExtensionServiceShape; } | null> | null;
private _resolveAuthorityAttempt: number;
private _hasStarted = false;
constructor(
extensionHost: IExtensionHost,
......@@ -65,6 +66,7 @@ export class ExtensionHostManager extends Disposable {
this.onDidExit = this._extensionHost.onExit;
this._proxy = this._extensionHost.start()!.then(
(protocol) => {
this._hasStarted = true;
return { value: this._createExtensionHostCustomers(protocol) };
},
(err) => {
......@@ -217,14 +219,18 @@ export class ExtensionHostManager extends Disposable {
return proxy.$activate(extension, reason);
}
public activateByEvent(activationEvent: string): Promise<void> {
public activateByEvent(activationEvent: string, eager?: boolean): Promise<void> {
if (eager && !this._hasStarted) {
return Promise.resolve();
}
if (!this._cachedActivationEvents.has(activationEvent)) {
this._cachedActivationEvents.set(activationEvent, this._activateByEvent(activationEvent));
this._cachedActivationEvents.set(activationEvent, this._activateByEvent(activationEvent, eager));
}
return this._cachedActivationEvents.get(activationEvent)!;
}
private async _activateByEvent(activationEvent: string): Promise<void> {
private async _activateByEvent(activationEvent: string, eager?: boolean): Promise<void> {
if (!this._proxy) {
return;
}
......@@ -234,7 +240,7 @@ export class ExtensionHostManager extends Disposable {
// i.e. the extension host could not be started
return;
}
return proxy.value.$activateByEvent(activationEvent);
return proxy.value.$activateByEvent(activationEvent, eager);
}
public async getInspectPort(tryEnableInspector: boolean): Promise<number> {
......
......@@ -177,8 +177,13 @@ export interface IExtensionService {
/**
* Send an activation event and activate interested extensions.
*
* Normally, this will queue the activation event if the extension hosts are not ready
* and send it to all of them. If the extension needs to be activated before this,
* the eager flag can be used to ignore extension hosts that aren't yet started. Do not
* use this flag unless necessary.
*/
activateByEvent(activationEvent: string): Promise<void>;
activateByEvent(activationEvent: string, eager?: boolean): Promise<void>;
/**
* An promise that resolves when the installed extensions are registered after
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册