Skip to content

Commit

Permalink
fix: Gérer la suppression de permissions optionnelles.
Browse files Browse the repository at this point in the history
  • Loading branch information
regseb committed Jan 29, 2021
1 parent e4e5699 commit 097ca00
Show file tree
Hide file tree
Showing 4 changed files with 120 additions and 4 deletions.
1 change: 1 addition & 0 deletions src/background/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -8,5 +8,6 @@
<script src="/polyfill/script.js" type="module"></script>
<script src="migrate.js" type="module"></script>
<script src="menu.js" type="module"></script>
<script src="permissions.js" type="module"></script>
</body>
</html>
24 changes: 24 additions & 0 deletions src/background/permissions.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
/**
* @module
*/

/**
* Actualise la configuration suite la suppression de permissions optionnelles.
*
* @param {Object} changes Les changements sur les permissions.
* @param {string[]} changes.permissions Les permissions supprimées.
*/
const handleRemove = async function ({ permissions }) {
if (permissions.includes("history")) {
browser.storage.local.set({ "general-history": false });
}
if (permissions.includes("bookmarks")) {
const config = await browser.storage.local.get(["menu-contexts"]);
const contexts = config["menu-contexts"];
browser.storage.local.set({
"menu-contexts": contexts.filter((c) => "bookmark" !== c),
});
}
};

browser.permissions.onRemoved.addListener(handleRemove);
40 changes: 36 additions & 4 deletions test/polyfill/browser.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,13 @@ const I18NS = JSON.parse(
);

const data = {
bookmarks: {},
histories: [],
storage: {
bookmarks: {},
histories: [],
permissions: {
data: new Set(),
listeners: [],
},
storage: {
local: {
data: {},
listeners: [],
Expand Down Expand Up @@ -63,6 +67,34 @@ export const browser = {
},
},

permissions: {
remove: ({ permissions }) => {
const changes = { permissions: [] };
for (const permission of permissions) {
const deleted = data.permissions.data.delete(permission);
if (deleted) {
changes.permissions.push(permission);
}
}
if (0 !== changes.permissions.length) {
data.permissions.listeners.forEach((l) => l(changes));
return Promise.resolve(true);
}
return Promise.resolve(false);
},
request: ({ permissions }) => {
for (const permission of permissions) {
data.permissions.data.add(permission);
}
return Promise.resolve(true);
},
onRemoved: {
addListener: (listener) => {
data.permissions.listeners.push(listener);
},
},
},

storage: {
local: {
get: (properties = null) => {
Expand Down Expand Up @@ -91,7 +123,7 @@ export const browser = {
}
return [key, change];
}));
data.storage.local.listeners.map((l) => l(changes));
data.storage.local.listeners.forEach((l) => l(changes));
Object.assign(data.storage.local.data, values);
},
clear: () => {
Expand Down
59 changes: 59 additions & 0 deletions test/unit/background/permissions.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
import assert from "assert";
// eslint-disable-next-line import/no-unassigned-import
import "../../../src/background/permissions.js";

describe("background/permissions.js", function () {
describe("handleRemove()", function () {
it("should handle history", async function () {
await browser.permissions.request({
permissions: ["foo", "history"],
});
browser.storage.local.set({ "general-history": true });

await browser.permissions.remove({ permissions: ["foo"] });
let config = await browser.storage.local.get(["general-history"]);
assert.strictEqual(config["general-history"], true);

await browser.permissions.remove({ permissions: [] });
config = await browser.storage.local.get(["general-history"]);
assert.strictEqual(config["general-history"], true);

await browser.permissions.remove({ permissions: ["history"] });
config = await browser.storage.local.get(["general-history"]);
assert.strictEqual(config["general-history"], false);

await browser.permissions.remove({ permissions: ["history"] });
config = await browser.storage.local.get(["general-history"]);
assert.strictEqual(config["general-history"], false);

browser.storage.local.clear();
});

it("should handle bookmarks", async function () {
await browser.permissions.request({
permissions: ["foo", "bookmarks"],
});
browser.storage.local.set({ "menu-contexts": ["bar", "bookmark"] });

await browser.permissions.remove({ permissions: ["foo"] });
let config = await browser.storage.local.get(["menu-contexts"]);
assert.deepStrictEqual(config["menu-contexts"],
["bar", "bookmark"]);

await browser.permissions.remove({ permissions: [] });
config = await browser.storage.local.get(["menu-contexts"]);
assert.deepStrictEqual(config["menu-contexts"],
["bar", "bookmark"]);

await browser.permissions.remove({ permissions: ["bookmarks"] });
config = await browser.storage.local.get(["menu-contexts"]);
assert.deepStrictEqual(config["menu-contexts"], ["bar"]);

await browser.permissions.remove({ permissions: ["bookmarks"] });
config = await browser.storage.local.get(["menu-contexts"]);
assert.deepStrictEqual(config["menu-contexts"], ["bar"]);

browser.storage.local.clear();
});
});
});

0 comments on commit 097ca00

Please sign in to comment.