Index: Source/modules/serviceworkers/ServiceWorkerGlobalScope.cpp |
diff --git a/Source/modules/serviceworkers/ServiceWorkerGlobalScope.cpp b/Source/modules/serviceworkers/ServiceWorkerGlobalScope.cpp |
index 037117e47973d3aa1c7fedfaa240333df1ff9915..d8489174f07adc3758ff72abf85ec603333995f0 100644 |
--- a/Source/modules/serviceworkers/ServiceWorkerGlobalScope.cpp |
+++ b/Source/modules/serviceworkers/ServiceWorkerGlobalScope.cpp |
@@ -50,11 +50,28 @@ |
#include "modules/serviceworkers/WaitUntilObserver.h" |
#include "platform/network/ResourceRequest.h" |
#include "platform/weborigin/KURL.h" |
+#include "public/platform/WebServiceWorkerSkipWaitingCallbacks.h" |
#include "public/platform/WebURL.h" |
#include "wtf/CurrentTime.h" |
namespace blink { |
+class ServiceWorkerGlobalScope::SkipWaitingCallback final : public WebServiceWorkerSkipWaitingCallbacks { |
+ WTF_MAKE_NONCOPYABLE(SkipWaitingCallback); |
+public: |
+ explicit SkipWaitingCallback(PassRefPtr<ScriptPromiseResolver> resolver) |
+ : m_resolver(resolver) { } |
+ ~SkipWaitingCallback() { } |
+ |
+ void onSuccess() override |
+ { |
+ m_resolver->resolve(); |
+ } |
+ |
+private: |
+ RefPtr<ScriptPromiseResolver> m_resolver; |
+}; |
+ |
PassRefPtrWillBeRawPtr<ServiceWorkerGlobalScope> ServiceWorkerGlobalScope::create(ServiceWorkerThread* thread, PassOwnPtrWillBeRawPtr<WorkerThreadStartupData> startupData) |
{ |
RefPtrWillBeRawPtr<ServiceWorkerGlobalScope> context = adoptRefWillBeNoop(new ServiceWorkerGlobalScope(startupData->m_scriptURL, startupData->m_userAgent, thread, monotonicallyIncreasingTime(), startupData->m_starterOrigin, startupData->m_workerClients.release())); |
@@ -127,6 +144,16 @@ void ServiceWorkerGlobalScope::close(ExceptionState& exceptionState) |
exceptionState.throwDOMException(InvalidAccessError, "Not supported."); |
} |
+ScriptPromise ServiceWorkerGlobalScope::skipWaiting(ScriptState* scriptState) |
+{ |
+ RefPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::create(scriptState); |
+ ScriptPromise promise = resolver->promise(); |
+ |
+ ExecutionContext* executionContext = scriptState->executionContext(); |
+ ServiceWorkerGlobalScopeClient::from(executionContext)->skipWaiting(new SkipWaitingCallback(resolver)); |
+ return promise; |
+} |
+ |
bool ServiceWorkerGlobalScope::addEventListener(const AtomicString& eventType, PassRefPtr<EventListener> listener, bool useCapture) |
{ |
if (m_didEvaluateScript) { |