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

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

Issue 2141383002: [Fetch API] Remove HandleScope to protect local handles (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fix Created 4 years, 5 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 125 matching lines...) Expand 10 before | Expand all | Expand 10 after
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 std::unique_ptr<WebDataConsumerHandle> m_handle; 144 std::unique_ptr<WebDataConsumerHandle> m_handle;
145 Member<CompositeDataConsumerHandle::Updater> m_updater; 145 Member<CompositeDataConsumerHandle::Updater> m_updater;
146 // We cannot store a Response because its JS wrapper can be collected.
147 // TODO(yhirano): Fix this.
146 Member<Response> m_response; 148 Member<Response> m_response;
147 Member<FetchManager::Loader> m_loader; 149 Member<FetchManager::Loader> m_loader;
148 String m_integrityMetadata; 150 String m_integrityMetadata;
149 KURL m_url; 151 KURL m_url;
150 std::unique_ptr<WebDataConsumerHandle::Reader> m_reader; 152 std::unique_ptr<WebDataConsumerHandle::Reader> m_reader;
151 Vector<char> m_buffer; 153 Vector<char> m_buffer;
152 bool m_finished; 154 bool m_finished;
153 }; 155 };
154 156
155 private: 157 private:
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
202 visitor->trace(m_fetchManager); 204 visitor->trace(m_fetchManager);
203 visitor->trace(m_resolver); 205 visitor->trace(m_resolver);
204 visitor->trace(m_request); 206 visitor->trace(m_request);
205 visitor->trace(m_integrityVerifier); 207 visitor->trace(m_integrityVerifier);
206 visitor->trace(m_executionContext); 208 visitor->trace(m_executionContext);
207 } 209 }
208 210
209 void FetchManager::Loader::didReceiveResponse(unsigned long, const ResourceRespo nse& response, std::unique_ptr<WebDataConsumerHandle> handle) 211 void FetchManager::Loader::didReceiveResponse(unsigned long, const ResourceRespo nse& response, std::unique_ptr<WebDataConsumerHandle> handle)
210 { 212 {
211 ASSERT(handle); 213 ASSERT(handle);
214 ScriptState* scriptState = m_resolver->getScriptState();
215 ScriptState::Scope scope(scriptState);
212 216
213 if (response.url().protocolIs("blob") && response.httpStatusCode() == 404) { 217 if (response.url().protocolIs("blob") && response.httpStatusCode() == 404) {
214 // "If |blob| is null, return a network error." 218 // "If |blob| is null, return a network error."
215 // https://fetch.spec.whatwg.org/#concept-basic-fetch 219 // https://fetch.spec.whatwg.org/#concept-basic-fetch
216 performNetworkError("Blob not found."); 220 performNetworkError("Blob not found.");
217 return; 221 return;
218 } 222 }
219 223
220 if (response.url().protocolIs("blob") && response.httpStatusCode() == 405) { 224 if (response.url().protocolIs("blob") && response.httpStatusCode() == 405) {
221 performNetworkError("Only 'GET' method is allowed for blob URLs."); 225 performNetworkError("Only 'GET' method is allowed for blob URLs.");
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
283 // opaque redirect response. 287 // opaque redirect response.
284 case WebServiceWorkerResponseTypeError: 288 case WebServiceWorkerResponseTypeError:
285 // When ServiceWorker respond to the request from fetch() with an 289 // When ServiceWorker respond to the request from fetch() with an
286 // error response, FetchManager::Loader::didFail() must be called 290 // error response, FetchManager::Loader::didFail() must be called
287 // instead. 291 // instead.
288 RELEASE_NOTREACHED(); 292 RELEASE_NOTREACHED();
289 break; 293 break;
290 } 294 }
291 } 295 }
292 296
293 ScriptState* scriptState = m_resolver->getScriptState();
294 FetchResponseData* responseData = nullptr; 297 FetchResponseData* responseData = nullptr;
295 CompositeDataConsumerHandle::Updater* updater = nullptr; 298 CompositeDataConsumerHandle::Updater* updater = nullptr;
296 if (m_request->integrity().isEmpty()) 299 if (m_request->integrity().isEmpty())
297 responseData = FetchResponseData::createWithBuffer(new BodyStreamBuffer( scriptState, createFetchDataConsumerHandleFromWebHandle(std::move(handle)))); 300 responseData = FetchResponseData::createWithBuffer(new BodyStreamBuffer( scriptState, createFetchDataConsumerHandleFromWebHandle(std::move(handle))));
298 else 301 else
299 responseData = FetchResponseData::createWithBuffer(new BodyStreamBuffer( scriptState, createFetchDataConsumerHandleFromWebHandle(CompositeDataConsumerHan dle::create(createWaitingDataConsumerHandle(), &updater)))); 302 responseData = FetchResponseData::createWithBuffer(new BodyStreamBuffer( scriptState, createFetchDataConsumerHandleFromWebHandle(CompositeDataConsumerHan dle::create(createWaitingDataConsumerHandle(), &updater))));
300 responseData->setStatus(response.httpStatusCode()); 303 responseData->setStatus(response.httpStatusCode());
301 responseData->setStatusMessage(response.httpStatusText()); 304 responseData->setStatusMessage(response.httpStatusText());
302 for (auto& it : response.httpHeaderFields()) 305 for (auto& it : response.httpHeaderFields())
303 responseData->headerList()->append(it.key, it.value); 306 responseData->headerList()->append(it.key, it.value);
(...skipping 434 matching lines...) Expand 10 before | Expand all | Expand 10 after
738 loader->dispose(); 741 loader->dispose();
739 } 742 }
740 743
741 DEFINE_TRACE(FetchManager) 744 DEFINE_TRACE(FetchManager)
742 { 745 {
743 visitor->trace(m_loaders); 746 visitor->trace(m_loaders);
744 ContextLifecycleObserver::trace(visitor); 747 ContextLifecycleObserver::trace(visitor);
745 } 748 }
746 749
747 } // namespace blink 750 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/modules/fetch/BodyStreamBufferTest.cpp ('k') | third_party/WebKit/Source/modules/fetch/Request.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698