Index: third_party/WebKit/Source/core/workers/InProcessWorkerObjectProxy.h |
diff --git a/third_party/WebKit/Source/core/workers/InProcessWorkerObjectProxy.h b/third_party/WebKit/Source/core/workers/InProcessWorkerObjectProxy.h |
index 84705fe742dce77e1449b17726e602e3163bad4f..34042c793451bfe2d34d1f6234cf561c9de5924b 100644 |
--- a/third_party/WebKit/Source/core/workers/InProcessWorkerObjectProxy.h |
+++ b/third_party/WebKit/Source/core/workers/InProcessWorkerObjectProxy.h |
@@ -35,6 +35,7 @@ |
#include "core/dom/MessagePort.h" |
#include "core/workers/WorkerReportingProxy.h" |
#include "platform/heap/Handle.h" |
+#include "wtf/MakeCancellable.h" |
#include "wtf/PassRefPtr.h" |
#include <memory> |
@@ -57,12 +58,12 @@ class CORE_EXPORT InProcessWorkerObjectProxy : public WorkerReportingProxy { |
WTF_MAKE_NONCOPYABLE(InProcessWorkerObjectProxy); |
public: |
static std::unique_ptr<InProcessWorkerObjectProxy> create(InProcessWorkerMessagingProxy*); |
- ~InProcessWorkerObjectProxy() override { } |
+ ~InProcessWorkerObjectProxy() override; |
void postMessageToWorkerObject(PassRefPtr<SerializedScriptValue>, std::unique_ptr<MessagePortChannelArray>); |
void postTaskToMainExecutionContext(std::unique_ptr<ExecutionContextTask>); |
- void confirmMessageFromWorkerObject(bool hasPendingActivity); |
- void reportPendingActivity(bool hasPendingActivity); |
+ void confirmMessageFromWorkerObject(); |
+ void reportPendingActivity(WorkerGlobalScope*); |
// WorkerReportingProxy overrides. |
void reportException(const String& errorMessage, std::unique_ptr<SourceLocation>, int exceptionId) override; |
@@ -72,15 +73,27 @@ public: |
void workerGlobalScopeStarted(WorkerOrWorkletGlobalScope*) override { } |
void workerGlobalScopeClosed() override; |
void workerThreadTerminated() override; |
- void willDestroyWorkerGlobalScope() override { } |
+ void willDestroyWorkerGlobalScope() override; |
protected: |
InProcessWorkerObjectProxy(InProcessWorkerMessagingProxy*); |
virtual ExecutionContext* getExecutionContext(); |
private: |
+ friend class InProcessWorkerMessagingProxyForTest; |
+ |
// This object always outlives this proxy. |
InProcessWorkerMessagingProxy* m_messagingProxy; |
+ |
+ // Used for scheduling a task to check pending activities on the worker |
+ // global scope. The task is scheduled as a delayed task with |
+ // |m_currentDelayToCheckPendingActivityInMs| delay. The delay is |
+ // exponetially increased up to |m_maxDelayToCheckPendingActivityInMs| |
+ // until all pending activities are done. The task is cancelled when the |
+ // worker global scoped is destroyed. |
+ WTF::ScopedFunctionCanceller m_taskCanceller; |
+ long long m_currentDelayToCheckPendingActivityInMs; |
+ long long m_maxDelayToCheckPendingActivityInMs; |
}; |
} // namespace blink |