Skip to content
Back to skills

Chrome Devtools Extension Debugging

ASecurity

Chrome DevTools Protocol, extension Manifest V3, and debugging patterns that prevent common automation failures.

  • 19 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added September 19, 2026
ai-agentsgodebuggingapisecurityperformance

Works with

  • cli
  • api

Security analysis

A100/100

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

Scanned September 19, 2026

npx -y skills add rondoflow/rondoflow --skill chrome-devtools-extension-debugging --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Chrome Devtools Extension Debugging?

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

Security grade badge for Chrome Devtools Extension Debugging
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/rondoflow-chrome-devtools-extension-debugging/badge)](https://www.skillsdirectory.com/skills/rondoflow-chrome-devtools-extension-debugging)

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-devtools-extension-debugging
description: "Chrome DevTools Protocol, extension Manifest V3, and debugging patterns that prevent common automation failures."
category: "Development"
author: community
version: "1.0.0"
icon: code
---

## Chrome DevTools Protocol (CDP)

**Get tab WebSocket URL first**: Never connect to `ws://localhost:9222/devtools/browser` directly. Fetch `http://localhost:9222/json/list` and use `webSocketDebuggerUrl` from the active tab.

**Enable domains before use**: `Runtime.enable` and `Page.enable` must be called before any `Runtime.evaluate` or `Page.navigate` commands.

**CDP is async**: Wait for response before sending next command. Use Promise-based wrapper with response ID tracking.

**Screenshot on high-DPI**: Include `fromSurface: true` and `scale: 2` in `Page.captureScreenshot` params for Retina displays.

**Get response body separately**: `Network.responseReceived` doesn't include body. Call `Network.getResponseBody` with requestId after response completes.

## Chrome Extension Manifest V3

**Permissions split**: Use `permissions` for APIs, `host_permissions` for URLs. Never use `http://*/*` in permissions.

**Service workers terminate**: No persistent state. Use `chrome.storage.local` instead of global variables. Use `chrome.alarms` instead of `setInterval`.

**Content script isolation**: Can't access page globals. Use `chrome.scripting.executeScript` with `func` for page context. Use `window.postMessage` for content↔page communication.

**Storage is async**: `chrome.storage.local.get()` returns Promise, not data. Always await. Handle `QUOTA_EXCEEDED` errors.

## Context Detection

**Detect actual Chrome** (not Edge/Brave): Check `window.chrome && navigator.vendor === "Google Inc."` and exclude Opera/Edge.

**Extension context types**:
- `chrome.runtime.id` exists → content script
- `chrome.runtime.getManifest` exists → popup/background/options
- `chrome.loadTimes` exists but no runtime → regular Chrome web page

**Manifest version check**: Wrap `chrome.runtime.getManifest()` in try-catch. Use `chrome.action` for V3, `chrome.browserAction` for V2.

## Performance Debugging

**Memory API conditional**: Check `'memory' in performance` before accessing `performance.memory.usedJSHeapSize`.

**Use performance marks**: `performance.mark()` and `performance.measure()` for sub-frame timing. Clear marks to prevent memory leaks.

**Layout thrash detection**: PerformanceObserver with `entryTypes: ['measure', 'paint', 'largest-contentful-paint']`. Flag entries >16.67ms.

## Network Debugging

**Block before navigate**: Call `Network.setBlockedURLs` before `Page.navigate`, not after.

**Request interception**: Use `Network.setRequestInterception` with `requestStage: 'Request'` for granular control. Return `errorReason: 'BlockedByClient'` to block.

## Security Contexts

**Mixed content**: HTTPS pages can't load HTTP resources. Check `location.protocol` vs resource URL.

**CORS errors**: `TypeError` on cross-origin fetch usually means CORS. Check DevTools Network tab for specific error.

**Secure context required**: File System Access API, Clipboard API require `window.isSecureContext === true` and user gesture.

Files in this skill

  • SKILL.md3.1 KB
  • manifest.json343 B

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…