Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(678)

Unified Diff: Source/modules/serviceworkers/ServiceWorker.h

Issue 247263010: ServiceWorker: Wait for registration promise to resolve before changing states. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: yhirano comments Created 6 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: Source/modules/serviceworkers/ServiceWorker.h
diff --git a/Source/modules/serviceworkers/ServiceWorker.h b/Source/modules/serviceworkers/ServiceWorker.h
index 3224675d0f4737aefb01b57c415ec39fdc601a80..3fd6639d888760741f8fd1b287ae6cea51fb2c98 100644
--- a/Source/modules/serviceworkers/ServiceWorker.h
+++ b/Source/modules/serviceworkers/ServiceWorker.h
@@ -31,6 +31,7 @@
#ifndef ServiceWorker_h
#define ServiceWorker_h
+#include "bindings/v8/ScriptPromise.h"
#include "bindings/v8/ScriptWrappable.h"
#include "bindings/v8/SerializedScriptValue.h"
#include "core/workers/AbstractWorker.h"
@@ -48,6 +49,7 @@ class WebServiceWorker;
namespace WebCore {
class NewScriptState;
+class ScriptPromiseResolverWithContext;
class ServiceWorker
: public AbstractWorker
@@ -60,7 +62,7 @@ public:
// For CallbackPromiseAdapter
typedef blink::WebServiceWorker WebType;
- static PassRefPtr<ServiceWorker> from(NewScriptState*, WebType* worker);
+ static PassRefPtr<ServiceWorker> from(ScriptPromiseResolverWithContext*, WebType* worker);
void postMessage(PassRefPtr<SerializedScriptValue> message, const MessagePortArray*, ExceptionState&);
@@ -68,15 +70,23 @@ public:
DEFINE_ATTRIBUTE_EVENT_LISTENER(statechange);
// WebServiceWorkerProxy overrides.
+ virtual void onStateChanged(blink::WebServiceWorkerState) OVERRIDE;
virtual void dispatchStateChangeEvent() OVERRIDE;
// AbstractWorker overrides.
virtual const AtomicString& interfaceName() const OVERRIDE;
private:
+ class ThenFunction;
+
ServiceWorker(ExecutionContext*, PassOwnPtr<blink::WebServiceWorker>);
+ void onPromiseResolved();
+ void waitOnPromise(ScriptPromise);
+ void changeState(blink::WebServiceWorkerState);
OwnPtr<blink::WebServiceWorker> m_outerWorker;
+ bool m_isPromisePending;
+ Vector<blink::WebServiceWorkerState> m_queuedStates;
};
} // namespace WebCore

Powered by Google App Engine
This is Rietveld 408576698