Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(254)

Side by Side Diff: ppapi/native_client/src/trusted/plugin/file_downloader.h

Issue 393693004: Pepper: Delete FileDownloader in trusted plugin. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: STL fix Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright (c) 2012 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 NATIVE_CLIENT_SRC_TRUSTED_PLUGIN_FILE_DOWNLOADER_H_
6 #define NATIVE_CLIENT_SRC_TRUSTED_PLUGIN_FILE_DOWNLOADER_H_
7
8 #include <deque>
9
10 #include "native_client/src/include/nacl_macros.h"
11 #include "native_client/src/include/nacl_string.h"
12 #include "native_client/src/public/nacl_file_info.h"
13 #include "ppapi/c/private/ppb_nacl_private.h"
14 #include "ppapi/cpp/file_io.h"
15 #include "ppapi/cpp/instance.h"
16 #include "ppapi/cpp/url_loader.h"
17 #include "ppapi/cpp/url_response_info.h"
18 #include "ppapi/native_client/src/trusted/plugin/callback_source.h"
19 #include "ppapi/utility/completion_callback_factory.h"
20
21 namespace plugin {
22
23 class Plugin;
24
25 typedef enum {
26 DOWNLOAD_TO_BUFFER_AND_STREAM = 0,
27 DOWNLOAD_NONE
28 } DownloadMode;
29
30 typedef std::vector<char>* FileStreamData;
31 typedef CallbackSource<FileStreamData> StreamCallbackSource;
32 typedef pp::CompletionCallbackWithOutput<FileStreamData> StreamCallback;
33
34 // A class that wraps PPAPI URLLoader and FileIO functionality for downloading
35 // the url into a file and providing an open file descriptor.
36 class FileDownloader {
37 public:
38 explicit FileDownloader(Plugin* instance);
39 ~FileDownloader() {}
40
41 // Issues a GET on |url| to start downloading the response into a file,
42 // and finish streaming it. |callback| will be run after streaming is
43 // done or if an error prevents streaming from completing.
44 // Returns true when callback is scheduled to be called on success or failure.
45 // Returns false if callback is NULL, or if the PPB_FileIO_Trusted interface
46 // is not available.
47 // If |record_progress| is true, then download progress will be recorded,
48 // and can be polled through GetDownloadProgress().
49 // If |progress_callback| is not NULL and |record_progress| is true,
50 // then the callback will be invoked for every progress update received
51 // by the loader.
52
53 // Similar to Open(), but used for streaming the |url| data directly to the
54 // caller without writing to a temporary file. The callbacks provided by
55 // |stream_callback_source| are expected to copy the data before returning.
56 // |callback| is called once the response headers are received,
57 // and streaming must be completed separately via BeginStreaming().
58 bool OpenStream(const nacl::string& url,
59 const pp::CompletionCallback& callback,
60 StreamCallbackSource* stream_callback_source);
61
62 // Finish streaming the response body for a URL request started by either
63 // OpenStream(). Runs the given |callback| when streaming is done.
64 void BeginStreaming(const pp::CompletionCallback& callback);
65
66 // Once the GET request has finished, and the contents of the file
67 // represented by |url_| are available, |full_url_| is the full URL including
68 // the scheme, host and full path.
69 // Returns an empty string before the GET request has finished.
70 const nacl::string& full_url() const { return full_url_; }
71
72 // GetDownloadProgress() returns the current download progress, which is
73 // meaningful after Open() has been called. Progress only refers to the
74 // response body and does not include the headers.
75 //
76 // This data is only available if the |record_progress| true in the
77 // Open() call. If progress is being recorded, then |bytes_received|
78 // will be set to the number of bytes received thus far,
79 // and |total_bytes_to_be_received| will be set to the total number
80 // of bytes to be received. The total bytes to be received may be unknown,
81 // in which case |total_bytes_to_be_received| will be set to -1.
82 bool GetDownloadProgress(int64_t* bytes_received,
83 int64_t* total_bytes_to_be_received) const;
84
85 int status_code() const { return status_code_; }
86 nacl::string GetResponseHeaders() const;
87
88 void set_request_headers(const nacl::string& extra_request_headers) {
89 extra_request_headers_ = extra_request_headers;
90 }
91
92 private:
93 NACL_DISALLOW_COPY_AND_ASSIGN(FileDownloader);
94
95 // For DOWNLOAD_TO_BUFFER_AND_STREAM, the process is very similar:
96 // 1) Ask the browser to start streaming |url_| to an internal buffer.
97 // 2) Ask the browser to finish streaming to |temp_buffer_| on success.
98 // 3) Wait for streaming to finish, passing the data directly to the user.
99 // Each step is done asynchronously using callbacks. We create callbacks
100 // through a factory to take advantage of ref-counting.
101 // The public Open*() functions start step 1), and the public BeginStreaming
102 // function proceeds to step 2) and 3).
103 bool InitialResponseIsValid();
104 void URLLoadStartNotify(int32_t pp_error);
105 void URLReadBodyNotify(int32_t pp_error);
106
107 Plugin* instance_;
108 nacl::string full_url_;
109
110 nacl::string extra_request_headers_;
111 pp::URLResponseInfo url_response_;
112 pp::CompletionCallback file_open_notify_callback_;
113 pp::CompletionCallback stream_finish_callback_;
114 pp::URLLoader url_loader_;
115 pp::CompletionCallbackFactory<FileDownloader> callback_factory_;
116 int32_t status_code_;
117 DownloadMode mode_;
118 static const uint32_t kTempBufferSize = 16384;
119 std::vector<char> temp_buffer_;
120 StreamCallbackSource* data_stream_callback_source_;
121 };
122
123 } // namespace plugin
124
125 #endif // NATIVE_CLIENT_SRC_TRUSTED_PLUGIN_FILE_DOWNLOADER_H_
OLDNEW
« no previous file with comments | « ppapi/native_client/src/trusted/plugin/callback_source.h ('k') | ppapi/native_client/src/trusted/plugin/file_downloader.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698