Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Proposal: Add tabGroups.tabGroup.shared #761

Open
wants to merge 6 commits into
base: main
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
71 changes: 71 additions & 0 deletions proposals/tab_group_shared_state.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
# Proposal: Add tabGroups.tabGroup.shared

**Summary**

Chromium is adding the concept of a shared group. Shared groups allow users of the browser to share a collection of tabs in their tabstrip with other users.
On Chrome this feature will update tabs in realtime across multiple logged in users and across all clients for these users.
In its current state we only plan for extensions to access information about whether the group is shared or not.

**Document Metadata**

**Author:** [email protected]
dpenning marked this conversation as resolved.
Show resolved Hide resolved

**Sponsoring Browser:** Chrome

**Contributors:** [email protected]

**Created:** 2025-01-15

**Related Issues:**

## Motivation

### Objective

Some browsers may want to restrict access to certain parts of the api as a result of the tabs affiliation with a shared group. Without the extensions knowledge of this shared state, the extension developer will not have an understanding of why querys or commands failed.

#### Use Cases

Extensions that provide heavy interaction/mutation on tab groups may want to exclude access to shared groups through their extensions.

## Specification

### Schema

[chrome.tabGroups.tabGroup](https://developer.chrome.com/docs/extensions/reference/api/tabGroups#type-TabGroup)`.shared`
a boolean field which will denote whether the group is in a shared state or not.
[chrome.tabGroups.query](https://developer.chrome.com/docs/extensions/reference/api/tabGroups#method-query)
the `queryInfo` parameter will accept a new field`shared bool optional`
When provided the tab groups query will filter based on the shared states of the group.
[chrome.tabGroups.onUpdated](https://developer.chrome.com/docs/extensions/reference/api/tabGroups#event-onUpdated)
a method that is currently fired when a group is udated, will also fire when the group's shared state changes.
### Behavior

Browsers may place browser-specific restrictions on shared groups for security and privacy purposes. This is not limited to the tabGroups API and could extend to chrome.tabs and other related API surfaces. The restriction would result in an error that "the action can not be performed due to the object being in a shared state." or a similar error message.
### New Permissions

This functionality would be gated behind the existing `tabGroups` permission. The new functionality is in line with the existing API and does not need to be guarded separately (see below).
### Manifest File Changes

no new manifest fields

## Security and Privacy

### Exposed Sensitive Data, Abuse Mitigations, and Additional Security Considerations

This proposal only exposes existing state for a given group. All exposing of sensitive data, abuse mitigations and additional security considerations should be applied to the "shared" feature itself, and this is something likely to be different per browser vendor.

## Alternatives

### Existing Workarounds

Extensions developers currently need to rely on error handling in order to handle issues that arise from restrictions on "saved and synced" groups. These will also apply, and more restrictions may be
put in place for "shared" groups

### Open Web API

the tabGroups functionality is purely a browser feature, which is why we only expose this information through the extensions API

## Implementation Notes

Other browser vendors have similar implementations of groups, however im not currently aware of any implementation of this shared state exposure for extensions.