diff --git a/src/vs/workbench/contrib/webview/browser/pre/index.html b/src/vs/workbench/contrib/webview/browser/pre/index.html index 9727c148c3fc4f7e630cc16f43e27d9583d8bd20..4128a65be4a87ebb9a6e3cd6fbc9a407c37c0952 100644 --- a/src/vs/workbench/contrib/webview/browser/pre/index.html +++ b/src/vs/workbench/contrib/webview/browser/pre/index.html @@ -16,38 +16,91 @@ - + + \ No newline at end of file diff --git a/src/vs/workbench/contrib/webview/browser/pre/main.js b/src/vs/workbench/contrib/webview/browser/pre/main.js index caef053b16f8fd971b5ec646d98d5ca1fdef0b15..c30f0c79592bf3595e79794bc0a6acb68b01ee19 100644 --- a/src/vs/workbench/contrib/webview/browser/pre/main.js +++ b/src/vs/workbench/contrib/webview/browser/pre/main.js @@ -99,7 +99,8 @@ * postMessage: (channel: string, data?: any) => void, * onMessage: (channel: string, handler: any) => void, * injectHtml?: (document: HTMLDocument) => void, - * focusIframeOnCreate?: boolean + * focusIframeOnCreate?: boolean, + * ready?: Promise * }} HostCommunications */ @@ -120,29 +121,6 @@ // Service worker for resource loading const FAKE_LOAD = !!navigator.serviceWorker; - const workerReady = new Promise(resolve => { - if (!navigator.serviceWorker) { - resolve(); - } - navigator.serviceWorker.register('service-worker.js').finally(resolve); - - function forwardFromHostToWorker(channel) { - host.onMessage(channel, event => { - navigator.serviceWorker.ready.then(registration => { - registration.active.postMessage({ channel: channel, data: event.data.args }); - }); - }); - } - forwardFromHostToWorker('did-load-resource'); - forwardFromHostToWorker('did-load-localhost'); - - navigator.serviceWorker.addEventListener('message', event => { - if (['load-resource', 'load-localhost'].includes(event.data.channel)) { - host.postMessage(event.data.channel, event.data); - } - }); - }); - /** * @param {HTMLDocument?} document * @param {HTMLElement?} body @@ -269,7 +247,7 @@ let updateId = 0; host.onMessage('content', async (_event, data) => { const currentUpdateId = ++updateId; - await workerReady; + await host.ready; if (currentUpdateId !== updateId) { return; } diff --git a/src/vs/workbench/contrib/webview/browser/pre/service-worker.js b/src/vs/workbench/contrib/webview/browser/pre/service-worker.js index 09157ea51214df146b7d2b15f762a469d0fe35ae..7e200dc4e980bd67441b6bff2ed768e2ea4501de 100644 --- a/src/vs/workbench/contrib/webview/browser/pre/service-worker.js +++ b/src/vs/workbench/contrib/webview/browser/pre/service-worker.js @@ -2,6 +2,8 @@ * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ +const VERSION = 1; + /** * Root path for resources */ @@ -106,8 +108,20 @@ const notFoundResponse = new Response('Not Found', { status: 404, }); -self.addEventListener('message', (event) => { +self.addEventListener('message', async (event) => { switch (event.data.channel) { + case 'version': + { + self.clients.get(event.source.id).then(client => { + if (client) { + client.postMessage({ + channel: 'version', + version: VERSION + }); + } + }); + return; + } case 'did-load-resource': { const webviewId = getWebviewIdForClient(event.source);