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

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

Issue 1390943003: Bypass ServiceWorker when the request originates from isolated world. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Check isIsolatedWorld and set skipServiceWorker. Created 5 years, 1 month 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 | « third_party/WebKit/Source/core/xmlhttprequest/XMLHttpRequest.cpp ('k') | 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 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
49 bool IsRedirectStatusCode(int statusCode) 49 bool IsRedirectStatusCode(int statusCode)
50 { 50 {
51 return (statusCode == 301 || statusCode == 302 || statusCode == 303 || statu sCode == 307 || statusCode == 308); 51 return (statusCode == 301 || statusCode == 302 || statusCode == 303 || statu sCode == 307 || statusCode == 308);
52 } 52 }
53 53
54 } // namespace 54 } // namespace
55 55
56 class FetchManager::Loader final : public GarbageCollectedFinalized<FetchManager ::Loader>, public ThreadableLoaderClient, public ContextLifecycleObserver { 56 class FetchManager::Loader final : public GarbageCollectedFinalized<FetchManager ::Loader>, public ThreadableLoaderClient, public ContextLifecycleObserver {
57 WILL_BE_USING_GARBAGE_COLLECTED_MIXIN(FetchManager::Loader); 57 WILL_BE_USING_GARBAGE_COLLECTED_MIXIN(FetchManager::Loader);
58 public: 58 public:
59 static Loader* create(ExecutionContext* executionContext, FetchManager* fetc hManager, ScriptPromiseResolver* resolver, FetchRequestData* request) 59 static Loader* create(ExecutionContext* executionContext, FetchManager* fetc hManager, ScriptPromiseResolver* resolver, FetchRequestData* request, bool isIso latedWorld)
60 { 60 {
61 return new Loader(executionContext, fetchManager, resolver, request); 61 return new Loader(executionContext, fetchManager, resolver, request, isI solatedWorld);
62 } 62 }
63 63
64 ~Loader() override; 64 ~Loader() override;
65 DECLARE_VIRTUAL_TRACE(); 65 DECLARE_VIRTUAL_TRACE();
66 66
67 void didReceiveResponse(unsigned long, const ResourceResponse&, PassOwnPtr<W ebDataConsumerHandle>) override; 67 void didReceiveResponse(unsigned long, const ResourceResponse&, PassOwnPtr<W ebDataConsumerHandle>) override;
68 void didFinishLoading(unsigned long, double) override; 68 void didFinishLoading(unsigned long, double) override;
69 void didFail(const ResourceError&) override; 69 void didFail(const ResourceError&) override;
70 void didFailAccessControlCheck(const ResourceError&) override; 70 void didFailAccessControlCheck(const ResourceError&) override;
71 void didFailRedirectCheck() override; 71 void didFailRedirectCheck() override;
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
144 Member<Response> m_response; 144 Member<Response> m_response;
145 Member<FetchManager::Loader> m_loader; 145 Member<FetchManager::Loader> m_loader;
146 String m_integrityMetadata; 146 String m_integrityMetadata;
147 KURL m_url; 147 KURL m_url;
148 OwnPtr<WebDataConsumerHandle::Reader> m_reader; 148 OwnPtr<WebDataConsumerHandle::Reader> m_reader;
149 Vector<char> m_buffer; 149 Vector<char> m_buffer;
150 bool m_finished; 150 bool m_finished;
151 }; 151 };
152 152
153 private: 153 private:
154 Loader(ExecutionContext*, FetchManager*, ScriptPromiseResolver*, FetchReques tData*); 154 Loader(ExecutionContext*, FetchManager*, ScriptPromiseResolver*, FetchReques tData*, bool isIsolatedWorld);
155 155
156 void performBasicFetch(); 156 void performBasicFetch();
157 void performNetworkError(const String& message); 157 void performNetworkError(const String& message);
158 void performHTTPFetch(bool corsFlag, bool corsPreflightFlag); 158 void performHTTPFetch(bool corsFlag, bool corsPreflightFlag);
159 void performDataFetch(); 159 void performDataFetch();
160 void failed(const String& message); 160 void failed(const String& message);
161 void notifyFinished(); 161 void notifyFinished();
162 Document* document() const; 162 Document* document() const;
163 void loadSucceeded(); 163 void loadSucceeded();
164 164
165 Member<FetchManager> m_fetchManager; 165 Member<FetchManager> m_fetchManager;
166 Member<ScriptPromiseResolver> m_resolver; 166 Member<ScriptPromiseResolver> m_resolver;
167 Member<FetchRequestData> m_request; 167 Member<FetchRequestData> m_request;
168 RefPtr<ThreadableLoader> m_loader; 168 RefPtr<ThreadableLoader> m_loader;
169 bool m_failed; 169 bool m_failed;
170 bool m_finished; 170 bool m_finished;
171 int m_responseHttpStatusCode; 171 int m_responseHttpStatusCode;
172 Member<SRIVerifier> m_integrityVerifier; 172 Member<SRIVerifier> m_integrityVerifier;
173 bool m_didFinishLoading; 173 bool m_didFinishLoading;
174 bool m_isIsolatedWorld;
174 }; 175 };
175 176
176 FetchManager::Loader::Loader(ExecutionContext* executionContext, FetchManager* f etchManager, ScriptPromiseResolver* resolver, FetchRequestData* request) 177 FetchManager::Loader::Loader(ExecutionContext* executionContext, FetchManager* f etchManager, ScriptPromiseResolver* resolver, FetchRequestData* request, bool is IsolatedWorld)
177 : ContextLifecycleObserver(executionContext) 178 : ContextLifecycleObserver(executionContext)
178 , m_fetchManager(fetchManager) 179 , m_fetchManager(fetchManager)
179 , m_resolver(resolver) 180 , m_resolver(resolver)
180 , m_request(request) 181 , m_request(request)
181 , m_failed(false) 182 , m_failed(false)
182 , m_finished(false) 183 , m_finished(false)
183 , m_responseHttpStatusCode(0) 184 , m_responseHttpStatusCode(0)
184 , m_integrityVerifier(nullptr) 185 , m_integrityVerifier(nullptr)
185 , m_didFinishLoading(false) 186 , m_didFinishLoading(false)
187 , m_isIsolatedWorld(isIsolatedWorld)
186 { 188 {
187 } 189 }
188 190
189 FetchManager::Loader::~Loader() 191 FetchManager::Loader::~Loader()
190 { 192 {
191 ASSERT(!m_loader); 193 ASSERT(!m_loader);
192 } 194 }
193 195
194 DEFINE_TRACE(FetchManager::Loader) 196 DEFINE_TRACE(FetchManager::Loader)
195 { 197 {
(...skipping 352 matching lines...) Expand 10 before | Expand all | Expand 10 after
548 referrerURL = document->outgoingReferrer(); 550 referrerURL = document->outgoingReferrer();
549 } else if (executionContext()->isWorkerGlobalScope()) { 551 } else if (executionContext()->isWorkerGlobalScope()) {
550 referrerURL = executionContext()->url().strippedForUseAsReferrer(); 552 referrerURL = executionContext()->url().strippedForUseAsReferrer();
551 } 553 }
552 request.setHTTPReferrer(SecurityPolicy::generateReferrer(policy, m_reque st->url(), referrerURL)); 554 request.setHTTPReferrer(SecurityPolicy::generateReferrer(policy, m_reque st->url(), referrerURL));
553 } else { 555 } else {
554 // Note that generateReferrer generates |no-referrer| from |no-referrer| 556 // Note that generateReferrer generates |no-referrer| from |no-referrer|
555 // referrer string (i.e. String()). 557 // referrer string (i.e. String()).
556 request.setHTTPReferrer(SecurityPolicy::generateReferrer(policy, m_reque st->url(), m_request->referrerString())); 558 request.setHTTPReferrer(SecurityPolicy::generateReferrer(policy, m_reque st->url(), m_request->referrerString()));
557 } 559 }
560 request.setSkipServiceWorker(m_isIsolatedWorld);
Mike West 2015/11/05 08:27:27 Doesn't this override the setting in cases where w
horo 2015/11/05 08:47:10 No. DocumentThreadableLoader calls createAccessCon
558 561
559 // "3. Append `Host`, ..." 562 // "3. Append `Host`, ..."
560 // FIXME: Implement this when the spec is fixed. 563 // FIXME: Implement this when the spec is fixed.
561 564
562 // "4.If |HTTPRequest|'s force Origin header flag is set, append `Origin`/ 565 // "4.If |HTTPRequest|'s force Origin header flag is set, append `Origin`/
563 // |HTTPRequest|'s origin, serialized and utf-8 encoded, to |HTTPRequest|'s 566 // |HTTPRequest|'s origin, serialized and utf-8 encoded, to |HTTPRequest|'s
564 // header list." 567 // header list."
565 // We set Origin header in updateRequestForAccessControl() called from 568 // We set Origin header in updateRequestForAccessControl() called from
566 // DocumentThreadableLoader::makeCrossOriginAccessRequest 569 // DocumentThreadableLoader::makeCrossOriginAccessRequest
567 570
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after
673 #endif 676 #endif
674 } 677 }
675 678
676 ScriptPromise FetchManager::fetch(ScriptState* scriptState, FetchRequestData* re quest) 679 ScriptPromise FetchManager::fetch(ScriptState* scriptState, FetchRequestData* re quest)
677 { 680 {
678 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState) ; 681 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState) ;
679 ScriptPromise promise = resolver->promise(); 682 ScriptPromise promise = resolver->promise();
680 683
681 request->setContext(WebURLRequest::RequestContextFetch); 684 request->setContext(WebURLRequest::RequestContextFetch);
682 685
683 Loader* loader = Loader::create(m_executionContext, this, resolver, request) ; 686 Loader* loader = Loader::create(m_executionContext, this, resolver, request, scriptState->world().isIsolatedWorld());
684 m_loaders.add(loader); 687 m_loaders.add(loader);
685 loader->start(); 688 loader->start();
686 return promise; 689 return promise;
687 } 690 }
688 691
689 void FetchManager::stop() 692 void FetchManager::stop()
690 { 693 {
691 ASSERT(!m_isStopped); 694 ASSERT(!m_isStopped);
692 m_isStopped = true; 695 m_isStopped = true;
693 for (auto& loader : m_loaders) 696 for (auto& loader : m_loaders)
694 loader->dispose(); 697 loader->dispose();
695 } 698 }
696 699
697 void FetchManager::onLoaderFinished(Loader* loader) 700 void FetchManager::onLoaderFinished(Loader* loader)
698 { 701 {
699 m_loaders.remove(loader); 702 m_loaders.remove(loader);
700 loader->dispose(); 703 loader->dispose();
701 } 704 }
702 705
703 DEFINE_TRACE(FetchManager) 706 DEFINE_TRACE(FetchManager)
704 { 707 {
705 visitor->trace(m_executionContext); 708 visitor->trace(m_executionContext);
706 visitor->trace(m_loaders); 709 visitor->trace(m_loaders);
707 } 710 }
708 711
709 } // namespace blink 712 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/xmlhttprequest/XMLHttpRequest.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698