downloads.onChanged
===================

The **`onChanged()`** event of the `downloads` API is fired when any of a `downloads.DownloadItem`'s properties changes (except for `bytesReceived`).

The listener is passed a `downloadDelta` as a parameter — an object containing the `downloadId` of the `downloads.DownloadItem` object in question, plus the status of all the properties that changed.

Syntax
------


```js
browser.downloads.onChanged.addListener(listener)
browser.downloads.onChanged.removeListener(listener)
browser.downloads.onChanged.hasListener(listener)
```


Events have three functions:

`addListener(listener)`

Adds a listener to this event.

`removeListener(listener)`

Stop listening to this event. The `listener` argument is the listener to remove.

`hasListener(listener)`

Check whether a given `listener` is registered for this event. Returns `true` if it is listening, `false` otherwise.

addListener syntax
------------------

### Parameters

`listener`

The function called when this event occurs. This function will be passed this argument:

`downloadDelta`

An `object` representing the `downloads.DownloadItem` object that changed, and the status of all the properties that changed in it. See the downloadDelta section for more details.


Additional objects
------------------

### downloadDelta

The `downloadDelta` object has the following properties available:

`id`

An `integer` representing the `id` of the `downloads.DownloadItem` that changed.

`url` Optional

A `downloads.StringDelta` object describing a change in a `downloads.DownloadItem`'s `url`.

`filename` Optional

A `downloads.StringDelta` object describing a change in a `downloads.DownloadItem`'s `filename`.

`danger` Optional

A `downloads.StringDelta` object describing a change in a `downloads.DownloadItem`'s `danger`.

`mime` Optional

A `downloads.StringDelta` object describing a change in a `downloads.DownloadItem`'s `mime`.

`startTime` Optional

A `downloads.StringDelta` object describing a change in a `downloads.DownloadItem`'s `startTime`.

`endTime` Optional

A `downloads.StringDelta` object describing a change in a `downloads.DownloadItem`'s `endTime`.

`state` Optional

A `downloads.StringDelta` object describing a change in a `downloads.DownloadItem`'s `state`.

`canResume` Optional

A `downloads.BooleanDelta` object describing a change in a `downloads.DownloadItem`'s `canResume` status.

`paused` Optional

A `downloads.BooleanDelta` object describing a change in a `downloads.DownloadItem`'s `paused` status.

`error` Optional

A `downloads.StringDelta` object describing a change in a `downloads.DownloadItem`'s `error` status.

`totalBytes` Optional

A `downloads.DoubleDelta` object describing a change in a `downloads.DownloadItem`'s `totalBytes`.

`fileSize` Optional

A `downloads.DoubleDelta` object describing a change in a `downloads.DownloadItem`'s `fileSize`.

`exists` Optional

A `downloads.BooleanDelta` object describing a change in a `downloads.DownloadItem`'s `exists` status.

Browser compatibility
---------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

Examples
--------

Log a message when downloads complete:


```js
function handleChanged(delta) {
  if (delta.state && delta.state.current === "complete") {
    console.log(`Download ${delta.id} has completed.`);
  }
}

browser.downloads.onChanged.addListener(handleChanged);
```


**Note:** This API is based on Chromium's `chrome.downloads` API.