v147 · proposed IWA API · member reference
WebPrinter.fetchAttributes()
Fetches printer capabilities and state, then replaces the handle cache. It is the source of truth for matching a job request to printer-supported values.
Syntax
printer.fetchAttributes()
// Promise<WebPrinterAttributes>Inputs
No parameters. It queries the selected printer; request no capability value until this has resolved.
Outputs
Resolves to refreshed WebPrinterAttributes, including capability/default fields and printer state when provided. Chromium retains the original name and ID when replacing its cache.
Errors
Normative: communication failure rejects NetworkError. Chromium rejects NotAllowedError for denied permission, throws InvalidStateError if another fetch on the same handle is in progress, and throws NotSupportedError after context shutdown.
Context and permission
The IDL requires a secure, isolated context. The specification also defines the web-printing Permissions Policy with default allowlist self; Chromium additionally checks an isolated context and cross-origin isolation before getPrinters(). The current proposal requires express, origin-specific consent triggered by enumeration. The exact chooser scope, persistence, and whether a later operation prompts again remain user-agent UX, not a settled web contract.
Lifecycle, cancellation, and cleanup
One fetch per WebPrinter may be outstanding in Chromium. Await it before another fetch. A success updates the cache atomically from the caller’s perspective; no rate limit is standardized, though the explainer asks implementers to consider one.
Examples
async function getCurrentAttributes(printer) {
try {
return await printer.fetchAttributes();
} catch (error) {
if (error.name === "NetworkError") return null;
throw error;
}
}Browser compatibility
| Runtime | Status | Evidence |
|---|---|---|
| Chrome (general) | Proposed and not released. ChromeStatus lists I2S desktop target 147, which is not release proof. Do not infer general desktop Chrome support. | ChromeStatus |
| Current Chromium service | Implemented only when built with IS_CHROMEOS && USE_CUPS; otherwise getPrinters() has no service and throws SecurityError. | Chromium manager implementation |
| Android / mobile | ChromeStatus Android is null; no public mobile release exists. The current ChromeOS+CUPS-only service path does not expose the service on Android. | ChromeStatus; implementation guard |
| Firefox | No signal; no BCD member record found. | ChromeStatus position; BCD API data |
| Safari | No signal; no BCD member record found. | ChromeStatus position; BCD API data |
| webstatus.dev | No feature entry found for this query; this is not proof of absence from browsers. | webstatus query |
Security and privacy
Printer names, IDs, capabilities and state can fingerprint a device and reveal printing activity. A compromised IWA could create unwanted jobs or denial of service. Minimize enumeration and polling, do not expose attributes to untrusted content, validate documents before submitting, and offer an app-level confirmation/audit trail. The spec requires isolation and consent; it does not make printer information non-sensitive.