Index: third_party/WebKit/Source/core/loader/DocumentThreadableLoader.h |
diff --git a/third_party/WebKit/Source/core/loader/DocumentThreadableLoader.h b/third_party/WebKit/Source/core/loader/DocumentThreadableLoader.h |
index fcd9c6a34749fba2977393339cd98f32bee23273..1dabe4e26d6f27404bc366c2c24a8ec931324b4e 100644 |
--- a/third_party/WebKit/Source/core/loader/DocumentThreadableLoader.h |
+++ b/third_party/WebKit/Source/core/loader/DocumentThreadableLoader.h |
@@ -42,7 +42,6 @@ |
#include "platform/network/ResourceError.h" |
#include "platform/weborigin/Referrer.h" |
#include "wtf/Forward.h" |
-#include "wtf/WeakPtr.h" |
#include "wtf/text/WTFString.h" |
#include <memory> |
@@ -56,191 +55,191 @@ class ThreadableLoaderClient; |
class CORE_EXPORT DocumentThreadableLoader final : public ThreadableLoader, private RawResourceClient { |
USING_GARBAGE_COLLECTED_MIXIN(DocumentThreadableLoader); |
- public: |
- static void loadResourceSynchronously(Document&, const ResourceRequest&, ThreadableLoaderClient&, const ThreadableLoaderOptions&, const ResourceLoaderOptions&); |
- static DocumentThreadableLoader* create(Document&, ThreadableLoaderClient*, const ThreadableLoaderOptions&, const ResourceLoaderOptions&); |
- ~DocumentThreadableLoader() override; |
- |
- void start(const ResourceRequest&) override; |
- |
- void overrideTimeout(unsigned long timeout) override; |
- |
- // |this| may be dead after calling this method in async mode. |
- void cancel() override; |
- void setDefersLoading(bool); |
- |
- DECLARE_TRACE(); |
- |
- private: |
- enum BlockingBehavior { |
- LoadSynchronously, |
- LoadAsynchronously |
- }; |
- |
- DocumentThreadableLoader(Document&, ThreadableLoaderClient*, BlockingBehavior, const ThreadableLoaderOptions&, const ResourceLoaderOptions&); |
- |
- void clear(); |
- |
- // ResourceClient |
- // |
- // |this| may be dead after calling this method. |
- void notifyFinished(Resource*) override; |
- |
- String debugName() const override { return "DocumentThreadableLoader"; } |
- |
- // RawResourceClient |
- // |
- // |this| may be dead after calling these methods. |
- void dataSent(Resource*, unsigned long long bytesSent, unsigned long long totalBytesToBeSent) override; |
- void responseReceived(Resource*, const ResourceResponse&, std::unique_ptr<WebDataConsumerHandle>) override; |
- void setSerializedCachedMetadata(Resource*, const char*, size_t) override; |
- void dataReceived(Resource*, const char* data, size_t dataLength) override; |
- void redirectReceived(Resource*, ResourceRequest&, const ResourceResponse&) override; |
- void redirectBlocked() override; |
- void dataDownloaded(Resource*, int) override; |
- void didReceiveResourceTiming(Resource*, const ResourceTimingInfo&) override; |
- |
- // |this| may be dead after calling this method in async mode. |
- void cancelWithError(const ResourceError&); |
- |
- // Notify Inspector and log to console about resource response. Use |
- // this method if response is not going to be finished normally. |
- void reportResponseReceived(unsigned long identifier, const ResourceResponse&); |
- |
- // Methods containing code to handle resource fetch results which are |
- // common to both sync and async mode. |
- // |
- // |this| may be dead after calling these method in async mode. |
- void handleResponse(unsigned long identifier, const ResourceResponse&, std::unique_ptr<WebDataConsumerHandle>); |
- void handleReceivedData(const char* data, size_t dataLength); |
- void handleSuccessfulFinish(unsigned long identifier, double finishTime); |
- |
- // |this| may be dead after calling this method. |
- void didTimeout(TimerBase*); |
- // Calls the appropriate loading method according to policy and data |
- // about origin. Only for handling the initial load (including fallback |
- // after consulting ServiceWorker). |
- // |
- // |this| may be dead after calling this method in async mode. |
- void dispatchInitialRequest(const ResourceRequest&); |
- // |this| may be dead after calling this method in async mode. |
- void makeCrossOriginAccessRequest(const ResourceRequest&); |
- // Loads m_fallbackRequestForServiceWorker. |
- // |
- // |this| may be dead after calling this method in async mode. |
- void loadFallbackRequestForServiceWorker(); |
- // Loads m_actualRequest. |
- void loadActualRequest(); |
- // Clears m_actualRequest and reports access control check failure to |
- // m_client. |
- // |
- // |this| may be dead after calling this method in async mode. |
- void handlePreflightFailure(const String& url, const String& errorDescription); |
- // Investigates the response for the preflight request. If successful, |
- // the actual request will be made later in handleSuccessfulFinish(). |
- // |
- // |this| may be dead after calling this method in async mode. |
- void handlePreflightResponse(const ResourceResponse&); |
- // |this| may be dead after calling this method. |
- void handleError(const ResourceError&); |
- |
- void loadRequest(const ResourceRequest&, ResourceLoaderOptions); |
- bool isAllowedRedirect(const KURL&) const; |
- // Returns DoNotAllowStoredCredentials |
- // if m_forceDoNotAllowStoredCredentials is set. Otherwise, just |
- // returns allowCredentials value of m_resourceLoaderOptions. |
- StoredCredentials effectiveAllowCredentials() const; |
- |
- // TODO(hiroshige): After crbug.com/633696 is fixed, |
- // - Remove RawResourceClientStateChecker logic, |
- // - Make DocumentThreadableLoader to be a ResourceOwner and remove |
- // this re-implementation of ResourceOwner, and |
- // - Consider re-applying RawResourceClientStateChecker in a more |
- // general fashion (crbug.com/640291). |
- RawResource* resource() const { return m_resource.get(); } |
- void clearResource() { setResource(nullptr); } |
- void setResource(RawResource* newResource) |
- { |
- if (newResource == m_resource) |
- return; |
- |
- if (RawResource* oldResource = m_resource.release()) { |
- m_checker.willRemoveClient(); |
- oldResource->removeClient(this); |
- } |
- |
- if (newResource) { |
- m_resource = newResource; |
- m_checker.willAddClient(); |
- m_resource->addClient(this); |
- } |
- } |
- Member<RawResource> m_resource; |
- // End of ResourceOwner re-implementation, see above. |
- |
- const SecurityOrigin* getSecurityOrigin() const; |
- Document& document() const; |
- |
- ThreadableLoaderClient* m_client; |
- Member<Document> m_document; |
- |
- const ThreadableLoaderOptions m_options; |
- // Some items may be overridden by m_forceDoNotAllowStoredCredentials |
- // and m_securityOrigin. In such a case, build a ResourceLoaderOptions |
- // with up-to-date values from them and this variable, and use it. |
- const ResourceLoaderOptions m_resourceLoaderOptions; |
- |
- bool m_forceDoNotAllowStoredCredentials; |
- RefPtr<SecurityOrigin> m_securityOrigin; |
- |
- // True while the initial URL and all the URLs of the redirects |
- // this object has followed, if any, are same-origin to |
- // getSecurityOrigin(). |
- bool m_sameOriginRequest; |
- // Set to true if the current request is cross-origin and not simple. |
- bool m_crossOriginNonSimpleRequest; |
- |
- // Set to true when the response data is given to a data consumer |
- // handle. |
- bool m_isUsingDataConsumerHandle; |
- |
- const bool m_async; |
- |
- // Holds the original request context (used for sanity checks). |
- WebURLRequest::RequestContext m_requestContext; |
- |
- // Holds the original request for fallback in case the Service Worker |
- // does not respond. |
- ResourceRequest m_fallbackRequestForServiceWorker; |
- |
- // Holds the original request and options for it during preflight |
- // request handling phase. |
- ResourceRequest m_actualRequest; |
- ResourceLoaderOptions m_actualOptions; |
- |
- HTTPHeaderMap m_simpleRequestHeaders; // stores simple request headers in case of a cross-origin redirect. |
- Timer<DocumentThreadableLoader> m_timeoutTimer; |
- double m_requestStartedSeconds; // Time an asynchronous fetch request is started |
- |
- // Max number of times that this DocumentThreadableLoader can follow |
- // cross-origin redirects. |
- // This is used to limit the number of redirects. |
- // But this value is not the max number of total redirects allowed, |
- // because same-origin redirects are not counted here. |
- int m_corsRedirectLimit; |
- |
- WebURLRequest::FetchRedirectMode m_redirectMode; |
- |
- // Holds the referrer after a redirect response was |
- // received. This referrer is used to populate the HTTP Referer |
- // header when following the redirect. |
- bool m_didRedirect; |
- Referrer m_referrerAfterRedirect; |
- |
- RawResourceClientStateChecker m_checker; |
- WeakPtrFactory<DocumentThreadableLoader> m_weakFactory; |
+ |
+public: |
+ static void loadResourceSynchronously(Document&, const ResourceRequest&, ThreadableLoaderClient&, const ThreadableLoaderOptions&, const ResourceLoaderOptions&); |
+ static DocumentThreadableLoader* create(Document&, ThreadableLoaderClient*, const ThreadableLoaderOptions&, const ResourceLoaderOptions&); |
+ ~DocumentThreadableLoader() override; |
+ |
+ void start(const ResourceRequest&) override; |
+ |
+ void overrideTimeout(unsigned long timeout) override; |
+ |
+ // |this| may be dead after calling this method in async mode. |
+ void cancel() override; |
+ void setDefersLoading(bool); |
+ |
+ DECLARE_TRACE(); |
+ |
+private: |
+ enum BlockingBehavior { |
+ LoadSynchronously, |
+ LoadAsynchronously |
}; |
+ DocumentThreadableLoader(Document&, ThreadableLoaderClient*, BlockingBehavior, const ThreadableLoaderOptions&, const ResourceLoaderOptions&); |
+ |
+ void clear(); |
+ |
+ // ResourceClient |
+ // |
+ // |this| may be dead after calling this method. |
+ void notifyFinished(Resource*) override; |
+ |
+ String debugName() const override { return "DocumentThreadableLoader"; } |
+ |
+ // RawResourceClient |
+ // |
+ // |this| may be dead after calling these methods. |
+ void dataSent(Resource*, unsigned long long bytesSent, unsigned long long totalBytesToBeSent) override; |
+ void responseReceived(Resource*, const ResourceResponse&, std::unique_ptr<WebDataConsumerHandle>) override; |
+ void setSerializedCachedMetadata(Resource*, const char*, size_t) override; |
+ void dataReceived(Resource*, const char* data, size_t dataLength) override; |
+ void redirectReceived(Resource*, ResourceRequest&, const ResourceResponse&) override; |
+ void redirectBlocked() override; |
+ void dataDownloaded(Resource*, int) override; |
+ void didReceiveResourceTiming(Resource*, const ResourceTimingInfo&) override; |
+ |
+ // |this| may be dead after calling this method in async mode. |
+ void cancelWithError(const ResourceError&); |
+ |
+ // Notify Inspector and log to console about resource response. Use |
+ // this method if response is not going to be finished normally. |
+ void reportResponseReceived(unsigned long identifier, const ResourceResponse&); |
+ |
+ // Methods containing code to handle resource fetch results which are |
+ // common to both sync and async mode. |
+ // |
+ // |this| may be dead after calling these method in async mode. |
+ void handleResponse(unsigned long identifier, const ResourceResponse&, std::unique_ptr<WebDataConsumerHandle>); |
+ void handleReceivedData(const char* data, size_t dataLength); |
+ void handleSuccessfulFinish(unsigned long identifier, double finishTime); |
+ |
+ // |this| may be dead after calling this method. |
+ void didTimeout(TimerBase*); |
+ // Calls the appropriate loading method according to policy and data |
+ // about origin. Only for handling the initial load (including fallback |
+ // after consulting ServiceWorker). |
+ // |
+ // |this| may be dead after calling this method in async mode. |
+ void dispatchInitialRequest(const ResourceRequest&); |
+ // |this| may be dead after calling this method in async mode. |
+ void makeCrossOriginAccessRequest(const ResourceRequest&); |
+ // Loads m_fallbackRequestForServiceWorker. |
+ // |
+ // |this| may be dead after calling this method in async mode. |
+ void loadFallbackRequestForServiceWorker(); |
+ // Loads m_actualRequest. |
+ void loadActualRequest(); |
+ // Clears m_actualRequest and reports access control check failure to |
+ // m_client. |
+ // |
+ // |this| may be dead after calling this method in async mode. |
+ void handlePreflightFailure(const String& url, const String& errorDescription); |
+ // Investigates the response for the preflight request. If successful, |
+ // the actual request will be made later in handleSuccessfulFinish(). |
+ // |
+ // |this| may be dead after calling this method in async mode. |
+ void handlePreflightResponse(const ResourceResponse&); |
+ // |this| may be dead after calling this method. |
+ void handleError(const ResourceError&); |
+ |
+ void loadRequest(const ResourceRequest&, ResourceLoaderOptions); |
+ bool isAllowedRedirect(const KURL&) const; |
+ // Returns DoNotAllowStoredCredentials |
+ // if m_forceDoNotAllowStoredCredentials is set. Otherwise, just |
+ // returns allowCredentials value of m_resourceLoaderOptions. |
+ StoredCredentials effectiveAllowCredentials() const; |
+ |
+ // TODO(hiroshige): After crbug.com/633696 is fixed, |
+ // - Remove RawResourceClientStateChecker logic, |
+ // - Make DocumentThreadableLoader to be a ResourceOwner and remove |
+ // this re-implementation of ResourceOwner, and |
+ // - Consider re-applying RawResourceClientStateChecker in a more |
+ // general fashion (crbug.com/640291). |
+ RawResource* resource() const { return m_resource.get(); } |
+ void clearResource() { setResource(nullptr); } |
+ void setResource(RawResource* newResource) |
+ { |
+ if (newResource == m_resource) |
+ return; |
+ |
+ if (RawResource* oldResource = m_resource.release()) { |
+ m_checker.willRemoveClient(); |
+ oldResource->removeClient(this); |
+ } |
+ |
+ if (newResource) { |
+ m_resource = newResource; |
+ m_checker.willAddClient(); |
+ m_resource->addClient(this); |
+ } |
+ } |
+ Member<RawResource> m_resource; |
+ // End of ResourceOwner re-implementation, see above. |
+ |
+ const SecurityOrigin* getSecurityOrigin() const; |
+ Document& document() const; |
+ |
+ ThreadableLoaderClient* m_client; |
+ Member<Document> m_document; |
+ |
+ const ThreadableLoaderOptions m_options; |
+ // Some items may be overridden by m_forceDoNotAllowStoredCredentials |
+ // and m_securityOrigin. In such a case, build a ResourceLoaderOptions |
+ // with up-to-date values from them and this variable, and use it. |
+ const ResourceLoaderOptions m_resourceLoaderOptions; |
+ |
+ bool m_forceDoNotAllowStoredCredentials; |
+ RefPtr<SecurityOrigin> m_securityOrigin; |
+ |
+ // True while the initial URL and all the URLs of the redirects |
+ // this object has followed, if any, are same-origin to |
+ // getSecurityOrigin(). |
+ bool m_sameOriginRequest; |
+ // Set to true if the current request is cross-origin and not simple. |
+ bool m_crossOriginNonSimpleRequest; |
+ |
+ // Set to true when the response data is given to a data consumer |
+ // handle. |
+ bool m_isUsingDataConsumerHandle; |
+ |
+ const bool m_async; |
+ |
+ // Holds the original request context (used for sanity checks). |
+ WebURLRequest::RequestContext m_requestContext; |
+ |
+ // Holds the original request for fallback in case the Service Worker |
+ // does not respond. |
+ ResourceRequest m_fallbackRequestForServiceWorker; |
+ |
+ // Holds the original request and options for it during preflight |
+ // request handling phase. |
+ ResourceRequest m_actualRequest; |
+ ResourceLoaderOptions m_actualOptions; |
+ |
+ HTTPHeaderMap m_simpleRequestHeaders; // stores simple request headers in case of a cross-origin redirect. |
+ Timer<DocumentThreadableLoader> m_timeoutTimer; |
+ double m_requestStartedSeconds; // Time an asynchronous fetch request is started |
+ |
+ // Max number of times that this DocumentThreadableLoader can follow |
+ // cross-origin redirects. |
+ // This is used to limit the number of redirects. |
+ // But this value is not the max number of total redirects allowed, |
+ // because same-origin redirects are not counted here. |
+ int m_corsRedirectLimit; |
+ |
+ WebURLRequest::FetchRedirectMode m_redirectMode; |
+ |
+ // Holds the referrer after a redirect response was |
+ // received. This referrer is used to populate the HTTP Referer |
+ // header when following the redirect. |
+ bool m_didRedirect; |
+ Referrer m_referrerAfterRedirect; |
+ |
+ RawResourceClientStateChecker m_checker; |
+}; |
+ |
} // namespace blink |
#endif // DocumentThreadableLoader_h |