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_MANIFEST_DOWNLOADER_H_ 6*6777b538SAndroid Build Coastguard Worker #define COMPONENTS_NACL_RENDERER_MANIFEST_DOWNLOADER_H_ 7*6777b538SAndroid Build Coastguard Worker 8*6777b538SAndroid Build Coastguard Worker #include <stddef.h> 9*6777b538SAndroid Build Coastguard Worker #include <stdint.h> 10*6777b538SAndroid Build Coastguard Worker 11*6777b538SAndroid Build Coastguard Worker #include <memory> 12*6777b538SAndroid Build Coastguard Worker #include <string> 13*6777b538SAndroid Build Coastguard Worker 14*6777b538SAndroid Build Coastguard Worker #include "base/functional/callback.h" 15*6777b538SAndroid Build Coastguard Worker #include "components/nacl/renderer/ppb_nacl_private.h" 16*6777b538SAndroid Build Coastguard Worker #include "third_party/blink/public/web/web_associated_url_loader_client.h" 17*6777b538SAndroid Build Coastguard Worker 18*6777b538SAndroid Build Coastguard Worker namespace blink { 19*6777b538SAndroid Build Coastguard Worker class WebAssociatedURLLoader; 20*6777b538SAndroid Build Coastguard Worker struct WebURLError; 21*6777b538SAndroid Build Coastguard Worker class WebURLRequest; 22*6777b538SAndroid Build Coastguard Worker class WebURLResponse; 23*6777b538SAndroid Build Coastguard Worker } 24*6777b538SAndroid Build Coastguard Worker 25*6777b538SAndroid Build Coastguard Worker namespace nacl { 26*6777b538SAndroid Build Coastguard Worker 27*6777b538SAndroid Build Coastguard Worker // Downloads a NaCl manifest (.nmf) and returns the contents of the file to 28*6777b538SAndroid Build Coastguard Worker // caller through a callback. 29*6777b538SAndroid Build Coastguard Worker class ManifestDownloader : public blink::WebAssociatedURLLoaderClient { 30*6777b538SAndroid Build Coastguard Worker public: 31*6777b538SAndroid Build Coastguard Worker typedef base::OnceCallback<void(PP_NaClError, const std::string&)> Callback; 32*6777b538SAndroid Build Coastguard Worker 33*6777b538SAndroid Build Coastguard Worker // This is a pretty arbitrary limit on the byte size of the NaCl manifest 34*6777b538SAndroid Build Coastguard Worker // file. 35*6777b538SAndroid Build Coastguard Worker // Note that the resulting string object has to have at least one byte extra 36*6777b538SAndroid Build Coastguard Worker // for the null termination character. 37*6777b538SAndroid Build Coastguard Worker static const size_t kNaClManifestMaxFileBytes = 1024 * 1024; 38*6777b538SAndroid Build Coastguard Worker 39*6777b538SAndroid Build Coastguard Worker ManifestDownloader(std::unique_ptr<blink::WebAssociatedURLLoader> url_loader, 40*6777b538SAndroid Build Coastguard Worker bool is_installed, 41*6777b538SAndroid Build Coastguard Worker Callback cb); 42*6777b538SAndroid Build Coastguard Worker ~ManifestDownloader() override; 43*6777b538SAndroid Build Coastguard Worker 44*6777b538SAndroid Build Coastguard Worker void Load(const blink::WebURLRequest& request); 45*6777b538SAndroid Build Coastguard Worker 46*6777b538SAndroid Build Coastguard Worker private: 47*6777b538SAndroid Build Coastguard Worker void Close(); 48*6777b538SAndroid Build Coastguard Worker 49*6777b538SAndroid Build Coastguard Worker // WebAssociatedURLLoaderClient implementation. 50*6777b538SAndroid Build Coastguard Worker void DidReceiveResponse(const blink::WebURLResponse& response) override; 51*6777b538SAndroid Build Coastguard Worker void DidReceiveData(const char* data, int data_length) override; 52*6777b538SAndroid Build Coastguard Worker void DidFinishLoading() override; 53*6777b538SAndroid Build Coastguard Worker void DidFail(const blink::WebURLError& error) override; 54*6777b538SAndroid Build Coastguard Worker 55*6777b538SAndroid Build Coastguard Worker std::unique_ptr<blink::WebAssociatedURLLoader> url_loader_; 56*6777b538SAndroid Build Coastguard Worker bool is_installed_; 57*6777b538SAndroid Build Coastguard Worker Callback cb_; 58*6777b538SAndroid Build Coastguard Worker std::string buffer_; 59*6777b538SAndroid Build Coastguard Worker int status_code_; 60*6777b538SAndroid Build Coastguard Worker PP_NaClError pp_nacl_error_; 61*6777b538SAndroid Build Coastguard Worker }; 62*6777b538SAndroid Build Coastguard Worker 63*6777b538SAndroid Build Coastguard Worker } // namespace nacl 64*6777b538SAndroid Build Coastguard Worker 65*6777b538SAndroid Build Coastguard Worker #endif // COMPONENTS_NACL_RENDERER_MANIFEST_DOWNLOADER_H_ 66