Skip to content

Commit

Permalink
add compatibility with manifest V3
Browse files Browse the repository at this point in the history
  • Loading branch information
lmichelin committed Aug 15, 2022
1 parent 9c8988b commit 950cdd4
Show file tree
Hide file tree
Showing 4 changed files with 18 additions and 25 deletions.
6 changes: 5 additions & 1 deletion src/messages/errors.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,8 @@ the provided on 'manifest.json' or 'entry.background' \
option of the plugin",
);

export const bgScriptManifestRequiredMsg = new Message(ERROR, 2, "Background script on manifest is required");
export const bgScriptManifestRequiredMsg = new Message(
ERROR,
2,
"Background script or service worker on manifest is required",
);
11 changes: 7 additions & 4 deletions src/middleware/wer-middleware.raw.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
/* This will be converted into a lodash templ., any */
/* external argument must be provided using it */
/* -------------------------------------------------- */
(function(window) {
(function() {

const injectionContext = this || window || {browser: null};

Expand Down Expand Up @@ -71,7 +71,9 @@
if (type === SIGN_CHANGE && (!payload || !payload.onlyPageChanged)) {
tabs.query({ status: "complete" }).then(loadedTabs => {
loadedTabs.forEach(
tab => tab.id && tabs.sendMessage(tab.id, { type: SIGN_RELOAD }),
// in MV3 tabs.sendMessage returns a Promise and we need to catch the errors
// https://groups.google.com/a/chromium.org/g/chromium-extensions/c/st_Nh7j3908/m/1muOgSX5AwAJ
tab => tab.id && tabs.sendMessage(tab.id, { type: SIGN_RELOAD })?.catch(() => null),
);
socket.send(
JSON.stringify({
Expand Down Expand Up @@ -137,9 +139,10 @@

// ======================= Bootstraps the middleware =========================== //
runtime.reload
? extension.getBackgroundPage() === window ? backgroundWorker(new WebSocket(wsHost)) : extensionPageWorker()
// in MV3 background service workers don't have access to the DOM
? (typeof window === 'undefined' || extension.getBackgroundPage() === window) ? backgroundWorker(new WebSocket(wsHost)) : extensionPageWorker()
: contentScriptWorker();
})(window);
})();

/* ----------------------------------------------- */
/* End of Webpack Hot Extension Middleware */
Expand Down
4 changes: 2 additions & 2 deletions src/utils/manifest.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,11 @@ export function extractEntries(
throw new Error("Please specify the `output.filename` in your webpack config.");
}

if (!background?.scripts) {
if (!(background?.scripts || background?.service_worker)) {
throw new TypeError(bgScriptManifestRequiredMsg.get());
}

const bgScriptFileNames = background.scripts;
const bgScriptFileNames = background.service_worker ? [background.service_worker] : background.scripts ?? [];
const toRemove = (filename as string).replace("[name]", "");

const bgWebpackEntry = Object.keys(webpackEntry).find((entryName) =>
Expand Down
22 changes: 4 additions & 18 deletions typings/declarations.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,7 @@ declare interface IMiddlewareTemplateParams {
reloadPage: boolean;
}

declare type InjectMiddleware = (
assets: Record<string, any>,
chunks: Set<any>,
) => Record<string, any>;
declare type InjectMiddleware = (assets: Record<string, any>, chunks: Set<any>) => Record<string, any>;

declare type MiddlewareInjector = (
{ background, contentScript, extensionPage }: IEntriesOption,
Expand All @@ -22,10 +19,7 @@ declare type MiddlewareInjector = (

declare type Triggerer = (onlyPageChanged: boolean) => Promise<any>;

declare type TriggererFactory = (
port: number,
reloadPage: boolean,
) => Triggerer;
declare type TriggererFactory = (port: number, reloadPage: boolean) => Triggerer;

declare type VersionPair = [number | undefined, number | undefined];

Expand All @@ -45,13 +39,7 @@ declare type LOG_WARN = 3;
declare type LOG_ERROR = 4;
declare type LOG_DEBUG = 5;

declare type LOG_LEVEL =
| LOG_NONE
| LOG_LOG
| LOG_INFO
| LOG_WARN
| LOG_ERROR
| LOG_DEBUG;
declare type LOG_LEVEL = LOG_NONE | LOG_LOG | LOG_INFO | LOG_WARN | LOG_ERROR | LOG_DEBUG;

declare interface IWebpackChunk {
files: string[];
Expand All @@ -73,13 +61,11 @@ declare interface IExtensionManifest {
background?: {
page?: string;
scripts?: string[];
service_worker?: string;
};
icons?: {
[key: string]: string;
};
browser_action?: {
default_popup: string;
};
content_scripts?: [
{
matches: string[];
Expand Down

0 comments on commit 950cdd4

Please sign in to comment.