| OLD | NEW | 
|---|
| (Empty) |  | 
|  | 1 // Copyright 2017 The Chromium Authors. All rights reserved. | 
|  | 2 // Use of this source code is governed by a BSD-style license that can be | 
|  | 3 // found in the LICENSE file. | 
|  | 4 | 
|  | 5 #ifndef CONTENT_CHILD_THROTTLING_URL_LOADER_H_ | 
|  | 6 #define CONTENT_CHILD_THROTTLING_URL_LOADER_H_ | 
|  | 7 | 
|  | 8 #include <memory> | 
|  | 9 | 
|  | 10 #include "content/common/content_export.h" | 
|  | 11 #include "content/common/url_loader.mojom.h" | 
|  | 12 #include "content/common/url_loader_factory.mojom.h" | 
|  | 13 #include "content/public/child/url_loader_throttle.h" | 
|  | 14 #include "mojo/public/cpp/bindings/binding.h" | 
|  | 15 | 
|  | 16 namespace content { | 
|  | 17 | 
|  | 18 namespace mojom { | 
|  | 19 class URLLoaderFactory; | 
|  | 20 } | 
|  | 21 | 
|  | 22 // ThrottlingURLLoader is a wrapper around the mojom::URLLoader[Factory] | 
|  | 23 // interfaces. It applies a list of URLLoaderThrottle instances which could | 
|  | 24 // defer, resume or cancel the URL loading. | 
|  | 25 class CONTENT_EXPORT ThrottlingURLLoader : public mojom::URLLoaderClient, | 
|  | 26                                            public URLLoaderThrottle::Delegate { | 
|  | 27  public: | 
|  | 28   // |factory| and |client| must stay alive during the lifetime of the returned | 
|  | 29   // object. | 
|  | 30   static std::unique_ptr<ThrottlingURLLoader> CreateLoaderAndStart( | 
|  | 31       mojom::URLLoaderFactory* factory, | 
|  | 32       std::vector<std::unique_ptr<URLLoaderThrottle>> throttles, | 
|  | 33       int32_t routing_id, | 
|  | 34       int32_t request_id, | 
|  | 35       uint32_t options, | 
|  | 36       std::unique_ptr<ResourceRequest> url_request, | 
|  | 37       mojom::URLLoaderClient* client); | 
|  | 38 | 
|  | 39   ~ThrottlingURLLoader() override; | 
|  | 40 | 
|  | 41   void FollowRedirect(); | 
|  | 42   void SetPriority(net::RequestPriority priority, int32_t intra_priority_value); | 
|  | 43 | 
|  | 44  private: | 
|  | 45   ThrottlingURLLoader(std::vector<std::unique_ptr<URLLoaderThrottle>> throttles, | 
|  | 46                       mojom::URLLoaderClient* client); | 
|  | 47 | 
|  | 48   void Start(mojom::URLLoaderFactory* factory, | 
|  | 49              int32_t routing_id, | 
|  | 50              int32_t request_id, | 
|  | 51              uint32_t options, | 
|  | 52              std::unique_ptr<ResourceRequest> url_request); | 
|  | 53 | 
|  | 54   // mojom::URLLoaderClient implementation: | 
|  | 55   void OnReceiveResponse(const ResourceResponseHead& response_head, | 
|  | 56                          const base::Optional<net::SSLInfo>& ssl_info, | 
|  | 57                          mojom::DownloadedTempFilePtr downloaded_file) override; | 
|  | 58   void OnReceiveRedirect(const net::RedirectInfo& redirect_info, | 
|  | 59                          const ResourceResponseHead& response_head) override; | 
|  | 60   void OnDataDownloaded(int64_t data_len, int64_t encoded_data_len) override; | 
|  | 61   void OnUploadProgress(int64_t current_position, | 
|  | 62                         int64_t total_size, | 
|  | 63                         OnUploadProgressCallback ack_callback) override; | 
|  | 64   void OnReceiveCachedMetadata(const std::vector<uint8_t>& data) override; | 
|  | 65   void OnTransferSizeUpdated(int32_t transfer_size_diff) override; | 
|  | 66   void OnStartLoadingResponseBody( | 
|  | 67       mojo::ScopedDataPipeConsumerHandle body) override; | 
|  | 68   void OnComplete(const ResourceRequestCompletionStatus& status) override; | 
|  | 69 | 
|  | 70   // URLLoaderThrottle::Delegate: | 
|  | 71   void CancelWithError(int error_code) override; | 
|  | 72   void Resume() override; | 
|  | 73 | 
|  | 74   enum DeferredStage { | 
|  | 75     DEFERRED_NONE, | 
|  | 76     DEFERRED_START, | 
|  | 77     DEFERRED_REDIRECT, | 
|  | 78     DEFERRED_RESPONSE | 
|  | 79   }; | 
|  | 80   DeferredStage deferred_stage_ = DEFERRED_NONE; | 
|  | 81   bool cancelled_by_throttle_ = false; | 
|  | 82 | 
|  | 83   std::unique_ptr<URLLoaderThrottle> throttle_; | 
|  | 84 | 
|  | 85   mojom::URLLoaderClient* forwarding_client_; | 
|  | 86   mojo::Binding<mojom::URLLoaderClient> client_binding_; | 
|  | 87 | 
|  | 88   mojom::URLLoaderPtr url_loader_; | 
|  | 89 | 
|  | 90   // Set if start is deferred. | 
|  | 91   mojom::URLLoaderFactory* url_loader_factory_ = nullptr; | 
|  | 92   int32_t routing_id_ = -1; | 
|  | 93   int32_t request_id_ = -1; | 
|  | 94   uint32_t options_ = mojom::kURLLoadOptionNone; | 
|  | 95   std::unique_ptr<ResourceRequest> url_request_; | 
|  | 96 | 
|  | 97   // Set if either response or redirect is deferred. | 
|  | 98   ResourceResponseHead response_head_; | 
|  | 99 | 
|  | 100   // Set if response is deferred. | 
|  | 101   base::Optional<net::SSLInfo> ssl_info_; | 
|  | 102   mojom::DownloadedTempFilePtr downloaded_file_; | 
|  | 103 | 
|  | 104   // Set if redirect is deferred. | 
|  | 105   net::RedirectInfo redirect_info_; | 
|  | 106 | 
|  | 107   // Set if request is deferred and SetPriority() is called. | 
|  | 108   bool set_priority_cached_ = false; | 
|  | 109   net::RequestPriority priority_ = net::MINIMUM_PRIORITY; | 
|  | 110   int32_t intra_priority_value_ = 0; | 
|  | 111 | 
|  | 112   DISALLOW_COPY_AND_ASSIGN(ThrottlingURLLoader); | 
|  | 113 }; | 
|  | 114 | 
|  | 115 }  // namespace content | 
|  | 116 | 
|  | 117 #endif  // CONTENT_CHILD_THROTTLING_URL_LOADER_H_ | 
| OLD | NEW | 
|---|