Skip to content

Commit 8b66bdd

Browse files
committed
- Added BrowserWindow.AddExtension, RemoveExtension, GetExtensions support. Not yet tested
1 parent ba64639 commit 8b66bdd

File tree

3 files changed

+53
-20
lines changed

3 files changed

+53
-20
lines changed

ElectronNET.API/BrowserWindow.cs

Lines changed: 26 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2318,9 +2318,19 @@ public void SetVibrancy(Vibrancy type)
23182318
/// </summary>
23192319
/// <param name="path">Path to the Chrome extension</param>
23202320
/// <returns></returns>
2321-
public static string AddExtension(string path)
2321+
public static Task<string> AddExtensionAsync(string path)
23222322
{
2323-
throw new NotImplementedException();
2323+
var taskCompletionSource = new TaskCompletionSource<string>();
2324+
2325+
BridgeConnector.Socket.On("browserWindow-addExtension-completed", (extensionname) => {
2326+
BridgeConnector.Socket.Off("browserWindow-addExtension-completed");
2327+
2328+
taskCompletionSource.SetResult(extensionname.ToString());
2329+
});
2330+
2331+
BridgeConnector.Socket.Emit("browserWindowAddExtension", path);
2332+
2333+
return taskCompletionSource.Task;
23242334
}
23252335

23262336
/// <summary>
@@ -2330,17 +2340,28 @@ public static string AddExtension(string path)
23302340
/// <param name="name">Name of the Chrome extension to remove</param>
23312341
public static void RemoveExtension(string name)
23322342
{
2333-
throw new NotImplementedException();
2343+
BridgeConnector.Socket.Emit("browserWindowRemoveExtension", name);
23342344
}
23352345

23362346
/// <summary>
23372347
/// The keys are the extension names and each value is an object containing name and version properties.
23382348
/// Note: This API cannot be called before the ready event of the app module is emitted.
23392349
/// </summary>
23402350
/// <returns></returns>
2341-
public static Dictionary<string, ChromeExtensionInfo> GetExtensions()
2351+
public static Task<ChromeExtensionInfo[]> GetExtensionsAsync()
23422352
{
2343-
throw new NotImplementedException();
2353+
var taskCompletionSource = new TaskCompletionSource<ChromeExtensionInfo[]>();
2354+
2355+
BridgeConnector.Socket.On("browserWindow-getExtensions-completed", (extensionslist) => {
2356+
BridgeConnector.Socket.Off("browserWindow-getExtensions-completed");
2357+
var chromeExtensionInfos = ((JArray)extensionslist).ToObject<ChromeExtensionInfo[]>();
2358+
2359+
taskCompletionSource.SetResult(chromeExtensionInfos);
2360+
});
2361+
2362+
BridgeConnector.Socket.Emit("browserWindowGetExtensions");
2363+
2364+
return taskCompletionSource.Task;
23442365
}
23452366
}
23462367
}

ElectronNET.API/Entities/ChromeExtensionInfo.cs

Lines changed: 5 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -9,30 +9,20 @@ namespace ElectronNET.API.Entities
99
/// </summary>
1010
public class ChromeExtensionInfo
1111
{
12-
private string _name;
13-
private string _version;
14-
15-
16-
internal ChromeExtensionInfo(string name, string version)
12+
public ChromeExtensionInfo(string name, string version)
1713
{
18-
_name = name;
19-
_version = version;
14+
Name = name;
15+
Version = version;
2016
}
2117

2218
/// <summary>
2319
/// Name of the Chrome extension
2420
/// </summary>
25-
public string Name
26-
{
27-
get => _name;
28-
}
21+
public string Name { get; set; }
2922

3023
/// <summary>
3124
/// Version of the Chrome extension
3225
/// </summary>
33-
public string Version
34-
{
35-
get => _version;
36-
}
26+
public string Version { get; set; }
3727
}
3828
}

ElectronNET.Host/api/browserWindows.ts

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -706,6 +706,28 @@ export = (socket: SocketIO.Socket, app: Electron.App) => {
706706
getWindowById(id).setVibrancy(type);
707707
});
708708

709+
socket.on('browserWindowAddExtension', (path) => {
710+
const extensionName = Electron.BrowserWindow.addExtension(path);
711+
712+
electronSocket.emit('browserWindow-addExtension-completed', extensionName);
713+
});
714+
715+
socket.on('browserWindowRemoveExtension', (name) => {
716+
Electron.BrowserWindow.removeExtension(name);
717+
});
718+
719+
socket.on('browserWindowGetExtensions', (path) => {
720+
const extensionsList = Electron.BrowserWindow.getExtensions();
721+
722+
let chromeExtensionInfo = new Array();
723+
724+
Object.keys(extensionsList).forEach(key => {
725+
chromeExtensionInfo.push(extensionsList[key]);
726+
});
727+
728+
electronSocket.emit('browserWindow-getExtensions-completed', chromeExtensionInfo);
729+
});
730+
709731
function getWindowById(id: number): Electron.BrowserWindow {
710732
for (let index = 0; index < windows.length; index++) {
711733
const element = windows[index];

0 commit comments

Comments
 (0)