You must declare the "downloads"
permission in the extension manifest to use this API.
{"name":"My extension",..."permissions":["downloads"],}
You can find simple examples of using the chrome.downloads
API in the examples/api/downloads directory. For other examples and for help in viewing the source code, see Samples.
boolean optional
boolean optional
file
The download's filename is suspicious.
url
The download's URL is known to be malicious.
content
The downloaded file is known to be malicious.
uncommon
The download's URL is not commonly downloaded and could be dangerous.
host
The download came from a host known to distribute malicious binaries and is likely dangerous.
unwanted
The download is potentially unwanted or unsafe. E.g. it could make changes to browser or computer settings.
safe
The download presents no known danger to the user's computer.
accepted
The user has accepted the dangerous download.
"file" "url" "content" "uncommon" "host" "unwanted" "safe" "accepted" "allowlistedByPolicy" "asyncScanning" "asyncLocalPasswordScanning" "passwordProtected" "blockedTooLarge" "sensitiveContentWarning" "sensitiveContentBlock" "deepScannedFailed" "deepScannedSafe" "deepScannedOpenedDangerous" "promptForScanning" "promptForLocalPasswordScanning" "accountCompromise" "blockedScanFailed"
number optional
number optional
BooleanDelta optional
The change in canResume
, if any.
StringDelta optional
The change in danger
, if any.
StringDelta optional
The change in endTime
, if any.
StringDelta optional
The change in error
, if any.
BooleanDelta optional
The change in exists
, if any.
DoubleDelta optional
The change in fileSize
, if any.
StringDelta optional
The change in filename
, if any.
StringDelta optional
The change in finalUrl
, if any.
number
The id
of the DownloadItem
that changed.
StringDelta optional
The change in mime
, if any.
BooleanDelta optional
The change in paused
, if any.
StringDelta optional
The change in startTime
, if any.
StringDelta optional
The change in state
, if any.
DoubleDelta optional
The change in totalBytes
, if any.
StringDelta optional
The change in url
, if any.
string optional
The identifier for the extension that initiated this download if this download was initiated by an extension. Does not change once it is set.
string optional
The localized name of the extension that initiated this download if this download was initiated by an extension. May change if the extension changes its name or if the user changes their locale.
number
Number of bytes received so far from the host, without considering file compression.
boolean
True if the download is in progress and paused, or else if it is interrupted and can be resumed starting from where it was interrupted.
Indication of whether this download is thought to be safe or known to be suspicious.
string optional
The time when the download ended in ISO 8601 format. May be passed directly to the Date constructor: chrome.downloads.search({}, function(items){items.forEach(function(item){if (item.endTime) console.log(new Date(item.endTime))})})
InterruptReason optional
Why the download was interrupted. Several kinds of HTTP errors may be grouped under one of the errors beginning with SERVER_
. Errors relating to the network begin with NETWORK_
, errors relating to the process of writing the file to the file system begin with FILE_
, and interruptions initiated by the user begin with USER_
.
string optional
Estimated time when the download will complete in ISO 8601 format. May be passed directly to the Date constructor: chrome.downloads.search({}, function(items){items.forEach(function(item){if (item.estimatedEndTime) console.log(new Date(item.estimatedEndTime))})})
boolean
Whether the downloaded file still exists. This information may be out of date because Chrome does not automatically watch for file removal. Call search
() in order to trigger the check for file existence. When the existence check completes, if the file has been deleted, then an onChanged
event will fire. Note that search
() does not wait for the existence check to finish before returning, so results from search
() may not accurately reflect the file system. Also, search
() may be called as often as necessary, but will not check for file existence any more frequently than once every 10 seconds.
number
Number of bytes in the whole file post-decompression, or -1 if unknown.
string
Absolute local path.
string
The absolute URL that this download is being made from, after all redirects.
number
An identifier that is persistent across browser sessions.
boolean
False if this download is recorded in the history, true if it is not recorded.
string
The file's MIME type.
boolean
True if the download has stopped reading data from the host, but kept the connection open.
string
Absolute URL.
string
The time when the download began in ISO 8601 format. May be passed directly to the Date constructor: chrome.downloads.search({}, function(items){items.forEach(function(item){console.log(new Date(item.startTime))})})
Indicates whether the download is progressing, interrupted, or complete.
number
Number of bytes in the whole file, without considering file compression, or -1 if unknown.
string
The absolute URL that this download initiated from, before any redirects.
string optional
Post body.
FilenameConflictAction optional
The action to take if filename
already exists.
string optional
A file path relative to the Downloads directory to contain the downloaded file, possibly containing subdirectories. Absolute paths, empty paths, and paths containing back-references ".." will cause an error. onDeterminingFilename
allows suggesting a filename after the file's MIME type and a tentative filename have been determined.
HeaderNameValuePair[] optional
Extra HTTP headers to send with the request if the URL uses the HTTP[s] protocol. Each header is represented as a dictionary containing the keys name
and either value
or binaryValue
, restricted to those allowed by XMLHttpRequest.
HttpMethod optional
The HTTP method to use if the URL uses the HTTP[S] protocol.
boolean optional
Use a file-chooser to allow the user to select a filename regardless of whether filename
is set or already exists.
string
The URL to download.
number optional
Number of bytes received so far from the host, without considering file compression.
DangerType optional
Indication of whether this download is thought to be safe or known to be suspicious.
string optional
The time when the download ended in ISO 8601 format.
string optional
Limits results to DownloadItem
that ended after the given ms in ISO 8601 format
string optional
Limits results to DownloadItem
that ended before the given ms in ISO 8601 format.
InterruptReason optional
Why a download was interrupted.
boolean optional
Whether the downloaded file exists;
number optional
Number of bytes in the whole file post-decompression, or -1 if unknown.
string optional
Absolute local path.
string optional
Limits results to DownloadItem
whose filename
matches the given regular expression.
string optional
The absolute URL that this download is being made from, after all redirects.
string optional
Limits results to DownloadItem
whose finalUrl
matches the given regular expression.
number optional
The id
of the DownloadItem
to query.
number optional
The maximum number of matching DownloadItem
returned. Defaults to 1000. Set to 0 in order to return all matching DownloadItem
. See search
for how to page through results.
string optional
The file's MIME type.
string[] optional
Set elements of this array to DownloadItem
properties in order to sort search results. For example, setting orderBy=['startTime']
sorts the DownloadItem
by their start time in ascending order. To specify descending order, prefix with a hyphen: '-startTime'.
boolean optional
True if the download has stopped reading data from the host, but kept the connection open.
string[] optional
This array of search terms limits results to DownloadItem
whose filename
or url
or finalUrl
contain all of the search terms that do not begin with a dash '-' and none of the search terms that do begin with a dash.
string optional
The time when the download began in ISO 8601 format.
string optional
Limits results to DownloadItem
that started after the given ms in ISO 8601 format.
string optional
Limits results to DownloadItem
that started before the given ms in ISO 8601 format.
State optional
Indicates whether the download is progressing, interrupted, or complete.
number optional
Number of bytes in the whole file, without considering file compression, or -1 if unknown.
number optional
Limits results to DownloadItem
whose totalBytes
is greater than the given integer.
number optional
Limits results to DownloadItem
whose totalBytes
is less than the given integer.
string optional
The absolute URL that this download initiated from, before any redirects.
string optional
Limits results to DownloadItem
whose url
matches the given regular expression.
uniquify
To avoid duplication, the filename
is changed to include a counter before the filename extension.
overwrite
The existing file will be overwritten with the new file.
prompt
The user will be prompted with a file chooser dialog.
"uniquify" "overwrite" "prompt"
FilenameConflictAction optional
The action to take if filename
already exists.
string
The DownloadItem
's new target DownloadItem.filename
, as a path relative to the user's default Downloads directory, possibly containing subdirectories. Absolute paths, empty paths, and paths containing back-references ".." will be ignored. filename
is ignored if there are any onDeterminingFilename
listeners registered by any extensions.
number optional
The size of the returned icon. The icon will be square with dimensions size * size pixels. The default and largest size for the icon is 32x32 pixels. The only supported sizes are 16 and 32. It is an error to specify any other size.
string
Name of the HTTP header.
string
Value of the HTTP header.
"GET" "POST"
"FILE_FAILED" "FILE_ACCESS_DENIED" "FILE_NO_SPACE" "FILE_NAME_TOO_LONG" "FILE_TOO_LARGE" "FILE_VIRUS_INFECTED" "FILE_TRANSIENT_ERROR" "FILE_BLOCKED" "FILE_SECURITY_CHECK_FAILED" "FILE_TOO_SHORT" "FILE_HASH_MISMATCH" "FILE_SAME_AS_SOURCE" "NETWORK_FAILED" "NETWORK_TIMEOUT" "NETWORK_DISCONNECTED" "NETWORK_SERVER_DOWN" "NETWORK_INVALID_REQUEST" "SERVER_FAILED" "SERVER_NO_RANGE" "SERVER_BAD_CONTENT" "SERVER_UNAUTHORIZED" "SERVER_CERT_PROBLEM" "SERVER_FORBIDDEN" "SERVER_UNREACHABLE" "SERVER_CONTENT_LENGTH_MISMATCH" "SERVER_CROSS_ORIGIN_REDIRECT" "USER_CANCELED" "USER_SHUTDOWN" "CRASH"
in_progress
The download is currently receiving data from the server.
interrupted
An error broke the connection with the file host.
complete
The download completed successfully.
"in_progress" "interrupted" "complete"
string optional
string optional
boolean
Enable or disable the download UI.
chrome.downloads.acceptDanger(
downloadId: number,
callback?: function,
)
Prompt the user to accept a dangerous download. Can only be called from a visible context (tab, window, or page/browser action popup). Does not automatically accept dangerous downloads. If the download is accepted, then an onChanged
event will fire, otherwise nothing will happen. When all the data is fetched into a temporary file and either the download is not dangerous or the danger has been accepted, then the temporary file is renamed to the target filename, the state
changes to 'complete', and onChanged
fires.
number
The identifier for the DownloadItem
.
function optional
The callback
parameter looks like: () => void
Promise<void>
Promises are supported in Manifest V3 and later, but callbacks are provided for backward compatibility. You cannot use both on the same function call. The promise resolves with the same type that is passed to the callback.
chrome.downloads.cancel(
downloadId: number,
callback?: function,
)
Cancel a download. When callback
is run, the download is cancelled, completed, interrupted or doesn't exist anymore.
number
The id of the download to cancel.
function optional
The callback
parameter looks like: () => void
Promise<void>
Promises are supported in Manifest V3 and later, but callbacks are provided for backward compatibility. You cannot use both on the same function call. The promise resolves with the same type that is passed to the callback.
chrome.downloads.download(
options: DownloadOptions,
callback?: function,
)
Download a URL. If the URL uses the HTTP[S] protocol, then the request will include all cookies currently set for its hostname. If both filename
and saveAs
are specified, then the Save As dialog will be displayed, pre-populated with the specified filename
. If the download started successfully, callback
will be called with the new DownloadItem
's downloadId
. If there was an error starting the download, then callback
will be called with downloadId=undefined
and runtime.lastError
will contain a descriptive string. The error strings are not guaranteed to remain backwards compatible between releases. Extensions must not parse it.
What to download and how.
function optional
The callback
parameter looks like: (downloadId: number) => void
number
Promise<number>
Promises are supported in Manifest V3 and later, but callbacks are provided for backward compatibility. You cannot use both on the same function call. The promise resolves with the same type that is passed to the callback.
chrome.downloads.erase(
query: DownloadQuery,
callback?: function,
)
Erase matching DownloadItem
from history without deleting the downloaded file. An onErased
event will fire for each DownloadItem
that matches query
, then callback
will be called.
function optional
The callback
parameter looks like: (erasedIds: number[]) => void
number[]
Promise<number[]>
Promises are supported in Manifest V3 and later, but callbacks are provided for backward compatibility. You cannot use both on the same function call. The promise resolves with the same type that is passed to the callback.
chrome.downloads.getFileIcon(
downloadId: number,
options?: GetFileIconOptions,
callback?: function,
)
Retrieve an icon for the specified download. For new downloads, file icons are available after the onCreated
event has been received. The image returned by this function while a download is in progress may be different from the image returned after the download is complete. Icon retrieval is done by querying the underlying operating system or toolkit depending on the platform. The icon that is returned will therefore depend on a number of factors including state of the download, platform, registered file types and visual theme. If a file icon cannot be determined, runtime.lastError
will contain an error message.
number
The identifier for the download.
GetFileIconOptions optional
function optional
The callback
parameter looks like: (iconURL?: string) => void
string optional
Promise<string | undefined>
Promises are supported in Manifest V3 and later, but callbacks are provided for backward compatibility. You cannot use both on the same function call. The promise resolves with the same type that is passed to the callback.
chrome.downloads.open(
downloadId: number,
callback?: function,
)
Opens the downloaded file now if the DownloadItem
is complete; otherwise returns an error through runtime.lastError
. This method requires the "downloads.open"
permission in addition to the "downloads"
permission. An onChanged
event fires when the item is opened for the first time. This method can only be called in response to a user gesture.
number
The identifier for the downloaded file.
function optional
The callback
parameter looks like: () => void
Promise<void>
Promises are supported in Manifest V3 and later, but callbacks are provided for backward compatibility. You cannot use both on the same function call. The promise resolves with the same type that is passed to the callback.
chrome.downloads.pause(
downloadId: number,
callback?: function,
)
Pause the download. If the request was successful the download is in a paused state. Otherwise runtime.lastError
contains an error message. The request will fail if the download is not active.
number
The id of the download to pause.
function optional
The callback
parameter looks like: () => void
Promise<void>
Promises are supported in Manifest V3 and later, but callbacks are provided for backward compatibility. You cannot use both on the same function call. The promise resolves with the same type that is passed to the callback.
chrome.downloads.removeFile(
downloadId: number,
callback?: function,
)
Remove the downloaded file if it exists and the DownloadItem
is complete; otherwise return an error through runtime.lastError
.
number
function optional
The callback
parameter looks like: () => void
Promise<void>
Promises are supported in Manifest V3 and later, but callbacks are provided for backward compatibility. You cannot use both on the same function call. The promise resolves with the same type that is passed to the callback.
chrome.downloads.resume(
downloadId: number,
callback?: function,
)
Resume a paused download. If the request was successful the download is in progress and unpaused. Otherwise runtime.lastError
contains an error message. The request will fail if the download is not active.
number
The id of the download to resume.
function optional
The callback
parameter looks like: () => void
Promise<void>
Promises are supported in Manifest V3 and later, but callbacks are provided for backward compatibility. You cannot use both on the same function call. The promise resolves with the same type that is passed to the callback.
chrome.downloads.search(
query: DownloadQuery,
callback?: function,
)
Find DownloadItem
. Set query
to the empty object to get all DownloadItem
. To get a specific DownloadItem
, set only the id
field. To page through a large number of items, set orderBy: ['-startTime']
, set limit
to the number of items per page, and set startedAfter
to the startTime
of the last item from the last page.
function optional
The callback
parameter looks like: (results: DownloadItem[]) => void
Promise<DownloadItem[]>
Promises are supported in Manifest V3 and later, but callbacks are provided for backward compatibility. You cannot use both on the same function call. The promise resolves with the same type that is passed to the callback.
chrome.downloads.setShelfEnabled(
enabled: boolean,
)
Use setUiOptions
instead.
Enable or disable the gray shelf at the bottom of every window associated with the current browser profile. The shelf will be disabled as long as at least one extension has disabled it. Enabling the shelf while at least one other extension has disabled it will return an error through runtime.lastError
. Requires the "downloads.shelf"
permission in addition to the "downloads"
permission.
boolean
chrome.downloads.setUiOptions(
options: UiOptions,
callback?: function,
)
Change the download UI of every window associated with the current browser profile. As long as at least one extension has set UiOptions.enabled
to false, the download UI will be hidden. Setting UiOptions.enabled
to true while at least one other extension has disabled it will return an error through runtime.lastError
. Requires the "downloads.ui"
permission in addition to the "downloads"
permission.
Encapsulate a change to the download UI.
function optional
The callback
parameter looks like: () => void
Promise<void>
Promises are supported in Manifest V3 and later, but callbacks are provided for backward compatibility. You cannot use both on the same function call. The promise resolves with the same type that is passed to the callback.
chrome.downloads.show(
downloadId: number,
)
Show the downloaded file in its folder in a file manager.
number
The identifier for the downloaded file.
chrome.downloads.showDefaultFolder()
Show the default Downloads folder in a file manager.
chrome.downloads.onChanged.addListener(
callback: function,
)
When any of a DownloadItem
's properties except bytesReceived
and estimatedEndTime
changes, this event fires with the downloadId
and an object containing the properties that changed.
function
The callback
parameter looks like: (downloadDelta: DownloadDelta) => void
chrome.downloads.onCreated.addListener(
callback: function,
)
This event fires with the DownloadItem
object when a download begins.
function
The callback
parameter looks like: (downloadItem: DownloadItem) => void
chrome.downloads.onDeterminingFilename.addListener(
callback: function,
)
During the filename determination process, extensions will be given the opportunity to override the target DownloadItem.filename
. Each extension may not register more than one listener for this event. Each listener must call suggest
exactly once, either synchronously or asynchronously. If the listener calls suggest
asynchronously, then it must return true
. If the listener neither calls suggest
synchronously nor returns true
, then suggest
will be called automatically. The DownloadItem
will not complete until all listeners have called suggest
. Listeners may call suggest
without any arguments in order to allow the download to use downloadItem.filename
for its filename, or pass a suggestion
object to suggest
in order to override the target filename. If more than one extension overrides the filename, then the last extension installed whose listener passes a suggestion
object to suggest
wins. In order to avoid confusion regarding which extension will win, users should not install extensions that may conflict. If the download is initiated by download
and the target filename is known before the MIME type and tentative filename have been determined, pass filename
to download
instead.
function
The callback
parameter looks like: (downloadItem: DownloadItem, suggest: function) => void
function
The suggest
parameter looks like: (suggestion?: FilenameSuggestion) => void
FilenameSuggestion optional
chrome.downloads.onErased.addListener(
callback: function,
)
Fires with the downloadId
when a download is erased from history.
function
The callback
parameter looks like: (downloadId: number) => void
number
Except as otherwise noted, the content of this page is licensed under the Creative Commons Attribution 4.0 License, and code samples are licensed under the Apache 2.0 License. For details, see the Google Developers Site Policies. Java is a registered trademark of Oracle and/or its affiliates.
Last updated 2024-10-15 UTC.