| // Copyright 2022 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| import {sendWithPromise} from 'chrome://resources/js/cr.js'; |
| |
| export interface DataCollectorItem { |
| name: string; |
| isIncluded: boolean; |
| protoEnum: number; |
| } |
| |
| export interface IssueDetails { |
| caseId: string; |
| emailAddress: string; |
| issueDescription: string; |
| } |
| |
| export interface PiiDataItem { |
| piiTypeDescription: string; |
| piiType: number; |
| detectedData: string[]; |
| count: number; |
| keep: boolean; |
| expandDetails: boolean; |
| } |
| |
| export interface StartDataCollectionResult { |
| success: boolean; |
| errorMessage: string; |
| } |
| |
| export interface SupportTokenGenerationResult { |
| success: boolean; |
| // It will be filled only if `success` is true. |
| token: string; |
| errorMessage: string; |
| } |
| |
| export interface BrowserProxy { |
| /** |
| * Gets the list of email addresses that are logged in from C++ side. |
| */ |
| getEmailAddresses(): Promise<string[]>; |
| |
| getDataCollectors(): Promise<DataCollectorItem[]>; |
| |
| getAllDataCollectors(): Promise<DataCollectorItem[]>; |
| |
| startDataCollection( |
| issueDetails: IssueDetails, selectedDataCollectors: DataCollectorItem[], |
| screenshotBase64: string): Promise<StartDataCollectionResult>; |
| |
| takeScreenshot(): void; |
| |
| cancelDataCollection(): void; |
| |
| startDataExport(piiItems: PiiDataItem[]): void; |
| |
| showExportedDataInFolder(): void; |
| |
| generateCustomizedUrl(caseId: string, dataCollectors: DataCollectorItem[]): |
| Promise<SupportTokenGenerationResult>; |
| |
| generateSupportToken(dataCollectors: DataCollectorItem[]): |
| Promise<SupportTokenGenerationResult>; |
| } |
| |
| export class BrowserProxyImpl implements BrowserProxy { |
| getEmailAddresses() { |
| return sendWithPromise('getEmailAddresses'); |
| } |
| |
| getDataCollectors() { |
| return sendWithPromise('getDataCollectors'); |
| } |
| |
| getAllDataCollectors() { |
| return sendWithPromise('getAllDataCollectors'); |
| } |
| |
| takeScreenshot() { |
| chrome.send('takeScreenshot'); |
| } |
| |
| startDataCollection( |
| issueDetails: IssueDetails, dataCollectors: DataCollectorItem[], |
| screenshotBase64: string) { |
| return sendWithPromise( |
| 'startDataCollection', issueDetails, dataCollectors, screenshotBase64); |
| } |
| |
| cancelDataCollection() { |
| chrome.send('cancelDataCollection'); |
| } |
| |
| startDataExport(piiItems: PiiDataItem[]) { |
| chrome.send('startDataExport', [piiItems]); |
| } |
| |
| showExportedDataInFolder() { |
| chrome.send('showExportedDataInFolder'); |
| } |
| |
| generateCustomizedUrl(caseId: string, dataCollectors: DataCollectorItem[]) { |
| return sendWithPromise('generateCustomizedUrl', caseId, dataCollectors); |
| } |
| |
| generateSupportToken(dataCollectors: DataCollectorItem[]) { |
| return sendWithPromise('generateSupportToken', dataCollectors); |
| } |
| |
| static getInstance(): BrowserProxy { |
| return instance || (instance = new BrowserProxyImpl()); |
| } |
| |
| static setInstance(obj: BrowserProxy) { |
| instance = obj; |
| } |
| } |
| |
| // The singleton instance_ is replaced with a test version of this wrapper |
| // during testing. |
| let instance: BrowserProxy|null = null; |