Index: third_party/WebKit/Source/core/loader/WorkerThreadableLoader.h |
diff --git a/third_party/WebKit/Source/core/loader/WorkerThreadableLoader.h b/third_party/WebKit/Source/core/loader/WorkerThreadableLoader.h |
index 02c0d8af0a64be25a73a7c945f3d0e9015760461..bcd683ee70200ca7ee1dabb3a5192b027c35b007 100644 |
--- a/third_party/WebKit/Source/core/loader/WorkerThreadableLoader.h |
+++ b/third_party/WebKit/Source/core/loader/WorkerThreadableLoader.h |
@@ -56,9 +56,31 @@ class WorkerLoaderProxy; |
struct CrossThreadResourceRequestData; |
struct CrossThreadResourceTimingInfoData; |
-// TODO(yhirano): Draw a diagram to illustrate the class relationship. |
-// TODO(yhirano): Rename inner classes so that readers can see in which thread |
-// they are living easily. |
+// A WorkerThreadableLoader is a ThreadableLoader implementation intended to |
+// be used in a WebWorker thread. Because Blink's ResourceFetcher and |
+// ResourceLoader work only in the main thread, a WorkerThreadableLoader holds |
+// a ThreadableLoader in the main thread and delegates tasks asynchronously |
+// to the loader. |
+// |
+// CTP: CrossThreadPersistent |
+// CTWP: CrossThreadWeakPersistent |
+// |
+// ---------------------------------------------------------------- |
+// +------------------------+ |
+// raw ptr | ThreadableLoaderClient | |
+// +--------> | worker thread | |
+// | +------------------------+ |
+// | |
+// +----+------------------+ CTP +------------------------+ |
+// + WorkerThreadableLoader|<--------+ MainThreadLoaderHolder | |
+// | worker thread +-------->| main thread | |
+// +-----------------------+ CTWP +----------------------+-+ |
+// | |
+// +------------------+ | Member |
+// | ThreadableLoader | <---+ |
+// | main thread | |
+// +------------------+ |
+// |
class WorkerThreadableLoader final : public ThreadableLoader { |
public: |
static void loadResourceSynchronously(WorkerGlobalScope&, const ResourceRequest&, ThreadableLoaderClient&, const ThreadableLoaderOptions&, const ResourceLoaderOptions&); |
@@ -101,8 +123,8 @@ private: |
// ThreadableLoaderClient for a DocumentThreadableLoader and forward |
// notifications to the associated WorkerThreadableLoader living in the |
// worker thread. |
- class Peer final : public GarbageCollectedFinalized<Peer>, public ThreadableLoaderClient, public WorkerThreadLifecycleObserver { |
- USING_GARBAGE_COLLECTED_MIXIN(Peer); |
+ class MainThreadLoaderHolder final : public GarbageCollectedFinalized<MainThreadLoaderHolder>, public ThreadableLoaderClient, public WorkerThreadLifecycleObserver { |
+ USING_GARBAGE_COLLECTED_MIXIN(MainThreadLoaderHolder); |
public: |
static void createAndStart( |
WorkerThreadableLoader*, |
@@ -113,7 +135,7 @@ private: |
const ResourceLoaderOptions&, |
PassRefPtr<WaitableEventWithTasks>, |
ExecutionContext*); |
- ~Peer() override; |
+ ~MainThreadLoaderHolder() override; |
void overrideTimeout(unsigned long timeoutMillisecond); |
void cancel(); |
@@ -134,7 +156,7 @@ private: |
DECLARE_TRACE(); |
private: |
- Peer(TaskForwarder*, WorkerThreadLifecycleContext*); |
+ MainThreadLoaderHolder(TaskForwarder*, WorkerThreadLifecycleContext*); |
void start(Document&, std::unique_ptr<CrossThreadResourceRequestData>, const ThreadableLoaderOptions&, const ResourceLoaderOptions&); |
Member<TaskForwarder> m_forwarder; |
@@ -145,7 +167,7 @@ private: |
}; |
WorkerThreadableLoader(WorkerGlobalScope&, ThreadableLoaderClient*, const ThreadableLoaderOptions&, const ResourceLoaderOptions&, BlockingBehavior); |
- void didStart(Peer*); |
+ void didStart(MainThreadLoaderHolder*); |
void didSendData(unsigned long long bytesSent, unsigned long long totalBytesToBeSent); |
void didReceiveResponse(unsigned long identifier, std::unique_ptr<CrossThreadResourceResponseData>, std::unique_ptr<WebDataConsumerHandle>); |
@@ -166,8 +188,8 @@ private: |
ResourceLoaderOptions m_resourceLoaderOptions; |
BlockingBehavior m_blockingBehavior; |
- // |*m_peer| lives in the main thread. |
- CrossThreadPersistent<Peer> m_peer; |
+ // |*m_mainThreadLoaderHolder| lives in the main thread. |
+ CrossThreadPersistent<MainThreadLoaderHolder> m_mainThreadLoaderHolder; |
}; |
} // namespace blink |