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 #include "ppapi/tests/test_file_io.h" | 5 #include "ppapi/tests/test_file_io.h" |
6 | 6 |
7 #include <stdio.h> | 7 #include <stdio.h> |
8 #include <string.h> | 8 #include <string.h> |
9 | 9 |
10 #include "ppapi/c/pp_errors.h" | 10 #include "ppapi/c/pp_errors.h" |
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
104 return PP_OK; | 104 return PP_OK; |
105 } | 105 } |
106 | 106 |
107 } // namespace | 107 } // namespace |
108 | 108 |
109 bool TestFileIO::Init() { | 109 bool TestFileIO::Init() { |
110 return InitTestingInterface() && EnsureRunningOverHTTP(); | 110 return InitTestingInterface() && EnsureRunningOverHTTP(); |
111 } | 111 } |
112 | 112 |
113 void TestFileIO::RunTest() { | 113 void TestFileIO::RunTest() { |
114 RUN_TEST(Open); | 114 RUN_TEST_FORCEASYNC_AND_NOT(Open); |
115 RUN_TEST(ReadWriteSetLength); | 115 RUN_TEST_FORCEASYNC_AND_NOT(ReadWriteSetLength); |
116 RUN_TEST(TouchQuery); | 116 RUN_TEST_FORCEASYNC_AND_NOT(TouchQuery); |
117 RUN_TEST(AbortCalls); | 117 RUN_TEST_FORCEASYNC_AND_NOT(TouchQuery); |
| 118 RUN_TEST_FORCEASYNC_AND_NOT(AbortCalls); |
| 119 RUN_TEST_FORCEASYNC_AND_NOT(AbortCalls); |
118 // TODO(viettrungluu): add tests: | 120 // TODO(viettrungluu): add tests: |
119 // - that PP_ERROR_PENDING is correctly returned | 121 // - that PP_ERROR_PENDING is correctly returned |
120 // - that operations respect the file open modes (flags) | 122 // - that operations respect the file open modes (flags) |
121 } | 123 } |
122 | 124 |
123 std::string TestFileIO::TestOpen() { | 125 std::string TestFileIO::TestOpen() { |
124 TestCompletionCallback callback(instance_->pp_instance()); | 126 TestCompletionCallback callback(instance_->pp_instance(), force_async_); |
125 | 127 |
126 pp::FileSystem_Dev file_system(instance_, PP_FILESYSTEMTYPE_LOCALTEMPORARY); | 128 pp::FileSystem_Dev file_system(instance_, PP_FILESYSTEMTYPE_LOCALTEMPORARY); |
127 pp::FileRef_Dev file_ref(file_system, "/file_open"); | 129 pp::FileRef_Dev file_ref(file_system, "/file_open"); |
128 int32_t rv = file_system.Open(1024, callback); | 130 int32_t rv = file_system.Open(1024, callback); |
| 131 if (force_async_ && rv != PP_OK_COMPLETIONPENDING) |
| 132 return ReportError("FileSystem::Open force_async", rv); |
129 if (rv == PP_OK_COMPLETIONPENDING) | 133 if (rv == PP_OK_COMPLETIONPENDING) |
130 rv = callback.WaitForResult(); | 134 rv = callback.WaitForResult(); |
131 if (rv != PP_OK) | 135 if (rv != PP_OK) |
132 return ReportError("FileSystem::Open", rv); | 136 return ReportError("FileSystem::Open", rv); |
133 | 137 |
134 std::string result; | 138 std::string result; |
135 result = MatchOpenExpectations( | 139 result = MatchOpenExpectations( |
136 &file_system, | 140 &file_system, |
137 PP_FILEOPENFLAG_READ, | 141 PP_FILEOPENFLAG_READ, |
138 DONT_CREATE_IF_DOESNT_EXIST | OPEN_IF_EXISTS | DONT_TRUNCATE_IF_EXISTS); | 142 DONT_CREATE_IF_DOESNT_EXIST | OPEN_IF_EXISTS | DONT_TRUNCATE_IF_EXISTS); |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
210 &file_system, | 214 &file_system, |
211 PP_FILEOPENFLAG_READ | PP_FILEOPENFLAG_TRUNCATE, | 215 PP_FILEOPENFLAG_READ | PP_FILEOPENFLAG_TRUNCATE, |
212 INVALID_FLAG_COMBINATION); | 216 INVALID_FLAG_COMBINATION); |
213 if (!result.empty()) | 217 if (!result.empty()) |
214 return result; | 218 return result; |
215 | 219 |
216 PASS(); | 220 PASS(); |
217 } | 221 } |
218 | 222 |
219 std::string TestFileIO::TestReadWriteSetLength() { | 223 std::string TestFileIO::TestReadWriteSetLength() { |
220 TestCompletionCallback callback(instance_->pp_instance()); | 224 TestCompletionCallback callback(instance_->pp_instance(), force_async_); |
221 | 225 |
222 pp::FileSystem_Dev file_system(instance_, PP_FILESYSTEMTYPE_LOCALTEMPORARY); | 226 pp::FileSystem_Dev file_system(instance_, PP_FILESYSTEMTYPE_LOCALTEMPORARY); |
223 pp::FileRef_Dev file_ref(file_system, "/file_read_write_setlength"); | 227 pp::FileRef_Dev file_ref(file_system, "/file_read_write_setlength"); |
224 int32_t rv = file_system.Open(1024, callback); | 228 int32_t rv = file_system.Open(1024, callback); |
| 229 if (force_async_ && rv != PP_OK_COMPLETIONPENDING) |
| 230 return ReportError("FileSystem::Open force_async", rv); |
225 if (rv == PP_OK_COMPLETIONPENDING) | 231 if (rv == PP_OK_COMPLETIONPENDING) |
226 rv = callback.WaitForResult(); | 232 rv = callback.WaitForResult(); |
227 if (rv != PP_OK) | 233 if (rv != PP_OK) |
228 return ReportError("FileSystem::Open", rv); | 234 return ReportError("FileSystem::Open", rv); |
229 | 235 |
230 pp::FileIO_Dev file_io(instance_); | 236 pp::FileIO_Dev file_io(instance_); |
231 rv = file_io.Open(file_ref, | 237 rv = file_io.Open(file_ref, |
232 PP_FILEOPENFLAG_CREATE | | 238 PP_FILEOPENFLAG_CREATE | |
233 PP_FILEOPENFLAG_TRUNCATE | | 239 PP_FILEOPENFLAG_TRUNCATE | |
234 PP_FILEOPENFLAG_READ | | 240 PP_FILEOPENFLAG_READ | |
235 PP_FILEOPENFLAG_WRITE, | 241 PP_FILEOPENFLAG_WRITE, |
236 callback); | 242 callback); |
| 243 if (force_async_ && rv != PP_OK_COMPLETIONPENDING) |
| 244 return ReportError("FileIO::Open force_async", rv); |
237 if (rv == PP_OK_COMPLETIONPENDING) | 245 if (rv == PP_OK_COMPLETIONPENDING) |
238 rv = callback.WaitForResult(); | 246 rv = callback.WaitForResult(); |
239 if (rv != PP_OK) | 247 if (rv != PP_OK) |
240 return ReportError("FileIO::Open", rv); | 248 return ReportError("FileIO::Open", rv); |
241 | 249 |
242 // Write something to the file. | 250 // Write something to the file. |
243 rv = WriteEntireBuffer(instance_->pp_instance(), &file_io, 0, "test_test"); | 251 rv = WriteEntireBuffer(instance_->pp_instance(), &file_io, 0, "test_test"); |
244 if (rv != PP_OK) | 252 if (rv != PP_OK) |
245 return ReportError("FileIO::Write", rv); | 253 return ReportError("FileIO::Write", rv); |
246 | 254 |
247 // Read the entire file. | 255 // Read the entire file. |
248 std::string read_buffer; | 256 std::string read_buffer; |
249 rv = ReadEntireFile(instance_->pp_instance(), &file_io, 0, &read_buffer); | 257 rv = ReadEntireFile(instance_->pp_instance(), &file_io, 0, &read_buffer); |
250 if (rv != PP_OK) | 258 if (rv != PP_OK) |
251 return ReportError("FileIO::Read", rv); | 259 return ReportError("FileIO::Read", rv); |
252 if (read_buffer != "test_test") | 260 if (read_buffer != "test_test") |
253 return ReportMismatch("FileIO::Read", read_buffer, "test_test"); | 261 return ReportMismatch("FileIO::Read", read_buffer, "test_test"); |
254 | 262 |
255 // Truncate the file. | 263 // Truncate the file. |
256 rv = file_io.SetLength(4, callback); | 264 rv = file_io.SetLength(4, callback); |
| 265 if (force_async_ && rv != PP_OK_COMPLETIONPENDING) |
| 266 return ReportError("FileIO::SetLength force_async", rv); |
257 if (rv == PP_OK_COMPLETIONPENDING) | 267 if (rv == PP_OK_COMPLETIONPENDING) |
258 rv = callback.WaitForResult(); | 268 rv = callback.WaitForResult(); |
259 if (rv != PP_OK) | 269 if (rv != PP_OK) |
260 return ReportError("FileIO::SetLength", rv); | 270 return ReportError("FileIO::SetLength", rv); |
261 | 271 |
262 // Check the file contents. | 272 // Check the file contents. |
263 read_buffer.clear(); | 273 read_buffer.clear(); |
264 rv = ReadEntireFile(instance_->pp_instance(), &file_io, 0, &read_buffer); | 274 rv = ReadEntireFile(instance_->pp_instance(), &file_io, 0, &read_buffer); |
265 if (rv != PP_OK) | 275 if (rv != PP_OK) |
266 return ReportError("FileIO::Read", rv); | 276 return ReportError("FileIO::Read", rv); |
(...skipping 17 matching lines...) Expand all Loading... |
284 read_buffer.clear(); | 294 read_buffer.clear(); |
285 rv = ReadEntireFile(instance_->pp_instance(), &file_io, 0, &read_buffer); | 295 rv = ReadEntireFile(instance_->pp_instance(), &file_io, 0, &read_buffer); |
286 if (rv != PP_OK) | 296 if (rv != PP_OK) |
287 return ReportError("FileIO::Read", rv); | 297 return ReportError("FileIO::Read", rv); |
288 if (read_buffer != std::string("test\0\0\0\0test", 12)) | 298 if (read_buffer != std::string("test\0\0\0\0test", 12)) |
289 return ReportMismatch("FileIO::Read", read_buffer, | 299 return ReportMismatch("FileIO::Read", read_buffer, |
290 std::string("test\0\0\0\0test", 12)); | 300 std::string("test\0\0\0\0test", 12)); |
291 | 301 |
292 // Extend the file. | 302 // Extend the file. |
293 rv = file_io.SetLength(16, callback); | 303 rv = file_io.SetLength(16, callback); |
| 304 if (force_async_ && rv != PP_OK_COMPLETIONPENDING) |
| 305 return ReportError("FileIO::SetLength force_async", rv); |
294 if (rv == PP_OK_COMPLETIONPENDING) | 306 if (rv == PP_OK_COMPLETIONPENDING) |
295 rv = callback.WaitForResult(); | 307 rv = callback.WaitForResult(); |
296 if (rv != PP_OK) | 308 if (rv != PP_OK) |
297 return ReportError("FileIO::SetLength", rv); | 309 return ReportError("FileIO::SetLength", rv); |
298 | 310 |
299 // Check the contents of the file. | 311 // Check the contents of the file. |
300 read_buffer.clear(); | 312 read_buffer.clear(); |
301 rv = ReadEntireFile(instance_->pp_instance(), &file_io, 0, &read_buffer); | 313 rv = ReadEntireFile(instance_->pp_instance(), &file_io, 0, &read_buffer); |
302 if (rv != PP_OK) | 314 if (rv != PP_OK) |
303 return ReportError("FileIO::Read", rv); | 315 return ReportError("FileIO::Read", rv); |
(...skipping 21 matching lines...) Expand all Loading... |
325 if (rv != PP_OK) | 337 if (rv != PP_OK) |
326 return ReportError("FileIO::Read", rv); | 338 return ReportError("FileIO::Read", rv); |
327 if (read_buffer != std::string("testtest\0\0\0\0", 12)) | 339 if (read_buffer != std::string("testtest\0\0\0\0", 12)) |
328 return ReportMismatch("FileIO::Read", read_buffer, | 340 return ReportMismatch("FileIO::Read", read_buffer, |
329 std::string("testtest\0\0\0\0", 12)); | 341 std::string("testtest\0\0\0\0", 12)); |
330 | 342 |
331 PASS(); | 343 PASS(); |
332 } | 344 } |
333 | 345 |
334 std::string TestFileIO::TestTouchQuery() { | 346 std::string TestFileIO::TestTouchQuery() { |
335 TestCompletionCallback callback(instance_->pp_instance()); | 347 TestCompletionCallback callback(instance_->pp_instance(), force_async_); |
336 | 348 |
337 pp::FileSystem_Dev file_system(instance_, PP_FILESYSTEMTYPE_LOCALTEMPORARY); | 349 pp::FileSystem_Dev file_system(instance_, PP_FILESYSTEMTYPE_LOCALTEMPORARY); |
338 int32_t rv = file_system.Open(1024, callback); | 350 int32_t rv = file_system.Open(1024, callback); |
| 351 if (force_async_ && rv != PP_OK_COMPLETIONPENDING) |
| 352 return ReportError("FileSystem::Open force_async", rv); |
339 if (rv == PP_OK_COMPLETIONPENDING) | 353 if (rv == PP_OK_COMPLETIONPENDING) |
340 rv = callback.WaitForResult(); | 354 rv = callback.WaitForResult(); |
341 if (rv != PP_OK) | 355 if (rv != PP_OK) |
342 return ReportError("FileSystem::Open", rv); | 356 return ReportError("FileSystem::Open", rv); |
343 | 357 |
344 pp::FileRef_Dev file_ref(file_system, "/file_touch"); | 358 pp::FileRef_Dev file_ref(file_system, "/file_touch"); |
345 pp::FileIO_Dev file_io(instance_); | 359 pp::FileIO_Dev file_io(instance_); |
346 rv = file_io.Open(file_ref, | 360 rv = file_io.Open(file_ref, |
347 PP_FILEOPENFLAG_CREATE | | 361 PP_FILEOPENFLAG_CREATE | |
348 PP_FILEOPENFLAG_TRUNCATE | | 362 PP_FILEOPENFLAG_TRUNCATE | |
349 PP_FILEOPENFLAG_WRITE, | 363 PP_FILEOPENFLAG_WRITE, |
350 callback); | 364 callback); |
| 365 if (force_async_ && rv != PP_OK_COMPLETIONPENDING) |
| 366 return ReportError("FileIO::Open force_async", rv); |
351 if (rv == PP_OK_COMPLETIONPENDING) | 367 if (rv == PP_OK_COMPLETIONPENDING) |
352 rv = callback.WaitForResult(); | 368 rv = callback.WaitForResult(); |
353 if (rv != PP_OK) | 369 if (rv != PP_OK) |
354 return ReportError("FileIO::Open", rv); | 370 return ReportError("FileIO::Open", rv); |
355 | 371 |
356 // Write some data to have a non-zero file size. | 372 // Write some data to have a non-zero file size. |
357 rv = file_io.Write(0, "test", 4, callback); | 373 rv = file_io.Write(0, "test", 4, callback); |
| 374 if (force_async_ && rv != PP_OK_COMPLETIONPENDING) |
| 375 return ReportError("FileIO::Write force_async", rv); |
358 if (rv == PP_OK_COMPLETIONPENDING) | 376 if (rv == PP_OK_COMPLETIONPENDING) |
359 rv = callback.WaitForResult(); | 377 rv = callback.WaitForResult(); |
360 if (rv != 4) | 378 if (rv != 4) |
361 return ReportError("FileIO::Write", rv); | 379 return ReportError("FileIO::Write", rv); |
362 | 380 |
363 // last_access_time's granularity is 1 day | 381 // last_access_time's granularity is 1 day |
364 // last_modified_time's granularity is 2 seconds | 382 // last_modified_time's granularity is 2 seconds |
365 const PP_Time last_access_time = 123 * 24 * 3600.0; | 383 const PP_Time last_access_time = 123 * 24 * 3600.0; |
366 const PP_Time last_modified_time = 246.0; | 384 const PP_Time last_modified_time = 246.0; |
367 rv = file_io.Touch(last_access_time, last_modified_time, callback); | 385 rv = file_io.Touch(last_access_time, last_modified_time, callback); |
| 386 if (force_async_ && rv != PP_OK_COMPLETIONPENDING) |
| 387 return ReportError("FileIO::Touch force_async", rv); |
368 if (rv == PP_OK_COMPLETIONPENDING) | 388 if (rv == PP_OK_COMPLETIONPENDING) |
369 rv = callback.WaitForResult(); | 389 rv = callback.WaitForResult(); |
370 if (rv != PP_OK) | 390 if (rv != PP_OK) |
371 return ReportError("FileSystem::Touch", rv); | 391 return ReportError("FileIO::Touch", rv); |
372 | 392 |
373 PP_FileInfo_Dev info; | 393 PP_FileInfo_Dev info; |
374 rv = file_io.Query(&info, callback); | 394 rv = file_io.Query(&info, callback); |
| 395 if (force_async_ && rv != PP_OK_COMPLETIONPENDING) |
| 396 return ReportError("FileIO::Query force_async", rv); |
375 if (rv == PP_OK_COMPLETIONPENDING) | 397 if (rv == PP_OK_COMPLETIONPENDING) |
376 rv = callback.WaitForResult(); | 398 rv = callback.WaitForResult(); |
377 if (rv != PP_OK) | 399 if (rv != PP_OK) |
378 return ReportError("FileSystem::Query", rv); | 400 return ReportError("FileIO::Query", rv); |
379 | 401 |
380 if ((info.size != 4) || | 402 if ((info.size != 4) || |
381 (info.type != PP_FILETYPE_REGULAR) || | 403 (info.type != PP_FILETYPE_REGULAR) || |
382 (info.system_type != PP_FILESYSTEMTYPE_LOCALTEMPORARY) || | 404 (info.system_type != PP_FILESYSTEMTYPE_LOCALTEMPORARY) || |
383 (info.last_access_time != last_access_time) || | 405 (info.last_access_time != last_access_time) || |
384 (info.last_modified_time != last_modified_time)) | 406 (info.last_modified_time != last_modified_time)) |
385 return "FileSystem::Query() has returned bad data."; | 407 return "FileIO::Query() has returned bad data."; |
386 | 408 |
387 // Call |Query()| again, to make sure it works a second time. | 409 // Call |Query()| again, to make sure it works a second time. |
388 rv = file_io.Query(&info, callback); | 410 rv = file_io.Query(&info, callback); |
| 411 if (force_async_ && rv != PP_OK_COMPLETIONPENDING) |
| 412 return ReportError("FileIO::Query force_async", rv); |
389 if (rv == PP_OK_COMPLETIONPENDING) | 413 if (rv == PP_OK_COMPLETIONPENDING) |
390 rv = callback.WaitForResult(); | 414 rv = callback.WaitForResult(); |
391 if (rv != PP_OK) | 415 if (rv != PP_OK) |
392 return ReportError("FileSystem::Query", rv); | 416 return ReportError("FileIO::Query", rv); |
393 | 417 |
394 PASS(); | 418 PASS(); |
395 } | 419 } |
396 | 420 |
397 std::string TestFileIO::TestAbortCalls() { | 421 std::string TestFileIO::TestAbortCalls() { |
398 TestCompletionCallback callback(instance_->pp_instance()); | 422 TestCompletionCallback callback(instance_->pp_instance(), force_async_); |
399 | 423 |
400 pp::FileSystem_Dev file_system(instance_, PP_FILESYSTEMTYPE_LOCALTEMPORARY); | 424 pp::FileSystem_Dev file_system(instance_, PP_FILESYSTEMTYPE_LOCALTEMPORARY); |
401 pp::FileRef_Dev file_ref(file_system, "/file_abort_calls"); | 425 pp::FileRef_Dev file_ref(file_system, "/file_abort_calls"); |
402 int32_t rv = file_system.Open(1024, callback); | 426 int32_t rv = file_system.Open(1024, callback); |
| 427 if (force_async_ && rv != PP_OK_COMPLETIONPENDING) |
| 428 return ReportError("FileSystem::Open force_async", rv); |
403 if (rv == PP_OK_COMPLETIONPENDING) | 429 if (rv == PP_OK_COMPLETIONPENDING) |
404 rv = callback.WaitForResult(); | 430 rv = callback.WaitForResult(); |
405 if (rv != PP_OK) | 431 if (rv != PP_OK) |
406 return ReportError("FileSystem::Open", rv); | 432 return ReportError("FileSystem::Open", rv); |
407 | 433 |
408 // First, create a file which to do ops on. | 434 // First, create a file which to do ops on. |
409 { | 435 { |
410 pp::FileIO_Dev file_io(instance_); | 436 pp::FileIO_Dev file_io(instance_); |
411 rv = file_io.Open(file_ref, | 437 rv = file_io.Open(file_ref, |
412 PP_FILEOPENFLAG_CREATE | PP_FILEOPENFLAG_WRITE, | 438 PP_FILEOPENFLAG_CREATE | PP_FILEOPENFLAG_WRITE, |
413 callback); | 439 callback); |
| 440 if (force_async_ && rv != PP_OK_COMPLETIONPENDING) |
| 441 return ReportError("FileIO::Open force_async", rv); |
414 if (rv == PP_OK_COMPLETIONPENDING) | 442 if (rv == PP_OK_COMPLETIONPENDING) |
415 rv = callback.WaitForResult(); | 443 rv = callback.WaitForResult(); |
416 if (rv != PP_OK) | 444 if (rv != PP_OK) |
417 return ReportError("FileIO::Open", rv); | 445 return ReportError("FileIO::Open", rv); |
418 | 446 |
419 // N.B.: Should write at least 3 bytes. | 447 // N.B.: Should write at least 3 bytes. |
420 rv = WriteEntireBuffer(instance_->pp_instance(), | 448 rv = WriteEntireBuffer(instance_->pp_instance(), |
421 &file_io, | 449 &file_io, |
422 0, | 450 0, |
423 "foobarbazquux"); | 451 "foobarbazquux"); |
424 if (rv != PP_OK) | 452 if (rv != PP_OK) |
425 return ReportError("FileIO::Write", rv); | 453 return ReportError("FileIO::Write", rv); |
426 } | 454 } |
427 | 455 |
428 // Abort |Open()|. | 456 // Abort |Open()|. |
429 { | 457 { |
430 callback.reset_run_count(); | 458 callback.reset_run_count(); |
431 rv = pp::FileIO_Dev(instance_) | 459 rv = pp::FileIO_Dev(instance_) |
432 .Open(file_ref, PP_FILEOPENFLAG_READ,callback); | 460 .Open(file_ref, PP_FILEOPENFLAG_READ,callback); |
| 461 if (force_async_ && rv != PP_OK_COMPLETIONPENDING) |
| 462 return ReportError("FileIO::Open force_async", rv); |
433 if (callback.run_count() > 0) | 463 if (callback.run_count() > 0) |
434 return "FileIO::Open ran callback synchronously."; | 464 return "FileIO::Open ran callback synchronously."; |
435 if (rv == PP_OK_COMPLETIONPENDING) { | 465 if (rv == PP_OK_COMPLETIONPENDING) { |
436 rv = callback.WaitForResult(); | 466 rv = callback.WaitForResult(); |
437 if (rv != PP_ERROR_ABORTED) | 467 if (rv != PP_ERROR_ABORTED) |
438 return "FileIO::Open not aborted."; | 468 return "FileIO::Open not aborted."; |
439 } else if (rv != PP_OK) { | 469 } else if (rv != PP_OK) { |
440 return ReportError("FileIO::Open", rv); | 470 return ReportError("FileIO::Open", rv); |
441 } | 471 } |
442 } | 472 } |
443 | 473 |
444 // Abort |Query()|. | 474 // Abort |Query()|. |
445 { | 475 { |
446 PP_FileInfo_Dev info = { 0 }; | 476 PP_FileInfo_Dev info = { 0 }; |
447 { | 477 { |
448 pp::FileIO_Dev file_io(instance_); | 478 pp::FileIO_Dev file_io(instance_); |
449 rv = file_io.Open(file_ref, PP_FILEOPENFLAG_READ, callback); | 479 rv = file_io.Open(file_ref, PP_FILEOPENFLAG_READ, callback); |
| 480 if (force_async_ && rv != PP_OK_COMPLETIONPENDING) |
| 481 return ReportError("FileIO::Open force_async", rv); |
450 if (rv == PP_OK_COMPLETIONPENDING) | 482 if (rv == PP_OK_COMPLETIONPENDING) |
451 rv = callback.WaitForResult(); | 483 rv = callback.WaitForResult(); |
452 if (rv != PP_OK) | 484 if (rv != PP_OK) |
453 return ReportError("FileIO::Open", rv); | 485 return ReportError("FileIO::Open", rv); |
454 | 486 |
455 callback.reset_run_count(); | 487 callback.reset_run_count(); |
456 rv = file_io.Query(&info, callback); | 488 rv = file_io.Query(&info, callback); |
| 489 if (force_async_ && rv != PP_OK_COMPLETIONPENDING) |
| 490 return ReportError("FileIO::Query force_async", rv); |
457 } // Destroy |file_io|. | 491 } // Destroy |file_io|. |
458 if (rv == PP_OK_COMPLETIONPENDING) { | 492 if (rv == PP_OK_COMPLETIONPENDING) { |
459 // Save a copy and make sure |info| doesn't get written to. | 493 // Save a copy and make sure |info| doesn't get written to. |
460 PP_FileInfo_Dev info_copy; | 494 PP_FileInfo_Dev info_copy; |
461 memcpy(&info_copy, &info, sizeof(info)); | 495 memcpy(&info_copy, &info, sizeof(info)); |
462 rv = callback.WaitForResult(); | 496 rv = callback.WaitForResult(); |
463 if (rv != PP_ERROR_ABORTED) | 497 if (rv != PP_ERROR_ABORTED) |
464 return "FileIO::Query not aborted."; | 498 return "FileIO::Query not aborted."; |
465 if (memcmp(&info_copy, &info, sizeof(info)) != 0) | 499 if (memcmp(&info_copy, &info, sizeof(info)) != 0) |
466 return "FileIO::Query wrote data after resource destruction."; | 500 return "FileIO::Query wrote data after resource destruction."; |
467 } else if (rv != PP_OK) { | 501 } else if (rv != PP_OK) { |
468 return ReportError("FileIO::Query", rv); | 502 return ReportError("FileIO::Query", rv); |
469 } | 503 } |
470 } | 504 } |
471 | 505 |
472 // Abort |Touch()|. | 506 // Abort |Touch()|. |
473 { | 507 { |
474 { | 508 { |
475 pp::FileIO_Dev file_io(instance_); | 509 pp::FileIO_Dev file_io(instance_); |
476 rv = file_io.Open(file_ref, PP_FILEOPENFLAG_WRITE, callback); | 510 rv = file_io.Open(file_ref, PP_FILEOPENFLAG_WRITE, callback); |
| 511 if (force_async_ && rv != PP_OK_COMPLETIONPENDING) |
| 512 return ReportError("FileIO::Open force_async", rv); |
477 if (rv == PP_OK_COMPLETIONPENDING) | 513 if (rv == PP_OK_COMPLETIONPENDING) |
478 rv = callback.WaitForResult(); | 514 rv = callback.WaitForResult(); |
479 if (rv != PP_OK) | 515 if (rv != PP_OK) |
480 return ReportError("FileIO::Open", rv); | 516 return ReportError("FileIO::Open", rv); |
481 | 517 |
482 callback.reset_run_count(); | 518 callback.reset_run_count(); |
483 rv = file_io.Touch(0, 0, callback); | 519 rv = file_io.Touch(0, 0, callback); |
| 520 if (force_async_ && rv != PP_OK_COMPLETIONPENDING) |
| 521 return ReportError("FileIO::Touch force_async", rv); |
484 } // Destroy |file_io|. | 522 } // Destroy |file_io|. |
485 if (rv == PP_OK_COMPLETIONPENDING) { | 523 if (rv == PP_OK_COMPLETIONPENDING) { |
486 rv = callback.WaitForResult(); | 524 rv = callback.WaitForResult(); |
487 if (rv != PP_ERROR_ABORTED) | 525 if (rv != PP_ERROR_ABORTED) |
488 return "FileIO::Touch not aborted."; | 526 return "FileIO::Touch not aborted."; |
489 } else if (rv != PP_OK) { | 527 } else if (rv != PP_OK) { |
490 return ReportError("FileIO::Touch", rv); | 528 return ReportError("FileIO::Touch", rv); |
491 } | 529 } |
492 } | 530 } |
493 | 531 |
494 // Abort |Read()|. | 532 // Abort |Read()|. |
495 { | 533 { |
496 char buf[3] = { 0 }; | 534 char buf[3] = { 0 }; |
497 { | 535 { |
498 pp::FileIO_Dev file_io(instance_); | 536 pp::FileIO_Dev file_io(instance_); |
499 rv = file_io.Open(file_ref, PP_FILEOPENFLAG_READ, callback); | 537 rv = file_io.Open(file_ref, PP_FILEOPENFLAG_READ, callback); |
| 538 if (force_async_ && rv != PP_OK_COMPLETIONPENDING) |
| 539 return ReportError("FileIO::Open force_async", rv); |
500 if (rv == PP_OK_COMPLETIONPENDING) | 540 if (rv == PP_OK_COMPLETIONPENDING) |
501 rv = callback.WaitForResult(); | 541 rv = callback.WaitForResult(); |
502 if (rv != PP_OK) | 542 if (rv != PP_OK) |
503 return ReportError("FileIO::Open", rv); | 543 return ReportError("FileIO::Open", rv); |
504 | 544 |
505 callback.reset_run_count(); | 545 callback.reset_run_count(); |
506 rv = file_io.Read(0, buf, sizeof(buf), callback); | 546 rv = file_io.Read(0, buf, sizeof(buf), callback); |
| 547 if (force_async_ && rv != PP_OK_COMPLETIONPENDING) |
| 548 return ReportError("FileIO::Read force_async", rv); |
507 } // Destroy |file_io|. | 549 } // Destroy |file_io|. |
508 if (rv == PP_OK_COMPLETIONPENDING) { | 550 if (rv == PP_OK_COMPLETIONPENDING) { |
509 // Save a copy and make sure |buf| doesn't get written to. | 551 // Save a copy and make sure |buf| doesn't get written to. |
510 char buf_copy[3]; | 552 char buf_copy[3]; |
511 memcpy(&buf_copy, &buf, sizeof(buf)); | 553 memcpy(&buf_copy, &buf, sizeof(buf)); |
512 rv = callback.WaitForResult(); | 554 rv = callback.WaitForResult(); |
513 if (rv != PP_ERROR_ABORTED) | 555 if (rv != PP_ERROR_ABORTED) |
514 return "FileIO::Read not aborted."; | 556 return "FileIO::Read not aborted."; |
515 if (memcmp(&buf_copy, &buf, sizeof(buf)) != 0) | 557 if (memcmp(&buf_copy, &buf, sizeof(buf)) != 0) |
516 return "FileIO::Read wrote data after resource destruction."; | 558 return "FileIO::Read wrote data after resource destruction."; |
517 } else if (rv != PP_OK) { | 559 } else if (rv != PP_OK) { |
518 return ReportError("FileIO::Read", rv); | 560 return ReportError("FileIO::Read", rv); |
519 } | 561 } |
520 } | 562 } |
521 | 563 |
522 // Abort |Write()|. | 564 // Abort |Write()|. |
523 { | 565 { |
524 char buf[3] = { 0 }; | 566 char buf[3] = { 0 }; |
525 { | 567 { |
526 pp::FileIO_Dev file_io(instance_); | 568 pp::FileIO_Dev file_io(instance_); |
527 rv = file_io.Open(file_ref, PP_FILEOPENFLAG_READ, callback); | 569 rv = file_io.Open(file_ref, PP_FILEOPENFLAG_READ, callback); |
| 570 if (force_async_ && rv != PP_OK_COMPLETIONPENDING) |
| 571 return ReportError("FileIO::Open force_async", rv); |
528 if (rv == PP_OK_COMPLETIONPENDING) | 572 if (rv == PP_OK_COMPLETIONPENDING) |
529 rv = callback.WaitForResult(); | 573 rv = callback.WaitForResult(); |
530 if (rv != PP_OK) | 574 if (rv != PP_OK) |
531 return ReportError("FileIO::Open", rv); | 575 return ReportError("FileIO::Open", rv); |
532 | 576 |
533 callback.reset_run_count(); | 577 callback.reset_run_count(); |
534 rv = file_io.Write(0, buf, sizeof(buf), callback); | 578 rv = file_io.Write(0, buf, sizeof(buf), callback); |
| 579 if (force_async_ && rv != PP_OK_COMPLETIONPENDING) |
| 580 return ReportError("FileIO::Write force_async", rv); |
535 } // Destroy |file_io|. | 581 } // Destroy |file_io|. |
536 if (rv == PP_OK_COMPLETIONPENDING) { | 582 if (rv == PP_OK_COMPLETIONPENDING) { |
537 rv = callback.WaitForResult(); | 583 rv = callback.WaitForResult(); |
538 if (rv != PP_ERROR_ABORTED) | 584 if (rv != PP_ERROR_ABORTED) |
539 return "FileIO::Write not aborted."; | 585 return "FileIO::Write not aborted."; |
540 } else if (rv != PP_OK) { | 586 } else if (rv != PP_OK) { |
541 return ReportError("FileIO::Write", rv); | 587 return ReportError("FileIO::Write", rv); |
542 } | 588 } |
543 } | 589 } |
544 | 590 |
545 // Abort |SetLength()|. | 591 // Abort |SetLength()|. |
546 { | 592 { |
547 { | 593 { |
548 pp::FileIO_Dev file_io(instance_); | 594 pp::FileIO_Dev file_io(instance_); |
549 rv = file_io.Open(file_ref, PP_FILEOPENFLAG_READ, callback); | 595 rv = file_io.Open(file_ref, PP_FILEOPENFLAG_READ, callback); |
| 596 if (force_async_ && rv != PP_OK_COMPLETIONPENDING) |
| 597 return ReportError("FileIO::Open force_async", rv); |
550 if (rv == PP_OK_COMPLETIONPENDING) | 598 if (rv == PP_OK_COMPLETIONPENDING) |
551 rv = callback.WaitForResult(); | 599 rv = callback.WaitForResult(); |
552 if (rv != PP_OK) | 600 if (rv != PP_OK) |
553 return ReportError("FileIO::Open", rv); | 601 return ReportError("FileIO::Open", rv); |
554 | 602 |
555 callback.reset_run_count(); | 603 callback.reset_run_count(); |
556 rv = file_io.SetLength(3, callback); | 604 rv = file_io.SetLength(3, callback); |
| 605 if (force_async_ && rv != PP_OK_COMPLETIONPENDING) |
| 606 return ReportError("FileIO::SetLength force_async", rv); |
557 } // Destroy |file_io|. | 607 } // Destroy |file_io|. |
558 if (rv == PP_OK_COMPLETIONPENDING) { | 608 if (rv == PP_OK_COMPLETIONPENDING) { |
559 rv = callback.WaitForResult(); | 609 rv = callback.WaitForResult(); |
560 if (rv != PP_ERROR_ABORTED) | 610 if (rv != PP_ERROR_ABORTED) |
561 return "FileIO::SetLength not aborted."; | 611 return "FileIO::SetLength not aborted."; |
562 } else if (rv != PP_OK) { | 612 } else if (rv != PP_OK) { |
563 return ReportError("FileIO::SetLength", rv); | 613 return ReportError("FileIO::SetLength", rv); |
564 } | 614 } |
565 } | 615 } |
566 | 616 |
567 // Abort |Flush()|. | 617 // Abort |Flush()|. |
568 { | 618 { |
569 { | 619 { |
570 pp::FileIO_Dev file_io(instance_); | 620 pp::FileIO_Dev file_io(instance_); |
571 rv = file_io.Open(file_ref, PP_FILEOPENFLAG_READ, callback); | 621 rv = file_io.Open(file_ref, PP_FILEOPENFLAG_READ, callback); |
| 622 if (force_async_ && rv != PP_OK_COMPLETIONPENDING) |
| 623 return ReportError("FileIO::Open force_async", rv); |
572 if (rv == PP_OK_COMPLETIONPENDING) | 624 if (rv == PP_OK_COMPLETIONPENDING) |
573 rv = callback.WaitForResult(); | 625 rv = callback.WaitForResult(); |
574 if (rv != PP_OK) | 626 if (rv != PP_OK) |
575 return ReportError("FileIO::Open", rv); | 627 return ReportError("FileIO::Open", rv); |
576 | 628 |
577 callback.reset_run_count(); | 629 callback.reset_run_count(); |
578 rv = file_io.Flush(callback); | 630 rv = file_io.Flush(callback); |
| 631 if (force_async_ && rv != PP_OK_COMPLETIONPENDING) |
| 632 return ReportError("FileIO::Flush force_async", rv); |
579 } // Destroy |file_io|. | 633 } // Destroy |file_io|. |
580 if (rv == PP_OK_COMPLETIONPENDING) { | 634 if (rv == PP_OK_COMPLETIONPENDING) { |
581 rv = callback.WaitForResult(); | 635 rv = callback.WaitForResult(); |
582 if (rv != PP_ERROR_ABORTED) | 636 if (rv != PP_ERROR_ABORTED) |
583 return "FileIO::Flush not aborted."; | 637 return "FileIO::Flush not aborted."; |
584 } else if (rv != PP_OK) { | 638 } else if (rv != PP_OK) { |
585 return ReportError("FileIO::Flush", rv); | 639 return ReportError("FileIO::Flush", rv); |
586 } | 640 } |
587 } | 641 } |
588 | 642 |
(...skipping 18 matching lines...) Expand all Loading... |
607 for (size_t remains = expectations, end = END_OF_OPEN_EXPECATION_PAIRS; | 661 for (size_t remains = expectations, end = END_OF_OPEN_EXPECATION_PAIRS; |
608 end != 0; remains >>= 2, end >>= 2) { | 662 end != 0; remains >>= 2, end >>= 2) { |
609 if (!!(remains & 1) == !!(remains & 2)) | 663 if (!!(remains & 1) == !!(remains & 2)) |
610 return bad_argument; | 664 return bad_argument; |
611 } | 665 } |
612 } | 666 } |
613 bool create_if_doesnt_exist = !!(expectations & CREATE_IF_DOESNT_EXIST); | 667 bool create_if_doesnt_exist = !!(expectations & CREATE_IF_DOESNT_EXIST); |
614 bool open_if_exists = !!(expectations & OPEN_IF_EXISTS); | 668 bool open_if_exists = !!(expectations & OPEN_IF_EXISTS); |
615 bool truncate_if_exists = !!(expectations & TRUNCATE_IF_EXISTS); | 669 bool truncate_if_exists = !!(expectations & TRUNCATE_IF_EXISTS); |
616 | 670 |
617 TestCompletionCallback callback(instance_->pp_instance()); | 671 TestCompletionCallback callback(instance_->pp_instance(), force_async_); |
618 pp::FileRef_Dev existent_file_ref( | 672 pp::FileRef_Dev existent_file_ref( |
619 *file_system, "/match_open_expectation_existent_non_empty_file"); | 673 *file_system, "/match_open_expectation_existent_non_empty_file"); |
620 pp::FileRef_Dev nonexistent_file_ref( | 674 pp::FileRef_Dev nonexistent_file_ref( |
621 *file_system, "/match_open_expectation_nonexistent_file"); | 675 *file_system, "/match_open_expectation_nonexistent_file"); |
622 | 676 |
623 // Setup files for test. | 677 // Setup files for test. |
624 { | 678 { |
625 int32_t rv = existent_file_ref.Delete(callback); | 679 int32_t rv = existent_file_ref.Delete(callback); |
| 680 if (force_async_ && rv != PP_OK_COMPLETIONPENDING) |
| 681 return ReportError("FileRef::Delete force_async", rv); |
626 if (rv == PP_OK_COMPLETIONPENDING) | 682 if (rv == PP_OK_COMPLETIONPENDING) |
627 rv = callback.WaitForResult(); | 683 rv = callback.WaitForResult(); |
628 if (rv != PP_OK && rv != PP_ERROR_FILENOTFOUND) | 684 if (rv != PP_OK && rv != PP_ERROR_FILENOTFOUND) |
629 return ReportError("FileRef::Delete", rv); | 685 return ReportError("FileRef::Delete", rv); |
630 | 686 |
631 rv = nonexistent_file_ref.Delete(callback); | 687 rv = nonexistent_file_ref.Delete(callback); |
| 688 if (force_async_ && rv != PP_OK_COMPLETIONPENDING) |
| 689 return ReportError("FileRef::Delete force_async", rv); |
632 if (rv == PP_OK_COMPLETIONPENDING) | 690 if (rv == PP_OK_COMPLETIONPENDING) |
633 rv = callback.WaitForResult(); | 691 rv = callback.WaitForResult(); |
634 if (rv != PP_OK && rv != PP_ERROR_FILENOTFOUND) | 692 if (rv != PP_OK && rv != PP_ERROR_FILENOTFOUND) |
635 return ReportError("FileRef::Delete", rv); | 693 return ReportError("FileRef::Delete", rv); |
636 | 694 |
637 pp::FileIO_Dev existent_file_io(instance_); | 695 pp::FileIO_Dev existent_file_io(instance_); |
638 rv = existent_file_io.Open(existent_file_ref, | 696 rv = existent_file_io.Open(existent_file_ref, |
639 PP_FILEOPENFLAG_CREATE | PP_FILEOPENFLAG_WRITE, | 697 PP_FILEOPENFLAG_CREATE | PP_FILEOPENFLAG_WRITE, |
640 callback); | 698 callback); |
| 699 if (force_async_ && rv != PP_OK_COMPLETIONPENDING) |
| 700 return ReportError("FileIO::Open force_async", rv); |
641 if (rv == PP_OK_COMPLETIONPENDING) | 701 if (rv == PP_OK_COMPLETIONPENDING) |
642 rv = callback.WaitForResult(); | 702 rv = callback.WaitForResult(); |
643 if (rv != PP_OK) | 703 if (rv != PP_OK) |
644 return ReportError("FileIO::Open", rv); | 704 return ReportError("FileIO::Open", rv); |
645 | 705 |
646 rv = WriteEntireBuffer(instance_->pp_instance(), &existent_file_io, 0, | 706 rv = WriteEntireBuffer(instance_->pp_instance(), &existent_file_io, 0, |
647 "foobar"); | 707 "foobar"); |
648 if (rv != PP_OK) | 708 if (rv != PP_OK) |
649 return ReportError("FileIO::Write", rv); | 709 return ReportError("FileIO::Write", rv); |
650 } | 710 } |
651 | 711 |
652 pp::FileIO_Dev existent_file_io(instance_); | 712 pp::FileIO_Dev existent_file_io(instance_); |
653 int32_t rv = existent_file_io.Open(existent_file_ref, open_flags, callback); | 713 int32_t rv = existent_file_io.Open(existent_file_ref, open_flags, callback); |
| 714 if (force_async_ && rv != PP_OK_COMPLETIONPENDING) |
| 715 return ReportError("FileIO::Open force_async", rv); |
654 if (rv == PP_OK_COMPLETIONPENDING) | 716 if (rv == PP_OK_COMPLETIONPENDING) |
655 rv = callback.WaitForResult(); | 717 rv = callback.WaitForResult(); |
656 if ((invalid_combination && rv == PP_OK) || | 718 if ((invalid_combination && rv == PP_OK) || |
657 (!invalid_combination && ((rv == PP_OK) != open_if_exists))) { | 719 (!invalid_combination && ((rv == PP_OK) != open_if_exists))) { |
658 return ReportOpenError(open_flags); | 720 return ReportOpenError(open_flags); |
659 } | 721 } |
660 | 722 |
661 if (!invalid_combination && open_if_exists) { | 723 if (!invalid_combination && open_if_exists) { |
662 PP_FileInfo_Dev info; | 724 PP_FileInfo_Dev info; |
663 rv = existent_file_io.Query(&info, callback); | 725 rv = existent_file_io.Query(&info, callback); |
| 726 if (force_async_ && rv != PP_OK_COMPLETIONPENDING) |
| 727 return ReportError("FileIO::Query force_async", rv); |
664 if (rv == PP_OK_COMPLETIONPENDING) | 728 if (rv == PP_OK_COMPLETIONPENDING) |
665 rv = callback.WaitForResult(); | 729 rv = callback.WaitForResult(); |
666 if (rv != PP_OK) | 730 if (rv != PP_OK) |
667 return ReportError("FileIO::Query", rv); | 731 return ReportError("FileIO::Query", rv); |
668 | 732 |
669 if (truncate_if_exists != (info.size == 0)) | 733 if (truncate_if_exists != (info.size == 0)) |
670 return ReportOpenError(open_flags); | 734 return ReportOpenError(open_flags); |
671 } | 735 } |
672 | 736 |
673 pp::FileIO_Dev nonexistent_file_io(instance_); | 737 pp::FileIO_Dev nonexistent_file_io(instance_); |
674 rv = nonexistent_file_io.Open(nonexistent_file_ref, open_flags, callback); | 738 rv = nonexistent_file_io.Open(nonexistent_file_ref, open_flags, callback); |
| 739 if (force_async_ && rv != PP_OK_COMPLETIONPENDING) |
| 740 return ReportError("FileIO::Open force_async", rv); |
675 if (rv == PP_OK_COMPLETIONPENDING) | 741 if (rv == PP_OK_COMPLETIONPENDING) |
676 rv = callback.WaitForResult(); | 742 rv = callback.WaitForResult(); |
677 if ((invalid_combination && rv == PP_OK) || | 743 if ((invalid_combination && rv == PP_OK) || |
678 (!invalid_combination && ((rv == PP_OK) != create_if_doesnt_exist))) { | 744 (!invalid_combination && ((rv == PP_OK) != create_if_doesnt_exist))) { |
679 return ReportOpenError(open_flags); | 745 return ReportOpenError(open_flags); |
680 } | 746 } |
681 | 747 |
682 return std::string(); | 748 return std::string(); |
683 } | 749 } |
684 | 750 |
685 // TODO(viettrungluu): Test Close(). crbug.com/69457 | 751 // TODO(viettrungluu): Test Close(). crbug.com/69457 |
OLD | NEW |