Index: content/common/throttling_url_loader.h |
diff --git a/content/common/throttling_url_loader.h b/content/common/throttling_url_loader.h |
index 00f603c3aea8dff804d14428862fb583252db52a..11e34a2320ab7f6515d736add80fcf7f0559c418 100644 |
--- a/content/common/throttling_url_loader.h |
+++ b/content/common/throttling_url_loader.h |
@@ -7,9 +7,11 @@ |
#include <memory> |
+#include "base/callback.h" |
#include "base/memory/ref_counted.h" |
#include "base/threading/thread_task_runner_handle.h" |
#include "content/common/content_export.h" |
+#include "content/common/possibly_associated_interface_ptr.h" |
#include "content/common/url_loader.mojom.h" |
#include "content/common/url_loader_factory.mojom.h" |
#include "content/public/common/url_loader_throttle.h" |
@@ -33,18 +35,35 @@ class CONTENT_EXPORT ThrottlingURLLoader : public mojom::URLLoaderClient, |
public: |
// |factory| and |client| must stay alive during the lifetime of the returned |
// object. |
+ // Please note that the request may not start immediately since it could be |
+ // deferred by throttles. |
static std::unique_ptr<ThrottlingURLLoader> CreateLoaderAndStart( |
mojom::URLLoaderFactory* factory, |
std::vector<std::unique_ptr<URLLoaderThrottle>> throttles, |
int32_t routing_id, |
int32_t request_id, |
uint32_t options, |
- std::unique_ptr<ResourceRequest> url_request, |
+ const ResourceRequest& url_request, |
mojom::URLLoaderClient* client, |
const net::MutableNetworkTrafficAnnotationTag& traffic_annotation, |
scoped_refptr<base::SingleThreadTaskRunner> task_runner = |
base::ThreadTaskRunnerHandle::Get()); |
+ using StartLoaderCallback = |
+ base::OnceCallback<void(mojom::URLLoaderRequest request, |
+ mojom::URLLoaderClientPtr client)>; |
+ |
+ // Similar to the method above, but uses a |start_loader_callback| instead of |
+ // a mojom::URLLoaderFactory to start the loader. The callback must be safe |
+ // to call during the lifetime of the returned object. |
+ static std::unique_ptr<ThrottlingURLLoader> CreateLoaderAndStart( |
+ StartLoaderCallback start_loader_callback, |
+ std::vector<std::unique_ptr<URLLoaderThrottle>> throttles, |
+ const ResourceRequest& url_request, |
+ mojom::URLLoaderClient* client, |
+ scoped_refptr<base::SingleThreadTaskRunner> task_runner = |
+ base::ThreadTaskRunnerHandle::Get()); |
+ |
~ThrottlingURLLoader() override; |
void FollowRedirect(); |
@@ -56,13 +75,25 @@ class CONTENT_EXPORT ThrottlingURLLoader : public mojom::URLLoaderClient, |
mojom::URLLoaderClient* client, |
const net::MutableNetworkTrafficAnnotationTag& traffic_annotation); |
+ // Either of the two sets of arguments below is valid but not both: |
+ // - |factory|, |routing_id|, |request_id| and |options|; |
+ // - |start_loader_callback|. |
void Start(mojom::URLLoaderFactory* factory, |
int32_t routing_id, |
int32_t request_id, |
uint32_t options, |
- std::unique_ptr<ResourceRequest> url_request, |
+ StartLoaderCallback start_loader_callback, |
+ const ResourceRequest& url_request, |
scoped_refptr<base::SingleThreadTaskRunner> task_runner); |
+ void StartNow(mojom::URLLoaderFactory* factory, |
+ int32_t routing_id, |
+ int32_t request_id, |
+ uint32_t options, |
+ StartLoaderCallback start_loader_callback, |
+ const ResourceRequest& url_request, |
+ scoped_refptr<base::SingleThreadTaskRunner> task_runner); |
+ |
// mojom::URLLoaderClient implementation: |
void OnReceiveResponse(const ResourceResponseHead& response_head, |
const base::Optional<net::SSLInfo>& ssl_info, |
@@ -97,14 +128,15 @@ class CONTENT_EXPORT ThrottlingURLLoader : public mojom::URLLoaderClient, |
mojom::URLLoaderClient* forwarding_client_; |
mojo::Binding<mojom::URLLoaderClient> client_binding_; |
- mojom::URLLoaderAssociatedPtr url_loader_; |
+ PossiblyAssociatedInterfacePtr<mojom::URLLoader> url_loader_; |
struct StartInfo { |
StartInfo(mojom::URLLoaderFactory* in_url_loader_factory, |
int32_t in_routing_id, |
int32_t in_request_id, |
uint32_t in_options, |
- std::unique_ptr<ResourceRequest> in_url_request, |
+ StartLoaderCallback in_start_loader_callback, |
+ const ResourceRequest& in_url_request, |
scoped_refptr<base::SingleThreadTaskRunner> in_task_runner); |
~StartInfo(); |
@@ -112,7 +144,10 @@ class CONTENT_EXPORT ThrottlingURLLoader : public mojom::URLLoaderClient, |
int32_t routing_id; |
int32_t request_id; |
uint32_t options; |
- std::unique_ptr<ResourceRequest> url_request; |
+ |
+ StartLoaderCallback start_loader_callback; |
+ |
+ ResourceRequest url_request; |
// |task_runner_| is used to set up |client_binding_|. |
scoped_refptr<base::SingleThreadTaskRunner> task_runner; |
}; |