// Copyright 2016 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 OfflinePage {
onlineUrl: string;
creationTime: number;
id: string;
namespace: string;
size: string;
filePath: string;
lastAccessTime: number;
accessCount: number;
isExpired: string;
requestOrigin: string;
}
export interface SavePageRequest {
status: string;
onlineUrl: string;
creationTime: number;
id: string;
namespace: string;
lastAttemptTime: number;
requestOrigin: string;
}
export interface IsLogging {
modelIsLogging: boolean;
queueIsLogging: boolean;
prefetchIsLogging: boolean;
}
export interface OfflineInternalsBrowserProxy {
/**
* Gets current list of stored pages.
* @return A promise firing when the list is fetched.
*/
getStoredPages(): Promise<OfflinePage[]>;
/**
* Gets current offline queue requests.
* @return A promise firing when the request queue is fetched.
*/
getRequestQueue(): Promise<SavePageRequest[]>;
/**
* Deletes a set of pages from stored pages
* @param ids A list of page IDs to delete.
* @return A promise firing when the selected pages are deleted.
*/
deleteSelectedPages(ids: string[]): Promise<string>;
/**
* Deletes a set of requests from the request queue
* @param ids A list of request IDs to delete.
* @return A promise firing when the selected pages are deleted.
*/
deleteSelectedRequests(ids: string[]): Promise<string>;
/**
* Sets whether to record logs for stored pages.
* @param shouldLog True if logging should be enabled.
*/
setRecordPageModel(shouldLog: boolean): void;
/**
* Sets whether to record logs for scheduled requests.
* @param shouldLog True if logging should be enabled.
*/
setRecordRequestQueue(shouldLog: boolean): void;
/**
* Sets whether to record logs for prefetching.
* @param shouldLog True if logging should be enabled.
*/
setRecordPrefetchService(shouldLog: boolean): void;
/**
* Sets whether limitless prefetching is enabled.
* @param enabled Whether to enable limitless prefetching.
*/
setLimitlessPrefetchingEnabled(enabled: boolean): void;
/**
* Gets whether limitless prefetching is enabled.
* @return Whether limitless prefetching is enabled
*/
getLimitlessPrefetchingEnabled(): Promise<boolean>;
/**
* Sets the value to be sent with the prefetch testing header for
* GeneratePageBundle requests.
* @param value Value to send with X-Offline-Prefetch-Testing.
*/
setPrefetchTestingHeaderValue(value: string): void;
/**
* Gets the value of the prefetch testing header to be sent with
* GeneratePageBundle requests.
* @return Header value.
*/
getPrefetchTestingHeaderValue(): Promise<string>;
/**
* Gets the currently recorded logs.
* @return A promise firing when the logs are retrieved.
*/
getEventLogs(): Promise<string[]>;
/**
* Gets the state of logging (on/off).
* @return A promise firing when the state is retrieved.
*/
getLoggingState(): Promise<IsLogging>;
/**
* Adds the given url to the background loader queue.
* @param url Url of the page to load later.
* @return A promise firing after added to queue.
* Promise will return true if url has been successfully added.
*/
addToRequestQueue(url: string): Promise<boolean>;
/**
* Gets the current network status in string form.
* @return A promise firing when the network status is retrieved.
*/
getNetworkStatus(): Promise<string>;
/**
* Schedules the default NWake task. The returned Promise will reject if
* there is an error while scheduling.
* @return A promise firing when the task has been scheduled.
*/
scheduleNwake(): Promise<string>;
/**
* Cancels NWake task.
* @return A promise firing when the task has been cancelled. The
* returned Promise will reject if there is an error.
*/
cancelNwake(): Promise<string>;
/**
* Sends and processes a request to generate page bundle.
* @param urls A list of comma-separated URLs.
* @return A string describing the result.
*/
generatePageBundle(urls: string): Promise<string>;
/**
* Sends and processes a request to get operation.
* @param name Name of operation.
* @return A string describing the result.
*/
getOperation(name: string): Promise<string>;
/**
* Downloads an archive.
* @param name Name of archive to download.
*/
downloadArchive(name: string): void;
}
export class OfflineInternalsBrowserProxyImpl implements
OfflineInternalsBrowserProxy {
getStoredPages() {
return sendWithPromise('getStoredPages');
}
getRequestQueue() {
return sendWithPromise('getRequestQueue');
}
deleteSelectedPages(ids: string[]) {
return sendWithPromise('deleteSelectedPages', ids);
}
deleteSelectedRequests(ids: string[]) {
return sendWithPromise('deleteSelectedRequests', ids);
}
setRecordPageModel(shouldLog: boolean) {
chrome.send('setRecordPageModel', [shouldLog]);
}
setRecordRequestQueue(shouldLog: boolean) {
chrome.send('setRecordRequestQueue', [shouldLog]);
}
setRecordPrefetchService(shouldLog: boolean) {
chrome.send('setRecordPrefetchService', [shouldLog]);
}
setLimitlessPrefetchingEnabled(enabled: boolean) {
chrome.send('setLimitlessPrefetchingEnabled', [enabled]);
}
getLimitlessPrefetchingEnabled() {
return sendWithPromise('getLimitlessPrefetchingEnabled');
}
setPrefetchTestingHeaderValue(value: string) {
chrome.send('setPrefetchTestingHeader', [value]);
}
getPrefetchTestingHeaderValue() {
return sendWithPromise('getPrefetchTestingHeader');
}
getEventLogs() {
return sendWithPromise('getEventLogs');
}
getLoggingState() {
return sendWithPromise('getLoggingState');
}
addToRequestQueue(url: string) {
return sendWithPromise('addToRequestQueue', url);
}
getNetworkStatus() {
return sendWithPromise('getNetworkStatus');
}
scheduleNwake() {
return sendWithPromise('scheduleNwake');
}
cancelNwake() {
return sendWithPromise('cancelNwake');
}
generatePageBundle(urls: string) {
return sendWithPromise('generatePageBundle', urls);
}
getOperation(name: string) {
return sendWithPromise('getOperation', name);
}
downloadArchive(name: string) {
chrome.send('downloadArchive', [name]);
}
static getInstance(): OfflineInternalsBrowserProxy {
return instance || (instance = new OfflineInternalsBrowserProxyImpl());
}
}
let instance: OfflineInternalsBrowserProxy|null = null;