Skip to content
Back to skills

Chrome Ext Permissions

ASecurity

This skill should be used when working on Chrome extension permissions or Chrome Web Store compliance. Trigger when: declaring extension permissions, "manifest permissions", "activeTab vs tabs", "optional_permissions", "host_permissions", "Chrome Web Store rejection", "permission minimization", "over-permissioning", "CWS review", "Purple Potassium", "extension permission audit", "narrowest permission", "permission warnings", "chrome.permissions.request", "permission justification".

  • 4 stars
  • 0 votes
  • 0 copies
  • 5 views
  • Added September 12, 2026
developmenttypescriptgoapi

Works with

  • cli
  • api

Security analysis

A100/100

Pro scans all 2 files and shows the line behind each finding

Scanned September 12, 2026

npx -y skills add aibot88/sec_skill_store --skill chrome-ext-permissions --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Chrome Ext Permissions?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Chrome Ext Permissions
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/aibot88-chrome-ext-permissions/badge)](https://www.skillsdirectory.com/skills/aibot88-chrome-ext-permissions)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: chrome-ext-permissions
description: >
  This skill should be used when working on Chrome extension permissions or Chrome Web Store
  compliance. Trigger when: declaring extension permissions, "manifest permissions", "activeTab
  vs tabs", "optional_permissions", "host_permissions", "Chrome Web Store rejection",
  "permission minimization", "over-permissioning", "CWS review", "Purple Potassium",
  "extension permission audit", "narrowest permission", "permission warnings",
  "chrome.permissions.request", "permission justification".
---

# Chrome Extension Permissions

The principle of least privilege governs all permission decisions. Request only what the extension actively uses today — never future-proof permissions. Approximately 70% of submitted extensions over-request permissions. Over-permissioning triggers CWS rejections, alarming install warnings, and longer review cycles.

## Permission Decision Rules

### activeTab vs. tabs vs. host_permissions

| Need | Use | Why |
|------|-----|-----|
| Temporary access after user click | `activeTab` | No install warning, minimal scope |
| Read URL/title of tabs without host access | `tabs` | Required for `tab.url`, `tab.title`, `tab.favIconUrl` |
| Persistent access to specific sites | `host_permissions: ["https://example.com/*"]` | Narrow host pattern |
| Access to all sites | `host_permissions: ["<all_urls>"]` | **Last resort** — triggers 3x rejection rate |

`activeTab` grants temporary access to the currently focused tab only after the user explicitly invokes the extension. It requires no install warning. Always prefer it over broad alternatives.

### Common Permission Misconceptions

| Misconception | Reality |
|---------------|---------|
| "Need `tabs` to use `chrome.tabs` API" | Most `chrome.tabs` methods work without the permission |
| "Need `storage` for localStorage" | `storage` is only for `chrome.storage` API, not web storage |
| "Need `cookies` for `document.cookie`" | `cookies` permission is only for `chrome.cookies` API |
| "Need `<all_urls>` to work on any site" | `activeTab` + user action covers most use cases |

## Optional Permissions

Move non-core features to optional permissions. Request at runtime when the feature is activated:

```typescript
// Request permission when user enables a feature
async function enableAdvancedFeature() {
  const granted = await chrome.permissions.request({
    permissions: ['bookmarks'],
    origins: ['https://api.example.com/*'],
  });

  if (granted) {
    // Permission granted — enable feature
  } else {
    // Permission denied — show explanation
  }
}
```

Benefits:
- Reduces alarming install warnings
- Gives users informed control
- Accelerates CWS review
- Permissions can be revoked when feature is disabled

## Host Permission Patterns

Declare in `host_permissions` array (MV3), not in `permissions`:

```json
{
  "host_permissions": [
    "https://api.example.com/*",
    "https://cdn.example.com/*"
  ]
}
```

**Rules:**
- Use exact domains, not wildcards
- Prefer `https://` over `*://`
- Never use `<all_urls>` unless absolutely required
- Move non-essential hosts to `optional_host_permissions`

## Pre-Release Permission Audit

Before every CWS submission:
1. Grep codebase for every `chrome.*` API call — verify each has a matching permission
2. Remove any declared permission not backed by a code path
3. Replace broad permissions with narrower alternatives where possible
4. Test packed `.crx` build to verify exact install warning dialogs
5. Prepare a short video demonstrating how each sensitive permission is used
6. Write clear cause-and-effect justifications for the CWS privacy tab

## CWS Rejection Codes for Permissions

| Code | Name | Trigger |
|------|------|---------|
| Purple Potassium | Excessive Permissions | Unused or overly broad permissions |
| Purple Lithium | User Data Privacy | Missing privacy policy, insecure data handling |
| Purple Copper | Data Transmission | Sensitive data via HTTP or in URL params |

**Warning:** Adding permissions that trigger install warnings will temporarily disable the extension for existing users until they accept the new terms.

## Additional Resources

### Reference Files

- **`references/permission-guide.md`** — Detailed permission-by-permission reference and narrowing strategies
- **`references/cws-rejection-codes.md`** — Complete CWS rejection code taxonomy with prevention strategies

Files in this skill

  • SKILL.md4.3 KB
  • source.json1 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.