Notifications utilize native system integration where supported
Why it matters
Cramming multi-item data into a newline-joined type: 'basic' message discards rich OS notification affordances — per-item titles, action buttons, progress bars, image thumbnails — that users expect from native apps on macOS, Windows, and ChromeOS. Worse, requireInteraction: true on informational notifications blocks the OS from auto-dismissing them, forcing users to manually dismiss every stale update. The extension feels second-class, and on ChromeOS it violates platform UX conventions that reviewers flag during Chrome Web Store submission.
Severity rationale
Low because the extension still delivers information but with degraded ergonomics rather than a functional failure.
Remediation
Use type: 'list' for multi-item notifications with one row per item, type: 'progress' for long-running operations, and buttons for actionable quick replies. Reserve requireInteraction: true only for time-critical alerts. In background.js:
chrome.notifications.create({
type: 'list',
iconUrl: 'icons/48.png',
title: '3 New Messages',
message: '',
items: [{ title: 'Alice', message: 'hi' }, { title: 'Bob', message: 'ok' }],
buttons: [{ title: 'View All' }],
});
Detection
-
ID:
native-notifications -
Severity:
low -
What to look for: Examine
chrome.notifications.createcalls for notification type and feature usage. Check whether notifications usetype: 'list'ortype: 'progress'where semantically appropriate, rather than always defaulting totype: 'basic'with all information jammed into a single message string. Check forbuttonsarrays on notifications that could provide actionable quick-reply or dismiss options. Look for use ofrequireInteraction: trueonly on genuinely urgent notifications. Count all instances found and enumerate each. -
Pass criteria: Notifications use the appropriate
typefor their content (list items usetype: 'list', progress usestype: 'progress'). Actionable notifications includebuttonsfor quick actions.requireInteractionis reserved for genuinely time-sensitive events. At least 1 implementation must be confirmed. -
Fail criteria: All notifications use
type: 'basic'regardless of content structure. Multi-item notifications cram everything intomessageas a newline-joined string.requireInteraction: trueappears on low-priority or informational notifications. -
Skip (N/A) when: The extension does not use
chrome.notificationsAPI. -
Detail on fail: Describe the missed integration. Example:
"'5 new emails' notification uses type:'basic' with all senders joined in the message — type:'list' with individual items would be more readable"or"requireInteraction:true on informational update notifications — blocks OS notification dismissal unnecessarily." -
Remediation: Use richer notification types where appropriate:
// For multiple items, use type:'list' chrome.notifications.create({ type: 'list', iconUrl: 'icons/icon48.png', title: '3 New Messages', message: '', items: [ { title: 'Alice', message: 'See you at 3pm?' }, { title: 'Bob', message: 'PR approved' }, { title: 'Carol', message: 'Meeting rescheduled' }, ], buttons: [{ title: 'View All' }], });
Taxons
History
- 2026-04-18·v1.0.0·Initial import from extension-ux-performance·automated