blob: 799ebd21f7476bf460f92589a77501aa223a72bc [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.
/**
* @fileoverview Definitions for chrome.downloads API
* Partially generated from:
* chrome/common/extensions/api/downloads.idl
* run `tools/json_schema_compiler/compiler.py
* chrome/common/extensions/api/downloads.idl -g ts_definitions` to regenerate.
*/
import type {ChromeEvent} from '../../../../../../tools/typescript/definitions/chrome_event.js';
declare global {
export namespace chrome {
export namespace downloads {
export interface HeaderNameValuePair {
name: string;
value: string;
}
export enum FilenameConflictAction {
UNIQUIFY = 'uniquify',
OVERWRITE = 'overwrite',
PROMPT = 'prompt',
}
export interface FilenameSuggestion {
filename: string;
conflictAction?: FilenameConflictAction;
}
export enum HttpMethod {
GET = 'GET',
POST = 'POST',
}
export enum InterruptReason {
FILE_FAILED = 'FILE_FAILED',
FILE_ACCESS_DENIED = 'FILE_ACCESS_DENIED',
FILE_NO_SPACE = 'FILE_NO_SPACE',
FILE_NAME_TOO_LONG = 'FILE_NAME_TOO_LONG',
FILE_TOO_LARGE = 'FILE_TOO_LARGE',
FILE_VIRUS_INFECTED = 'FILE_VIRUS_INFECTED',
FILE_TRANSIENT_ERROR = 'FILE_TRANSIENT_ERROR',
FILE_BLOCKED = 'FILE_BLOCKED',
FILE_SECURITY_CHECK_FAILED = 'FILE_SECURITY_CHECK_FAILED',
FILE_TOO_SHORT = 'FILE_TOO_SHORT',
FILE_HASH_MISMATCH = 'FILE_HASH_MISMATCH',
FILE_SAME_AS_SOURCE = 'FILE_SAME_AS_SOURCE',
NETWORK_FAILED = 'NETWORK_FAILED',
NETWORK_TIMEOUT = 'NETWORK_TIMEOUT',
NETWORK_DISCONNECTED = 'NETWORK_DISCONNECTED',
NETWORK_SERVER_DOWN = 'NETWORK_SERVER_DOWN',
NETWORK_INVALID_REQUEST = 'NETWORK_INVALID_REQUEST',
SERVER_FAILED = 'SERVER_FAILED',
SERVER_NO_RANGE = 'SERVER_NO_RANGE',
SERVER_BAD_CONTENT = 'SERVER_BAD_CONTENT',
SERVER_UNAUTHORIZED = 'SERVER_UNAUTHORIZED',
SERVER_CERT_PROBLEM = 'SERVER_CERT_PROBLEM',
SERVER_FORBIDDEN = 'SERVER_FORBIDDEN',
SERVER_UNREACHABLE = 'SERVER_UNREACHABLE',
SERVER_CONTENT_LENGTH_MISMATCH = 'SERVER_CONTENT_LENGTH_MISMATCH',
SERVER_CROSS_ORIGIN_REDIRECT = 'SERVER_CROSS_ORIGIN_REDIRECT',
USER_CANCELED = 'USER_CANCELED',
USER_SHUTDOWN = 'USER_SHUTDOWN',
CRASH = 'CRASH',
}
export interface DownloadOptions {
url: string;
filename?: string;
conflictAction?: FilenameConflictAction;
saveAs?: boolean;
method?: HttpMethod;
headers?: HeaderNameValuePair[];
body?: string;
}
export enum DangerType {
FILE = 'file',
URL = 'url',
CONTENT = 'content',
UNCOMMON = 'uncommon',
HOST = 'host',
UNWANTED = 'unwanted',
SAFE = 'safe',
ACCEPTED = 'accepted',
ALLOWLISTED_BY_POLICY = 'allowlistedByPolicy',
ASYNC_SCANNING = 'asyncScanning',
ASYNC_LOCAL_PASSWORD_SCANNING = 'asyncLocalPasswordScanning',
PASSWORD_PROTECTED = 'passwordProtected',
BLOCKED_TOO_LARGE = 'blockedTooLarge',
SENSITIVE_CONTENT_WARNING = 'sensitiveContentWarning',
SENSITIVE_CONTENT_BLOCK = 'sensitiveContentBlock',
DEEP_SCANNED_FAILED = 'deepScannedFailed',
DEEP_SCANNED_SAFE = 'deepScannedSafe',
DEEP_SCANNED_OPENED_DANGEROUS = 'deepScannedOpenedDangerous',
PROMPT_FOR_SCANNING = 'promptForScanning',
PROMPT_FOR_LOCAL_PASSWORD_SCANNING = 'promptForLocalPasswordScanning',
ACCOUNT_COMPROMISE = 'accountCompromise',
BLOCKED_SCAN_FAILED = 'blockedScanFailed',
}
export enum State {
IN_PROGRESS = 'in_progress',
INTERRUPTED = 'interrupted',
COMPLETE = 'complete',
}
export interface DownloadItem {
id: number;
url: string;
finalUrl: string;
referrer: string;
filename: string;
incognito: boolean;
danger: DangerType;
mime: string;
startTime: string;
endTime?: string;
estimatedEndTime?: string;
state: State;
paused: boolean;
canResume: boolean;
error?: InterruptReason;
bytesReceived: number;
totalBytes: number;
fileSize: number;
exists: boolean;
byExtensionId?: string;
byExtensionName?: string;
}
export interface DownloadQuery {
query?: string[];
startedBefore?: string;
startedAfter?: string;
endedBefore?: string;
endedAfter?: string;
totalBytesGreater?: number;
totalBytesLess?: number;
filenameRegex?: string;
urlRegex?: string;
finalUrlRegex?: string;
limit?: number;
orderBy?: string[];
id?: number;
url?: string;
finalUrl?: string;
filename?: string;
danger?: DangerType;
mime?: string;
startTime?: string;
endTime?: string;
state?: State;
paused?: boolean;
error?: InterruptReason;
bytesReceived?: number;
totalBytes?: number;
fileSize?: number;
exists?: boolean;
}
export interface StringDelta {
previous?: string;
current?: string;
}
export interface DoubleDelta {
previous?: number;
current?: number;
}
export interface BooleanDelta {
previous?: boolean;
current?: boolean;
}
export interface DownloadDelta {
id: number;
url?: StringDelta;
finalUrl?: StringDelta;
filename?: StringDelta;
danger?: StringDelta;
mime?: StringDelta;
startTime?: StringDelta;
endTime?: StringDelta;
state?: StringDelta;
canResume?: BooleanDelta;
paused?: BooleanDelta;
error?: StringDelta;
totalBytes?: DoubleDelta;
fileSize?: DoubleDelta;
exists?: BooleanDelta;
}
export interface GetFileIconOptions {
size?: number;
}
export interface UiOptions {
enabled: boolean;
}
export function download(options: DownloadOptions): Promise<number>;
export function search(
query: DownloadQuery,
callback: (results: DownloadItem[]) => void): Promise<DownloadItem[]>;
export function pause(downloadId: number): Promise<void>;
export function resume(downloadId: number): Promise<void>;
export function cancel(downloadId: number): Promise<void>;
export function getFileIcon(
downloadId: number,
options?: GetFileIconOptions): Promise<string|undefined>;
export function open(downloadId: number): Promise<void>;
export function show(downloadId: number): void;
export function showDefaultFolder(): void;
export function erase(query: DownloadQuery): Promise<number[]>;
export function removeFile(downloadId: number): Promise<void>;
export function acceptDanger(downloadId: number): Promise<void>;
export function setShelfEnabled(enabled: boolean): void;
export function setUiOptions(options: UiOptions): Promise<void>;
export const onCreated: ChromeEvent<(downloadItem: DownloadItem) => void>;
export const onErased: ChromeEvent<(downloadId: number) => void>;
export const onChanged:
ChromeEvent<(downloadDelta: DownloadDelta) => void>;
export const onDeterminingFilename: ChromeEvent<
(downloadItem: DownloadItem,
suggest: (suggestion?: FilenameSuggestion) => void) => void>;
}
}
}