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

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

Issue 1178043004: [3b] Load data via WebDataConsumerHandle in FetchManager::Loader (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Rebase. Created 5 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/modules/fetch/FetchManager.cpp
diff --git a/Source/modules/fetch/FetchManager.cpp b/Source/modules/fetch/FetchManager.cpp
index 3eb65789bff34f79437c23c031f48f6fd34ba8cb..05776540befede054c7932bcbef1765372ce3a2f 100644
--- a/Source/modules/fetch/FetchManager.cpp
+++ b/Source/modules/fetch/FetchManager.cpp
@@ -43,7 +43,6 @@ public:
DECLARE_VIRTUAL_TRACE();
void didReceiveResponse(unsigned long, const ResourceResponse&, PassOwnPtr<WebDataConsumerHandle>) override;
- void didReceiveData(const char*, unsigned) override;
void didFinishLoading(unsigned long, double) override;
void didFail(const ResourceError&) override;
void didFailAccessControlCheck(const ResourceError&) override;
@@ -54,33 +53,6 @@ public:
void dispose();
private:
- class Canceller : public BodyStreamBuffer::Canceller {
- public:
- explicit Canceller(Loader* loader) : m_loader(loader) { }
- void cancel() override
- {
- if (m_loader)
- m_loader->cancel();
- }
-
-#if !ENABLE(OILPAN)
- // FIXME: This function should go away once Oilpan is shipped.
- void disconnect() { m_loader = nullptr; }
-#endif
-
- DEFINE_INLINE_VIRTUAL_TRACE()
- {
- visitor->trace(m_loader);
- BodyStreamBuffer::Canceller::trace(visitor);
- }
-
- private:
- // |m_loader| is a raw ptr in non-oilpan circumstance to avoid
- // circular reference. It will be cleared when the loader is destructed.
- RawPtrWillBeMember<Loader> m_loader;
- };
-
-
Loader(ExecutionContext*, FetchManager*, PassRefPtrWillBeRawPtr<ScriptPromiseResolver>, FetchRequestData*);
void performBasicFetch();
@@ -92,11 +64,7 @@ private:
RawPtrWillBeMember<FetchManager> m_fetchManager;
RefPtrWillBeMember<ScriptPromiseResolver> m_resolver;
PersistentWillBeMember<FetchRequestData> m_request;
- PersistentWillBeMember<BodyStreamBuffer> m_responseBuffer;
RefPtr<ThreadableLoader> m_loader;
- // Hold as a member in order to call |disconnect|. This member can be
- // eliminated once Oilpan is shipped.
- PersistentWillBeMember<Canceller> m_canceller;
bool m_failed;
bool m_finished;
};
@@ -106,7 +74,6 @@ FetchManager::Loader::Loader(ExecutionContext* executionContext, FetchManager* f
, m_fetchManager(fetchManager)
, m_resolver(resolver)
, m_request(request)
- , m_canceller(new Canceller(this))
, m_failed(false)
, m_finished(false)
{
@@ -115,10 +82,6 @@ FetchManager::Loader::Loader(ExecutionContext* executionContext, FetchManager* f
FetchManager::Loader::~Loader()
{
ASSERT(!m_loader);
-#if !ENABLE(OILPAN)
- // FIXME: This should go away once Oilpan is shipped.
- m_canceller->disconnect();
-#endif
}
DEFINE_TRACE(FetchManager::Loader)
@@ -126,15 +89,12 @@ DEFINE_TRACE(FetchManager::Loader)
visitor->trace(m_fetchManager);
visitor->trace(m_resolver);
visitor->trace(m_request);
- visitor->trace(m_responseBuffer);
- visitor->trace(m_canceller);
ContextLifecycleObserver::trace(visitor);
}
void FetchManager::Loader::didReceiveResponse(unsigned long, const ResourceResponse& response, PassOwnPtr<WebDataConsumerHandle> handle)
{
- // FIXME: Use |handle|.
- ASSERT_UNUSED(handle, !handle);
+ ASSERT(handle);
// Recompute the tainting if the request was redirected to a different
// origin.
if (!SecurityOrigin::create(response.url())->isSameSchemeHostPort(m_request->origin().get())) {
@@ -151,8 +111,7 @@ void FetchManager::Loader::didReceiveResponse(unsigned long, const ResourceRespo
break;
}
}
- m_responseBuffer = new BodyStreamBuffer(m_canceller);
- FetchResponseData* responseData = FetchResponseData::createWithBuffer(m_responseBuffer);
+ FetchResponseData* responseData = FetchResponseData::createWithBuffer(BodyStreamBuffer::create(handle, "Failed to fetch"));
responseData->setStatus(response.httpStatusCode());
responseData->setStatusMessage(response.httpStatusText());
for (auto& it : response.httpHeaderFields())
@@ -178,17 +137,9 @@ void FetchManager::Loader::didReceiveResponse(unsigned long, const ResourceRespo
m_resolver.clear();
}
-void FetchManager::Loader::didReceiveData(const char* data, unsigned size)
-{
- m_responseBuffer->write(DOMArrayBuffer::create(data, size));
-}
-
void FetchManager::Loader::didFinishLoading(unsigned long, double)
{
- ASSERT(m_responseBuffer);
ASSERT(!m_failed);
- m_responseBuffer->close();
- m_responseBuffer.clear();
m_finished = true;
notifyFinished();
}
@@ -312,10 +263,6 @@ void FetchManager::Loader::cancel()
m_loader->cancel();
m_loader.clear();
}
- if (m_responseBuffer) {
- m_responseBuffer->close();
- m_responseBuffer.clear();
- }
if (m_resolver) {
// Note: In the current implementation this branch is never taken
// because this function can be called only through the body stream.
@@ -382,6 +329,8 @@ void FetchManager::Loader::performHTTPFetch(bool corsFlag, bool corsPreflightFla
}
}
+ request.setUseStreamOnResponse(true);
+
// "2. Append `Referer`/empty byte sequence, if |HTTPRequest|'s |referrer|
// is none, and `Referer`/|HTTPRequest|'s referrer, serialized and utf-8
// encoded, otherwise, to HTTPRequest's header list.
@@ -438,10 +387,7 @@ void FetchManager::Loader::failed(const String& message)
m_failed = true;
if (!message.isEmpty())
executionContext()->addConsoleMessage(ConsoleMessage::create(JSMessageSource, ErrorMessageLevel, message));
- if (m_responseBuffer) {
- m_responseBuffer->error(DOMException::create(NetworkError, "Failed to fetch"));
- m_responseBuffer.clear();
- } else if (m_resolver) {
+ if (m_resolver) {
if (!m_resolver->executionContext() || m_resolver->executionContext()->activeDOMObjectsAreStopped())
return;
ScriptState* state = m_resolver->scriptState();
« 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