mirror of
https://github.com/microsoft/vscode.git
synced 2026-04-28 12:33:35 +01:00
Implement URLHandler router which looks at windowId query param (#80260)
* move urlIpc to common * implement URLHandlerRouter fixes #79635 * Add windowId to app URI * use encodeURIComponent
This commit is contained in:
committed by
Benjamin Pasero
parent
51334d5bd9
commit
0b3ae7e089
@@ -4,13 +4,14 @@
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
import { IURLService, IURLHandler } from 'vs/platform/url/common/url';
|
||||
import { URI } from 'vs/base/common/uri';
|
||||
import { URI, UriComponents } from 'vs/base/common/uri';
|
||||
import { IMainProcessService } from 'vs/platform/ipc/electron-browser/mainProcessService';
|
||||
import { URLServiceChannelClient, URLHandlerChannel } from 'vs/platform/url/node/urlIpc';
|
||||
import { URLServiceChannelClient, URLHandlerChannel } from 'vs/platform/url/common/urlIpc';
|
||||
import { URLService } from 'vs/platform/url/node/urlService';
|
||||
import { IOpenerService } from 'vs/platform/opener/common/opener';
|
||||
import product from 'vs/platform/product/node/product';
|
||||
import { registerSingleton } from 'vs/platform/instantiation/common/extensions';
|
||||
import { IWindowService } from 'vs/platform/windows/common/windows';
|
||||
|
||||
export class RelayURLService extends URLService implements IURLHandler {
|
||||
|
||||
@@ -18,7 +19,8 @@ export class RelayURLService extends URLService implements IURLHandler {
|
||||
|
||||
constructor(
|
||||
@IMainProcessService mainProcessService: IMainProcessService,
|
||||
@IOpenerService openerService: IOpenerService
|
||||
@IOpenerService openerService: IOpenerService,
|
||||
@IWindowService private windowService: IWindowService
|
||||
) {
|
||||
super();
|
||||
|
||||
@@ -28,6 +30,19 @@ export class RelayURLService extends URLService implements IURLHandler {
|
||||
openerService.registerOpener(this);
|
||||
}
|
||||
|
||||
create(options?: Partial<UriComponents>): URI {
|
||||
const uri = super.create(options);
|
||||
|
||||
let query = uri.query;
|
||||
if (!query) {
|
||||
query = `windowId=${encodeURIComponent(this.windowService.windowId)}`;
|
||||
} else {
|
||||
query += `&windowId=${encodeURIComponent(this.windowService.windowId)}`;
|
||||
}
|
||||
|
||||
return uri.with({ query });
|
||||
}
|
||||
|
||||
async open(resource: URI, options?: { openToSide?: boolean, openExternal?: boolean }): Promise<boolean> {
|
||||
if (resource.scheme !== product.urlProtocol) {
|
||||
return false;
|
||||
|
||||
Reference in New Issue
Block a user