[PM-11290] Fix safari not starting with sdk (#11438)
We ran into some inconsistencies between how manifest v2 and v3 are handled in browsers. To resolve this we have a different flow for manifest v2 which dynamically imports, while v3 uses the sync importScripts.
This commit is contained in:
parent
a6db7e3086
commit
7e4d735532
|
@ -1,6 +1,8 @@
|
||||||
import { SdkClientFactory } from "@bitwarden/common/platform/abstractions/sdk/sdk-client-factory";
|
import { SdkClientFactory } from "@bitwarden/common/platform/abstractions/sdk/sdk-client-factory";
|
||||||
import type { BitwardenClient } from "@bitwarden/sdk-internal";
|
import type { BitwardenClient } from "@bitwarden/sdk-internal";
|
||||||
|
|
||||||
|
import { BrowserApi } from "../../browser/browser-api";
|
||||||
|
|
||||||
// https://stackoverflow.com/a/47880734
|
// https://stackoverflow.com/a/47880734
|
||||||
const supported = (() => {
|
const supported = (() => {
|
||||||
try {
|
try {
|
||||||
|
@ -18,14 +20,34 @@ const supported = (() => {
|
||||||
return false;
|
return false;
|
||||||
})();
|
})();
|
||||||
|
|
||||||
if (supported) {
|
// Manifest v3 does not support dynamic imports in the service worker.
|
||||||
// eslint-disable-next-line no-console
|
if (BrowserApi.isManifestVersion(3)) {
|
||||||
console.debug("WebAssembly is supported in this environment");
|
if (supported) {
|
||||||
import("./wasm");
|
// eslint-disable-next-line no-console
|
||||||
} else {
|
console.debug("WebAssembly is supported in this environment");
|
||||||
// eslint-disable-next-line no-console
|
import("./wasm");
|
||||||
console.debug("WebAssembly is not supported in this environment");
|
} else {
|
||||||
import("./fallback");
|
// eslint-disable-next-line no-console
|
||||||
|
console.debug("WebAssembly is not supported in this environment");
|
||||||
|
import("./fallback");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Manifest v2 expects dynamic imports to prevent timing issues.
|
||||||
|
async function load() {
|
||||||
|
if (BrowserApi.isManifestVersion(3)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (supported) {
|
||||||
|
// eslint-disable-next-line no-console
|
||||||
|
console.debug("WebAssembly is supported in this environment");
|
||||||
|
await import("./wasm");
|
||||||
|
} else {
|
||||||
|
// eslint-disable-next-line no-console
|
||||||
|
console.debug("WebAssembly is not supported in this environment");
|
||||||
|
await import("./fallback");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -37,6 +59,8 @@ export class BrowserSdkClientFactory implements SdkClientFactory {
|
||||||
async createSdkClient(
|
async createSdkClient(
|
||||||
...args: ConstructorParameters<typeof BitwardenClient>
|
...args: ConstructorParameters<typeof BitwardenClient>
|
||||||
): Promise<BitwardenClient> {
|
): Promise<BitwardenClient> {
|
||||||
|
await load();
|
||||||
|
|
||||||
return Promise.resolve((globalThis as any).init_sdk(...args));
|
return Promise.resolve((globalThis as any).init_sdk(...args));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
|
|
||||||
/* Begin PBXBuildFile section */
|
/* Begin PBXBuildFile section */
|
||||||
03100CAF291891F4008E14EF /* encrypt-worker.js in Resources */ = {isa = PBXBuildFile; fileRef = 03100CAE291891F4008E14EF /* encrypt-worker.js */; };
|
03100CAF291891F4008E14EF /* encrypt-worker.js in Resources */ = {isa = PBXBuildFile; fileRef = 03100CAE291891F4008E14EF /* encrypt-worker.js */; };
|
||||||
|
55BC93932CB4268A008CA4C6 /* assets in Resources */ = {isa = PBXBuildFile; fileRef = 55BC93922CB4268A008CA4C6 /* assets */; };
|
||||||
55E0374D2577FA6B00979016 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55E0374C2577FA6B00979016 /* AppDelegate.swift */; };
|
55E0374D2577FA6B00979016 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55E0374C2577FA6B00979016 /* AppDelegate.swift */; };
|
||||||
55E037502577FA6B00979016 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 55E0374E2577FA6B00979016 /* Main.storyboard */; };
|
55E037502577FA6B00979016 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 55E0374E2577FA6B00979016 /* Main.storyboard */; };
|
||||||
55E037522577FA6B00979016 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55E037512577FA6B00979016 /* ViewController.swift */; };
|
55E037522577FA6B00979016 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55E037512577FA6B00979016 /* ViewController.swift */; };
|
||||||
|
@ -54,6 +55,7 @@
|
||||||
/* Begin PBXFileReference section */
|
/* Begin PBXFileReference section */
|
||||||
03100CAE291891F4008E14EF /* encrypt-worker.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; name = "encrypt-worker.js"; path = "../../../build/encrypt-worker.js"; sourceTree = "<group>"; };
|
03100CAE291891F4008E14EF /* encrypt-worker.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; name = "encrypt-worker.js"; path = "../../../build/encrypt-worker.js"; sourceTree = "<group>"; };
|
||||||
5508DD7926051B5900A85C58 /* libswiftAppKit.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libswiftAppKit.tbd; path = usr/lib/swift/libswiftAppKit.tbd; sourceTree = SDKROOT; };
|
5508DD7926051B5900A85C58 /* libswiftAppKit.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libswiftAppKit.tbd; path = usr/lib/swift/libswiftAppKit.tbd; sourceTree = SDKROOT; };
|
||||||
|
55BC93922CB4268A008CA4C6 /* assets */ = {isa = PBXFileReference; lastKnownFileType = folder; name = assets; path = ../../../build/assets; sourceTree = "<group>"; };
|
||||||
55E037482577FA6B00979016 /* desktop.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = desktop.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
55E037482577FA6B00979016 /* desktop.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = desktop.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
55E0374B2577FA6B00979016 /* desktop.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = desktop.entitlements; sourceTree = "<group>"; };
|
55E0374B2577FA6B00979016 /* desktop.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = desktop.entitlements; sourceTree = "<group>"; };
|
||||||
55E0374C2577FA6B00979016 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
|
55E0374C2577FA6B00979016 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
|
||||||
|
@ -152,6 +154,7 @@
|
||||||
55E0376F2577FA6F00979016 /* Resources */ = {
|
55E0376F2577FA6F00979016 /* Resources */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
55BC93922CB4268A008CA4C6 /* assets */,
|
||||||
03100CAE291891F4008E14EF /* encrypt-worker.js */,
|
03100CAE291891F4008E14EF /* encrypt-worker.js */,
|
||||||
55E037702577FA6F00979016 /* popup */,
|
55E037702577FA6F00979016 /* popup */,
|
||||||
55E037712577FA6F00979016 /* background.js */,
|
55E037712577FA6F00979016 /* background.js */,
|
||||||
|
@ -270,6 +273,7 @@
|
||||||
55E0377A2577FA6F00979016 /* background.js in Resources */,
|
55E0377A2577FA6F00979016 /* background.js in Resources */,
|
||||||
55E037792577FA6F00979016 /* popup in Resources */,
|
55E037792577FA6F00979016 /* popup in Resources */,
|
||||||
03100CAF291891F4008E14EF /* encrypt-worker.js in Resources */,
|
03100CAF291891F4008E14EF /* encrypt-worker.js in Resources */,
|
||||||
|
55BC93932CB4268A008CA4C6 /* assets in Resources */,
|
||||||
55E0377C2577FA6F00979016 /* notification in Resources */,
|
55E0377C2577FA6F00979016 /* notification in Resources */,
|
||||||
55E0377E2577FA6F00979016 /* vendor.js in Resources */,
|
55E0377E2577FA6F00979016 /* vendor.js in Resources */,
|
||||||
55E0377D2577FA6F00979016 /* content in Resources */,
|
55E0377D2577FA6F00979016 /* content in Resources */,
|
||||||
|
|
|
@ -316,6 +316,8 @@ const mainConfig = {
|
||||||
},
|
},
|
||||||
output: {
|
output: {
|
||||||
filename: "[name].js",
|
filename: "[name].js",
|
||||||
|
chunkFilename: "assets/[name].js",
|
||||||
|
webassemblyModuleFilename: "assets/[modulehash].wasm",
|
||||||
path: path.resolve(__dirname, "build"),
|
path: path.resolve(__dirname, "build"),
|
||||||
clean: true,
|
clean: true,
|
||||||
},
|
},
|
||||||
|
|
Loading…
Reference in New Issue