blob: 83e33e9fcc8e7521f6f9729df204d43cb99f149b [file] [log] [blame]
// Copyright 2024 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
module data_sharing.mojom;
import "components/data_sharing/public/protocol/group_data.mojom";
import "mojo/public/mojom/base/absl_status.mojom";
import "url/mojom/url.mojom";
// Group action user received from Data Sharing SDK.
// Map to a subset of LoggingIntent enum in data_sharing_sdk_types.ts
enum GroupAction {
kUnknown = 0,
kJoinGroup = 1,
kDeleteGroup = 2,
kLeaveGroup = 3,
kKeepGroup = 4,
kStopSharing = 5,
};
// Group action progress received from Data Sharing SDK.
// Map to Progress enum in data_sharing_sdk_types.ts
enum GroupActionProgress {
kUnknown = 0,
kStarted = 1,
kFailed = 2,
kSuccess = 3,
};
struct ReadGroupsParams {
array<ReadGroupParams> params;
};
struct ReadGroupParams {
// Identifier of the people group.
string group_id;
// As an optimization, sending a consistency token will allow for reading
// groups with bounded staleness. Without a consistency token, we'll always
// read the most current group.
string consistency_token;
};
// Result of the ReadGroups API.
struct ReadGroupsResult {
// Returns GroupData array when ReadGroups is successful, otherwise
// returns empty array.
array<GroupData> groups;
// Status code equivalent to absl::StatusCode. Returns 0 if successful.
int32 status_code;
};
struct ReadGroupWithTokenParam {
string group_id;
string access_token;
};
struct ReadGroupWithTokenResult {
// Return GroupData if successful.
GroupData? group;
// Status code equivalent to absl::StatusCode. Returns 0 if successful.
int32 status_code;
};
struct SharedTab {
// Url of the tab, trimmed to domain e.g. google.com. This is for
// display only and will not be consumed as a URL. Use bare string here
// because the Typescript on the other side cannot format the url to domain
// only like how it's done in C++ and the domain is all we need.
string display_url;
// Url of the tab favicon.
url.mojom.Url favicon_url;
};
// Preview data of the shared tab group. Shown in the Join dialog.
struct GroupPreview {
// Group title.
string title;
// Tabs in the group.
array<SharedTab> shared_tabs;
// Status code equivalent to absl::StatusCode. Returns 0 if successful.
mojo_base.mojom.AbslStatusCode status_code;
};
// Factory ensures that the Page and PageHandler interfaces are always created
// together without requiring an initialization call from the WebUI to the
// handler.
interface PageHandlerFactory {
// The WebUI calls this method when the page is first initialized.
CreatePageHandler(
pending_remote<Page> page, pending_receiver<PageHandler> handler);
};
// Browser-side handler for requests from WebUI page.
interface PageHandler {
// Ask the browser to show the UI. Called when the page is loaded and ready to
// show.
ShowUI();
// Ask the browser to close the UI and handle some special codes.
CloseUI(int32 status_code);
// Called when the api page is fully initialized and authenticated.
// All other APIs on the Page such as ReadGroups should only be invoked
// after ApiInitComplete.
ApiInitComplete();
// Make the tab group shared and get the shared link.
// Used only in first time copy link button is clicked on Shared flow.
// This call may fail due to connectivity problems.
// Return nullopt if it fails.
// After this call is successful, all subsequent calls will go through
// GetShareLink instead.
MakeTabGroupShared(string tab_group_id, string group_id, string access_token)
=> (url.mojom.Url? url);
// `group_id` connects the shared tab group with people group. `access_token`
// is used to check link validity. Chrome stitches them together with a host
// and generates an invite link. Owner can share the link to the public.
// This call should be always successful.
GetShareLink(string group_id, string access_token) => (url.mojom.Url url);
// Ask the browser for the group preview.
GetTabGroupPreview(string group_id, string access_token)
=> (GroupPreview group_preview);
// Ask Chrome to open the tab group in current browser once the "Join and
// Open" is pressed from the Join dialog.
OpenTabGroup(string group_id);
// Call before stop sharing.
AboutToUnShareTabGroup(string tab_group_id);
// Call after stop sharing succeeded.
OnTabGroupUnShareComplete(string tab_group_id);
// Call when group action is called.
OnGroupAction(GroupAction action, GroupActionProgress progress);
};
// WebUI-side handler for requests from the browser.
interface Page {
// Called when the access token of the primary account is fetched.
// The token is used by data sharing SDK to authenticate the current user.
OnAccessTokenFetched(string access_token);
// Read groups given a list of ReadGroupParams.
ReadGroups(ReadGroupsParams read_groups_params) => (ReadGroupsResult result);
// Read a single group given group_id and access_token.
ReadGroupWithToken(ReadGroupWithTokenParam param)
=> (ReadGroupWithTokenResult result);
// Delete the group given group_id.
// Return status code equivalent to absl::StatusCode.
DeleteGroup(string group_id) => (int32 status_code);
// Leave the group given group_id.
// Return status code equivalent to absl::StatusCode.
LeaveGroup(string group_id) => (int32 status_code);
};