https://bugs.webkit.org/show_bug.cgi?id=175215
Reviewed by Youenn Fablet.
LayoutTests/imported/w3c:
* web-platform-tests/FileAPI/historical.https-expected.txt:
* web-platform-tests/background-fetch/interfaces-worker.https-expected.txt:
* web-platform-tests/fetch/api/policies/referrer-no-referrer-service-worker.https-expected.txt:
* web-platform-tests/fetch/api/policies/referrer-origin-service-worker.https-expected.txt:
* web-platform-tests/fetch/api/policies/referrer-origin-when-cross-origin-service-worker.https-expected.txt:
* web-platform-tests/fetch/api/policies/referrer-unsafe-url-service-worker.https-expected.txt:
* web-platform-tests/html/webappapis/scripting/events/messageevent-constructor.https-expected.txt:
* web-platform-tests/html/webappapis/scripting/processing-model-2/integration-with-the-javascript-agent-formalism/canblock-serviceworker.https-expected.txt:
* web-platform-tests/streams/byte-length-queuing-strategy.serviceworker.https-expected.txt:
* web-platform-tests/streams/count-queuing-strategy.serviceworker.https-expected.txt:
* web-platform-tests/streams/piping/close-propagation-backward.serviceworker.https-expected.txt:
* web-platform-tests/streams/piping/close-propagation-forward.serviceworker.https-expected.txt:
* web-platform-tests/streams/piping/error-propagation-backward.serviceworker.https-expected.txt:
* web-platform-tests/streams/piping/error-propagation-forward.serviceworker.https-expected.txt:
* web-platform-tests/streams/piping/flow-control.serviceworker.https-expected.txt:
* web-platform-tests/streams/piping/general.serviceworker.https-expected.txt:
* web-platform-tests/streams/piping/multiple-propagation.serviceworker.https-expected.txt:
* web-platform-tests/streams/piping/pipe-through.serviceworker.https-expected.txt:
* web-platform-tests/streams/piping/transform-streams.serviceworker.https-expected.txt:
* web-platform-tests/streams/readable-byte-streams/general.serviceworker.https-expected.txt:
* web-platform-tests/streams/readable-streams/bad-strategies.serviceworker.https-expected.txt:
* web-platform-tests/streams/readable-streams/bad-underlying-sources.serviceworker.https-expected.txt:
* web-platform-tests/streams/readable-streams/brand-checks.serviceworker.https-expected.txt:
* web-platform-tests/streams/readable-streams/cancel.serviceworker.https-expected.txt:
* web-platform-tests/streams/readable-streams/count-queuing-strategy-integration.serviceworker.https-expected.txt:
* web-platform-tests/streams/readable-streams/default-reader.serviceworker.https-expected.txt:
* web-platform-tests/streams/readable-streams/floating-point-total-queue-size.serviceworker.https-expected.txt:
* web-platform-tests/streams/readable-streams/garbage-collection.serviceworker.https-expected.txt:
* web-platform-tests/streams/readable-streams/general.serviceworker.https-expected.txt:
* web-platform-tests/streams/readable-streams/pipe-through.serviceworker.https-expected.txt:
* web-platform-tests/streams/readable-streams/readable-stream-reader.serviceworker.https-expected.txt:
* web-platform-tests/streams/readable-streams/tee.serviceworker.https-expected.txt:
* web-platform-tests/streams/readable-streams/templated.serviceworker.https-expected.txt:
Source/WebCore:
* page/NavigatorBase.cpp:
(WebCore::NavigatorBase::serviceWorker): Actually create and remember an object.
* page/NavigatorBase.h:
* workers/ServiceWorkerContainer.cpp:
(WebCore::rejectLater): Asynchronously reject the given promise with an error message.
(WebCore::ServiceWorkerContainer::ServiceWorkerContainer):
(WebCore::ServiceWorkerContainer::refEventTarget): Ref the underlying Navigator.
(WebCore::ServiceWorkerContainer::derefEventTarget): Deref the underlying Navigator.
(WebCore::ServiceWorkerContainer::ready): rejectLater the promise.
(WebCore::ServiceWorkerContainer::addRegistration): Ditto.
(WebCore::ServiceWorkerContainer::getRegistration): Ditto.
(WebCore::ServiceWorkerContainer::getRegistrations): Ditto.
* workers/ServiceWorkerContainer.h:
LayoutTests:
* platform/mac-wk1/imported/w3c/web-platform-tests/FileAPI/historical.https-expected.txt: Copied from LayoutTests/imported/w3c/web-platform-tests/FileAPI/historical.https-expected.txt.
git-svn-id: https://svn.webkit.org/repository/webkit/trunk@220310
268f45cc-cd09-0410-ab3c-
d52691b4dbfc
+2017-08-04 Brady Eidson <beidson@apple.com>
+
+ Have navigator.serviceWorker() actually return a ServiceWorkerContainer object.
+ https://bugs.webkit.org/show_bug.cgi?id=175215
+
+ Reviewed by Youenn Fablet.
+
+ * platform/mac-wk1/imported/w3c/web-platform-tests/FileAPI/historical.https-expected.txt: Copied from LayoutTests/imported/w3c/web-platform-tests/FileAPI/historical.https-expected.txt.
+
2017-08-04 Chris Dumez <cdumez@apple.com>
Add test coverage for sendBeacon() keepalive flag
+2017-08-04 Brady Eidson <beidson@apple.com>
+
+ Have navigator.serviceWorker() actually return a ServiceWorkerContainer object.
+ https://bugs.webkit.org/show_bug.cgi?id=175215
+
+ Reviewed by Youenn Fablet.
+
+ * web-platform-tests/FileAPI/historical.https-expected.txt:
+ * web-platform-tests/background-fetch/interfaces-worker.https-expected.txt:
+ * web-platform-tests/fetch/api/policies/referrer-no-referrer-service-worker.https-expected.txt:
+ * web-platform-tests/fetch/api/policies/referrer-origin-service-worker.https-expected.txt:
+ * web-platform-tests/fetch/api/policies/referrer-origin-when-cross-origin-service-worker.https-expected.txt:
+ * web-platform-tests/fetch/api/policies/referrer-unsafe-url-service-worker.https-expected.txt:
+ * web-platform-tests/html/webappapis/scripting/events/messageevent-constructor.https-expected.txt:
+ * web-platform-tests/html/webappapis/scripting/processing-model-2/integration-with-the-javascript-agent-formalism/canblock-serviceworker.https-expected.txt:
+ * web-platform-tests/streams/byte-length-queuing-strategy.serviceworker.https-expected.txt:
+ * web-platform-tests/streams/count-queuing-strategy.serviceworker.https-expected.txt:
+ * web-platform-tests/streams/piping/close-propagation-backward.serviceworker.https-expected.txt:
+ * web-platform-tests/streams/piping/close-propagation-forward.serviceworker.https-expected.txt:
+ * web-platform-tests/streams/piping/error-propagation-backward.serviceworker.https-expected.txt:
+ * web-platform-tests/streams/piping/error-propagation-forward.serviceworker.https-expected.txt:
+ * web-platform-tests/streams/piping/flow-control.serviceworker.https-expected.txt:
+ * web-platform-tests/streams/piping/general.serviceworker.https-expected.txt:
+ * web-platform-tests/streams/piping/multiple-propagation.serviceworker.https-expected.txt:
+ * web-platform-tests/streams/piping/pipe-through.serviceworker.https-expected.txt:
+ * web-platform-tests/streams/piping/transform-streams.serviceworker.https-expected.txt:
+ * web-platform-tests/streams/readable-byte-streams/general.serviceworker.https-expected.txt:
+ * web-platform-tests/streams/readable-streams/bad-strategies.serviceworker.https-expected.txt:
+ * web-platform-tests/streams/readable-streams/bad-underlying-sources.serviceworker.https-expected.txt:
+ * web-platform-tests/streams/readable-streams/brand-checks.serviceworker.https-expected.txt:
+ * web-platform-tests/streams/readable-streams/cancel.serviceworker.https-expected.txt:
+ * web-platform-tests/streams/readable-streams/count-queuing-strategy-integration.serviceworker.https-expected.txt:
+ * web-platform-tests/streams/readable-streams/default-reader.serviceworker.https-expected.txt:
+ * web-platform-tests/streams/readable-streams/floating-point-total-queue-size.serviceworker.https-expected.txt:
+ * web-platform-tests/streams/readable-streams/garbage-collection.serviceworker.https-expected.txt:
+ * web-platform-tests/streams/readable-streams/general.serviceworker.https-expected.txt:
+ * web-platform-tests/streams/readable-streams/pipe-through.serviceworker.https-expected.txt:
+ * web-platform-tests/streams/readable-streams/readable-stream-reader.serviceworker.https-expected.txt:
+ * web-platform-tests/streams/readable-streams/tee.serviceworker.https-expected.txt:
+ * web-platform-tests/streams/readable-streams/templated.serviceworker.https-expected.txt:
+
2017-08-04 Chris Dumez <cdumez@apple.com>
[Beacon] Update sendBeacon to use the CachedResourceLoader
PASS BlobBuilder should not be supported.
PASS createFor method should not be supported
PASS Blob.close() should not be supported
+FAIL Service worker test setup assert_unreached: unregister should not fail: ServiceWorkerContainer method 'getRegistration' not yet implemented Reached unreachable code
This test validates the WebIDL included in the Background Fetch API (Service Workers).
-FAIL Service Worker-scoped tests. null is not an object (evaluating 'navigator.serviceWorker.getRegistration')
+FAIL Service Worker-scoped tests. assert_unreached: unregister should not fail: ServiceWorkerContainer method 'getRegistration' not yet implemented Reached unreachable code
-FAIL Fetch in service worker: referrer with no-referrer policy null is not an object (evaluating 'navigator.serviceWorker.getRegistration')
+FAIL Fetch in service worker: referrer with no-referrer policy assert_unreached: unregister should not fail: ServiceWorkerContainer method 'getRegistration' not yet implemented Reached unreachable code
-FAIL Fetch in service worker: referrer with no-referrer policy null is not an object (evaluating 'navigator.serviceWorker.getRegistration')
+FAIL Fetch in service worker: referrer with no-referrer policy assert_unreached: unregister should not fail: ServiceWorkerContainer method 'getRegistration' not yet implemented Reached unreachable code
-FAIL Fetch in service worker: referrer with origin-when-cross-origin policy null is not an object (evaluating 'navigator.serviceWorker.getRegistration')
+FAIL Fetch in service worker: referrer with origin-when-cross-origin policy assert_unreached: unregister should not fail: ServiceWorkerContainer method 'getRegistration' not yet implemented Reached unreachable code
-FAIL Fetch in worker: referrer with unsafe-url policy null is not an object (evaluating 'navigator.serviceWorker.getRegistration')
+FAIL Fetch in worker: referrer with unsafe-url policy assert_unreached: unregister should not fail: ServiceWorkerContainer method 'getRegistration' not yet implemented Reached unreachable code
PASS initMessageEvent operation
PASS Passing null for ports parameter to initMessageEvent
PASS initMessageEvent operation default parameter values
-FAIL Passing ServiceWorker for source member null is not an object (evaluating 'navigator.serviceWorker.getRegistration')
+FAIL Passing ServiceWorker for source member assert_unreached: unregister should not fail: ServiceWorkerContainer method 'getRegistration' not yet implemented Reached unreachable code
-FAIL Service worker test setup null is not an object (evaluating 'navigator.serviceWorker.getRegistration')
+FAIL Service worker test setup assert_unreached: unregister should not fail: ServiceWorkerContainer method 'getRegistration' not yet implemented Reached unreachable code
-FAIL Service worker test setup null is not an object (evaluating 'navigator.serviceWorker.getRegistration')
+FAIL Service worker test setup assert_unreached: unregister should not fail: ServiceWorkerContainer method 'getRegistration' not yet implemented Reached unreachable code
-FAIL Service worker test setup null is not an object (evaluating 'navigator.serviceWorker.getRegistration')
+FAIL Service worker test setup assert_unreached: unregister should not fail: ServiceWorkerContainer method 'getRegistration' not yet implemented Reached unreachable code
-FAIL Service worker test setup null is not an object (evaluating 'navigator.serviceWorker.getRegistration')
+FAIL Service worker test setup assert_unreached: unregister should not fail: ServiceWorkerContainer method 'getRegistration' not yet implemented Reached unreachable code
-FAIL Service worker test setup null is not an object (evaluating 'navigator.serviceWorker.getRegistration')
+FAIL Service worker test setup assert_unreached: unregister should not fail: ServiceWorkerContainer method 'getRegistration' not yet implemented Reached unreachable code
-FAIL Service worker test setup null is not an object (evaluating 'navigator.serviceWorker.getRegistration')
+FAIL Service worker test setup assert_unreached: unregister should not fail: ServiceWorkerContainer method 'getRegistration' not yet implemented Reached unreachable code
-FAIL Service worker test setup null is not an object (evaluating 'navigator.serviceWorker.getRegistration')
+FAIL Service worker test setup assert_unreached: unregister should not fail: ServiceWorkerContainer method 'getRegistration' not yet implemented Reached unreachable code
-FAIL Service worker test setup null is not an object (evaluating 'navigator.serviceWorker.getRegistration')
+FAIL Service worker test setup assert_unreached: unregister should not fail: ServiceWorkerContainer method 'getRegistration' not yet implemented Reached unreachable code
-FAIL Service worker test setup null is not an object (evaluating 'navigator.serviceWorker.getRegistration')
+FAIL Service worker test setup assert_unreached: unregister should not fail: ServiceWorkerContainer method 'getRegistration' not yet implemented Reached unreachable code
-FAIL Service worker test setup null is not an object (evaluating 'navigator.serviceWorker.getRegistration')
+FAIL Service worker test setup assert_unreached: unregister should not fail: ServiceWorkerContainer method 'getRegistration' not yet implemented Reached unreachable code
-FAIL Service worker test setup null is not an object (evaluating 'navigator.serviceWorker.getRegistration')
+FAIL Service worker test setup assert_unreached: unregister should not fail: ServiceWorkerContainer method 'getRegistration' not yet implemented Reached unreachable code
-FAIL Service worker test setup null is not an object (evaluating 'navigator.serviceWorker.getRegistration')
+FAIL Service worker test setup assert_unreached: unregister should not fail: ServiceWorkerContainer method 'getRegistration' not yet implemented Reached unreachable code
-FAIL Service worker test setup null is not an object (evaluating 'navigator.serviceWorker.getRegistration')
+FAIL Service worker test setup assert_unreached: unregister should not fail: ServiceWorkerContainer method 'getRegistration' not yet implemented Reached unreachable code
-FAIL Service worker test setup null is not an object (evaluating 'navigator.serviceWorker.getRegistration')
+FAIL Service worker test setup assert_unreached: unregister should not fail: ServiceWorkerContainer method 'getRegistration' not yet implemented Reached unreachable code
-FAIL Service worker test setup null is not an object (evaluating 'navigator.serviceWorker.getRegistration')
+FAIL Service worker test setup assert_unreached: unregister should not fail: ServiceWorkerContainer method 'getRegistration' not yet implemented Reached unreachable code
-FAIL Service worker test setup null is not an object (evaluating 'navigator.serviceWorker.getRegistration')
+FAIL Service worker test setup assert_unreached: unregister should not fail: ServiceWorkerContainer method 'getRegistration' not yet implemented Reached unreachable code
-FAIL Service worker test setup null is not an object (evaluating 'navigator.serviceWorker.getRegistration')
+FAIL Service worker test setup assert_unreached: unregister should not fail: ServiceWorkerContainer method 'getRegistration' not yet implemented Reached unreachable code
-FAIL Service worker test setup null is not an object (evaluating 'navigator.serviceWorker.getRegistration')
+FAIL Service worker test setup assert_unreached: unregister should not fail: ServiceWorkerContainer method 'getRegistration' not yet implemented Reached unreachable code
-FAIL Service worker test setup null is not an object (evaluating 'navigator.serviceWorker.getRegistration')
+FAIL Service worker test setup assert_unreached: unregister should not fail: ServiceWorkerContainer method 'getRegistration' not yet implemented Reached unreachable code
-FAIL Service worker test setup null is not an object (evaluating 'navigator.serviceWorker.getRegistration')
+FAIL Service worker test setup assert_unreached: unregister should not fail: ServiceWorkerContainer method 'getRegistration' not yet implemented Reached unreachable code
-FAIL Service worker test setup null is not an object (evaluating 'navigator.serviceWorker.getRegistration')
+FAIL Service worker test setup assert_unreached: unregister should not fail: ServiceWorkerContainer method 'getRegistration' not yet implemented Reached unreachable code
-FAIL Service worker test setup null is not an object (evaluating 'navigator.serviceWorker.getRegistration')
+FAIL Service worker test setup assert_unreached: unregister should not fail: ServiceWorkerContainer method 'getRegistration' not yet implemented Reached unreachable code
-FAIL Service worker test setup null is not an object (evaluating 'navigator.serviceWorker.getRegistration')
+FAIL Service worker test setup assert_unreached: unregister should not fail: ServiceWorkerContainer method 'getRegistration' not yet implemented Reached unreachable code
-FAIL Service worker test setup null is not an object (evaluating 'navigator.serviceWorker.getRegistration')
+FAIL Service worker test setup assert_unreached: unregister should not fail: ServiceWorkerContainer method 'getRegistration' not yet implemented Reached unreachable code
-FAIL Service worker test setup null is not an object (evaluating 'navigator.serviceWorker.getRegistration')
+FAIL Service worker test setup assert_unreached: unregister should not fail: ServiceWorkerContainer method 'getRegistration' not yet implemented Reached unreachable code
-FAIL Service worker test setup null is not an object (evaluating 'navigator.serviceWorker.getRegistration')
+FAIL Service worker test setup assert_unreached: unregister should not fail: ServiceWorkerContainer method 'getRegistration' not yet implemented Reached unreachable code
--- /dev/null
+
+PASS "toNativeLineEndings" should not be supported
+FAIL "FileError" should not be supported assert_false: expected false got true
+PASS "FileException" should not be supported
+PASS Blob should not support slice prefixed
+PASS BlobBuilder should not be supported.
+PASS createFor method should not be supported
+PASS Blob.close() should not be supported
+
+2017-08-04 Brady Eidson <beidson@apple.com>
+
+ Have navigator.serviceWorker() actually return a ServiceWorkerContainer object.
+ https://bugs.webkit.org/show_bug.cgi?id=175215
+
+ Reviewed by Youenn Fablet.
+
+ * page/NavigatorBase.cpp:
+ (WebCore::NavigatorBase::serviceWorker): Actually create and remember an object.
+ * page/NavigatorBase.h:
+
+ * workers/ServiceWorkerContainer.cpp:
+ (WebCore::rejectLater): Asynchronously reject the given promise with an error message.
+ (WebCore::ServiceWorkerContainer::ServiceWorkerContainer):
+ (WebCore::ServiceWorkerContainer::refEventTarget): Ref the underlying Navigator.
+ (WebCore::ServiceWorkerContainer::derefEventTarget): Deref the underlying Navigator.
+ (WebCore::ServiceWorkerContainer::ready): rejectLater the promise.
+ (WebCore::ServiceWorkerContainer::addRegistration): Ditto.
+ (WebCore::ServiceWorkerContainer::getRegistration): Ditto.
+ (WebCore::ServiceWorkerContainer::getRegistrations): Ditto.
+ * workers/ServiceWorkerContainer.h:
+
2017-08-04 Chris Dumez <cdumez@apple.com>
[Beacon] Update sendBeacon to use the CachedResourceLoader
#if ENABLE(SERVICE_WORKER)
ServiceWorkerContainer* NavigatorBase::serviceWorker()
{
- return nullptr;
+ if (!m_serviceWorkerContainer)
+ m_serviceWorkerContainer = ServiceWorkerContainer::create(*this);
+
+ return m_serviceWorkerContainer.get();
}
#endif
#pragma once
+#include "ServiceWorkerContainer.h"
#include <wtf/Forward.h>
#include <wtf/RefCounted.h>
#include <wtf/Vector.h>
namespace WebCore {
-#if ENABLE(SERVICE_WORKER)
-class ServiceWorkerContainer;
-#endif
-
class NavigatorBase : public RefCounted<NavigatorBase> {
public:
virtual ~NavigatorBase();
static Vector<String> languages();
#if ENABLE(SERVICE_WORKER)
+public:
ServiceWorkerContainer* serviceWorker();
+
+private:
+ std::unique_ptr<ServiceWorkerContainer> m_serviceWorkerContainer;
#endif
};
#if ENABLE(SERVICE_WORKER)
+#include "Exception.h"
+#include "JSDOMPromiseDeferred.h"
+#include "NavigatorBase.h"
+#include <wtf/RunLoop.h>
+
namespace WebCore {
+static void rejectLater(Ref<DeferredPromise>&& promise, const String& methodName)
+{
+ RunLoop::current().dispatch([promise = WTFMove(promise), methodName] {
+ promise->reject(Exception(UnknownError, makeString("ServiceWorkerContainer method '", methodName, "' not yet implemented")));
+ });
+}
+
+ServiceWorkerContainer::ServiceWorkerContainer(NavigatorBase& navigator)
+ : m_navigator(navigator)
+{
+}
+void ServiceWorkerContainer::refEventTarget()
+{
+ m_navigator.ref();
+}
+
+void ServiceWorkerContainer::derefEventTarget()
+{
+ m_navigator.deref();
+}
ServiceWorker* ServiceWorkerContainer::controller() const
{
return nullptr;
}
-void ServiceWorkerContainer::ready(Ref<DeferredPromise>&&)
+void ServiceWorkerContainer::ready(Ref<DeferredPromise>&& promise)
{
+ rejectLater(WTFMove(promise), "ready");
}
-void ServiceWorkerContainer::addRegistration(const String&, const RegistrationOptions&, Ref<DeferredPromise>&&)
+void ServiceWorkerContainer::addRegistration(const String&, const RegistrationOptions&, Ref<DeferredPromise>&& promise)
{
+ rejectLater(WTFMove(promise), "addRegistration");
}
-void ServiceWorkerContainer::getRegistration(const String&, Ref<DeferredPromise>&&)
+void ServiceWorkerContainer::getRegistration(const String&, Ref<DeferredPromise>&& promise)
{
+ rejectLater(WTFMove(promise), "getRegistration");
}
-void ServiceWorkerContainer::getRegistrations(Ref<DeferredPromise>&&)
+void ServiceWorkerContainer::getRegistrations(Ref<DeferredPromise>&& promise)
{
+ rejectLater(WTFMove(promise), "getRegistrations");
}
void ServiceWorkerContainer::startMessages()
namespace WebCore {
class DeferredPromise;
-class Frame;
+class NavigatorBase;
class ServiceWorker;
class ServiceWorkerContainer final : public EventTargetWithInlineData {
public:
- static Ref<ServiceWorkerContainer> create(Frame& frame) { return adoptRef(*new ServiceWorkerContainer(frame)); }
+ static std::unique_ptr<ServiceWorkerContainer> create(NavigatorBase& navigator)
+ {
+ return std::make_unique<ServiceWorkerContainer>(navigator);
+ }
+ explicit ServiceWorkerContainer(NavigatorBase&);
virtual ~ServiceWorkerContainer() = default;
struct RegistrationOptions {
void startMessages();
private:
- explicit ServiceWorkerContainer(Frame&);
-
virtual EventTargetInterface eventTargetInterface() const;
virtual ScriptExecutionContext* scriptExecutionContext() const;
- void refEventTarget() final { ref(); }
- void derefEventTarget() final { deref(); }
+ void refEventTarget() final;
+ void derefEventTarget() final;
+
+ NavigatorBase& m_navigator;
};
} // namespace WebCore