OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef PPAPI_CPP_URL_LOADER_H_ | 5 #ifndef PPAPI_CPP_URL_LOADER_H_ |
6 #define PPAPI_CPP_URL_LOADER_H_ | 6 #define PPAPI_CPP_URL_LOADER_H_ |
7 | 7 |
8 #include "ppapi/c/pp_stdint.h" | 8 #include "ppapi/c/pp_stdint.h" |
9 #include "ppapi/cpp/resource.h" | 9 #include "ppapi/cpp/resource.h" |
10 | 10 |
11 /// @file | 11 /// @file |
12 /// This file defines the API for loading URLs. | 12 /// This file defines the API for loading URLs. |
13 namespace pp { | 13 namespace pp { |
14 | 14 |
15 class CompletionCallback; | 15 class CompletionCallback; |
16 class Instance; | 16 class Instance; |
17 class URLRequestInfo; | 17 class URLRequestInfo; |
18 class URLResponseInfo; | 18 class URLResponseInfo; |
19 | 19 |
20 /// URLLoader provides an API for loading URLs. | 20 /// URLLoader provides an API for loading URLs. |
21 /// | 21 /// Refer to <code>ppapi/examples/url_loader/streaming.cc</code> |
22 /// <strong>Example:</strong> | 22 /// for an example of how to use this class. |
23 /// | |
24 /// @code | |
25 /// | |
26 /// class MyHandler { | |
27 /// public: | |
28 /// MyHandler(Instance* instance) | |
29 /// : factory_(this), | |
30 /// loader_(instance), | |
31 /// did_open_(false) { | |
32 /// } | |
33 /// void ProcessURL(const char* url) { | |
34 /// CompletionCallback* cc = NewCallback(); | |
35 /// int32_t rv = loader_.Open(MakeRequest(url), cc); | |
36 /// if (rv != PP_Error_WouldBlock) | |
37 /// cc->Run(rv); | |
38 /// } | |
39 /// private: | |
40 /// CompletionCallback* NewCallback() { | |
41 /// return factory_.NewOptionalCallback(&MyHandler::DidCompleteIO); | |
42 /// } | |
43 /// URLRequestInfo MakeRequest(const char* url) { | |
44 /// URLRequestInfo request; | |
45 /// request.SetURL(url); | |
46 /// request.SetMethod("GET"); | |
47 /// request.SetFollowRedirects(true); | |
48 /// return request; | |
49 /// } | |
50 /// void DidCompleteIO(int32_t result) { | |
51 /// if (result > 0) { | |
52 /// // buf_ now contains 'result' number of bytes from the URL. | |
53 /// ProcessBytes(buf_, result); | |
54 /// ReadMore(); | |
55 /// } else if (result == PP_OK && !did_open_) { | |
56 /// // Headers are available, and we can start reading the body. | |
57 /// did_open_ = true; | |
58 /// ProcessResponseInfo(loader_.GetResponseInfo()); | |
59 /// ReadMore(); | |
60 /// } else { | |
61 /// // Done reading (possibly with an error given by 'result'). | |
62 /// } | |
63 /// } | |
64 /// void ReadMore() { | |
65 /// CompletionCallback* cc = NewCallback(); | |
66 /// int32_t rv = fio_.Read(offset_, buf_, sizeof(buf_), cc); | |
67 /// if (rv != PP_Error_WouldBlock) | |
68 /// cc->Run(rv); | |
69 /// } | |
70 /// void ProcessResponseInfo(const URLResponseInfo& response_info) { | |
71 /// // Read response headers, etc. | |
72 /// } | |
73 /// void ProcessBytes(const char* bytes, int32_t length) { | |
74 /// // Do work ... | |
75 /// } | |
76 /// pp::CompletionCallbackFactory<MyHandler> factory_; | |
77 /// pp::URLLoader loader_; | |
78 /// char buf_[4096]; | |
79 /// bool did_open_; | |
80 /// }; | |
81 /// @endcode | |
82 class URLLoader : public Resource { | 23 class URLLoader : public Resource { |
83 public: | 24 public: |
84 /// Default constructor for creating an is_null() | 25 /// Default constructor for creating an is_null() |
85 /// <code>URLLoader</code> object. | 26 /// <code>URLLoader</code> object. |
86 URLLoader() {} | 27 URLLoader() {} |
87 | 28 |
88 // TODO(brettw) remove this when NaCl is updated to use the new version | 29 // TODO(brettw) remove this when NaCl is updated to use the new version |
89 // that takes a pointer. | 30 // that takes a pointer. |
90 explicit URLLoader(const Instance& instance); | 31 explicit URLLoader(const Instance& instance); |
91 | 32 |
92 /// A constructor used when a <code>PP_Resource</code> is provided as a | 33 /// A constructor used when a <code>PP_Resource</code> is provided as a |
93 /// return value whose reference count we need to increment. | 34 /// return value whose reference count we need to increment. |
94 /// | 35 /// |
95 /// @param[in] resource A <code>PP_Resource</code>. | 36 /// @param[in] resource A <code>PP_Resource</code> corresponding to a |
| 37 /// <code>URLLoader</code> resource. |
96 explicit URLLoader(PP_Resource resource); | 38 explicit URLLoader(PP_Resource resource); |
97 | 39 |
98 /// A constructor used to allocate a new URLLoader in the browser. The | 40 /// A constructor used to allocate a new URLLoader in the browser. The |
99 /// resulting object will be <code>is_null</code> if the allocation failed. | 41 /// resulting object will be <code>is_null</code> if the allocation failed. |
100 /// | 42 /// |
101 /// @param[in] instance An <code>Instance</code>. | 43 /// @param[in] instance An <code>Instance</code>. |
102 explicit URLLoader(Instance* instance); | 44 explicit URLLoader(Instance* instance); |
103 | 45 |
104 /// The copy constructor for <code>URLLoader</code>. | 46 /// The copy constructor for <code>URLLoader</code>. |
105 /// | 47 /// |
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
220 /// | 162 /// |
221 /// <strong>Note:</strong> If the <code>URLLoader</code> object is destroyed | 163 /// <strong>Note:</strong> If the <code>URLLoader</code> object is destroyed |
222 /// while it is still open, then it will be implicitly closed so you are not | 164 /// while it is still open, then it will be implicitly closed so you are not |
223 /// required to call Close(). | 165 /// required to call Close(). |
224 void Close(); | 166 void Close(); |
225 }; | 167 }; |
226 | 168 |
227 } // namespace pp | 169 } // namespace pp |
228 | 170 |
229 #endif // PPAPI_CPP_URL_LOADER_H_ | 171 #endif // PPAPI_CPP_URL_LOADER_H_ |
OLD | NEW |