Back to Chromium

Component Spec: PermissionsChip

agents/projects/chrome-design-system/assets/component-specs/PermissionsChip_Spec.md

153.0.7995.14.2 KB
Original Source

Component Spec: PermissionsChip

This specification document outlines the mapping, design tokens, styling variants, and interactive states of the PermissionsChip component across Figma, C++ Views, and WebUI (Web Frontend).


Overview

The PermissionsChip serves as a highly visible, rounded button used specifically for prompting users for browser-level permissions (e.g., Location, Camera, Notifications). It sits within the Omnibox on desktop and is used in the WebUI settings.


1. Component Metadata & Source Files

FeatureFigma ComponentC++ Views (Desktop)WebUI (Web Frontend)
Component NamePermissionsChipPermissionChipView<permission-chip>
Source FilesFigma Link: 288:7602chrome/browser/ui/views/permissions/chip/permission_chip_view.hchrome/browser/resources/webui_toolbar/permission_chip.ts

2. Styling, Variants & Features (Layout & Style)

Figma VariantC++ PermissionChipView MethodWebUI <permission-chip> Property
Variant: PrimaryDefault Prominent ThemeStandard setup
Variant: ErrorError theme based on PermissionPromptStyleError specific colors
Variant: NeutralQuiet themeNeutral coloring
Icon OnlyAnimateCollapse()isFullyCollapsed / chipState
Icon + TextAnimateExpand()Text visible

3. Component States

Interactive StateFigmaC++ PermissionChipViewWebUI <permission-chip>
Defaultstate="Default"ButtonState::STATE_NORMALStandard layout
Hoveredstate="Hovered"ButtonState::STATE_HOVEREDNative hover/focus logic
Pressedstate="Pressed"ButtonState::STATE_PRESSEDDispatches events to ToolbarUI

4. Design Token Comparison (Side-by-Side)

Token TypeFigma PropertyC++ ViewsWebUI Variable / CSS
Primary BackgroundPrimaryPermissionChipTheme::kNormalVisibility--cr-primary-colors-primary
Error BackgroundErrorError states mapping--cr-error-colors-error
Height24pxManaged by parent layout / GetPadding()CSS defined
Corner RadiusFully Rounded (999px)GetCornerRadius()border-radius: 999px
Padding4px (Icon), 6px 10px (Text)GetPadding()Explicit padding

5. Architectural & Implementation Gaps

  • Animation Handling: In C++, PermissionChipView leverages gfx::SlideAnimation to smoothly grow/shrink between the Icon Only and Icon+Text states. In WebUI, <permission-chip> listens to transitionend events heavily synchronized with the backend (BrowserProxyImpl) to signal animation completion.

6. Styling, Variants, Features and States Mismatches

  • Theme Enforcement: The C++ implementation manages colors dynamically by overriding GetBackgroundColor() and GetForegroundColor() based on its PermissionChipTheme. The WebUI uses direct bindings to PermissionChipState to alter classes.

7. Usage & UX Guidance

1. General Principles & Best Practices

  • Urgency: Use the Important / Primary colored chip only for permissions requiring immediate attention. Fallback to Neutral for standard or quiet permission requests.
  • Collapsing: Chips should expand on first appearance and gracefully collapse to an iconOnly state to reduce Omnibox clutter.

2. Platform Consistency, Keyboard Controls & Accessibility (a11y)

  • C++ Views: Manages explicit accessibility strings via AnnounceText and AnnounceAlert.
  • WebUI: Integrates closely with TrackedElementManager for targeted focus/highlight changes.

8. Inheritance Structure

  • C++ Views (Desktop): views::Viewviews::Buttonviews::LabelButtonviews::MdTextButtonPermissionChipView
  • WebUI (Web Frontend): HTMLElementLitElementPermissionChipElement (<permission-chip>)