Chromium Code Reviews| Index: Source/core/workers/WorkerLoaderProxy.h |
| diff --git a/Source/core/workers/WorkerLoaderProxy.h b/Source/core/workers/WorkerLoaderProxy.h |
| index 21e5dd4e3f2d178e0324328446cd0951280ff3fb..8289361d560c0e059da71506af355c5bcd82a29e 100644 |
| --- a/Source/core/workers/WorkerLoaderProxy.h |
| +++ b/Source/core/workers/WorkerLoaderProxy.h |
| @@ -34,17 +34,26 @@ |
| #include "core/dom/ExecutionContext.h" |
| #include "wtf/Forward.h" |
| #include "wtf/PassOwnPtr.h" |
| +#include "wtf/ThreadSafeRefCounted.h" |
| namespace blink { |
| -// A proxy to talk to the loader context. Normally, the document on the main thread |
| -// provides loading services for the subordinate workers. This interface provides 2-way |
| -// communications to the Document context and back to the worker. |
| +// The WorkerLoaderProxy is a proxy to the loader context. Normally, the |
| +// document on the main thread provides loading services for the subordinate |
| +// workers. WorkerLoaderProxy provides 2-way communications to the Document |
| +// context and back to the worker. |
| +// |
| // Note that in multi-process browsers, the Worker object context and the Document |
| // context can be distinct. |
| -class WorkerLoaderProxy { |
| + |
| +// The abstract interface providing the methods for actually posting tasks; separated |
| +// from the thread-safe & ref-counted WorkerLoaderProxy object which weakly refers |
| +// to the provider so as to allow the proxy object to outlive the provider during |
| +// shutdown. |
| +// |
| +class WorkerLoaderProxyProvider { |
| public: |
| - virtual ~WorkerLoaderProxy() { } |
| + virtual ~WorkerLoaderProxyProvider() { } |
| // Posts a task to the thread which runs the loading code (normally, the main thread). |
| virtual void postTaskToLoader(PassOwnPtr<ExecutionContextTask>) = 0; |
| @@ -54,6 +63,29 @@ public: |
| virtual bool postTaskToWorkerGlobalScope(PassOwnPtr<ExecutionContextTask>) = 0; |
| }; |
| +class WorkerLoaderProxy : public ThreadSafeRefCounted<WorkerLoaderProxy>, public WorkerLoaderProxyProvider { |
| +public: |
| + static PassRefPtr<WorkerLoaderProxy> create(WorkerLoaderProxyProvider* loaderProxyProvider) |
| + { |
| + return adoptRef(new WorkerLoaderProxy(loaderProxyProvider)); |
| + } |
| + |
| + ~WorkerLoaderProxy() override; |
| + |
| + void postTaskToLoader(PassOwnPtr<ExecutionContextTask>) override; |
| + bool postTaskToWorkerGlobalScope(PassOwnPtr<ExecutionContextTask>) override; |
| + |
| + // Notification from the provider that it must |
| + // no longer be accessed. |
|
kinuko
2015/02/05 01:41:16
Can we make this comment more explicit (and maybe
sof
2015/02/05 08:05:27
Yes, the comments here were a bit outdated overall
|
| + void detachProvider(WorkerLoaderProxyProvider*); |
| + |
| +private: |
| + explicit WorkerLoaderProxy(WorkerLoaderProxyProvider*); |
| + |
| + Mutex m_lock; |
| + WorkerLoaderProxyProvider* m_loaderProxyProvider; |
| +}; |
| + |
| } // namespace blink |
| #endif // WorkerLoaderProxy_h |