1*6777b538SAndroid Build Coastguard Worker // Copyright 2014 The Chromium Authors 2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be 3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file. 4*6777b538SAndroid Build Coastguard Worker 5*6777b538SAndroid Build Coastguard Worker #ifndef COMPONENTS_NACL_RENDERER_FILE_DOWNLOADER_H_ 6*6777b538SAndroid Build Coastguard Worker #define COMPONENTS_NACL_RENDERER_FILE_DOWNLOADER_H_ 7*6777b538SAndroid Build Coastguard Worker 8*6777b538SAndroid Build Coastguard Worker #include <stdint.h> 9*6777b538SAndroid Build Coastguard Worker 10*6777b538SAndroid Build Coastguard Worker #include "base/files/file.h" 11*6777b538SAndroid Build Coastguard Worker #include "base/functional/callback.h" 12*6777b538SAndroid Build Coastguard Worker #include "components/nacl/renderer/ppb_nacl_private.h" 13*6777b538SAndroid Build Coastguard Worker #include "third_party/blink/public/web/web_associated_url_loader_client.h" 14*6777b538SAndroid Build Coastguard Worker 15*6777b538SAndroid Build Coastguard Worker namespace blink { 16*6777b538SAndroid Build Coastguard Worker class WebAssociatedURLLoader; 17*6777b538SAndroid Build Coastguard Worker struct WebURLError; 18*6777b538SAndroid Build Coastguard Worker class WebURLRequest; 19*6777b538SAndroid Build Coastguard Worker class WebURLResponse; 20*6777b538SAndroid Build Coastguard Worker } 21*6777b538SAndroid Build Coastguard Worker 22*6777b538SAndroid Build Coastguard Worker namespace nacl { 23*6777b538SAndroid Build Coastguard Worker 24*6777b538SAndroid Build Coastguard Worker // Downloads a file and writes the contents to a specified file open for 25*6777b538SAndroid Build Coastguard Worker // writing. 26*6777b538SAndroid Build Coastguard Worker class FileDownloader : public blink::WebAssociatedURLLoaderClient { 27*6777b538SAndroid Build Coastguard Worker public: 28*6777b538SAndroid Build Coastguard Worker enum Status { 29*6777b538SAndroid Build Coastguard Worker SUCCESS, 30*6777b538SAndroid Build Coastguard Worker ACCESS_DENIED, 31*6777b538SAndroid Build Coastguard Worker FAILED 32*6777b538SAndroid Build Coastguard Worker }; 33*6777b538SAndroid Build Coastguard Worker 34*6777b538SAndroid Build Coastguard Worker // Provides the FileDownloader status and the HTTP status code. 35*6777b538SAndroid Build Coastguard Worker typedef base::OnceCallback<void(Status, base::File, int)> StatusCallback; 36*6777b538SAndroid Build Coastguard Worker 37*6777b538SAndroid Build Coastguard Worker // Provides the bytes received so far, and the total bytes expected to be 38*6777b538SAndroid Build Coastguard Worker // received. 39*6777b538SAndroid Build Coastguard Worker typedef base::RepeatingCallback<void(int64_t, int64_t)> ProgressCallback; 40*6777b538SAndroid Build Coastguard Worker 41*6777b538SAndroid Build Coastguard Worker FileDownloader(std::unique_ptr<blink::WebAssociatedURLLoader> url_loader, 42*6777b538SAndroid Build Coastguard Worker base::File file, 43*6777b538SAndroid Build Coastguard Worker StatusCallback status_cb, 44*6777b538SAndroid Build Coastguard Worker ProgressCallback progress_cb); 45*6777b538SAndroid Build Coastguard Worker 46*6777b538SAndroid Build Coastguard Worker ~FileDownloader() override; 47*6777b538SAndroid Build Coastguard Worker 48*6777b538SAndroid Build Coastguard Worker void Load(const blink::WebURLRequest& request); 49*6777b538SAndroid Build Coastguard Worker 50*6777b538SAndroid Build Coastguard Worker private: 51*6777b538SAndroid Build Coastguard Worker // WebAssociatedURLLoaderClient implementation. 52*6777b538SAndroid Build Coastguard Worker void DidReceiveResponse(const blink::WebURLResponse& response) override; 53*6777b538SAndroid Build Coastguard Worker void DidReceiveData(const char* data, int data_length) override; 54*6777b538SAndroid Build Coastguard Worker void DidFinishLoading() override; 55*6777b538SAndroid Build Coastguard Worker void DidFail(const blink::WebURLError& error) override; 56*6777b538SAndroid Build Coastguard Worker 57*6777b538SAndroid Build Coastguard Worker std::unique_ptr<blink::WebAssociatedURLLoader> url_loader_; 58*6777b538SAndroid Build Coastguard Worker base::File file_; 59*6777b538SAndroid Build Coastguard Worker StatusCallback status_cb_; 60*6777b538SAndroid Build Coastguard Worker ProgressCallback progress_cb_; 61*6777b538SAndroid Build Coastguard Worker int http_status_code_; 62*6777b538SAndroid Build Coastguard Worker int64_t total_bytes_received_; 63*6777b538SAndroid Build Coastguard Worker int64_t total_bytes_to_be_received_; 64*6777b538SAndroid Build Coastguard Worker Status status_; 65*6777b538SAndroid Build Coastguard Worker }; 66*6777b538SAndroid Build Coastguard Worker 67*6777b538SAndroid Build Coastguard Worker } // namespace nacl 68*6777b538SAndroid Build Coastguard Worker 69*6777b538SAndroid Build Coastguard Worker #endif // COMPONENTS_NACL_RENDERER_FILE_DOWNLOADER_H_ 70