blob: eb79fa24b8a52ba7acd7558d401f23451e069702 [file] [log] [blame]
// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import { createWasmInstantiator } from "./instantiate_wasm.js";
import { resolveUrlWithSegments } from "./utils.js";
export const loadCanvasKit = (deps, config, browserEnvironment, canvasKitBaseUrl) => {
window.flutterCanvasKitLoaded = (async () => {
if (window.flutterCanvasKit) {
// The user has set this global variable ahead of time, so we just return that.
return window.flutterCanvasKit;
}
const supportsChromiumCanvasKit = browserEnvironment.hasChromiumBreakIterators && browserEnvironment.hasImageCodecs;
if (!supportsChromiumCanvasKit && config.canvasKitVariant == "chromium") {
throw "Chromium CanvasKit variant specifically requested, but unsupported in this browser";
}
const useChromiumCanvasKit = supportsChromiumCanvasKit && (config.canvasKitVariant !== "full");
let baseUrl = canvasKitBaseUrl;
if (useChromiumCanvasKit) {
baseUrl = resolveUrlWithSegments(baseUrl, "chromium");
}
let canvasKitUrl = resolveUrlWithSegments(baseUrl, "canvaskit.js");
if (deps.flutterTT.policy) {
canvasKitUrl = deps.flutterTT.policy.createScriptURL(canvasKitUrl);
}
const wasmInstantiator = createWasmInstantiator(resolveUrlWithSegments(baseUrl, "canvaskit.wasm"));
const canvasKitModule = await import(canvasKitUrl);
window.flutterCanvasKit = await canvasKitModule.default({
instantiateWasm: wasmInstantiator,
});
return window.flutterCanvasKit;
})();
return window.flutterCanvasKitLoaded;
}