🚫

chrome.tabsの一部のAPIにはパーミッションが不要だと知ったので備忘録

2022/10/17に公開

どうも。えーたんです。

先日Chrome Web Storeから、公開している拡張機能の不要な権限を削除するようにお願いされました。どうやらtabsパーミッションが不要だったようです。

本記事では、Chrome拡張機能のtabsパーミッションについて調査したことを紹介します。

パーミッションが不要なタブのAPIがある

chrome.tabsAPIの中には、tabsパーミッションの不要なAPIがいくつかあります。

以下は公式ドキュメントの引用です。

Most features do not require any permissions to use. For example: creating a new tab, reloading a tab, navigating to another URL, etc.

新しいタブの作成createやリロードreload、別のURLへの遷移updateなどが対象のようです。

実際に試してみる

パーミッションが不要である例を実際に作成して確認しました。

今回の拡張機能の作成にはCRXJS Vite Pluginを使いました。リポジトリは以下です。

https://github.com/eetann/tabs-create-example

まず、manifestのpermissionsを空にしています。

https://github.com/eetann/tabs-create-example/blob/0c58a4368b8226ee68f30bb61af9c245fc5cbe95/src/manifest.ts

ポップアップ画面には、chrome.tabscreatereloadupdateの3つのAPIを叩くボタンを追加しました。

https://github.com/eetann/tabs-create-example/blob/0c58a4368b8226ee68f30bb61af9c245fc5cbe95/src/main.ts#L4-L21

画像

ボタンを押すと、各APIの動作確認ができます。

パーミッションを追加すると取得できる情報が増える

tabsパーミッションを必要としないAPIでも、取得できるタブの情報はtabsパーミッションの有無によって変わります。

具体的には、tabsパーミッションを追加することでfavIconUrlpendingUrltitleurlなどが取得できます。

以下のようにtabsパーミッションを加え、タブオブジェクトのキーを表示してみました。

src/manifest.ts
import { defineManifest } from "@crxjs/vite-plugin";
 
export default defineManifest({
  manifest_version: 3,
  name: "tabs example",
  description: "chrome.tabs example",
  version: "1.0.0",
- permissions: [],
+ permissions: ["tabs"],
  action: { default_popup: "index.html" },
});
src/main.ts
app.innerHTML = `
  <h1>Hello Vite!</h1>
  <button id="create">chrome.tabs.create</button>
  <button id="reload">chrome.tabs.reload</button>
  <button id="update">chrome.tabs.update</button>
+ <button id="info">tab info</button>
`;

document.getElementById("create")?.addEventListener("click", () => {
  chrome.tabs.create({ url: "https://zenn.dev/eetann" });
});
document.getElementById("reload")?.addEventListener("click", () => {
  chrome.tabs.reload();
});
document.getElementById("update")?.addEventListener("click", () => {
  chrome.tabs.update({ url: "https://github.com/eetann" });
});
+ document.getElementById("info")?.addEventListener("click", () => {
+   chrome.tabs.update({ url: "https://github.com/eetann" }, (tab) => {
+     if (typeof tab !== "undefined") {
+       console.log(Object.keys(tab));
+     }
+   });
+ });

まず、以下がtabsパーミッション無しでのタブオブジェクトのキーの一覧です。

画像

次に、tabsパーミッションありでの一覧です。

画像

増えていることが分かります。

警告ってどんな感じ?

不要な権限を持ったChrome拡張機能に対する警告は、以下のようにメールで来ます。

画像

メールが来てから2週間以内に対応しないと削除されるようです。

筆者の拡張機能が違反したケースはPurple Potassium(過剰な権限の付与)でした。

まとめ

  • 公式ドキュメントを読もう
  • chrome.tabsの一部のAPIにはパーミッションが不要
  • tabsパーミッションを追加することで取得できる情報が増える
  • 不要な権限を持ったChrome拡張機能は、Chrome Web Storeから削除される可能性がある

Discussion