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

Side by Side Diff: third_party/WebKit/Source/modules/fetch/FetchManager.cpp

Issue 2050123002: Remove OwnPtr from Blink. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: First attempt to land. Created 4 years, 6 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 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 "modules/fetch/FetchManager.h" 5 #include "modules/fetch/FetchManager.h"
6 6
7 #include "bindings/core/v8/ExceptionState.h" 7 #include "bindings/core/v8/ExceptionState.h"
8 #include "bindings/core/v8/ScriptPromiseResolver.h" 8 #include "bindings/core/v8/ScriptPromiseResolver.h"
9 #include "bindings/core/v8/ScriptState.h" 9 #include "bindings/core/v8/ScriptState.h"
10 #include "bindings/core/v8/V8ThrowException.h" 10 #include "bindings/core/v8/V8ThrowException.h"
(...skipping 20 matching lines...) Expand all
31 #include "modules/fetch/ResponseInit.h" 31 #include "modules/fetch/ResponseInit.h"
32 #include "platform/HTTPNames.h" 32 #include "platform/HTTPNames.h"
33 #include "platform/network/ResourceError.h" 33 #include "platform/network/ResourceError.h"
34 #include "platform/network/ResourceRequest.h" 34 #include "platform/network/ResourceRequest.h"
35 #include "platform/network/ResourceResponse.h" 35 #include "platform/network/ResourceResponse.h"
36 #include "platform/weborigin/SchemeRegistry.h" 36 #include "platform/weborigin/SchemeRegistry.h"
37 #include "platform/weborigin/SecurityOrigin.h" 37 #include "platform/weborigin/SecurityOrigin.h"
38 #include "platform/weborigin/SecurityPolicy.h" 38 #include "platform/weborigin/SecurityPolicy.h"
39 #include "public/platform/WebURLRequest.h" 39 #include "public/platform/WebURLRequest.h"
40 #include "wtf/HashSet.h" 40 #include "wtf/HashSet.h"
41 #include "wtf/OwnPtr.h"
42 #include "wtf/Vector.h" 41 #include "wtf/Vector.h"
43 #include "wtf/text/WTFString.h" 42 #include "wtf/text/WTFString.h"
43 #include <memory>
44 44
45 namespace blink { 45 namespace blink {
46 46
47 namespace { 47 namespace {
48 48
49 bool IsRedirectStatusCode(int statusCode) 49 bool IsRedirectStatusCode(int statusCode)
50 { 50 {
51 return (statusCode == 301 || statusCode == 302 || statusCode == 303 || statu sCode == 307 || statusCode == 308); 51 return (statusCode == 301 || statusCode == 302 || statusCode == 303 || statu sCode == 307 || statusCode == 308);
52 } 52 }
53 53
54 } // namespace 54 } // namespace
55 55
56 class FetchManager::Loader final : public GarbageCollectedFinalized<FetchManager ::Loader>, public ThreadableLoaderClient { 56 class FetchManager::Loader final : public GarbageCollectedFinalized<FetchManager ::Loader>, public ThreadableLoaderClient {
57 USING_PRE_FINALIZER(FetchManager::Loader, dispose); 57 USING_PRE_FINALIZER(FetchManager::Loader, dispose);
58 public: 58 public:
59 static Loader* create(ExecutionContext* executionContext, FetchManager* fetc hManager, ScriptPromiseResolver* resolver, FetchRequestData* request, bool isIso latedWorld) 59 static Loader* create(ExecutionContext* executionContext, FetchManager* fetc hManager, ScriptPromiseResolver* resolver, FetchRequestData* request, bool isIso latedWorld)
60 { 60 {
61 return new Loader(executionContext, fetchManager, resolver, request, isI solatedWorld); 61 return new Loader(executionContext, fetchManager, resolver, request, isI solatedWorld);
62 } 62 }
63 63
64 ~Loader() override; 64 ~Loader() override;
65 DECLARE_VIRTUAL_TRACE(); 65 DECLARE_VIRTUAL_TRACE();
66 66
67 void didReceiveResponse(unsigned long, const ResourceResponse&, PassOwnPtr<W ebDataConsumerHandle>) override; 67 void didReceiveResponse(unsigned long, const ResourceResponse&, std::unique_ ptr<WebDataConsumerHandle>) override;
68 void didFinishLoading(unsigned long, double) override; 68 void didFinishLoading(unsigned long, double) override;
69 void didFail(const ResourceError&) override; 69 void didFail(const ResourceError&) override;
70 void didFailAccessControlCheck(const ResourceError&) override; 70 void didFailAccessControlCheck(const ResourceError&) override;
71 void didFailRedirectCheck() override; 71 void didFailRedirectCheck() override;
72 72
73 void start(); 73 void start();
74 void dispose(); 74 void dispose();
75 75
76 class SRIVerifier final : public GarbageCollectedFinalized<SRIVerifier>, pub lic WebDataConsumerHandle::Client { 76 class SRIVerifier final : public GarbageCollectedFinalized<SRIVerifier>, pub lic WebDataConsumerHandle::Client {
77 public: 77 public:
78 // Promptly clear m_handle and m_reader. 78 // Promptly clear m_handle and m_reader.
79 EAGERLY_FINALIZE(); 79 EAGERLY_FINALIZE();
80 // SRIVerifier takes ownership of |handle| and |response|. 80 // SRIVerifier takes ownership of |handle| and |response|.
81 // |updater| must be garbage collected. The other arguments 81 // |updater| must be garbage collected. The other arguments
82 // all must have the lifetime of the give loader. 82 // all must have the lifetime of the give loader.
83 SRIVerifier(PassOwnPtr<WebDataConsumerHandle> handle, CompositeDataConsu merHandle::Updater* updater, Response* response, FetchManager::Loader* loader, S tring integrityMetadata, const KURL& url) 83 SRIVerifier(std::unique_ptr<WebDataConsumerHandle> handle, CompositeData ConsumerHandle::Updater* updater, Response* response, FetchManager::Loader* load er, String integrityMetadata, const KURL& url)
84 : m_handle(std::move(handle)) 84 : m_handle(std::move(handle))
85 , m_updater(updater) 85 , m_updater(updater)
86 , m_response(response) 86 , m_response(response)
87 , m_loader(loader) 87 , m_loader(loader)
88 , m_integrityMetadata(integrityMetadata) 88 , m_integrityMetadata(integrityMetadata)
89 , m_url(url) 89 , m_url(url)
90 , m_finished(false) 90 , m_finished(false)
91 { 91 {
92 m_reader = m_handle->obtainReader(this); 92 m_reader = m_handle->obtainReader(this);
93 } 93 }
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
134 134
135 bool isFinished() const { return m_finished; } 135 bool isFinished() const { return m_finished; }
136 136
137 DEFINE_INLINE_TRACE() 137 DEFINE_INLINE_TRACE()
138 { 138 {
139 visitor->trace(m_updater); 139 visitor->trace(m_updater);
140 visitor->trace(m_response); 140 visitor->trace(m_response);
141 visitor->trace(m_loader); 141 visitor->trace(m_loader);
142 } 142 }
143 private: 143 private:
144 OwnPtr<WebDataConsumerHandle> m_handle; 144 std::unique_ptr<WebDataConsumerHandle> m_handle;
145 Member<CompositeDataConsumerHandle::Updater> m_updater; 145 Member<CompositeDataConsumerHandle::Updater> m_updater;
146 Member<Response> m_response; 146 Member<Response> m_response;
147 Member<FetchManager::Loader> m_loader; 147 Member<FetchManager::Loader> m_loader;
148 String m_integrityMetadata; 148 String m_integrityMetadata;
149 KURL m_url; 149 KURL m_url;
150 OwnPtr<WebDataConsumerHandle::Reader> m_reader; 150 std::unique_ptr<WebDataConsumerHandle::Reader> m_reader;
151 Vector<char> m_buffer; 151 Vector<char> m_buffer;
152 bool m_finished; 152 bool m_finished;
153 }; 153 };
154 154
155 private: 155 private:
156 Loader(ExecutionContext*, FetchManager*, ScriptPromiseResolver*, FetchReques tData*, bool isIsolatedWorld); 156 Loader(ExecutionContext*, FetchManager*, ScriptPromiseResolver*, FetchReques tData*, bool isIsolatedWorld);
157 157
158 void performBasicFetch(); 158 void performBasicFetch();
159 void performNetworkError(const String& message); 159 void performNetworkError(const String& message);
160 void performHTTPFetch(bool corsFlag, bool corsPreflightFlag); 160 void performHTTPFetch(bool corsFlag, bool corsPreflightFlag);
161 void performDataFetch(); 161 void performDataFetch();
162 void failed(const String& message); 162 void failed(const String& message);
163 void notifyFinished(); 163 void notifyFinished();
164 Document* document() const; 164 Document* document() const;
165 void loadSucceeded(); 165 void loadSucceeded();
166 166
167 Member<FetchManager> m_fetchManager; 167 Member<FetchManager> m_fetchManager;
168 Member<ScriptPromiseResolver> m_resolver; 168 Member<ScriptPromiseResolver> m_resolver;
169 Member<FetchRequestData> m_request; 169 Member<FetchRequestData> m_request;
170 OwnPtr<ThreadableLoader> m_loader; 170 std::unique_ptr<ThreadableLoader> m_loader;
171 bool m_failed; 171 bool m_failed;
172 bool m_finished; 172 bool m_finished;
173 int m_responseHttpStatusCode; 173 int m_responseHttpStatusCode;
174 Member<SRIVerifier> m_integrityVerifier; 174 Member<SRIVerifier> m_integrityVerifier;
175 bool m_didFinishLoading; 175 bool m_didFinishLoading;
176 bool m_isIsolatedWorld; 176 bool m_isIsolatedWorld;
177 Member<ExecutionContext> m_executionContext; 177 Member<ExecutionContext> m_executionContext;
178 }; 178 };
179 179
180 FetchManager::Loader::Loader(ExecutionContext* executionContext, FetchManager* f etchManager, ScriptPromiseResolver* resolver, FetchRequestData* request, bool is IsolatedWorld) 180 FetchManager::Loader::Loader(ExecutionContext* executionContext, FetchManager* f etchManager, ScriptPromiseResolver* resolver, FetchRequestData* request, bool is IsolatedWorld)
(...skipping 18 matching lines...) Expand all
199 199
200 DEFINE_TRACE(FetchManager::Loader) 200 DEFINE_TRACE(FetchManager::Loader)
201 { 201 {
202 visitor->trace(m_fetchManager); 202 visitor->trace(m_fetchManager);
203 visitor->trace(m_resolver); 203 visitor->trace(m_resolver);
204 visitor->trace(m_request); 204 visitor->trace(m_request);
205 visitor->trace(m_integrityVerifier); 205 visitor->trace(m_integrityVerifier);
206 visitor->trace(m_executionContext); 206 visitor->trace(m_executionContext);
207 } 207 }
208 208
209 void FetchManager::Loader::didReceiveResponse(unsigned long, const ResourceRespo nse& response, PassOwnPtr<WebDataConsumerHandle> handle) 209 void FetchManager::Loader::didReceiveResponse(unsigned long, const ResourceRespo nse& response, std::unique_ptr<WebDataConsumerHandle> handle)
210 { 210 {
211 ASSERT(handle); 211 ASSERT(handle);
212 212
213 if (response.url().protocolIs("blob") && response.httpStatusCode() == 404) { 213 if (response.url().protocolIs("blob") && response.httpStatusCode() == 404) {
214 // "If |blob| is null, return a network error." 214 // "If |blob| is null, return a network error."
215 // https://fetch.spec.whatwg.org/#concept-basic-fetch 215 // https://fetch.spec.whatwg.org/#concept-basic-fetch
216 performNetworkError("Blob not found."); 216 performNetworkError("Blob not found.");
217 return; 217 return;
218 } 218 }
219 219
(...skipping 335 matching lines...) Expand 10 before | Expand all | Expand 10 after
555 555
556 // "1. Let |HTTPRequest| be a copy of |request|, except that |HTTPRequest|'s 556 // "1. Let |HTTPRequest| be a copy of |request|, except that |HTTPRequest|'s
557 // body is a tee of |request|'s body." 557 // body is a tee of |request|'s body."
558 // We use ResourceRequest class for HTTPRequest. 558 // We use ResourceRequest class for HTTPRequest.
559 // FIXME: Support body. 559 // FIXME: Support body.
560 ResourceRequest request(m_request->url()); 560 ResourceRequest request(m_request->url());
561 request.setRequestContext(m_request->context()); 561 request.setRequestContext(m_request->context());
562 request.setHTTPMethod(m_request->method()); 562 request.setHTTPMethod(m_request->method());
563 request.setFetchRequestMode(m_request->mode()); 563 request.setFetchRequestMode(m_request->mode());
564 request.setFetchCredentialsMode(m_request->credentials()); 564 request.setFetchCredentialsMode(m_request->credentials());
565 const Vector<OwnPtr<FetchHeaderList::Header>>& list = m_request->headerList( )->list(); 565 const Vector<std::unique_ptr<FetchHeaderList::Header>>& list = m_request->he aderList()->list();
566 for (size_t i = 0; i < list.size(); ++i) { 566 for (size_t i = 0; i < list.size(); ++i) {
567 request.addHTTPHeaderField(AtomicString(list[i]->first), AtomicString(li st[i]->second)); 567 request.addHTTPHeaderField(AtomicString(list[i]->first), AtomicString(li st[i]->second));
568 } 568 }
569 569
570 if (m_request->method() != HTTPNames::GET && m_request->method() != HTTPName s::HEAD) { 570 if (m_request->method() != HTTPNames::GET && m_request->method() != HTTPName s::HEAD) {
571 if (m_request->buffer()) 571 if (m_request->buffer())
572 request.setHTTPBody(m_request->buffer()->drainAsFormData()); 572 request.setHTTPBody(m_request->buffer()->drainAsFormData());
573 if (m_request->attachedCredential()) 573 if (m_request->attachedCredential())
574 request.setAttachedCredential(m_request->attachedCredential()); 574 request.setAttachedCredential(m_request->attachedCredential());
575 } 575 }
(...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after
738 loader->dispose(); 738 loader->dispose();
739 } 739 }
740 740
741 DEFINE_TRACE(FetchManager) 741 DEFINE_TRACE(FetchManager)
742 { 742 {
743 visitor->trace(m_loaders); 743 visitor->trace(m_loaders);
744 ContextLifecycleObserver::trace(visitor); 744 ContextLifecycleObserver::trace(visitor);
745 } 745 }
746 746
747 } // namespace blink 747 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698