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

Side by Side Diff: Source/modules/fetch/FetchBlobDataConsumerHandle.cpp

Issue 1264453002: Split the constructor of ThreadableLoader into two methods (ctor and start()) (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 5 years, 4 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 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "config.h" 5 #include "config.h"
6 #include "modules/fetch/FetchBlobDataConsumerHandle.h" 6 #include "modules/fetch/FetchBlobDataConsumerHandle.h"
7 7
8 #include "core/dom/ActiveDOMObject.h" 8 #include "core/dom/ActiveDOMObject.h"
9 #include "core/dom/CrossThreadTask.h" 9 #include "core/dom/CrossThreadTask.h"
10 #include "core/dom/ExecutionContext.h" 10 #include "core/dom/ExecutionContext.h"
(...skipping 226 matching lines...) Expand 10 before | Expand all | Expand 10 after
237 m_loader->cancel(); 237 m_loader->cancel();
238 m_loader.clear(); 238 m_loader.clear();
239 } 239 }
240 } 240 }
241 241
242 void start(ExecutionContext* executionContext) override 242 void start(ExecutionContext* executionContext) override
243 { 243 {
244 ASSERT(executionContext->isContextThread()); 244 ASSERT(executionContext->isContextThread());
245 ASSERT(!m_loader); 245 ASSERT(!m_loader);
246 246
247 KURL url = BlobURL::createPublicURL(executionContext->securityOrigin());
248 if (url.isEmpty()) {
hiroshige 2015/07/30 12:07:21 Please call m_updater->update(createUnexpectedErro
tyoshino (SeeGerritForStatus) 2015/07/31 08:00:42 Good catch! Done
249 return;
250 }
251 BlobRegistry::registerPublicBlobURL(executionContext->securityOrigin(), url, m_blobDataHandle);
252
247 m_loader = createLoader(executionContext, this); 253 m_loader = createLoader(executionContext, this);
hiroshige 2015/07/30 12:07:21 Please add ASSERT(m_loader) here.
tyoshino (SeeGerritForStatus) 2015/07/31 08:00:42 Done.
248 if (!m_loader) 254
249 m_updater->update(createUnexpectedErrorDataConsumerHandle()); 255 ResourceRequest request(url);
256 request.setRequestContext(WebURLRequest::RequestContextInternal);
257 request.setUseStreamOnResponse(true);
258 m_loader->start(request);
250 } 259 }
251 260
252 private: 261 private:
253 PassRefPtr<ThreadableLoader> createLoader(ExecutionContext* executionContext , ThreadableLoaderClient* client) const 262 PassRefPtr<ThreadableLoader> createLoader(ExecutionContext* executionContext , ThreadableLoaderClient* client) const
254 { 263 {
255 KURL url = BlobURL::createPublicURL(executionContext->securityOrigin());
256 if (url.isEmpty()) {
257 return nullptr;
258 }
259 BlobRegistry::registerPublicBlobURL(executionContext->securityOrigin(), url, m_blobDataHandle);
260
261 ResourceRequest request(url);
262 request.setRequestContext(WebURLRequest::RequestContextInternal);
263 request.setUseStreamOnResponse(true);
264
265 ThreadableLoaderOptions options; 264 ThreadableLoaderOptions options;
266 options.preflightPolicy = ConsiderPreflight; 265 options.preflightPolicy = ConsiderPreflight;
267 options.crossOriginRequestPolicy = DenyCrossOriginRequests; 266 options.crossOriginRequestPolicy = DenyCrossOriginRequests;
268 options.contentSecurityPolicyEnforcement = DoNotEnforceContentSecurityPo licy; 267 options.contentSecurityPolicyEnforcement = DoNotEnforceContentSecurityPo licy;
269 options.initiator = FetchInitiatorTypeNames::internal; 268 options.initiator = FetchInitiatorTypeNames::internal;
270 269
271 ResourceLoaderOptions resourceLoaderOptions; 270 ResourceLoaderOptions resourceLoaderOptions;
272 resourceLoaderOptions.dataBufferingPolicy = DoNotBufferData; 271 resourceLoaderOptions.dataBufferingPolicy = DoNotBufferData;
273 272
274 return m_loaderFactory->create(*executionContext, client, request, optio ns, resourceLoaderOptions); 273 return m_loaderFactory->create(*executionContext, client, options, resou rceLoaderOptions);
275 } 274 }
276 275
277 // ThreadableLoaderClient 276 // ThreadableLoaderClient
278 void didReceiveResponse(unsigned long, const ResourceResponse&, PassOwnPtr<W ebDataConsumerHandle> handle) override 277 void didReceiveResponse(unsigned long, const ResourceResponse&, PassOwnPtr<W ebDataConsumerHandle> handle) override
279 { 278 {
280 ASSERT(!m_receivedResponse); 279 ASSERT(!m_receivedResponse);
281 m_receivedResponse = true; 280 m_receivedResponse = true;
282 if (!handle) { 281 if (!handle) {
283 // Here we assume WebURLLoader must return the response body as 282 // Here we assume WebURLLoader must return the response body as
284 // |WebDataConsumerHandle| since we call 283 // |WebDataConsumerHandle| since we call
(...skipping 29 matching lines...) Expand all
314 RefPtr<ThreadableLoader> m_loader; 313 RefPtr<ThreadableLoader> m_loader;
315 314
316 bool m_receivedResponse; 315 bool m_receivedResponse;
317 }; 316 };
318 317
319 class DefaultLoaderFactory final : public FetchBlobDataConsumerHandle::LoaderFac tory { 318 class DefaultLoaderFactory final : public FetchBlobDataConsumerHandle::LoaderFac tory {
320 public: 319 public:
321 PassRefPtr<ThreadableLoader> create( 320 PassRefPtr<ThreadableLoader> create(
322 ExecutionContext& executionContext, 321 ExecutionContext& executionContext,
323 ThreadableLoaderClient* client, 322 ThreadableLoaderClient* client,
324 const ResourceRequest& request,
325 const ThreadableLoaderOptions& options, 323 const ThreadableLoaderOptions& options,
326 const ResourceLoaderOptions& resourceLoaderOptions) override 324 const ResourceLoaderOptions& resourceLoaderOptions) override
327 { 325 {
328 return ThreadableLoader::create(executionContext, client, request, optio ns, resourceLoaderOptions); 326 return ThreadableLoader::create(executionContext, client, options, resou rceLoaderOptions);
329 } 327 }
330 }; 328 };
331 329
332 } // namespace 330 } // namespace
333 331
334 // ReaderContext is referenced from FetchBlobDataConsumerHandle and 332 // ReaderContext is referenced from FetchBlobDataConsumerHandle and
335 // ReaderContext::ReaderImpl. 333 // ReaderContext::ReaderImpl.
336 // All functions/members must be called/accessed only on the reader thread, 334 // All functions/members must be called/accessed only on the reader thread,
337 // except for constructor, destructor, and obtainReader(). 335 // except for constructor, destructor, and obtainReader().
338 class FetchBlobDataConsumerHandle::ReaderContext final : public ThreadSafeRefCou nted<ReaderContext> { 336 class FetchBlobDataConsumerHandle::ReaderContext final : public ThreadSafeRefCou nted<ReaderContext> {
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after
460 458
461 return adoptPtr(new FetchBlobDataConsumerHandle(executionContext, blobDataHa ndle, new DefaultLoaderFactory)); 459 return adoptPtr(new FetchBlobDataConsumerHandle(executionContext, blobDataHa ndle, new DefaultLoaderFactory));
462 } 460 }
463 461
464 FetchDataConsumerHandle::Reader* FetchBlobDataConsumerHandle::obtainReaderIntern al(Client* client) 462 FetchDataConsumerHandle::Reader* FetchBlobDataConsumerHandle::obtainReaderIntern al(Client* client)
465 { 463 {
466 return m_readerContext->obtainReader(client).leakPtr(); 464 return m_readerContext->obtainReader(client).leakPtr();
467 } 465 }
468 466
469 } // namespace blink 467 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698