grafana/k6 · error
clearing permissions: %w
Error message
clearing permissions: %w
What it means
browserContext.clearPermissions() issues the CDP Browser.resetPermissions command scoped to the context (browser_context.go:199). If the CDP round-trip fails, the transport/protocol error is wrapped as 'clearing permissions: %w' — almost always because the context or browser is already closed, or the connection is gone.
Source
Thrown at internal/js/modules/k6/browser/common/browser_context.go:199
return fmt.Errorf("adding init script to browser context: %w", err)
}
}
return nil
}
// Browser returns the browser instance that this browser context belongs to.
func (b *BrowserContext) Browser() *Browser {
return b.browser
}
// ClearPermissions clears any permission overrides.
func (b *BrowserContext) ClearPermissions() error {
b.logger.Debugf("BrowserContext:ClearPermissions", "bctxid:%v", b.id)
action := cdpbrowser.ResetPermissions().WithBrowserContextID(b.id)
if err := action.Do(cdp.WithExecutor(b.ctx, b.browser.conn)); err != nil {
return fmt.Errorf("clearing permissions: %w", err)
}
return nil
}
// Close shuts down the browser context.
func (b *BrowserContext) Close() error {
b.logger.Debugf("BrowserContext:Close", "bctxid:%v", b.id)
if b.id == "" {
return fmt.Errorf("default browser context can't be closed")
}
if err := b.browser.disposeContext(b.id); err != nil {
return fmt.Errorf("disposing browser context: %w", err)
}
return nil
}
View on GitHub (pinned to 93accf6570)
Solutions
- Call clearPermissions() while the context is open — before close()
- Check the wrapped error to distinguish a dead connection from a protocol refusal
- Wrap permission reset in a guard that skips it when the browser/context is already closed
- Restructure so permission changes happen in setup, not teardown
Example fix
// before await ctx.close() await ctx.clearPermissions() // throws: clearing permissions // after await ctx.clearPermissions() await ctx.close()
Defensive patterns
Strategy: validation
Validate before calling
// reset permissions only while the context is open if (ctxOpen) await ctx.clearPermissions() // track open/closed yourself
Try / catch
try {
await ctx.clearPermissions()
} catch (e) {
if (/clearing permissions/.test(String(e)) && /connection|closed/i.test(String(e))) {
// context/browser already gone — nothing to clear
} else throw e
} Prevention
- Call clearPermissions() before close(), never in teardown after the browser is gone
- Track context open/closed state in your harness
When it happens
Trigger: Calling clearPermissions() after context.close() or browser.close(); connection dropping mid-call; concurrent teardown from multiple VUs touching the same context.
Common situations: Cleanup code in teardown running after the browser already disconnected; helpers that reset permissions unconditionally at iteration end.
Related errors
- attaching new page: %w
- disposing browser context: %w
- granting browser permissions: %w
- clearing cookies: %w
- retrieving cookies: %w
AI-assisted analysis of grafana/k6@93accf6570 (2026-08-15).
Data as JSON: /api/errors/dd82c57938a81323.
Report an issue: GitHub.