зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1776109 - Part 2: Add ServiceWorkersEnabled() for service worker interfaces exposure r=asuth
Differential Revision: https://phabricator.services.mozilla.com/D150441
This commit is contained in:
Родитель
4bbf6a056b
Коммит
6786c826fa
|
@ -16,6 +16,7 @@
|
|||
#include "mozilla/dom/PushSubscriptionOptionsBinding.h"
|
||||
#include "mozilla/dom/PushUtil.h"
|
||||
#include "mozilla/dom/RootedDictionary.h"
|
||||
#include "mozilla/dom/ServiceWorker.h"
|
||||
#include "mozilla/dom/WorkerRunnable.h"
|
||||
#include "mozilla/dom/WorkerScope.h"
|
||||
|
||||
|
@ -409,6 +410,10 @@ already_AddRefed<PushManager> PushManager::Constructor(GlobalObject& aGlobal,
|
|||
return ret.forget();
|
||||
}
|
||||
|
||||
bool PushManager::IsEnabled(JSContext* aCx, JSObject* aGlobal) {
|
||||
return StaticPrefs::dom_push_enabled() && ServiceWorkerVisible(aCx, aGlobal);
|
||||
}
|
||||
|
||||
already_AddRefed<Promise> PushManager::Subscribe(
|
||||
const PushSubscriptionOptionsInit& aOptions, ErrorResult& aRv) {
|
||||
if (mImpl) {
|
||||
|
|
|
@ -74,6 +74,8 @@ class PushManager final : public nsISupports, public nsWrapperCache {
|
|||
const nsAString& aScope,
|
||||
ErrorResult& aRv);
|
||||
|
||||
static bool IsEnabled(JSContext* aCx, JSObject* aGlobal);
|
||||
|
||||
already_AddRefed<Promise> PerformSubscriptionActionFromWorker(
|
||||
SubscriptionAction aAction, ErrorResult& aRv);
|
||||
|
||||
|
|
|
@ -7,14 +7,14 @@
|
|||
#include "NavigationPreloadManager.h"
|
||||
#include "ServiceWorkerUtils.h"
|
||||
#include "nsNetUtil.h"
|
||||
#include "mozilla/StaticPrefs_dom.h"
|
||||
#include "mozilla/dom/NavigationPreloadManagerBinding.h"
|
||||
#include "mozilla/dom/Promise.h"
|
||||
#include "mozilla/dom/ServiceWorker.h"
|
||||
#include "mozilla/ipc/MessageChannel.h"
|
||||
|
||||
namespace mozilla::dom {
|
||||
|
||||
using mozilla::ipc::ResponseRejectReason;
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTING_ADDREF(NavigationPreloadManager)
|
||||
NS_IMPL_CYCLE_COLLECTING_RELEASE(NavigationPreloadManager)
|
||||
|
||||
|
@ -30,6 +30,11 @@ bool NavigationPreloadManager::IsValidHeader(const nsACString& aHeader) {
|
|||
return NS_IsReasonableHTTPHeaderValue(aHeader);
|
||||
}
|
||||
|
||||
bool NavigationPreloadManager::IsEnabled(JSContext* aCx, JSObject* aGlobal) {
|
||||
return StaticPrefs::dom_serviceWorkers_navigationPreload_enabled() &&
|
||||
ServiceWorkerVisible(aCx, aGlobal);
|
||||
}
|
||||
|
||||
NavigationPreloadManager::NavigationPreloadManager(
|
||||
nsCOMPtr<nsIGlobalObject>&& aGlobal,
|
||||
RefPtr<ServiceWorkerRegistration::Inner>& aInner)
|
||||
|
|
|
@ -28,6 +28,8 @@ class NavigationPreloadManager final : public nsISupports,
|
|||
|
||||
static bool IsValidHeader(const nsACString& aHeader);
|
||||
|
||||
static bool IsEnabled(JSContext* aCx, JSObject* aGlobal);
|
||||
|
||||
NavigationPreloadManager(nsCOMPtr<nsIGlobalObject>&& aGlobal,
|
||||
RefPtr<ServiceWorkerRegistration::Inner>& aInner);
|
||||
|
||||
|
|
|
@ -19,9 +19,11 @@
|
|||
#include "mozilla/dom/ClientIPCTypes.h"
|
||||
#include "mozilla/dom/ClientState.h"
|
||||
#include "mozilla/dom/MessagePortBinding.h"
|
||||
#include "mozilla/dom/Navigator.h"
|
||||
#include "mozilla/dom/Promise.h"
|
||||
#include "mozilla/dom/ServiceWorkerGlobalScopeBinding.h"
|
||||
#include "mozilla/dom/WorkerPrivate.h"
|
||||
#include "mozilla/BasePrincipal.h"
|
||||
#include "mozilla/StaticPrefs_dom.h"
|
||||
#include "mozilla/StorageAccess.h"
|
||||
|
||||
|
@ -29,17 +31,67 @@
|
|||
# undef PostMessage
|
||||
#endif
|
||||
|
||||
using mozilla::ErrorResult;
|
||||
using namespace mozilla::dom;
|
||||
|
||||
namespace mozilla::dom {
|
||||
|
||||
bool ServiceWorkerVisible(JSContext* aCx, JSObject* aObj) {
|
||||
if (NS_IsMainThread()) {
|
||||
return StaticPrefs::dom_serviceWorkers_enabled();
|
||||
static bool IsServiceWorkersTestingEnabledInWindow(JSObject* const aGlobal) {
|
||||
if (const nsCOMPtr<nsPIDOMWindowInner> innerWindow =
|
||||
Navigator::GetWindowFromGlobal(aGlobal)) {
|
||||
if (auto* bc = innerWindow->GetBrowsingContext()) {
|
||||
return bc->Top()->ServiceWorkersTestingEnabled();
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool ServiceWorkersEnabled(JSContext* aCx, JSObject* aGlobal) {
|
||||
MOZ_ASSERT(NS_IsMainThread());
|
||||
|
||||
if (!StaticPrefs::dom_serviceWorkers_enabled()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return IS_INSTANCE_OF(ServiceWorkerGlobalScope, aObj);
|
||||
// xpc::CurrentNativeGlobal below requires rooting
|
||||
JS::Rooted<JSObject*> global(aCx, aGlobal);
|
||||
|
||||
if (const nsCOMPtr<nsIGlobalObject> global = xpc::CurrentNativeGlobal(aCx)) {
|
||||
if (global->GetStorageAccess() == StorageAccess::ePrivateBrowsing) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// Allow a webextension principal to register a service worker script with
|
||||
// a moz-extension url only if 'extensions.service_worker_register.allowed'
|
||||
// is true.
|
||||
if (!StaticPrefs::extensions_serviceWorkerRegister_allowed()) {
|
||||
nsIPrincipal* principal = nsContentUtils::SubjectPrincipal(aCx);
|
||||
if (principal && BasePrincipal::Cast(principal)->AddonPolicy()) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if (IsSecureContextOrObjectIsFromSecureContext(aCx, aGlobal)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return StaticPrefs::dom_serviceWorkers_testing_enabled() ||
|
||||
IsServiceWorkersTestingEnabledInWindow(aGlobal);
|
||||
}
|
||||
|
||||
bool ServiceWorkerVisible(JSContext* aCx, JSObject* aGlobal) {
|
||||
if (NS_IsMainThread()) {
|
||||
// We want to expose ServiceWorker interface only when
|
||||
// navigator.serviceWorker is available. Currently it may not be available
|
||||
// with some reasons:
|
||||
// 1. navigator.serviceWorker is not supported in workers. (bug 1131324)
|
||||
// 2. `dom.serviceWorkers.hide_in_pbmode.enabled` wants to hide it in
|
||||
// private browsing mode.
|
||||
return ServiceWorkersEnabled(aCx, aGlobal);
|
||||
}
|
||||
|
||||
// We are already in ServiceWorker and interfaces need to be exposed for e.g.
|
||||
// globalThis.registration.serviceWorker. Note that navigator.serviceWorker
|
||||
// is still not supported. (bug 1131324)
|
||||
return IS_INSTANCE_OF(ServiceWorkerGlobalScope, aGlobal);
|
||||
}
|
||||
|
||||
// static
|
||||
|
|
|
@ -30,7 +30,9 @@ struct StructuredSerializeOptions;
|
|||
} \
|
||||
}
|
||||
|
||||
bool ServiceWorkerVisible(JSContext* aCx, JSObject* aObj);
|
||||
bool ServiceWorkersEnabled(JSContext* aCx, JSObject* aGlobal);
|
||||
|
||||
bool ServiceWorkerVisible(JSContext* aCx, JSObject* aGlobal);
|
||||
|
||||
class ServiceWorker final : public DOMEventTargetHelper {
|
||||
public:
|
||||
|
|
|
@ -20,7 +20,6 @@
|
|||
|
||||
#include "nsCycleCollectionParticipant.h"
|
||||
#include "nsServiceManagerUtils.h"
|
||||
#include "mozilla/BasePrincipal.h"
|
||||
#include "mozilla/LoadInfo.h"
|
||||
#include "mozilla/SchedulerGroup.h"
|
||||
#include "mozilla/StaticPrefs_extensions.h"
|
||||
|
@ -59,63 +58,6 @@ NS_IMPL_RELEASE_INHERITED(ServiceWorkerContainer, DOMEventTargetHelper)
|
|||
NS_IMPL_CYCLE_COLLECTION_INHERITED(ServiceWorkerContainer, DOMEventTargetHelper,
|
||||
mControllerWorker, mReadyPromise)
|
||||
|
||||
namespace {
|
||||
|
||||
bool IsInPrivateBrowsing(JSContext* const aCx) {
|
||||
if (const nsCOMPtr<nsIGlobalObject> global = xpc::CurrentNativeGlobal(aCx)) {
|
||||
if (const nsCOMPtr<nsIPrincipal> principal = global->PrincipalOrNull()) {
|
||||
return principal->GetPrivateBrowsingId() > 0;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool IsServiceWorkersTestingEnabledInWindow(JSObject* const aGlobal) {
|
||||
if (const nsCOMPtr<nsPIDOMWindowInner> innerWindow =
|
||||
Navigator::GetWindowFromGlobal(aGlobal)) {
|
||||
if (auto* bc = innerWindow->GetBrowsingContext()) {
|
||||
return bc->Top()->ServiceWorkersTestingEnabled();
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
/* static */
|
||||
bool ServiceWorkerContainer::IsEnabled(JSContext* aCx, JSObject* aGlobal) {
|
||||
MOZ_ASSERT(NS_IsMainThread());
|
||||
|
||||
// FIXME: Why does this need to root? Shouldn't the caller root aGlobal for
|
||||
// us?
|
||||
JS::Rooted<JSObject*> global(aCx, aGlobal);
|
||||
|
||||
if (!StaticPrefs::dom_serviceWorkers_enabled()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (IsInPrivateBrowsing(aCx)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Allow a webextension principal to register a service worker script with
|
||||
// a moz-extension url only if 'extensions.service_worker_register.allowed'
|
||||
// is true.
|
||||
if (!StaticPrefs::extensions_serviceWorkerRegister_allowed()) {
|
||||
nsIPrincipal* principal = nsContentUtils::SubjectPrincipal(aCx);
|
||||
if (principal && BasePrincipal::Cast(principal)->AddonPolicy()) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if (IsSecureContextOrObjectIsFromSecureContext(aCx, global)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return StaticPrefs::dom_serviceWorkers_testing_enabled() ||
|
||||
IsServiceWorkersTestingEnabledInWindow(global);
|
||||
}
|
||||
|
||||
// static
|
||||
already_AddRefed<ServiceWorkerContainer> ServiceWorkerContainer::Create(
|
||||
nsIGlobalObject* aGlobal) {
|
||||
|
|
|
@ -940,14 +940,11 @@ var interfaceNamesInGlobalScope = [
|
|||
// IMPORTANT: Do not change this list without review from a DOM peer!
|
||||
{ name: "PublicKeyCredential" },
|
||||
// IMPORTANT: Do not change this list without review from a DOM peer!
|
||||
{ name: "PushManager", insecureContext: true },
|
||||
"PushManager",
|
||||
// IMPORTANT: Do not change this list without review from a DOM peer!
|
||||
{ name: "PushSubscription", insecureContext: true },
|
||||
"PushSubscription",
|
||||
// IMPORTANT: Do not change this list without review from a DOM peer!
|
||||
{
|
||||
name: "PushSubscriptionOptions",
|
||||
insecureContext: true,
|
||||
},
|
||||
"PushSubscriptionOptions",
|
||||
// IMPORTANT: Do not change this list without review from a DOM peer!
|
||||
{ name: "RadioNodeList", insecureContext: true },
|
||||
// IMPORTANT: Do not change this list without review from a DOM peer!
|
||||
|
@ -1021,11 +1018,11 @@ var interfaceNamesInGlobalScope = [
|
|||
// IMPORTANT: Do not change this list without review from a DOM peer!
|
||||
{ name: "Selection", insecureContext: true },
|
||||
// IMPORTANT: Do not change this list without review from a DOM peer!
|
||||
{ name: "ServiceWorker", insecureContext: true },
|
||||
"ServiceWorker",
|
||||
// IMPORTANT: Do not change this list without review from a DOM peer!
|
||||
{ name: "ServiceWorkerContainer", insecureContext: false },
|
||||
"ServiceWorkerContainer",
|
||||
// IMPORTANT: Do not change this list without review from a DOM peer!
|
||||
{ name: "ServiceWorkerRegistration", insecureContext: true },
|
||||
"ServiceWorkerRegistration",
|
||||
// IMPORTANT: Do not change this list without review from a DOM peer!
|
||||
{ name: "ScopedCredential", insecureContext: true, disabled: true },
|
||||
// IMPORTANT: Do not change this list without review from a DOM peer!
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
* https://w3c.github.io/ServiceWorker/#navigation-preload-manager
|
||||
*/
|
||||
|
||||
[Pref="dom.serviceWorkers.navigationPreload.enabled", SecureContext,
|
||||
[Func="NavigationPreloadManager::IsEnabled", SecureContext,
|
||||
Exposed=(Window,Worker)]
|
||||
interface NavigationPreloadManager {
|
||||
[NewObject]
|
||||
|
|
|
@ -263,7 +263,7 @@ partial interface Navigator {
|
|||
|
||||
// Service Workers/Navigation Controllers
|
||||
partial interface Navigator {
|
||||
[Func="ServiceWorkerContainer::IsEnabled", SameObject]
|
||||
[Func="ServiceWorkersEnabled", SameObject]
|
||||
readonly attribute ServiceWorkerContainer serviceWorker;
|
||||
};
|
||||
|
||||
|
|
|
@ -26,7 +26,7 @@ interface PushManagerImpl {
|
|||
Promise<PermissionState> permissionState(optional PushSubscriptionOptionsInit options = {});
|
||||
};
|
||||
|
||||
[Exposed=(Window,Worker), Pref="dom.push.enabled"]
|
||||
[Exposed=(Window,Worker), Func="PushManager::IsEnabled"]
|
||||
interface PushManager {
|
||||
[Throws, ChromeOnly]
|
||||
constructor(DOMString scope);
|
||||
|
|
|
@ -41,7 +41,7 @@ dictionary PushSubscriptionInit
|
|||
EpochTimeStamp? expirationTime = null;
|
||||
};
|
||||
|
||||
[Exposed=(Window,Worker), Pref="dom.push.enabled"]
|
||||
[Exposed=(Window,Worker), Func="ServiceWorkerVisible"]
|
||||
interface PushSubscription
|
||||
{
|
||||
[Throws, ChromeOnly]
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
* https://w3c.github.io/push-api/
|
||||
*/
|
||||
|
||||
[Exposed=(Window,Worker), Pref="dom.push.enabled"]
|
||||
[Exposed=(Window,Worker), Func="ServiceWorkerVisible"]
|
||||
interface PushSubscriptionOptions
|
||||
{
|
||||
[SameObject, Throws]
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
*
|
||||
*/
|
||||
|
||||
[Func="ServiceWorkerContainer::IsEnabled",
|
||||
[Func="ServiceWorkersEnabled",
|
||||
Exposed=Window]
|
||||
interface ServiceWorkerContainer : EventTarget {
|
||||
// FIXME(nsm):
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
* https://notifications.spec.whatwg.org/
|
||||
*/
|
||||
|
||||
[Pref="dom.serviceWorkers.enabled",
|
||||
[Func="ServiceWorkerVisible",
|
||||
Exposed=(Window,Worker)]
|
||||
interface ServiceWorkerRegistration : EventTarget {
|
||||
readonly attribute ServiceWorker? installing;
|
||||
|
|
|
@ -224,8 +224,6 @@ var interfaceNamesInGlobalScope = [
|
|||
// IMPORTANT: Do not change this list without review from a DOM peer!
|
||||
{ name: "MessagePort", insecureContext: true },
|
||||
// IMPORTANT: Do not change this list without review from a DOM peer!
|
||||
"NavigationPreloadManager",
|
||||
// IMPORTANT: Do not change this list without review from a DOM peer!
|
||||
{ name: "NetworkInformation", insecureContext: true, disabled: true },
|
||||
// IMPORTANT: Do not change this list without review from a DOM peer!
|
||||
{ name: "Notification", insecureContext: true },
|
||||
|
@ -252,14 +250,6 @@ var interfaceNamesInGlobalScope = [
|
|||
// IMPORTANT: Do not change this list without review from a DOM peer!
|
||||
{ name: "PromiseRejectionEvent", insecureContext: true },
|
||||
// IMPORTANT: Do not change this list without review from a DOM peer!
|
||||
{ name: "PushManager", insecureContext: true },
|
||||
// IMPORTANT: Do not change this list without review from a DOM peer!
|
||||
{ name: "PushSubscription", insecureContext: true },
|
||||
// IMPORTANT: Do not change this list without review from a DOM peer!
|
||||
{
|
||||
name: "PushSubscriptionOptions",
|
||||
insecureContext: true,
|
||||
},
|
||||
// IMPORTANT: Do not change this list without review from a DOM peer!
|
||||
{ name: "ReadableByteStreamController", insecureContext: true },
|
||||
// IMPORTANT: Do not change this list without review from a DOM peer!
|
||||
|
@ -279,8 +269,6 @@ var interfaceNamesInGlobalScope = [
|
|||
// IMPORTANT: Do not change this list without review from a DOM peer!
|
||||
{ name: "Scheduler", insecureContext: true, nightly: true },
|
||||
// IMPORTANT: Do not change this list without review from a DOM peer!
|
||||
{ name: "ServiceWorkerRegistration", insecureContext: true },
|
||||
// IMPORTANT: Do not change this list without review from a DOM peer!
|
||||
{ name: "StorageManager", fennec: false },
|
||||
// IMPORTANT: Do not change this list without review from a DOM peer!
|
||||
{ name: "SubtleCrypto" },
|
||||
|
|
|
@ -91,6 +91,12 @@ prefs: [dom.webnotifications.requireinteraction.enabled:true, dom.webnotificatio
|
|||
[Notification interface: attribute badge]
|
||||
expected: FAIL
|
||||
|
||||
[ServiceWorkerRegistration interface: operation showNotification(DOMString, optional NotificationOptions)]
|
||||
expected: FAIL
|
||||
|
||||
[ServiceWorkerRegistration interface: operation getNotifications(optional GetNotificationOptions)]
|
||||
expected: FAIL
|
||||
|
||||
|
||||
[idlharness.https.any.sharedworker.html]
|
||||
[Notification interface: attribute image]
|
||||
|
@ -126,3 +132,8 @@ prefs: [dom.webnotifications.requireinteraction.enabled:true, dom.webnotificatio
|
|||
[Notification interface: attribute badge]
|
||||
expected: FAIL
|
||||
|
||||
[ServiceWorkerRegistration interface: operation showNotification(DOMString, optional NotificationOptions)]
|
||||
expected: FAIL
|
||||
|
||||
[ServiceWorkerRegistration interface: operation getNotifications(optional GetNotificationOptions)]
|
||||
expected: FAIL
|
||||
|
|
|
@ -33,13 +33,86 @@
|
|||
[PushManager interface: attribute supportedContentEncodings]
|
||||
expected: FAIL
|
||||
|
||||
[PushManager interface: existence and properties of interface object]
|
||||
expected: FAIL
|
||||
|
||||
[PushManager interface object name]
|
||||
expected: FAIL
|
||||
|
||||
[PushManager interface: existence and properties of interface prototype object]
|
||||
expected: FAIL
|
||||
|
||||
[PushManager interface: existence and properties of interface prototype object's "constructor" property]
|
||||
expected: FAIL
|
||||
|
||||
[PushManager interface: existence and properties of interface prototype object's @@unscopables property]
|
||||
expected: FAIL
|
||||
|
||||
[PushManager interface: operation subscribe(optional PushSubscriptionOptionsInit)]
|
||||
expected: FAIL
|
||||
|
||||
[PushManager interface: operation getSubscription()]
|
||||
expected: FAIL
|
||||
|
||||
[PushManager interface: operation permissionState(optional PushSubscriptionOptionsInit)]
|
||||
expected: FAIL
|
||||
|
||||
[ServiceWorkerRegistration interface: attribute pushManager]
|
||||
expected: FAIL
|
||||
|
||||
[PushSubscription interface: existence and properties of interface object]
|
||||
expected: FAIL
|
||||
|
||||
[PushSubscription interface object name]
|
||||
expected: FAIL
|
||||
|
||||
[PushSubscription interface: existence and properties of interface prototype object]
|
||||
expected: FAIL
|
||||
|
||||
[PushSubscription interface: existence and properties of interface prototype object's "constructor" property]
|
||||
expected: FAIL
|
||||
|
||||
[PushSubscription interface: existence and properties of interface prototype object's @@unscopables property]
|
||||
expected: FAIL
|
||||
|
||||
[PushSubscription interface: attribute endpoint]
|
||||
expected: FAIL
|
||||
|
||||
[PushSubscription interface: attribute expirationTime]
|
||||
expected:
|
||||
if (os == "mac") and debug: PASS
|
||||
if (os == "android") and swgl: PASS
|
||||
if (os == "linux") and debug: PASS
|
||||
if os == "win": PASS
|
||||
[PASS, FAIL]
|
||||
expected: FAIL
|
||||
|
||||
[PushSubscription interface: attribute options]
|
||||
expected: FAIL
|
||||
|
||||
[PushSubscription interface: operation getKey(PushEncryptionKeyName)]
|
||||
expected: FAIL
|
||||
|
||||
[PushSubscription interface: operation unsubscribe()]
|
||||
expected: FAIL
|
||||
|
||||
[PushSubscription interface: operation toJSON()]
|
||||
expected: FAIL
|
||||
|
||||
[PushSubscriptionOptions interface: existence and properties of interface object]
|
||||
expected: FAIL
|
||||
|
||||
[PushSubscriptionOptions interface object length]
|
||||
expected: FAIL
|
||||
|
||||
[PushSubscriptionOptions interface object name]
|
||||
expected: FAIL
|
||||
|
||||
[PushSubscriptionOptions interface: existence and properties of interface prototype object]
|
||||
expected: FAIL
|
||||
|
||||
[PushSubscriptionOptions interface: existence and properties of interface prototype object's "constructor" property]
|
||||
expected: FAIL
|
||||
|
||||
[PushSubscriptionOptions interface: existence and properties of interface prototype object's @@unscopables property]
|
||||
expected: FAIL
|
||||
|
||||
[PushSubscriptionOptions interface: attribute applicationServerKey]
|
||||
expected: FAIL
|
||||
|
||||
|
||||
[idlharness.https.any.serviceworker.html]
|
||||
|
@ -113,10 +186,83 @@
|
|||
[PushManager interface: attribute supportedContentEncodings]
|
||||
expected: FAIL
|
||||
|
||||
[PushManager interface: existence and properties of interface object]
|
||||
expected: FAIL
|
||||
|
||||
[PushManager interface object name]
|
||||
expected: FAIL
|
||||
|
||||
[PushManager interface: existence and properties of interface prototype object]
|
||||
expected: FAIL
|
||||
|
||||
[PushManager interface: existence and properties of interface prototype object's "constructor" property]
|
||||
expected: FAIL
|
||||
|
||||
[PushManager interface: existence and properties of interface prototype object's @@unscopables property]
|
||||
expected: FAIL
|
||||
|
||||
[PushManager interface: operation subscribe(optional PushSubscriptionOptionsInit)]
|
||||
expected: FAIL
|
||||
|
||||
[PushManager interface: operation getSubscription()]
|
||||
expected: FAIL
|
||||
|
||||
[PushManager interface: operation permissionState(optional PushSubscriptionOptionsInit)]
|
||||
expected: FAIL
|
||||
|
||||
[ServiceWorkerRegistration interface: attribute pushManager]
|
||||
expected: FAIL
|
||||
|
||||
[PushSubscription interface: existence and properties of interface object]
|
||||
expected: FAIL
|
||||
|
||||
[PushSubscription interface object name]
|
||||
expected: FAIL
|
||||
|
||||
[PushSubscription interface: existence and properties of interface prototype object]
|
||||
expected: FAIL
|
||||
|
||||
[PushSubscription interface: existence and properties of interface prototype object's "constructor" property]
|
||||
expected: FAIL
|
||||
|
||||
[PushSubscription interface: existence and properties of interface prototype object's @@unscopables property]
|
||||
expected: FAIL
|
||||
|
||||
[PushSubscription interface: attribute endpoint]
|
||||
expected: FAIL
|
||||
|
||||
[PushSubscription interface: attribute expirationTime]
|
||||
expected:
|
||||
if (os == "mac") and debug: PASS
|
||||
if (os == "linux") and debug: PASS
|
||||
if (os == "android") and swgl: PASS
|
||||
if os == "win": PASS
|
||||
[PASS, FAIL]
|
||||
expected: FAIL
|
||||
|
||||
[PushSubscription interface: attribute options]
|
||||
expected: FAIL
|
||||
|
||||
[PushSubscription interface: operation getKey(PushEncryptionKeyName)]
|
||||
expected: FAIL
|
||||
|
||||
[PushSubscription interface: operation unsubscribe()]
|
||||
expected: FAIL
|
||||
|
||||
[PushSubscription interface: operation toJSON()]
|
||||
expected: FAIL
|
||||
|
||||
[PushSubscriptionOptions interface: existence and properties of interface object]
|
||||
expected: FAIL
|
||||
|
||||
[PushSubscriptionOptions interface object length]
|
||||
expected: FAIL
|
||||
|
||||
[PushSubscriptionOptions interface object name]
|
||||
expected: FAIL
|
||||
|
||||
[PushSubscriptionOptions interface: existence and properties of interface prototype object]
|
||||
expected: FAIL
|
||||
|
||||
[PushSubscriptionOptions interface: existence and properties of interface prototype object's "constructor" property]
|
||||
expected: FAIL
|
||||
|
||||
[PushSubscriptionOptions interface: existence and properties of interface prototype object's @@unscopables property]
|
||||
expected: FAIL
|
||||
|
||||
[PushSubscriptionOptions interface: attribute applicationServerKey]
|
||||
expected: FAIL
|
||||
|
|
|
@ -122,6 +122,81 @@
|
|||
[ServiceWorker interface: operation postMessage(any, optional StructuredSerializeOptions)]
|
||||
expected: FAIL
|
||||
|
||||
[ServiceWorkerRegistration interface: existence and properties of interface object]
|
||||
expected: FAIL
|
||||
|
||||
[ServiceWorkerRegistration interface object length]
|
||||
expected: FAIL
|
||||
|
||||
[ServiceWorkerRegistration interface object name]
|
||||
expected: FAIL
|
||||
|
||||
[ServiceWorkerRegistration interface: existence and properties of interface prototype object]
|
||||
expected: FAIL
|
||||
|
||||
[ServiceWorkerRegistration interface: existence and properties of interface prototype object's "constructor" property]
|
||||
expected: FAIL
|
||||
|
||||
[ServiceWorkerRegistration interface: existence and properties of interface prototype object's @@unscopables property]
|
||||
expected: FAIL
|
||||
|
||||
[ServiceWorkerRegistration interface: attribute installing]
|
||||
expected: FAIL
|
||||
|
||||
[ServiceWorkerRegistration interface: attribute waiting]
|
||||
expected: FAIL
|
||||
|
||||
[ServiceWorkerRegistration interface: attribute active]
|
||||
expected: FAIL
|
||||
|
||||
[ServiceWorkerRegistration interface: attribute navigationPreload]
|
||||
expected: FAIL
|
||||
|
||||
[ServiceWorkerRegistration interface: attribute scope]
|
||||
expected: FAIL
|
||||
|
||||
[ServiceWorkerRegistration interface: attribute updateViaCache]
|
||||
expected: FAIL
|
||||
|
||||
[ServiceWorkerRegistration interface: operation update()]
|
||||
expected: FAIL
|
||||
|
||||
[ServiceWorkerRegistration interface: operation unregister()]
|
||||
expected: FAIL
|
||||
|
||||
[ServiceWorkerRegistration interface: attribute onupdatefound]
|
||||
expected: FAIL
|
||||
|
||||
[NavigationPreloadManager interface: existence and properties of interface object]
|
||||
expected: FAIL
|
||||
|
||||
[NavigationPreloadManager interface object length]
|
||||
expected: FAIL
|
||||
|
||||
[NavigationPreloadManager interface object name]
|
||||
expected: FAIL
|
||||
|
||||
[NavigationPreloadManager interface: existence and properties of interface prototype object]
|
||||
expected: FAIL
|
||||
|
||||
[NavigationPreloadManager interface: existence and properties of interface prototype object's "constructor" property]
|
||||
expected: FAIL
|
||||
|
||||
[NavigationPreloadManager interface: existence and properties of interface prototype object's @@unscopables property]
|
||||
expected: FAIL
|
||||
|
||||
[NavigationPreloadManager interface: operation enable()]
|
||||
expected: FAIL
|
||||
|
||||
[NavigationPreloadManager interface: operation disable()]
|
||||
expected: FAIL
|
||||
|
||||
[NavigationPreloadManager interface: operation setHeaderValue(ByteString)]
|
||||
expected: FAIL
|
||||
|
||||
[NavigationPreloadManager interface: operation getState()]
|
||||
expected: FAIL
|
||||
|
||||
|
||||
[idlharness.https.any.worker.html]
|
||||
[ServiceWorkerContainer interface: operation startMessages()]
|
||||
|
@ -247,11 +322,87 @@
|
|||
[ServiceWorker interface: operation postMessage(any, optional StructuredSerializeOptions)]
|
||||
expected: FAIL
|
||||
|
||||
[ServiceWorkerRegistration interface: existence and properties of interface object]
|
||||
expected: FAIL
|
||||
|
||||
[ServiceWorkerRegistration interface object length]
|
||||
expected: FAIL
|
||||
|
||||
[ServiceWorkerRegistration interface object name]
|
||||
expected: FAIL
|
||||
|
||||
[ServiceWorkerRegistration interface: existence and properties of interface prototype object]
|
||||
expected: FAIL
|
||||
|
||||
[ServiceWorkerRegistration interface: existence and properties of interface prototype object's "constructor" property]
|
||||
expected: FAIL
|
||||
|
||||
[ServiceWorkerRegistration interface: existence and properties of interface prototype object's @@unscopables property]
|
||||
expected: FAIL
|
||||
|
||||
[ServiceWorkerRegistration interface: attribute installing]
|
||||
expected: FAIL
|
||||
|
||||
[ServiceWorkerRegistration interface: attribute waiting]
|
||||
expected: FAIL
|
||||
|
||||
[ServiceWorkerRegistration interface: attribute active]
|
||||
expected: FAIL
|
||||
|
||||
[ServiceWorkerRegistration interface: attribute navigationPreload]
|
||||
expected: FAIL
|
||||
|
||||
[ServiceWorkerRegistration interface: attribute scope]
|
||||
expected: FAIL
|
||||
|
||||
[ServiceWorkerRegistration interface: attribute updateViaCache]
|
||||
expected: FAIL
|
||||
|
||||
[ServiceWorkerRegistration interface: operation update()]
|
||||
expected: FAIL
|
||||
|
||||
[ServiceWorkerRegistration interface: operation unregister()]
|
||||
expected: FAIL
|
||||
|
||||
[ServiceWorkerRegistration interface: attribute onupdatefound]
|
||||
expected: FAIL
|
||||
|
||||
[NavigationPreloadManager interface: existence and properties of interface object]
|
||||
expected: FAIL
|
||||
|
||||
[NavigationPreloadManager interface object length]
|
||||
expected: FAIL
|
||||
|
||||
[NavigationPreloadManager interface object name]
|
||||
expected: FAIL
|
||||
|
||||
[NavigationPreloadManager interface: existence and properties of interface prototype object]
|
||||
expected: FAIL
|
||||
|
||||
[NavigationPreloadManager interface: existence and properties of interface prototype object's "constructor" property]
|
||||
expected: FAIL
|
||||
|
||||
[NavigationPreloadManager interface: existence and properties of interface prototype object's @@unscopables property]
|
||||
expected: FAIL
|
||||
|
||||
[NavigationPreloadManager interface: operation enable()]
|
||||
expected: FAIL
|
||||
|
||||
[NavigationPreloadManager interface: operation disable()]
|
||||
expected: FAIL
|
||||
|
||||
[NavigationPreloadManager interface: operation setHeaderValue(ByteString)]
|
||||
expected: FAIL
|
||||
|
||||
[NavigationPreloadManager interface: operation getState()]
|
||||
expected: FAIL
|
||||
|
||||
|
||||
[idlharness.https.any.html]
|
||||
[CacheStorage interface object length]
|
||||
expected: FAIL
|
||||
|
||||
|
||||
[idlharness.https.any.serviceworker.html]
|
||||
[ServiceWorker interface: serviceWorker must inherit property "scriptURL" with the proper type]
|
||||
expected: FAIL
|
||||
|
|
Загрузка…
Ссылка в новой задаче