OLD | NEW |
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 321 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
332 break; | 332 break; |
333 case FetchRequestData::CORSTainting: | 333 case FetchRequestData::CORSTainting: |
334 taintedResponse = responseData->createCORSFilteredResponse(); | 334 taintedResponse = responseData->createCORSFilteredResponse(); |
335 break; | 335 break; |
336 case FetchRequestData::OpaqueTainting: | 336 case FetchRequestData::OpaqueTainting: |
337 taintedResponse = responseData->createOpaqueFilteredResponse(); | 337 taintedResponse = responseData->createOpaqueFilteredResponse(); |
338 break; | 338 break; |
339 } | 339 } |
340 } | 340 } |
341 | 341 |
342 Response* r = Response::create(m_resolver->executionContext(), taintedRespon
se); | 342 Response* r = Response::create(m_resolver->getExecutionContext(), taintedRes
ponse); |
343 if (response.url().protocolIsData()) { | 343 if (response.url().protocolIsData()) { |
344 // An "Access-Control-Allow-Origin" header is added for data: URLs | 344 // An "Access-Control-Allow-Origin" header is added for data: URLs |
345 // but no headers except for "Content-Type" should exist, | 345 // but no headers except for "Content-Type" should exist, |
346 // according to the spec: | 346 // according to the spec: |
347 // https://fetch.spec.whatwg.org/#concept-basic-fetch | 347 // https://fetch.spec.whatwg.org/#concept-basic-fetch |
348 // "... return a response whose header list consist of a single header | 348 // "... return a response whose header list consist of a single header |
349 // whose name is `Content-Type` and value is the MIME type and | 349 // whose name is `Content-Type` and value is the MIME type and |
350 // parameters returned from obtaining a resource" | 350 // parameters returned from obtaining a resource" |
351 r->headers()->headerList()->remove(HTTPNames::Access_Control_Allow_Origi
n); | 351 r->headers()->headerList()->remove(HTTPNames::Access_Control_Allow_Origi
n); |
352 } | 352 } |
(...skipping 329 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
682 } | 682 } |
683 | 683 |
684 void FetchManager::Loader::failed(const String& message) | 684 void FetchManager::Loader::failed(const String& message) |
685 { | 685 { |
686 if (m_failed || m_finished) | 686 if (m_failed || m_finished) |
687 return; | 687 return; |
688 m_failed = true; | 688 m_failed = true; |
689 if (!message.isEmpty()) | 689 if (!message.isEmpty()) |
690 m_executionContext->addConsoleMessage(ConsoleMessage::create(JSMessageSo
urce, ErrorMessageLevel, message)); | 690 m_executionContext->addConsoleMessage(ConsoleMessage::create(JSMessageSo
urce, ErrorMessageLevel, message)); |
691 if (m_resolver) { | 691 if (m_resolver) { |
692 if (!m_resolver->executionContext() || m_resolver->executionContext()->a
ctiveDOMObjectsAreStopped()) | 692 if (!m_resolver->getExecutionContext() || m_resolver->getExecutionContex
t()->activeDOMObjectsAreStopped()) |
693 return; | 693 return; |
694 ScriptState* state = m_resolver->scriptState(); | 694 ScriptState* state = m_resolver->getScriptState(); |
695 ScriptState::Scope scope(state); | 695 ScriptState::Scope scope(state); |
696 m_resolver->reject(V8ThrowException::createTypeError(state->isolate(), "
Failed to fetch")); | 696 m_resolver->reject(V8ThrowException::createTypeError(state->isolate(), "
Failed to fetch")); |
697 } | 697 } |
698 InspectorInstrumentation::didFailFetch(m_executionContext, this); | 698 InspectorInstrumentation::didFailFetch(m_executionContext, this); |
699 notifyFinished(); | 699 notifyFinished(); |
700 } | 700 } |
701 | 701 |
702 void FetchManager::Loader::notifyFinished() | 702 void FetchManager::Loader::notifyFinished() |
703 { | 703 { |
704 if (m_fetchManager) | 704 if (m_fetchManager) |
(...skipping 15 matching lines...) Expand all Loading... |
720 { | 720 { |
721 } | 721 } |
722 | 722 |
723 ScriptPromise FetchManager::fetch(ScriptState* scriptState, FetchRequestData* re
quest) | 723 ScriptPromise FetchManager::fetch(ScriptState* scriptState, FetchRequestData* re
quest) |
724 { | 724 { |
725 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState)
; | 725 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState)
; |
726 ScriptPromise promise = resolver->promise(); | 726 ScriptPromise promise = resolver->promise(); |
727 | 727 |
728 request->setContext(WebURLRequest::RequestContextFetch); | 728 request->setContext(WebURLRequest::RequestContextFetch); |
729 | 729 |
730 Loader* loader = Loader::create(executionContext(), this, resolver, request,
scriptState->world().isIsolatedWorld()); | 730 Loader* loader = Loader::create(getExecutionContext(), this, resolver, reque
st, scriptState->world().isIsolatedWorld()); |
731 m_loaders.add(loader); | 731 m_loaders.add(loader); |
732 loader->start(); | 732 loader->start(); |
733 return promise; | 733 return promise; |
734 } | 734 } |
735 | 735 |
736 void FetchManager::contextDestroyed() | 736 void FetchManager::contextDestroyed() |
737 { | 737 { |
738 ASSERT(!m_isStopped); | 738 ASSERT(!m_isStopped); |
739 m_isStopped = true; | 739 m_isStopped = true; |
740 for (auto& loader : m_loaders) | 740 for (auto& loader : m_loaders) |
741 loader->dispose(); | 741 loader->dispose(); |
742 } | 742 } |
743 | 743 |
744 void FetchManager::onLoaderFinished(Loader* loader) | 744 void FetchManager::onLoaderFinished(Loader* loader) |
745 { | 745 { |
746 m_loaders.remove(loader); | 746 m_loaders.remove(loader); |
747 loader->dispose(); | 747 loader->dispose(); |
748 } | 748 } |
749 | 749 |
750 DEFINE_TRACE(FetchManager) | 750 DEFINE_TRACE(FetchManager) |
751 { | 751 { |
752 visitor->trace(m_loaders); | 752 visitor->trace(m_loaders); |
753 ContextLifecycleObserver::trace(visitor); | 753 ContextLifecycleObserver::trace(visitor); |
754 } | 754 } |
755 | 755 |
756 } // namespace blink | 756 } // namespace blink |
OLD | NEW |