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

Side by Side Diff: Source/core/loader/WorkerLoaderClientBridge.cpp

Issue 887463003: Turn WorkerLoaderProxy into a threadsafe, ref-counted object. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Clarify WorkerLoaderProxyProvider's obligations on shutdown Created 5 years, 10 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 unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2014 Google Inc. All rights reserved. 2 * Copyright (C) 2014 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 25 matching lines...) Expand all
36 #include "core/workers/WorkerGlobalScope.h" 36 #include "core/workers/WorkerGlobalScope.h"
37 #include "core/workers/WorkerLoaderProxy.h" 37 #include "core/workers/WorkerLoaderProxy.h"
38 #include "platform/network/ResourceError.h" 38 #include "platform/network/ResourceError.h"
39 #include "platform/network/ResourceResponse.h" 39 #include "platform/network/ResourceResponse.h"
40 #include "wtf/PassOwnPtr.h" 40 #include "wtf/PassOwnPtr.h"
41 #include "wtf/PassRefPtr.h" 41 #include "wtf/PassRefPtr.h"
42 #include <limits> 42 #include <limits>
43 43
44 namespace blink { 44 namespace blink {
45 45
46 PassOwnPtr<ThreadableLoaderClient> WorkerLoaderClientBridge::create(PassRefPtr<T hreadableLoaderClientWrapper> client, WorkerLoaderProxy& loaderProxy) 46 PassOwnPtr<ThreadableLoaderClient> WorkerLoaderClientBridge::create(PassRefPtr<T hreadableLoaderClientWrapper> client, PassRefPtr<WorkerLoaderProxy> loaderProxy)
47 { 47 {
48 return adoptPtr(new WorkerLoaderClientBridge(client, loaderProxy)); 48 return adoptPtr(new WorkerLoaderClientBridge(client, loaderProxy));
49 } 49 }
50 50
51 WorkerLoaderClientBridge::~WorkerLoaderClientBridge() 51 WorkerLoaderClientBridge::~WorkerLoaderClientBridge()
52 { 52 {
53 } 53 }
54 54
55 static void workerGlobalScopeDidSendData(ExecutionContext* context, PassRefPtr<T hreadableLoaderClientWrapper> workerClientWrapper, unsigned long long bytesSent, unsigned long long totalBytesToBeSent) 55 static void workerGlobalScopeDidSendData(ExecutionContext* context, PassRefPtr<T hreadableLoaderClientWrapper> workerClientWrapper, unsigned long long bytesSent, unsigned long long totalBytesToBeSent)
56 { 56 {
57 ASSERT_UNUSED(context, context->isWorkerGlobalScope()); 57 ASSERT_UNUSED(context, context->isWorkerGlobalScope());
58 workerClientWrapper->didSendData(bytesSent, totalBytesToBeSent); 58 workerClientWrapper->didSendData(bytesSent, totalBytesToBeSent);
59 } 59 }
60 60
61 void WorkerLoaderClientBridge::didSendData(unsigned long long bytesSent, unsigne d long long totalBytesToBeSent) 61 void WorkerLoaderClientBridge::didSendData(unsigned long long bytesSent, unsigne d long long totalBytesToBeSent)
62 { 62 {
63 m_loaderProxy.postTaskToWorkerGlobalScope(createCrossThreadTask(&workerGloba lScopeDidSendData, m_workerClientWrapper, bytesSent, totalBytesToBeSent)); 63 m_loaderProxy->postTaskToWorkerGlobalScope(createCrossThreadTask(&workerGlob alScopeDidSendData, m_workerClientWrapper, bytesSent, totalBytesToBeSent));
64 } 64 }
65 65
66 static void workerGlobalScopeDidReceiveResponse(ExecutionContext* context, PassR efPtr<ThreadableLoaderClientWrapper> workerClientWrapper, unsigned long identifi er, PassOwnPtr<CrossThreadResourceResponseData> responseData, PassOwnPtr<WebData ConsumerHandle> handle) 66 static void workerGlobalScopeDidReceiveResponse(ExecutionContext* context, PassR efPtr<ThreadableLoaderClientWrapper> workerClientWrapper, unsigned long identifi er, PassOwnPtr<CrossThreadResourceResponseData> responseData, PassOwnPtr<WebData ConsumerHandle> handle)
67 { 67 {
68 ASSERT_UNUSED(context, context->isWorkerGlobalScope()); 68 ASSERT_UNUSED(context, context->isWorkerGlobalScope());
69 OwnPtr<ResourceResponse> response(ResourceResponse::adopt(responseData)); 69 OwnPtr<ResourceResponse> response(ResourceResponse::adopt(responseData));
70 workerClientWrapper->didReceiveResponse(identifier, *response, handle); 70 workerClientWrapper->didReceiveResponse(identifier, *response, handle);
71 } 71 }
72 72
73 void WorkerLoaderClientBridge::didReceiveResponse(unsigned long identifier, cons t ResourceResponse& response, PassOwnPtr<WebDataConsumerHandle> handle) 73 void WorkerLoaderClientBridge::didReceiveResponse(unsigned long identifier, cons t ResourceResponse& response, PassOwnPtr<WebDataConsumerHandle> handle)
74 { 74 {
75 m_loaderProxy.postTaskToWorkerGlobalScope(createCrossThreadTask(&workerGloba lScopeDidReceiveResponse, m_workerClientWrapper, identifier, response, handle)); 75 m_loaderProxy->postTaskToWorkerGlobalScope(createCrossThreadTask(&workerGlob alScopeDidReceiveResponse, m_workerClientWrapper, identifier, response, handle)) ;
76 } 76 }
77 77
78 static void workerGlobalScopeDidReceiveData(ExecutionContext* context, PassRefPt r<ThreadableLoaderClientWrapper> workerClientWrapper, PassOwnPtr<Vector<char> > vectorData) 78 static void workerGlobalScopeDidReceiveData(ExecutionContext* context, PassRefPt r<ThreadableLoaderClientWrapper> workerClientWrapper, PassOwnPtr<Vector<char> > vectorData)
79 { 79 {
80 ASSERT_UNUSED(context, context->isWorkerGlobalScope()); 80 ASSERT_UNUSED(context, context->isWorkerGlobalScope());
81 RELEASE_ASSERT(vectorData->size() <= std::numeric_limits<unsigned>::max()); 81 RELEASE_ASSERT(vectorData->size() <= std::numeric_limits<unsigned>::max());
82 workerClientWrapper->didReceiveData(vectorData->data(), vectorData->size()); 82 workerClientWrapper->didReceiveData(vectorData->data(), vectorData->size());
83 } 83 }
84 84
85 void WorkerLoaderClientBridge::didReceiveData(const char* data, unsigned dataLen gth) 85 void WorkerLoaderClientBridge::didReceiveData(const char* data, unsigned dataLen gth)
86 { 86 {
87 OwnPtr<Vector<char> > vector = adoptPtr(new Vector<char>(dataLength)); // ne eds to be an OwnPtr for usage with createCrossThreadTask. 87 OwnPtr<Vector<char> > vector = adoptPtr(new Vector<char>(dataLength)); // ne eds to be an OwnPtr for usage with createCrossThreadTask.
88 memcpy(vector->data(), data, dataLength); 88 memcpy(vector->data(), data, dataLength);
89 m_loaderProxy.postTaskToWorkerGlobalScope(createCrossThreadTask(&workerGloba lScopeDidReceiveData, m_workerClientWrapper, vector.release())); 89 m_loaderProxy->postTaskToWorkerGlobalScope(createCrossThreadTask(&workerGlob alScopeDidReceiveData, m_workerClientWrapper, vector.release()));
90 } 90 }
91 91
92 static void workerGlobalScopeDidDownloadData(ExecutionContext* context, PassRefP tr<ThreadableLoaderClientWrapper> workerClientWrapper, int dataLength) 92 static void workerGlobalScopeDidDownloadData(ExecutionContext* context, PassRefP tr<ThreadableLoaderClientWrapper> workerClientWrapper, int dataLength)
93 { 93 {
94 ASSERT_UNUSED(context, context->isWorkerGlobalScope()); 94 ASSERT_UNUSED(context, context->isWorkerGlobalScope());
95 workerClientWrapper->didDownloadData(dataLength); 95 workerClientWrapper->didDownloadData(dataLength);
96 } 96 }
97 97
98 void WorkerLoaderClientBridge::didDownloadData(int dataLength) 98 void WorkerLoaderClientBridge::didDownloadData(int dataLength)
99 { 99 {
100 m_loaderProxy.postTaskToWorkerGlobalScope(createCrossThreadTask(&workerGloba lScopeDidDownloadData, m_workerClientWrapper, dataLength)); 100 m_loaderProxy->postTaskToWorkerGlobalScope(createCrossThreadTask(&workerGlob alScopeDidDownloadData, m_workerClientWrapper, dataLength));
101 } 101 }
102 102
103 static void workerGlobalScopeDidReceiveCachedMetadata(ExecutionContext* context, PassRefPtr<ThreadableLoaderClientWrapper> workerClientWrapper, PassOwnPtr<Vecto r<char> > vectorData) 103 static void workerGlobalScopeDidReceiveCachedMetadata(ExecutionContext* context, PassRefPtr<ThreadableLoaderClientWrapper> workerClientWrapper, PassOwnPtr<Vecto r<char> > vectorData)
104 { 104 {
105 ASSERT_UNUSED(context, context->isWorkerGlobalScope()); 105 ASSERT_UNUSED(context, context->isWorkerGlobalScope());
106 workerClientWrapper->didReceiveCachedMetadata(vectorData->data(), vectorData ->size()); 106 workerClientWrapper->didReceiveCachedMetadata(vectorData->data(), vectorData ->size());
107 } 107 }
108 108
109 void WorkerLoaderClientBridge::didReceiveCachedMetadata(const char* data, int da taLength) 109 void WorkerLoaderClientBridge::didReceiveCachedMetadata(const char* data, int da taLength)
110 { 110 {
111 OwnPtr<Vector<char> > vector = adoptPtr(new Vector<char>(dataLength)); // ne eds to be an OwnPtr for usage with createCrossThreadTask. 111 OwnPtr<Vector<char> > vector = adoptPtr(new Vector<char>(dataLength)); // ne eds to be an OwnPtr for usage with createCrossThreadTask.
112 memcpy(vector->data(), data, dataLength); 112 memcpy(vector->data(), data, dataLength);
113 m_loaderProxy.postTaskToWorkerGlobalScope(createCrossThreadTask(&workerGloba lScopeDidReceiveCachedMetadata, m_workerClientWrapper, vector.release())); 113 m_loaderProxy->postTaskToWorkerGlobalScope(createCrossThreadTask(&workerGlob alScopeDidReceiveCachedMetadata, m_workerClientWrapper, vector.release()));
114 } 114 }
115 115
116 static void workerGlobalScopeDidFinishLoading(ExecutionContext* context, PassRef Ptr<ThreadableLoaderClientWrapper> workerClientWrapper, unsigned long identifier , double finishTime) 116 static void workerGlobalScopeDidFinishLoading(ExecutionContext* context, PassRef Ptr<ThreadableLoaderClientWrapper> workerClientWrapper, unsigned long identifier , double finishTime)
117 { 117 {
118 ASSERT_UNUSED(context, context->isWorkerGlobalScope()); 118 ASSERT_UNUSED(context, context->isWorkerGlobalScope());
119 workerClientWrapper->didFinishLoading(identifier, finishTime); 119 workerClientWrapper->didFinishLoading(identifier, finishTime);
120 } 120 }
121 121
122 void WorkerLoaderClientBridge::didFinishLoading(unsigned long identifier, double finishTime) 122 void WorkerLoaderClientBridge::didFinishLoading(unsigned long identifier, double finishTime)
123 { 123 {
124 m_loaderProxy.postTaskToWorkerGlobalScope(createCrossThreadTask(&workerGloba lScopeDidFinishLoading, m_workerClientWrapper, identifier, finishTime)); 124 m_loaderProxy->postTaskToWorkerGlobalScope(createCrossThreadTask(&workerGlob alScopeDidFinishLoading, m_workerClientWrapper, identifier, finishTime));
125 } 125 }
126 126
127 static void workerGlobalScopeDidFail(ExecutionContext* context, PassRefPtr<Threa dableLoaderClientWrapper> workerClientWrapper, const ResourceError& error) 127 static void workerGlobalScopeDidFail(ExecutionContext* context, PassRefPtr<Threa dableLoaderClientWrapper> workerClientWrapper, const ResourceError& error)
128 { 128 {
129 ASSERT_UNUSED(context, context->isWorkerGlobalScope()); 129 ASSERT_UNUSED(context, context->isWorkerGlobalScope());
130 workerClientWrapper->didFail(error); 130 workerClientWrapper->didFail(error);
131 } 131 }
132 132
133 void WorkerLoaderClientBridge::didFail(const ResourceError& error) 133 void WorkerLoaderClientBridge::didFail(const ResourceError& error)
134 { 134 {
135 m_loaderProxy.postTaskToWorkerGlobalScope(createCrossThreadTask(&workerGloba lScopeDidFail, m_workerClientWrapper, error)); 135 m_loaderProxy->postTaskToWorkerGlobalScope(createCrossThreadTask(&workerGlob alScopeDidFail, m_workerClientWrapper, error));
136 } 136 }
137 137
138 static void workerGlobalScopeDidFailAccessControlCheck(ExecutionContext* context , PassRefPtr<ThreadableLoaderClientWrapper> workerClientWrapper, const ResourceE rror& error) 138 static void workerGlobalScopeDidFailAccessControlCheck(ExecutionContext* context , PassRefPtr<ThreadableLoaderClientWrapper> workerClientWrapper, const ResourceE rror& error)
139 { 139 {
140 ASSERT_UNUSED(context, context->isWorkerGlobalScope()); 140 ASSERT_UNUSED(context, context->isWorkerGlobalScope());
141 workerClientWrapper->didFailAccessControlCheck(error); 141 workerClientWrapper->didFailAccessControlCheck(error);
142 } 142 }
143 143
144 void WorkerLoaderClientBridge::didFailAccessControlCheck(const ResourceError& er ror) 144 void WorkerLoaderClientBridge::didFailAccessControlCheck(const ResourceError& er ror)
145 { 145 {
146 m_loaderProxy.postTaskToWorkerGlobalScope(createCrossThreadTask(&workerGloba lScopeDidFailAccessControlCheck, m_workerClientWrapper, error)); 146 m_loaderProxy->postTaskToWorkerGlobalScope(createCrossThreadTask(&workerGlob alScopeDidFailAccessControlCheck, m_workerClientWrapper, error));
147 } 147 }
148 148
149 static void workerGlobalScopeDidFailRedirectCheck(ExecutionContext* context, Pas sRefPtr<ThreadableLoaderClientWrapper> workerClientWrapper) 149 static void workerGlobalScopeDidFailRedirectCheck(ExecutionContext* context, Pas sRefPtr<ThreadableLoaderClientWrapper> workerClientWrapper)
150 { 150 {
151 ASSERT_UNUSED(context, context->isWorkerGlobalScope()); 151 ASSERT_UNUSED(context, context->isWorkerGlobalScope());
152 workerClientWrapper->didFailRedirectCheck(); 152 workerClientWrapper->didFailRedirectCheck();
153 } 153 }
154 154
155 void WorkerLoaderClientBridge::didFailRedirectCheck() 155 void WorkerLoaderClientBridge::didFailRedirectCheck()
156 { 156 {
157 m_loaderProxy.postTaskToWorkerGlobalScope(createCrossThreadTask(&workerGloba lScopeDidFailRedirectCheck, m_workerClientWrapper)); 157 m_loaderProxy->postTaskToWorkerGlobalScope(createCrossThreadTask(&workerGlob alScopeDidFailRedirectCheck, m_workerClientWrapper));
158 } 158 }
159 159
160 WorkerLoaderClientBridge::WorkerLoaderClientBridge(PassRefPtr<ThreadableLoaderCl ientWrapper> clientWrapper, WorkerLoaderProxy& loaderProxy) 160 WorkerLoaderClientBridge::WorkerLoaderClientBridge(PassRefPtr<ThreadableLoaderCl ientWrapper> clientWrapper, PassRefPtr<WorkerLoaderProxy> loaderProxy)
161 : m_workerClientWrapper(clientWrapper) 161 : m_workerClientWrapper(clientWrapper)
162 , m_loaderProxy(loaderProxy) 162 , m_loaderProxy(loaderProxy)
163 { 163 {
164 } 164 }
165 165
166 } // namespace blink 166 } // namespace blink
OLDNEW
« no previous file with comments | « Source/core/loader/WorkerLoaderClientBridge.h ('k') | Source/core/loader/WorkerThreadableLoader.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698