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

Side by Side Diff: ppapi/tests/test_url_loader.cc

Issue 6899055: PPAPI: Force async callback invocation option. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 9 years, 8 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
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 #include "ppapi/tests/test_url_loader.h" 5 #include "ppapi/tests/test_url_loader.h"
6 6
7 #include <stdio.h> 7 #include <stdio.h>
8 #include <string.h> 8 #include <string.h>
9 #include <string> 9 #include <string>
10 10
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
44 RUN_TEST(BasicGET); 44 RUN_TEST(BasicGET);
45 RUN_TEST(BasicPOST); 45 RUN_TEST(BasicPOST);
46 RUN_TEST(CompoundBodyPOST); 46 RUN_TEST(CompoundBodyPOST);
47 RUN_TEST(EmptyDataPOST); 47 RUN_TEST(EmptyDataPOST);
48 RUN_TEST(BinaryDataPOST); 48 RUN_TEST(BinaryDataPOST);
49 RUN_TEST(CustomRequestHeader); 49 RUN_TEST(CustomRequestHeader);
50 RUN_TEST(IgnoresBogusContentLength); 50 RUN_TEST(IgnoresBogusContentLength);
51 RUN_TEST(SameOriginRestriction); 51 RUN_TEST(SameOriginRestriction);
52 RUN_TEST(CrossOriginRequest); 52 RUN_TEST(CrossOriginRequest);
53 RUN_TEST(StreamToFile); 53 RUN_TEST(StreamToFile);
54 RUN_TEST(StreamToFileForceAsync);
54 RUN_TEST(AuditURLRedirect); 55 RUN_TEST(AuditURLRedirect);
55 RUN_TEST(AbortCalls); 56 RUN_TEST(AbortCalls);
56 } 57 }
57 58
58 std::string TestURLLoader::ReadEntireFile(pp::FileIO_Dev* file_io, 59 std::string TestURLLoader::ReadEntireFile(pp::FileIO_Dev* file_io,
59 std::string* data) { 60 std::string* data,
60 TestCompletionCallback callback(instance_->pp_instance()); 61 bool force_async) {
62 TestCompletionCallback callback(instance_->pp_instance(), force_async);
61 char buf[256]; 63 char buf[256];
62 int64_t offset = 0; 64 int64_t offset = 0;
63 65
64 for (;;) { 66 for (;;) {
65 int32_t rv = file_io->Read(offset, buf, sizeof(buf), callback); 67 int32_t rv = file_io->Read(offset, buf, sizeof(buf), callback);
68 if (force_async && rv != PP_OK_COMPLETIONPENDING)
69 return ReportError("FileIO::Read", rv);
66 if (rv == PP_OK_COMPLETIONPENDING) 70 if (rv == PP_OK_COMPLETIONPENDING)
67 rv = callback.WaitForResult(); 71 rv = callback.WaitForResult();
68 if (rv < 0) 72 if (rv < 0)
69 return ReportError("FileIO::Read", rv); 73 return ReportError("FileIO::Read", rv);
70 if (rv == 0) 74 if (rv == 0)
71 break; 75 break;
72 offset += rv; 76 offset += rv;
73 data->append(buf, rv); 77 data->append(buf, rv);
74 } 78 }
75 79
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
183 std::string TestURLLoader::TestIgnoresBogusContentLength() { 187 std::string TestURLLoader::TestIgnoresBogusContentLength() {
184 pp::URLRequestInfo request; 188 pp::URLRequestInfo request;
185 request.SetURL("/echo"); 189 request.SetURL("/echo");
186 request.SetMethod("POST"); 190 request.SetMethod("POST");
187 request.SetHeaders("Content-Length: 400"); 191 request.SetHeaders("Content-Length: 400");
188 std::string postdata("postdata"); 192 std::string postdata("postdata");
189 request.AppendDataToBody(postdata.data(), postdata.length()); 193 request.AppendDataToBody(postdata.data(), postdata.length());
190 return LoadAndCompareBody(request, postdata); 194 return LoadAndCompareBody(request, postdata);
191 } 195 }
192 196
193 std::string TestURLLoader::TestStreamToFile() { 197 std::string TestURLLoader::StreamToFile(bool force_async) {
194 pp::URLRequestInfo request; 198 pp::URLRequestInfo request;
195 request.SetURL("test_url_loader_data/hello.txt"); 199 request.SetURL("test_url_loader_data/hello.txt");
196 request.SetStreamToFile(true); 200 request.SetStreamToFile(true);
197 201 TestCompletionCallback callback(instance_->pp_instance(), force_async);
198 TestCompletionCallback callback(instance_->pp_instance());
199 202
200 pp::URLLoader loader(*instance_); 203 pp::URLLoader loader(*instance_);
201 int32_t rv = loader.Open(request, callback); 204 int32_t rv = loader.Open(request, callback);
205 if (force_async && rv != PP_OK_COMPLETIONPENDING)
206 // Why does triggering this crash the browser when testing manually?
207 return ReportError("URLLoader::Open", rv);
202 if (rv == PP_OK_COMPLETIONPENDING) 208 if (rv == PP_OK_COMPLETIONPENDING)
203 rv = callback.WaitForResult(); 209 rv = callback.WaitForResult();
204 if (rv != PP_OK) 210 if (rv != PP_OK)
205 return ReportError("URLLoader::Open", rv); 211 return ReportError("URLLoader::Open", rv);
206 212
207 pp::URLResponseInfo response_info(loader.GetResponseInfo()); 213 pp::URLResponseInfo response_info(loader.GetResponseInfo());
208 if (response_info.is_null()) 214 if (response_info.is_null())
209 return "URLLoader::GetResponseInfo returned null"; 215 return "URLLoader::GetResponseInfo returned null";
210 int32_t status_code = response_info.GetStatusCode(); 216 int32_t status_code = response_info.GetStatusCode();
211 if (status_code != 200) 217 if (status_code != 200)
212 return "Unexpected HTTP status code"; 218 return "Unexpected HTTP status code";
213 219
214 pp::FileRef_Dev body(response_info.GetBodyAsFileRef()); 220 pp::FileRef_Dev body(response_info.GetBodyAsFileRef());
215 if (body.is_null()) 221 if (body.is_null())
216 return "URLResponseInfo::GetBody returned null"; 222 return "URLResponseInfo::GetBody returned null";
217 223
218 rv = loader.FinishStreamingToFile(callback); 224 rv = loader.FinishStreamingToFile(callback);
225 if (force_async && rv != PP_OK_COMPLETIONPENDING)
226 return ReportError("URLLoader::FinishStreamingToFile", rv);
219 if (rv == PP_OK_COMPLETIONPENDING) 227 if (rv == PP_OK_COMPLETIONPENDING)
220 rv = callback.WaitForResult(); 228 rv = callback.WaitForResult();
221 if (rv != PP_OK) 229 if (rv != PP_OK)
222 return ReportError("URLLoader::FinishStreamingToFile", rv); 230 return ReportError("URLLoader::FinishStreamingToFile", rv);
223 231
224
225 pp::FileIO_Dev reader; 232 pp::FileIO_Dev reader;
226 rv = reader.Open(body, PP_FILEOPENFLAG_READ, callback); 233 rv = reader.Open(body, PP_FILEOPENFLAG_READ, callback);
234 if (force_async && rv != PP_OK_COMPLETIONPENDING)
235 return ReportError("FileIO::Open", rv);
227 if (rv == PP_OK_COMPLETIONPENDING) 236 if (rv == PP_OK_COMPLETIONPENDING)
228 rv = callback.WaitForResult(); 237 rv = callback.WaitForResult();
229 if (rv != PP_OK) 238 if (rv != PP_OK)
230 return ReportError("FileIO::Open", rv); 239 return ReportError("FileIO::Open", rv);
231 240
232 std::string data; 241 std::string data;
233 std::string error = ReadEntireFile(&reader, &data); 242 std::string error = ReadEntireFile(&reader, &data, force_async);
234 if (!error.empty()) 243 if (!error.empty())
235 return error; 244 return error;
236 245
237 std::string expected_body = "hello\n"; 246 std::string expected_body = "hello\n";
238 if (data.size() != expected_body.size()) 247 if (data.size() != expected_body.size())
239 return "ReadEntireFile returned unexpected content length"; 248 return "ReadEntireFile returned unexpected content length";
240 if (data != expected_body) 249 if (data != expected_body)
241 return "ReadEntireFile returned unexpected content"; 250 return "ReadEntireFile returned unexpected content";
242 251
243 int32_t file_descriptor = file_io_trusted_interface_->GetOSFileDescriptor( 252 int32_t file_descriptor = file_io_trusted_interface_->GetOSFileDescriptor(
244 reader.pp_resource()); 253 reader.pp_resource());
245 if (file_descriptor < 0) 254 if (file_descriptor < 0)
246 return "FileIO::GetOSFileDescriptor() returned a bad file descriptor."; 255 return "FileIO::GetOSFileDescriptor() returned a bad file descriptor.";
247 256
248 PASS(); 257 PASS();
249 } 258 }
250 259
260 std::string TestURLLoader::TestStreamToFile() {
261 return StreamToFile(false);
262 }
263
264 std::string TestURLLoader::TestStreamToFileForceAsync() {
265 return StreamToFile(true);
266 }
267
251 std::string TestURLLoader::TestSameOriginRestriction() { 268 std::string TestURLLoader::TestSameOriginRestriction() {
252 pp::URLRequestInfo request; 269 pp::URLRequestInfo request;
253 request.SetURL("http://www.google.com/"); 270 request.SetURL("http://www.google.com/");
254 271
255 TestCompletionCallback callback(instance_->pp_instance()); 272 TestCompletionCallback callback(instance_->pp_instance());
256 273
257 pp::URLLoader loader(*instance_); 274 pp::URLLoader loader(*instance_);
258 int32_t rv = loader.Open(request, callback); 275 int32_t rv = loader.Open(request, callback);
259 if (rv == PP_OK_COMPLETIONPENDING) 276 if (rv == PP_OK_COMPLETIONPENDING)
260 rv = callback.WaitForResult(); 277 rv = callback.WaitForResult();
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after
375 392
376 // TODO(viettrungluu): More abort tests (but add basic tests first). 393 // TODO(viettrungluu): More abort tests (but add basic tests first).
377 // Also test that Close() aborts properly. crbug.com/69457 394 // Also test that Close() aborts properly. crbug.com/69457
378 395
379 PASS(); 396 PASS();
380 } 397 }
381 398
382 // TODO(viettrungluu): Add tests for FollowRedirect, 399 // TODO(viettrungluu): Add tests for FollowRedirect,
383 // Get{Upload,Download}Progress, Close (including abort tests if applicable). 400 // Get{Upload,Download}Progress, Close (including abort tests if applicable).
384 // TODO(darin): Add a test for GrantUniversalAccess. 401 // TODO(darin): Add a test for GrantUniversalAccess.
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698