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

Side by Side Diff: Source/modules/serviceworkers/FetchManager.cpp

Issue 478693005: Oilpan: Ship Oilpan for serviceworkers/ (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 6 years, 3 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 | Annotate | Revision Log
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 "FetchManager.h" 6 #include "FetchManager.h"
7 7
8 #include "bindings/core/v8/ExceptionState.h" 8 #include "bindings/core/v8/ExceptionState.h"
9 #include "bindings/core/v8/ScriptPromiseResolver.h" 9 #include "bindings/core/v8/ScriptPromiseResolver.h"
10 #include "bindings/core/v8/ScriptState.h" 10 #include "bindings/core/v8/ScriptState.h"
11 #include "bindings/core/v8/V8ThrowException.h" 11 #include "bindings/core/v8/V8ThrowException.h"
12 #include "core/dom/ExceptionCode.h" 12 #include "core/dom/ExceptionCode.h"
13 #include "core/fetch/FetchUtils.h" 13 #include "core/fetch/FetchUtils.h"
14 #include "core/fileapi/Blob.h" 14 #include "core/fileapi/Blob.h"
15 #include "core/loader/ThreadableLoader.h" 15 #include "core/loader/ThreadableLoader.h"
16 #include "core/loader/ThreadableLoaderClient.h" 16 #include "core/loader/ThreadableLoaderClient.h"
17 #include "modules/serviceworkers/FetchRequestData.h" 17 #include "modules/serviceworkers/FetchRequestData.h"
18 #include "modules/serviceworkers/Response.h" 18 #include "modules/serviceworkers/Response.h"
19 #include "modules/serviceworkers/ResponseInit.h" 19 #include "modules/serviceworkers/ResponseInit.h"
20 #include "platform/network/ResourceRequest.h" 20 #include "platform/network/ResourceRequest.h"
21 #include "platform/weborigin/SecurityOrigin.h" 21 #include "platform/weborigin/SecurityOrigin.h"
22 #include "public/platform/WebURLRequest.h" 22 #include "public/platform/WebURLRequest.h"
23 #include "wtf/HashSet.h" 23 #include "wtf/HashSet.h"
24 24
25 namespace blink { 25 namespace blink {
26 26
27 class FetchManager::Loader : public ThreadableLoaderClient { 27 class FetchManager::Loader : public ThreadableLoaderClient {
28 public: 28 public:
29 Loader(ExecutionContext*, FetchManager*, PassRefPtr<ScriptPromiseResolver>, PassRefPtrWillBeRawPtr<FetchRequestData>); 29 Loader(ExecutionContext*, FetchManager*, PassRefPtr<ScriptPromiseResolver>, FetchRequestData*);
30 ~Loader(); 30 ~Loader();
31 virtual void didReceiveResponse(unsigned long, const ResourceResponse&); 31 virtual void didReceiveResponse(unsigned long, const ResourceResponse&);
32 virtual void didFinishLoading(unsigned long, double); 32 virtual void didFinishLoading(unsigned long, double);
33 virtual void didFail(const ResourceError&); 33 virtual void didFail(const ResourceError&);
34 virtual void didFailAccessControlCheck(const ResourceError&); 34 virtual void didFailAccessControlCheck(const ResourceError&);
35 virtual void didFailRedirectCheck(); 35 virtual void didFailRedirectCheck();
36 virtual void didDownloadData(int); 36 virtual void didDownloadData(int);
37 37
38 void start(); 38 void start();
39 void cleanup(); 39 void cleanup();
40 40
41 private: 41 private:
42 void performBasicFetch(); 42 void performBasicFetch();
43 void performNetworkError(); 43 void performNetworkError();
44 void performHTTPFetch(); 44 void performHTTPFetch();
45 void failed(); 45 void failed();
46 void notifyFinished(); 46 void notifyFinished();
47 47
48 ExecutionContext* m_executionContext; 48 ExecutionContext* m_executionContext;
49 FetchManager* m_fetchManager; 49 FetchManager* m_fetchManager;
50 RefPtr<ScriptPromiseResolver> m_resolver; 50 RefPtr<ScriptPromiseResolver> m_resolver;
51 RefPtrWillBePersistent<FetchRequestData> m_request; 51 Persistent<FetchRequestData> m_request;
52 RefPtr<ThreadableLoader> m_loader; 52 RefPtr<ThreadableLoader> m_loader;
53 ResourceResponse m_response; 53 ResourceResponse m_response;
54 long long m_downloadedBlobLength; 54 long long m_downloadedBlobLength;
55 bool m_corsFlag; 55 bool m_corsFlag;
56 bool m_corsPreflightFlag; 56 bool m_corsPreflightFlag;
57 bool m_failed; 57 bool m_failed;
58 }; 58 };
59 59
60 FetchManager::Loader::Loader(ExecutionContext* executionContext, FetchManager* f etchManager, PassRefPtr<ScriptPromiseResolver> resolver, PassRefPtrWillBeRawPtr< FetchRequestData> request) 60 FetchManager::Loader::Loader(ExecutionContext* executionContext, FetchManager* f etchManager, PassRefPtr<ScriptPromiseResolver> resolver, FetchRequestData* reque st)
61 : m_executionContext(executionContext) 61 : m_executionContext(executionContext)
62 , m_fetchManager(fetchManager) 62 , m_fetchManager(fetchManager)
63 , m_resolver(resolver) 63 , m_resolver(resolver)
64 , m_request(request->createCopy()) 64 , m_request(request->createCopy())
65 , m_downloadedBlobLength(0) 65 , m_downloadedBlobLength(0)
66 , m_corsFlag(false) 66 , m_corsFlag(false)
67 , m_corsPreflightFlag(false) 67 , m_corsPreflightFlag(false)
68 , m_failed(false) 68 , m_failed(false)
69 { 69 {
70 } 70 }
(...skipping 13 matching lines...) Expand all
84 { 84 {
85 if (!m_resolver->executionContext() || m_resolver->executionContext()->activ eDOMObjectsAreStopped()) 85 if (!m_resolver->executionContext() || m_resolver->executionContext()->activ eDOMObjectsAreStopped())
86 return; 86 return;
87 87
88 OwnPtr<BlobData> blobData = BlobData::create(); 88 OwnPtr<BlobData> blobData = BlobData::create();
89 String filePath = m_response.downloadedFilePath(); 89 String filePath = m_response.downloadedFilePath();
90 if (!filePath.isEmpty() && m_downloadedBlobLength) { 90 if (!filePath.isEmpty() && m_downloadedBlobLength) {
91 blobData->appendFile(filePath); 91 blobData->appendFile(filePath);
92 blobData->setContentType(m_response.mimeType()); 92 blobData->setContentType(m_response.mimeType());
93 } 93 }
94 RefPtrWillBeRawPtr<FetchResponseData> response(FetchResponseData::create()); 94 FetchResponseData* response = FetchResponseData::create();
95 response->setStatus(m_response.httpStatusCode()); 95 response->setStatus(m_response.httpStatusCode());
96 response->setStatusMessage(m_response.httpStatusText()); 96 response->setStatusMessage(m_response.httpStatusText());
97 HTTPHeaderMap::const_iterator end = m_response.httpHeaderFields().end(); 97 HTTPHeaderMap::const_iterator end = m_response.httpHeaderFields().end();
98 for (HTTPHeaderMap::const_iterator it = m_response.httpHeaderFields().begin( ); it != end; ++it) { 98 for (HTTPHeaderMap::const_iterator it = m_response.httpHeaderFields().begin( ); it != end; ++it) {
99 response->headerList()->append(it->key, it->value); 99 response->headerList()->append(it->key, it->value);
100 } 100 }
101 response->setBlobDataHandle(BlobDataHandle::create(blobData.release(), m_dow nloadedBlobLength)); 101 response->setBlobDataHandle(BlobDataHandle::create(blobData.release(), m_dow nloadedBlobLength));
102 response->setURL(m_request->url()); 102 response->setURL(m_request->url());
103 103
104 switch (m_request->tainting()) { 104 switch (m_request->tainting()) {
105 case FetchRequestData::BasicTainting: 105 case FetchRequestData::BasicTainting:
106 response = response->createBasicFilteredResponse(); 106 response = response->createBasicFilteredResponse();
107 break; 107 break;
108 case FetchRequestData::CORSTainting: 108 case FetchRequestData::CORSTainting:
109 response = response->createCORSFilteredResponse(); 109 response = response->createCORSFilteredResponse();
110 break; 110 break;
111 case FetchRequestData::OpaqueTainting: 111 case FetchRequestData::OpaqueTainting:
112 response = response->createOpaqueFilteredResponse(); 112 response = response->createOpaqueFilteredResponse();
113 break; 113 break;
114 } 114 }
115 m_resolver->resolve(Response::create(response.release())); 115 m_resolver->resolve(Response::create(response));
116 notifyFinished(); 116 notifyFinished();
117 } 117 }
118 118
119 void FetchManager::Loader::didFail(const ResourceError& error) 119 void FetchManager::Loader::didFail(const ResourceError& error)
120 { 120 {
121 failed(); 121 failed();
122 } 122 }
123 123
124 void FetchManager::Loader::didFailAccessControlCheck(const ResourceError& error) 124 void FetchManager::Loader::didFailAccessControlCheck(const ResourceError& error)
125 { 125 {
(...skipping 208 matching lines...) Expand 10 before | Expand all | Expand 10 after
334 { 334 {
335 } 335 }
336 336
337 FetchManager::~FetchManager() 337 FetchManager::~FetchManager()
338 { 338 {
339 for (HashSet<OwnPtr<Loader> >::iterator it = m_loaders.begin(); it != m_load ers.end(); ++it) { 339 for (HashSet<OwnPtr<Loader> >::iterator it = m_loaders.begin(); it != m_load ers.end(); ++it) {
340 (*it)->cleanup(); 340 (*it)->cleanup();
341 } 341 }
342 } 342 }
343 343
344 ScriptPromise FetchManager::fetch(ScriptState* scriptState, PassRefPtrWillBeRawP tr<FetchRequestData> request) 344 ScriptPromise FetchManager::fetch(ScriptState* scriptState, FetchRequestData* re quest)
345 { 345 {
346 RefPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::create(scrip tState); 346 RefPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::create(scrip tState);
347 ScriptPromise promise = resolver->promise(); 347 ScriptPromise promise = resolver->promise();
348 348
349 OwnPtr<Loader> ownLoader(adoptPtr(new Loader(m_executionContext, this, resol ver.release(), request))); 349 OwnPtr<Loader> ownLoader(adoptPtr(new Loader(m_executionContext, this, resol ver.release(), request)));
350 Loader* loader = m_loaders.add(ownLoader.release()).storedValue->get(); 350 Loader* loader = m_loaders.add(ownLoader.release()).storedValue->get();
351 loader->start(); 351 loader->start();
352 return promise; 352 return promise;
353 } 353 }
354 354
355 void FetchManager::onLoaderFinished(Loader* loader) 355 void FetchManager::onLoaderFinished(Loader* loader)
356 { 356 {
357 m_loaders.remove(loader); 357 m_loaders.remove(loader);
358 } 358 }
359 359
360 } // namespace blink 360 } // namespace blink
OLDNEW
« no previous file with comments | « Source/modules/serviceworkers/FetchManager.h ('k') | Source/modules/serviceworkers/FetchRequestData.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698