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

Unified Diff: third_party/WebKit/Source/core/loader/DocumentThreadableLoader.h

Issue 2371663002: Introduce an injection point to configure the internal pointer of WeakPtr
Patch Set: fix Created 4 years, 3 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/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

Powered by Google App Engine
This is Rietveld 408576698