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

Unified Diff: third_party/WebKit/Source/modules/fetch/FetchManager.cpp

Issue 1749633002: Remove StopDetector (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 10 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 side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/modules/fetch/FetchManager.cpp
diff --git a/third_party/WebKit/Source/modules/fetch/FetchManager.cpp b/third_party/WebKit/Source/modules/fetch/FetchManager.cpp
index dbcfb6467b140295436c4e40d363eaabffd2a1b7..2f305ec4300676e54384da5c257e69ba33c80d42 100644
--- a/third_party/WebKit/Source/modules/fetch/FetchManager.cpp
+++ b/third_party/WebKit/Source/modules/fetch/FetchManager.cpp
@@ -53,8 +53,8 @@ bool IsRedirectStatusCode(int statusCode)
} // namespace
-class FetchManager::Loader final : public GarbageCollectedFinalized<FetchManager::Loader>, public ThreadableLoaderClient, public ContextLifecycleObserver {
- WILL_BE_USING_GARBAGE_COLLECTED_MIXIN(FetchManager::Loader);
+class FetchManager::Loader final : public GarbageCollectedFinalized<FetchManager::Loader>, public ThreadableLoaderClient {
+ USING_PRE_FINALIZER(FetchManager::Loader, dispose);
public:
static Loader* create(ExecutionContext* executionContext, FetchManager* fetchManager, ScriptPromiseResolver* resolver, FetchRequestData* request, bool isIsolatedWorld)
{
@@ -74,6 +74,8 @@ public:
void dispose();
class SRIVerifier final : public GarbageCollectedFinalized<SRIVerifier>, public WebDataConsumerHandle::Client {
+ // Promptly clear m_handle and m_reader.
+ EAGERLY_FINALIZE();
public:
// SRIVerifier takes ownership of |handle| and |response|.
// |updater| must be garbage collected. The other arguments
@@ -172,11 +174,11 @@ private:
Member<SRIVerifier> m_integrityVerifier;
bool m_didFinishLoading;
bool m_isIsolatedWorld;
+ RawPtrWillBeMember<ExecutionContext> m_executionContext;
};
FetchManager::Loader::Loader(ExecutionContext* executionContext, FetchManager* fetchManager, ScriptPromiseResolver* resolver, FetchRequestData* request, bool isIsolatedWorld)
- : ContextLifecycleObserver(executionContext)
- , m_fetchManager(fetchManager)
+ : m_fetchManager(fetchManager)
, m_resolver(resolver)
, m_request(request)
, m_failed(false)
@@ -185,7 +187,9 @@ FetchManager::Loader::Loader(ExecutionContext* executionContext, FetchManager* f
, m_integrityVerifier(nullptr)
, m_didFinishLoading(false)
, m_isIsolatedWorld(isIsolatedWorld)
+ , m_executionContext(executionContext)
{
+ ThreadState::current()->registerPreFinalizer(this);
}
FetchManager::Loader::~Loader()
@@ -199,7 +203,7 @@ DEFINE_TRACE(FetchManager::Loader)
visitor->trace(m_resolver);
visitor->trace(m_request);
visitor->trace(m_integrityVerifier);
- ContextLifecycleObserver::trace(visitor);
+ visitor->trace(m_executionContext);
}
void FetchManager::Loader::didReceiveResponse(unsigned long, const ResourceResponse& response, PassOwnPtr<WebDataConsumerHandle> handle)
@@ -368,8 +372,8 @@ void FetchManager::Loader::didFailRedirectCheck()
Document* FetchManager::Loader::document() const
{
- if (executionContext()->isDocument()) {
- return toDocument(executionContext());
+ if (m_executionContext->isDocument()) {
+ return toDocument(m_executionContext);
}
return nullptr;
}
@@ -384,7 +388,7 @@ void FetchManager::Loader::loadSucceeded()
&& m_responseHttpStatusCode >= 200 && m_responseHttpStatusCode < 300) {
document()->frame()->page()->chromeClient().ajaxSucceeded(document()->frame());
}
- InspectorInstrumentation::didFinishFetch(executionContext(), this, m_request->method(), m_request->url().string());
+ InspectorInstrumentation::didFinishFetch(m_executionContext, this, m_request->method(), m_request->url().string());
notifyFinished();
}
@@ -412,7 +416,7 @@ void FetchManager::Loader::start()
// "- should fetching |request| be blocked as content security returns
// blocked"
- if (!ContentSecurityPolicy::shouldBypassMainWorld(executionContext()) && !executionContext()->contentSecurityPolicy()->allowConnectToSource(m_request->url())) {
+ if (!ContentSecurityPolicy::shouldBypassMainWorld(m_executionContext) && !m_executionContext->contentSecurityPolicy()->allowConnectToSource(m_request->url())) {
// "A network error."
performNetworkError("Refused to connect to '" + m_request->url().elidedString() + "' because it violates the document's Content Security Policy.");
return;
@@ -491,6 +495,7 @@ void FetchManager::Loader::dispose()
m_loader->cancel();
m_loader.clear();
}
+ m_executionContext = nullptr;
}
void FetchManager::Loader::performBasicFetch()
@@ -539,7 +544,7 @@ void FetchManager::Loader::performHTTPFetch(bool corsFlag, bool corsPreflightFla
}
request.setFetchRedirectMode(m_request->redirect());
request.setUseStreamOnResponse(true);
- request.setExternalRequestStateFromRequestorAddressSpace(executionContext()->securityContext().addressSpace());
+ request.setExternalRequestStateFromRequestorAddressSpace(m_executionContext->securityContext().addressSpace());
// "2. Append `Referer`/empty byte sequence, if |HTTPRequest|'s |referrer|
// is none, and `Referer`/|HTTPRequest|'s referrer, serialized and utf-8
@@ -550,14 +555,14 @@ void FetchManager::Loader::performHTTPFetch(bool corsFlag, bool corsPreflightFla
ASSERT(m_request->getReferrerPolicy() == ReferrerPolicyDefault);
// Request's referrer policy is always default, so use the client's one.
// TODO(yhirano): Fix here when we introduce requet's referrer policy.
- ReferrerPolicy policy = executionContext()->getReferrerPolicy();
+ ReferrerPolicy policy = m_executionContext->getReferrerPolicy();
if (m_request->referrerString() == FetchRequestData::clientReferrerString()) {
String referrerURL;
- if (executionContext()->isDocument()) {
- Document* document = toDocument(executionContext());
+ if (m_executionContext->isDocument()) {
+ Document* document = toDocument(m_executionContext);
referrerURL = document->outgoingReferrer();
- } else if (executionContext()->isWorkerGlobalScope()) {
- referrerURL = executionContext()->url().strippedForUseAsReferrer();
+ } else if (m_executionContext->isWorkerGlobalScope()) {
+ referrerURL = m_executionContext->url().strippedForUseAsReferrer();
}
request.setHTTPReferrer(SecurityPolicy::generateReferrer(policy, m_request->url(), referrerURL));
} else {
@@ -590,7 +595,7 @@ void FetchManager::Loader::performHTTPFetch(bool corsFlag, bool corsPreflightFla
resourceLoaderOptions.securityOrigin = m_request->origin().get();
ThreadableLoaderOptions threadableLoaderOptions;
- threadableLoaderOptions.contentSecurityPolicyEnforcement = ContentSecurityPolicy::shouldBypassMainWorld(executionContext()) ? DoNotEnforceContentSecurityPolicy : EnforceContentSecurityPolicy;
+ threadableLoaderOptions.contentSecurityPolicyEnforcement = ContentSecurityPolicy::shouldBypassMainWorld(m_executionContext) ? DoNotEnforceContentSecurityPolicy : EnforceContentSecurityPolicy;
if (corsPreflightFlag)
threadableLoaderOptions.preflightPolicy = ForcePreflight;
switch (m_request->mode()) {
@@ -610,8 +615,8 @@ void FetchManager::Loader::performHTTPFetch(bool corsFlag, bool corsPreflightFla
threadableLoaderOptions.crossOriginRequestPolicy = DenyCrossOriginRequests;
break;
}
- InspectorInstrumentation::willStartFetch(executionContext(), this);
- m_loader = ThreadableLoader::create(*executionContext(), this, threadableLoaderOptions, resourceLoaderOptions);
+ InspectorInstrumentation::willStartFetch(m_executionContext, this);
+ m_loader = ThreadableLoader::create(*m_executionContext, this, threadableLoaderOptions, resourceLoaderOptions);
m_loader->start(request);
}
@@ -642,11 +647,11 @@ void FetchManager::Loader::performDataFetch()
resourceLoaderOptions.securityOrigin = m_request->origin().get();
ThreadableLoaderOptions threadableLoaderOptions;
- threadableLoaderOptions.contentSecurityPolicyEnforcement = ContentSecurityPolicy::shouldBypassMainWorld(executionContext()) ? DoNotEnforceContentSecurityPolicy : EnforceContentSecurityPolicy;
+ threadableLoaderOptions.contentSecurityPolicyEnforcement = ContentSecurityPolicy::shouldBypassMainWorld(m_executionContext) ? DoNotEnforceContentSecurityPolicy : EnforceContentSecurityPolicy;
threadableLoaderOptions.crossOriginRequestPolicy = AllowCrossOriginRequests;
- InspectorInstrumentation::willStartFetch(executionContext(), this);
- m_loader = ThreadableLoader::create(*executionContext(), this, threadableLoaderOptions, resourceLoaderOptions);
+ InspectorInstrumentation::willStartFetch(m_executionContext, this);
+ m_loader = ThreadableLoader::create(*m_executionContext, this, threadableLoaderOptions, resourceLoaderOptions);
m_loader->start(request);
}
@@ -656,7 +661,7 @@ void FetchManager::Loader::failed(const String& message)
return;
m_failed = true;
if (!message.isEmpty())
- executionContext()->addConsoleMessage(ConsoleMessage::create(JSMessageSource, ErrorMessageLevel, message));
+ m_executionContext->addConsoleMessage(ConsoleMessage::create(JSMessageSource, ErrorMessageLevel, message));
if (m_resolver) {
if (!m_resolver->executionContext() || m_resolver->executionContext()->activeDOMObjectsAreStopped())
return;
@@ -664,7 +669,7 @@ void FetchManager::Loader::failed(const String& message)
ScriptState::Scope scope(state);
m_resolver->reject(V8ThrowException::createTypeError(state->isolate(), "Failed to fetch"));
}
- InspectorInstrumentation::didFailFetch(executionContext(), this);
+ InspectorInstrumentation::didFailFetch(m_executionContext, this);
notifyFinished();
}
@@ -674,18 +679,19 @@ void FetchManager::Loader::notifyFinished()
m_fetchManager->onLoaderFinished(this);
}
+FetchManager* FetchManager::create(ExecutionContext* executionContext)
+{
+ return new FetchManager(executionContext);
+}
+
FetchManager::FetchManager(ExecutionContext* executionContext)
- : m_executionContext(executionContext)
+ : ContextLifecycleObserver(executionContext)
, m_isStopped(false)
{
}
FetchManager::~FetchManager()
{
-#if !ENABLE(OILPAN)
- if (!m_isStopped)
- stop();
-#endif
}
ScriptPromise FetchManager::fetch(ScriptState* scriptState, FetchRequestData* request)
@@ -695,13 +701,13 @@ ScriptPromise FetchManager::fetch(ScriptState* scriptState, FetchRequestData* re
request->setContext(WebURLRequest::RequestContextFetch);
- Loader* loader = Loader::create(m_executionContext, this, resolver, request, scriptState->world().isIsolatedWorld());
+ Loader* loader = Loader::create(executionContext(), this, resolver, request, scriptState->world().isIsolatedWorld());
m_loaders.add(loader);
loader->start();
return promise;
}
-void FetchManager::stop()
+void FetchManager::contextDestroyed()
{
ASSERT(!m_isStopped);
m_isStopped = true;
@@ -717,8 +723,8 @@ void FetchManager::onLoaderFinished(Loader* loader)
DEFINE_TRACE(FetchManager)
{
- visitor->trace(m_executionContext);
visitor->trace(m_loaders);
+ ContextLifecycleObserver::trace(visitor);
}
} // namespace blink
« no previous file with comments | « third_party/WebKit/Source/modules/fetch/FetchManager.h ('k') | third_party/WebKit/Source/modules/fetch/GlobalFetch.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698