1 // Copyright 2018 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 SERVICES_NETWORK_EMPTY_URL_LOADER_CLIENT_H_ 6 #define SERVICES_NETWORK_EMPTY_URL_LOADER_CLIENT_H_ 7 8 #include <memory> 9 10 #include "base/macros.h" 11 #include "mojo/public/cpp/bindings/pending_receiver.h" 12 #include "mojo/public/cpp/bindings/pending_remote.h" 13 #include "mojo/public/cpp/bindings/receiver.h" 14 #include "mojo/public/cpp/bindings/remote.h" 15 #include "mojo/public/cpp/system/data_pipe_drainer.h" 16 #include "services/network/public/mojom/url_loader.mojom.h" 17 18 namespace network { 19 20 // Helper for draining/discarding data and callbacks that go to URLLoaderClient. 21 class EmptyURLLoaderClient : public mojom::URLLoaderClient, 22 public mojo::DataPipeDrainer::Client { 23 public: 24 // Binds |client_receiver| to a newly constructed EmptyURLLoaderClient which 25 // will drain/discard all callbacks/data. Takes ownership of |url_loader| and 26 // discards it (together with EmptyURLLoaderClient) when the URL request has 27 // been completed. 28 static void DrainURLRequest( 29 mojo::PendingReceiver<mojom::URLLoaderClient> client_receiver, 30 mojo::PendingRemote<mojom::URLLoader> url_loader); 31 32 private: 33 EmptyURLLoaderClient( 34 mojo::PendingReceiver<mojom::URLLoaderClient> client_receiver, 35 mojo::PendingRemote<mojom::URLLoader> url_loader); 36 37 ~EmptyURLLoaderClient() override; 38 void DeleteSelf(); 39 40 // mojom::URLLoaderClient overrides: 41 void OnReceiveResponse(mojom::URLResponseHeadPtr head) override; 42 void OnReceiveRedirect(const net::RedirectInfo& redirect_info, 43 mojom::URLResponseHeadPtr head) override; 44 void OnUploadProgress(int64_t current_position, 45 int64_t total_size, 46 OnUploadProgressCallback callback) override; 47 void OnReceiveCachedMetadata(mojo_base::BigBuffer data) override; 48 void OnTransferSizeUpdated(int32_t transfer_size_diff) override; 49 void OnStartLoadingResponseBody( 50 mojo::ScopedDataPipeConsumerHandle body) override; 51 void OnComplete(const URLLoaderCompletionStatus& status) override; 52 53 // mojo::DataPipeDrainer::Client overrides: 54 void OnDataAvailable(const void* data, size_t num_bytes) override; 55 void OnDataComplete() override; 56 57 mojo::Receiver<mojom::URLLoaderClient> receiver_; 58 59 std::unique_ptr<mojo::DataPipeDrainer> response_body_drainer_; 60 61 mojo::Remote<mojom::URLLoader> url_loader_; 62 63 DISALLOW_COPY_AND_ASSIGN(EmptyURLLoaderClient); 64 }; 65 66 } // namespace network 67 68 #endif // SERVICES_NETWORK_EMPTY_URL_LOADER_CLIENT_H_ 69