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.
Low because the extension still delivers information but with degraded ergonomics rather than a functional failure.
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' }],
});
ID: extension-ux-performance.badge-notifications.native-notifications
Severity: low
What to look for: Examine chrome.notifications.create calls for notification type and feature usage. Check whether notifications use type: 'list' or type: 'progress' where semantically appropriate, rather than always defaulting to type: 'basic' with all information jammed into a single message string. Check for buttons arrays on notifications that could provide actionable quick-reply or dismiss options. Look for use of requireInteraction: true only on genuinely urgent notifications. Count all instances found and enumerate each.
Pass criteria: Notifications use the appropriate type for their content (list items use type: 'list', progress uses type: 'progress'). Actionable notifications include buttons for quick actions. requireInteraction is 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 into message as a newline-joined string. requireInteraction: true appears on low-priority or informational notifications.
Skip (N/A) when: The extension does not use chrome.notifications API.
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' }],
});