Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 6d27093d068a866cc0f2948e561882d1f2d8039b
      
https://github.com/WebKit/WebKit/commit/6d27093d068a866cc0f2948e561882d1f2d8039b
  Author: Timothy Hatcher <timo...@apple.com>
  Date:   2024-04-08 (Mon, 08 Apr 2024)

  Changed paths:
    M Source/WebCore/en.lproj/Localizable.strings
    M Source/WebKit/UIProcess/Extensions/Cocoa/WebExtensionCocoa.mm
    M Source/WebKit/UIProcess/Extensions/WebExtension.h
    M Tools/TestWebKitAPI/Tests/WebKitCocoa/WKWebExtension.mm
    M Tools/TestWebKitAPI/Tests/WebKitCocoa/WKWebExtensionController.mm

  Log Message:
  -----------
  Add support for background preferred_environment in Web Extensions.
https://webkit.org/b/272244
rdar://problem/125988233

Reviewed by Brian Weinstein.

Add support for extensions declaring a `preferred_environment` in the 
`background` entry.
The `preferred_environment` key can be a string or an array of strings. When an 
array is
used, the browser will prefer the first one it supports.

    "background": {
        "preferred_environment": [ "service_worker", "document" ],
        "scripts": [ "script1.js", "script2.js" ]
    }

If no environments are specified or supported, then we fallback to the previous 
handling of
the `scripts`, `page` or `service_worker` keys (in that order) for backwards 
compatibility.

This allows cross-browser extensions to have a single manifest that works in 
multiple
browsers. Chrome plans to only support service workers going forward, but 
Safari and
Firefox plan to support pages and service workers, and extension might prefer a 
document
environment over a service worker in Safari and Firefox.

This also adds support for a `_generated_service_worker.js` script that works 
with normal
scripts or modules based on the `scripts` and `type` keys if 
`preferred_environment`
is `service_worker`.

WECG discussion here: https://github.com/w3c/webextensions/issues/282

* Source/WebCore/en.lproj/Localizable.strings: Updated.
* Source/WebKit/UIProcess/Extensions/Cocoa/WebExtensionCocoa.mm:
(WebKit::WebExtension::resourceStringForPath): Support 
_generated_service_worker.js.
(WebKit::WebExtension::resourceDataForPath): Ditto.
(WebKit::WebExtension::backgroundContentUsesModules): Use renamed 
m_backgroundContentUsesModules.
(WebKit::WebExtension::backgroundContentIsServiceWorker): Use new 
m_backgroundContentEnvironment.
(WebKit::WebExtension::backgroundContentPath): Support 
_generated_service_worker.js.
(WebKit::WebExtension::generatedBackgroundContent): Generate the service worker 
script.
(WebKit::WebExtension::populateBackgroundPropertiesIfNeeded): Handle 
preferred_environment.
* Source/WebKit/UIProcess/Extensions/WebExtension.h: Added 
m_backgroundContentEnvironment and renamed
m_backgroundPageUsesModules to m_backgroundContentUsesModules.
* Tools/TestWebKitAPI/Tests/WebKitCocoa/WKWebExtension.mm:
(TestWebKitAPI::TEST(WKWebExtension, BackgroundPreferredEnvironmentParsing)): 
Added.
* Tools/TestWebKitAPI/Tests/WebKitCocoa/WKWebExtensionController.mm:
(TestWebKitAPI::TEST(WKWebExtensionController, 
BackgroundWithServiceWorkerPreferredEnvironment)): Added.
(TestWebKitAPI::TEST(WKWebExtensionController, 
BackgroundWithPageDocumentPreferredEnvironment)): Added.
(TestWebKitAPI::TEST(WKWebExtensionController, 
BackgroundWithScriptsDocumentPreferredEnvironment)): Added.
(TestWebKitAPI::TEST(WKWebExtensionController, 
BackgroundWithMultipleDocumentModuleScripts)): Added.
(TestWebKitAPI::TEST(WKWebExtensionController, 
BackgroundWithMultipleServiceWorkerScripts)): Added.
(TestWebKitAPI::TEST(WKWebExtensionController, 
BackgroundWithMultipleServiceWorkerModuleScripts)): Added.

Canonical link: https://commits.webkit.org/277228@main



To unsubscribe from these emails, change your notification settings at 
https://github.com/WebKit/WebKit/settings/notifications
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to