blob: 301b7defa775c1a31c333941eb56ac040076c377 [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.
// <if expr="_google_chrome">
import './data_sharing_sdk.js';
// </if>
// <if expr="not _google_chrome">
import './dummy_data_sharing_sdk.js';
// </if>
import '/strings.m.js';
import {loadTimeData} from 'chrome-untrusted://resources/js/load_time_data.js';
import type {BrowserProxy} from './browser_proxy.js';
import {BrowserProxyImpl} from './browser_proxy.js';
import type {ReadGroupsParams as MojomReadGroupsParams, ReadGroupWithTokenParam} from './data_sharing.mojom-webui.js';
import type {DataSharingSdk, ReadGroupParams} from './data_sharing_sdk_types.js';
import type {GroupData} from './group_data.mojom-webui.js';
import {toMojomGroupData} from './mojom_conversion_utils.js';
let initialized: boolean = false;
const dataSharingSdk: DataSharingSdk =
window.data_sharing_sdk.buildDataSharingSdk();
const browserProxy: BrowserProxy = BrowserProxyImpl.getInstance();
dataSharingSdk.updateClearcut(
{enabled: loadTimeData.getBoolean('metricsReportingEnabled')});
browserProxy.callbackRouter.onAccessTokenFetched.addListener(
(accessToken: string) => {
dataSharingSdk.setOauthAccessToken({accessToken});
if (!initialized) {
browserProxy.handler!.apiInitComplete();
initialized = true;
}
},
);
browserProxy.callbackRouter.readGroupWithToken.addListener(
(mojomParam: ReadGroupWithTokenParam) => {
const groupId = mojomParam.groupId;
const accessToken = mojomParam.accessToken;
return new Promise((resolve) => {
dataSharingSdk.readGroup({groupId}, {accessToken})
.then(({result, status}) => {
const group =
status ? undefined : toMojomGroupData(result!.groupData);
resolve({result: {group, statusCode: status}});
});
});
});
browserProxy.callbackRouter.readGroups.addListener(
(mojomParams: MojomReadGroupsParams) => {
const params: ReadGroupParams[] = [];
for (const mojomParam of mojomParams.params) {
params.push({
groupId: mojomParam.groupId,
consistencyToken: mojomParam.consistencyToken,
});
}
return new Promise((resolve) => {
dataSharingSdk.readGroups({params}).then(({result, status}) => {
const groupData: GroupData[] =
result?.groupData.map(toMojomGroupData) ?? [];
resolve({result: {groups: groupData, statusCode: status}});
});
});
});
browserProxy.callbackRouter.leaveGroup.addListener((groupId: string) => {
return new Promise((resolve) => {
dataSharingSdk.leaveGroup({groupId}).then(({status}) => {
resolve({statusCode: status});
});
});
});
browserProxy.callbackRouter.deleteGroup.addListener((groupId: string) => {
return new Promise((resolve) => {
dataSharingSdk.deleteGroup({groupId}).then(({status}) => {
resolve({statusCode: status});
});
});
});