| // 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. |
| |
| // Use the <code>offscreen</code> API to create and manage offscreen documents. |
| namespace offscreen { |
| enum Reason { |
| // A reason used for testing purposes only. |
| TESTING, |
| // Specifies that the offscreen document is responsible for playing audio. |
| AUDIO_PLAYBACK, |
| // Specifies that the offscreen document needs to embed and script an |
| // iframe in order to modify the iframe's content. |
| IFRAME_SCRIPTING, |
| // Specifies that the offscreen document needs to embed an iframe and |
| // scrape its DOM to extract information. |
| DOM_SCRAPING, |
| // Specifies that the offscreen document needs to interact with Blob |
| // objects (including <code>URL.createObjectURL()</code>). |
| BLOBS, |
| // Specifies that the offscreen document needs to use the |
| // <a href="https://developer.mozilla.org/en-US/docs/Web/API/DOMParser">DOMParser API</a>. |
| DOM_PARSER, |
| // Specifies that the offscreen document needs to interact with |
| // media streams from user media (e.g. <code>getUserMedia()</code>). |
| USER_MEDIA, |
| // Specifies that the offscreen document needs to interact with |
| // media streams from display media (e.g. <code>getDisplayMedia()</code>). |
| DISPLAY_MEDIA, |
| // Specifies that the offscreen document needs to use |
| // <a href="https://developer.mozilla.org/en-US/docs/Web/API/WebRTC_API">WebRTC APIs</a>. |
| WEB_RTC, |
| // Specifies that the offscreen document needs to interact with the |
| // <a href="https://developer.mozilla.org/en-US/docs/Web/API/Clipboard_API">Clipboard API</a>. |
| CLIPBOARD, |
| // Specifies that the offscreen document needs access to |
| // <a href="https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage">localStorage</a>. |
| LOCAL_STORAGE, |
| // Specifies that the offscreen document needs to spawn workers. |
| WORKERS, |
| // Specifies that the offscreen document needs to use |
| // <a href="https://developer.mozilla.org/en-US/docs/Web/API/Battery_Status_API">navigator.getBattery</a>. |
| BATTERY_STATUS, |
| // Specifies that the offscreen document needs to use |
| // <a href="https://developer.mozilla.org/en-US/docs/Web/API/Window/matchMedia">window.matchMedia</a>. |
| MATCH_MEDIA, |
| // Specifies that the offscreen document needs to use |
| // <a href="https://developer.mozilla.org/en-US/docs/Web/API/Navigator/geolocation">navigator.geolocation</a>. |
| GEOLOCATION |
| }; |
| |
| dictionary CreateParameters { |
| // The reason(s) the extension is creating the offscreen document. |
| Reason[] reasons; |
| // The (relative) URL to load in the document. |
| DOMString url; |
| // A developer-provided string that explains, in more detail, the need for |
| // the background context. The user agent _may_ use this in display to the |
| // user. |
| DOMString justification; |
| }; |
| |
| callback VoidCallback = void(); |
| callback BooleanCallback = void(boolean result); |
| |
| interface Functions { |
| // Creates a new offscreen document for the extension. |
| // |parameters|: The parameters describing the offscreen document to create. |
| // |callback|: Invoked when the offscreen document is created and has |
| // completed its initial page load. |
| static void createDocument( |
| CreateParameters parameters, |
| VoidCallback callback); |
| |
| // Closes the currently-open offscreen document for the extension. |
| // |callback|: Invoked when the offscreen document has been closed. |
| static void closeDocument(VoidCallback callback); |
| |
| // Determines whether the extension has an active document. |
| // TODO(crbug.com/40849649): This probably isn't something we want to |
| // ship in its current form (hence the nodoc). Instead of this, we should |
| // integrate offscreen documents into a service worker-compatible getViews() |
| // alternative. But this is pretty useful in testing environments. |
| // |callback|: Invoked with the result of whether the extension has an |
| // active offscreen document. |
| [nodoc] static void hasDocument(BooleanCallback callback); |
| }; |
| }; |