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

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

Issue 872703002: Oilpan: Tidily dispose of FetchManager loader objects. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 5 years, 11 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 "modules/fetch/FetchManager.h" 6 #include "modules/fetch/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"
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
42 void trace(Visitor*) override; 42 void trace(Visitor*) override;
43 43
44 void didReceiveResponse(unsigned long, const ResourceResponse&, PassOwnPtr<W ebDataConsumerHandle>) override; 44 void didReceiveResponse(unsigned long, const ResourceResponse&, PassOwnPtr<W ebDataConsumerHandle>) override;
45 void didReceiveData(const char*, unsigned) override; 45 void didReceiveData(const char*, unsigned) override;
46 void didFinishLoading(unsigned long, double) override; 46 void didFinishLoading(unsigned long, double) override;
47 void didFail(const ResourceError&) override; 47 void didFail(const ResourceError&) override;
48 void didFailAccessControlCheck(const ResourceError&) override; 48 void didFailAccessControlCheck(const ResourceError&) override;
49 void didFailRedirectCheck() override; 49 void didFailRedirectCheck() override;
50 50
51 void start(); 51 void start();
52 void cleanup(); 52 void dispose();
53 53
54 private: 54 private:
55 Loader(ExecutionContext*, FetchManager*, PassRefPtrWillBeRawPtr<ScriptPromis eResolver>, const FetchRequestData*); 55 Loader(ExecutionContext*, FetchManager*, PassRefPtrWillBeRawPtr<ScriptPromis eResolver>, const FetchRequestData*);
56 56
57 void performBasicFetch(); 57 void performBasicFetch();
58 void performNetworkError(const String& message); 58 void performNetworkError(const String& message);
59 void performHTTPFetch(bool corsFlag, bool corsPreflightFlag); 59 void performHTTPFetch(bool corsFlag, bool corsPreflightFlag);
60 void failed(const String& message); 60 void failed(const String& message);
61 void notifyFinished(); 61 void notifyFinished();
62 62
63 RawPtrWillBeMember<FetchManager> m_fetchManager; 63 RawPtrWillBeMember<FetchManager> m_fetchManager;
64 RefPtrWillBeMember<ScriptPromiseResolver> m_resolver; 64 RefPtrWillBeMember<ScriptPromiseResolver> m_resolver;
65 PersistentWillBeMember<FetchRequestData> m_request; 65 PersistentWillBeMember<FetchRequestData> m_request;
66 PersistentWillBeMember<BodyStreamBuffer> m_responseBuffer; 66 PersistentWillBeMember<BodyStreamBuffer> m_responseBuffer;
67 RefPtr<ThreadableLoader> m_loader; 67 RefPtr<ThreadableLoader> m_loader;
68 bool m_failed; 68 bool m_failed;
69 }; 69 };
70 70
71 FetchManager::Loader::Loader(ExecutionContext* executionContext, FetchManager* f etchManager, PassRefPtrWillBeRawPtr<ScriptPromiseResolver> resolver, const Fetch RequestData* request) 71 FetchManager::Loader::Loader(ExecutionContext* executionContext, FetchManager* f etchManager, PassRefPtrWillBeRawPtr<ScriptPromiseResolver> resolver, const Fetch RequestData* request)
72 : ContextLifecycleObserver(executionContext) 72 : ContextLifecycleObserver(executionContext)
73 , m_fetchManager(fetchManager) 73 , m_fetchManager(fetchManager)
74 , m_resolver(resolver) 74 , m_resolver(resolver)
75 , m_request(request->createCopy()) 75 , m_request(request->createCopy())
76 , m_failed(false) 76 , m_failed(false)
77 { 77 {
78 } 78 }
79 79
80 FetchManager::Loader::~Loader() 80 FetchManager::Loader::~Loader()
81 { 81 {
82 if (m_loader) 82 ASSERT(!m_loader);
83 m_loader->cancel();
84 } 83 }
85 84
86 void FetchManager::Loader::trace(Visitor* visitor) 85 void FetchManager::Loader::trace(Visitor* visitor)
87 { 86 {
88 visitor->trace(m_fetchManager); 87 visitor->trace(m_fetchManager);
89 visitor->trace(m_resolver); 88 visitor->trace(m_resolver);
90 visitor->trace(m_request); 89 visitor->trace(m_request);
91 visitor->trace(m_responseBuffer); 90 visitor->trace(m_responseBuffer);
92 ContextLifecycleObserver::trace(visitor); 91 ContextLifecycleObserver::trace(visitor);
93 } 92 }
(...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after
249 } 248 }
250 249
251 // "- Otherwise 250 // "- Otherwise
252 // Set |request|'s response tainting to |CORS|." 251 // Set |request|'s response tainting to |CORS|."
253 m_request->setResponseTainting(FetchRequestData::CORSTainting); 252 m_request->setResponseTainting(FetchRequestData::CORSTainting);
254 // "The result of performing an HTTP fetch using |request| with the 253 // "The result of performing an HTTP fetch using |request| with the
255 // |CORS flag| set." 254 // |CORS flag| set."
256 performHTTPFetch(true, false); 255 performHTTPFetch(true, false);
257 } 256 }
258 257
259 void FetchManager::Loader::cleanup() 258 void FetchManager::Loader::dispose()
260 { 259 {
261 // Prevent notification 260 // Prevent notification
262 m_fetchManager = 0; 261 m_fetchManager = nullptr;
263
264 if (m_loader) { 262 if (m_loader) {
265 m_loader->cancel(); 263 m_loader->cancel();
266 m_loader.clear(); 264 m_loader.clear();
267 } 265 }
268 } 266 }
269 267
270 void FetchManager::Loader::performBasicFetch() 268 void FetchManager::Loader::performBasicFetch()
271 { 269 {
272 // "To perform a basic fetch using |request|, switch on |request|'s url's 270 // "To perform a basic fetch using |request|, switch on |request|'s url's
273 // scheme, and run the associated steps:" 271 // scheme, and run the associated steps:"
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after
407 OwnPtrWillBeRawPtr<Loader> ownLoader = Loader::create(m_executionContext, th is, resolver.release(), request); 405 OwnPtrWillBeRawPtr<Loader> ownLoader = Loader::create(m_executionContext, th is, resolver.release(), request);
408 Loader* loader = m_loaders.add(ownLoader.release()).storedValue->get(); 406 Loader* loader = m_loaders.add(ownLoader.release()).storedValue->get();
409 loader->start(); 407 loader->start();
410 return promise; 408 return promise;
411 } 409 }
412 410
413 void FetchManager::stop() 411 void FetchManager::stop()
414 { 412 {
415 ASSERT(!m_isStopped); 413 ASSERT(!m_isStopped);
416 m_isStopped = true; 414 m_isStopped = true;
417 for (auto& loader : m_loaders) { 415 for (auto& loader : m_loaders)
418 loader->cleanup(); 416 loader->dispose();
419 }
420 } 417 }
421 418
422 void FetchManager::onLoaderFinished(Loader* loader) 419 void FetchManager::onLoaderFinished(Loader* loader)
423 { 420 {
424 // We don't use remove here, because it may cause recursive deletion. 421 // We don't use remove here, because it may cause recursive deletion.
425 OwnPtrWillBeRawPtr<Loader> p = m_loaders.take(loader); 422 OwnPtrWillBeRawPtr<Loader> p = m_loaders.take(loader);
426 ALLOW_UNUSED_LOCAL(p); 423 ASSERT(p);
424 p->dispose();
427 } 425 }
428 426
429 void FetchManager::trace(Visitor* visitor) 427 void FetchManager::trace(Visitor* visitor)
430 { 428 {
431 #if ENABLE(OILPAN) 429 #if ENABLE(OILPAN)
432 visitor->trace(m_executionContext); 430 visitor->trace(m_executionContext);
433 visitor->trace(m_loaders); 431 visitor->trace(m_loaders);
434 #endif 432 #endif
435 } 433 }
436 434
437 } // namespace blink 435 } // namespace blink
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698