Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -147,6 +147,10 @@ export class NativeBrowserElementsMainService extends Disposable implements INat
throw new Error('No target found');
}

if (token.isCancellationRequested) {
return;
}

window.win.webContents.on('ipc-message', async (event, channel, closedCancelAndDetachId) => {
if (channel === `vscode:cancelCurrentSession${cancelAndDetachId}`) {
if (cancelAndDetachId !== closedCancelAndDetachId) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
*--------------------------------------------------------------------------------------------*/

import './media/simpleBrowserOverlay.css';
import { combinedDisposable, DisposableMap, DisposableStore, toDisposable } from '../../../../../base/common/lifecycle.js';
import { combinedDisposable, Disposable, DisposableMap, DisposableStore, MutableDisposable, toDisposable } from '../../../../../base/common/lifecycle.js';
import { autorun, derivedOpts, observableFromEvent, observableSignalFromEvent } from '../../../../../base/common/observable.js';
import { IInstantiationService } from '../../../../../platform/instantiation/common/instantiation.js';
import { ThemeIcon } from '../../../../../base/common/themables.js';
Expand Down Expand Up @@ -313,11 +313,11 @@ class SimpleBrowserOverlayWidget {
}
}

class SimpleBrowserOverlayController {
class SimpleBrowserOverlayController extends Disposable {

private readonly _store = new DisposableStore();

private readonly _domNode = document.createElement('div');
private readonly _ctsDisposable = this._register(new MutableDisposable<CancellationTokenSource>());

constructor(
container: HTMLElement,
Expand All @@ -326,7 +326,7 @@ class SimpleBrowserOverlayController {
@IConfigurationService private readonly configurationService: IConfigurationService,
@IBrowserElementsService private readonly _browserElementsService: IBrowserElementsService,
) {

super();
if (!this.configurationService.getValue('chat.sendElementsToChat.enabled')) {
return;
}
Expand All @@ -339,14 +339,12 @@ class SimpleBrowserOverlayController {

const widget = instaService.createInstance(SimpleBrowserOverlayWidget, group, container);
this._domNode.appendChild(widget.getDomNode());
this._store.add(toDisposable(() => this._domNode.remove()));
this._store.add(widget);
this._register(toDisposable(() => this._domNode.remove()));
this._register(widget);

const connectingWebviewElement = document.createElement('div');
connectingWebviewElement.className = 'connecting-webview-element';


let cts = new CancellationTokenSource();
const show = async (locator: IBrowserTargetLocator) => {
widget.setActiveLocator(locator);

Expand All @@ -356,9 +354,10 @@ class SimpleBrowserOverlayController {
container.appendChild(connectingWebviewElement);
}

cts = new CancellationTokenSource();
this._ctsDisposable.value?.cancel();
this._ctsDisposable.value = new CancellationTokenSource();
try {
await this._browserElementsService.startDebugSession(cts.token, locator);
await this._browserElementsService.startDebugSession(this._ctsDisposable.value.token, locator);
} catch (error) {
connectingWebviewElement.textContent = localize('reopenErrorWebviewElement', 'Please reopen the preview.');
return;
Expand All @@ -372,8 +371,9 @@ class SimpleBrowserOverlayController {

const hide = () => {
widget.setActiveLocator(undefined);
this._ctsDisposable.value?.cancel();
this._ctsDisposable.clear();
if (container.contains(this._domNode)) {
cts.cancel();
this._domNode.remove();
}
connectingWebviewElement.remove();
Expand All @@ -397,7 +397,7 @@ class SimpleBrowserOverlayController {
return undefined;
});

this._store.add(autorun(r => {
this._register(autorun(r => {

const webviewId = activeIdObs.read(r);

Expand All @@ -410,9 +410,6 @@ class SimpleBrowserOverlayController {
}));
}

dispose(): void {
this._store.dispose();
}
}

export class SimpleBrowserOverlay implements IWorkbenchContribution {
Expand Down
Loading