Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
microsoft
GitHub Repository: microsoft/vscode
Path: blob/main/src/vs/platform/browserView/common/browserViewGroup.ts
13397 views
1
/*---------------------------------------------------------------------------------------------
2
* Copyright (c) Microsoft Corporation. All rights reserved.
3
* Licensed under the MIT License. See License.txt in the project root for license information.
4
*--------------------------------------------------------------------------------------------*/
5
6
import { Event } from '../../../base/common/event.js';
7
import { IDisposable } from '../../../base/common/lifecycle.js';
8
import { IBrowserViewOwner } from './browserView.js';
9
import { CDPEvent, CDPRequest, CDPResponse } from './cdp/types.js';
10
11
export const ipcBrowserViewGroupChannelName = 'browserViewGroup';
12
13
/**
14
* Fired when a browser view is added to or removed from a group.
15
*/
16
export interface IBrowserViewGroupViewEvent {
17
/** The ID of the browser view that was added or removed. */
18
readonly viewId: string;
19
}
20
21
/**
22
* A browser view group - an isolated collection of browser views.
23
*
24
* This interface is shared between the main-process entity and remote proxies.
25
*/
26
export interface IBrowserViewGroup extends IDisposable {
27
readonly id: string;
28
29
readonly onDidAddView: Event<IBrowserViewGroupViewEvent>;
30
readonly onDidRemoveView: Event<IBrowserViewGroupViewEvent>;
31
readonly onDidDestroy: Event<void>;
32
readonly onCDPMessage: Event<CDPResponse | CDPEvent>;
33
34
addView(viewId: string): Promise<void>;
35
removeView(viewId: string): Promise<void>;
36
sendCDPMessage(msg: CDPRequest): Promise<void>;
37
}
38
39
/**
40
* Common service for managing browser view groups across processes.
41
*
42
* A browser view group is an isolated collection of browser views that can be
43
* independently exposed to different services or CDP clients.
44
*
45
* This interface is consumed via {@link ProxyChannel}.
46
* The main-process implementation is {@link BrowserViewGroupMainService}.
47
*/
48
export interface IBrowserViewGroupService {
49
50
// Dynamic events - one per group instance, keyed by group ID.
51
onDynamicDidAddView(groupId: string): Event<IBrowserViewGroupViewEvent>;
52
onDynamicDidRemoveView(groupId: string): Event<IBrowserViewGroupViewEvent>;
53
onDynamicDidDestroy(groupId: string): Event<void>;
54
onDynamicCDPMessage(groupId: string): Event<CDPResponse | CDPEvent>;
55
56
/**
57
* Create a new browser view group.
58
* @param owner The owner of the group's lifecycle.
59
* @returns The id of the newly created group.
60
*/
61
createGroup(owner: IBrowserViewOwner): Promise<string>;
62
63
/**
64
* Destroy a browser view group.
65
* Views in the group are **not** destroyed - they are simply detached.
66
* @param groupId The group identifier.
67
*/
68
destroyGroup(groupId: string): Promise<void>;
69
70
/**
71
* Add a browser view to a group.
72
* A view can belong to multiple groups simultaneously.
73
* @param groupId The group identifier.
74
* @param viewId The browser view identifier.
75
*/
76
addViewToGroup(groupId: string, viewId: string): Promise<void>;
77
78
/**
79
* Remove a browser view from a group.
80
* @param groupId The group identifier.
81
* @param viewId The browser view identifier.
82
*/
83
removeViewFromGroup(groupId: string, viewId: string): Promise<void>;
84
85
/**
86
* Send a CDP message to a group's browser proxy.
87
* @param groupId The group identifier.
88
* @param message The CDP request.
89
*/
90
sendCDPMessage(groupId: string, message: CDPRequest): Promise<void>;
91
}
92
93