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

Side by Side Diff: content/browser/download/download_file_unittest.cc

Issue 18286004: Move PathExists to base namespace. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 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
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 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 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 "base/file_util.h" 5 #include "base/file_util.h"
6 #include "base/message_loop.h" 6 #include "base/message_loop.h"
7 #include "base/strings/string_number_conversions.h" 7 #include "base/strings/string_number_conversions.h"
8 #include "base/test/test_file_util.h" 8 #include "base/test/test_file_util.h"
9 #include "content/browser/browser_thread_impl.h" 9 #include "content/browser/browser_thread_impl.h"
10 #include "content/browser/byte_stream.h" 10 #include "content/browser/byte_stream.h"
(...skipping 322 matching lines...) Expand 10 before | Expand all | Expand 10 after
333 333
334 const int32 DownloadFileTest::kDummyDownloadId = 23; 334 const int32 DownloadFileTest::kDummyDownloadId = 23;
335 const int DownloadFileTest::kDummyChildId = 3; 335 const int DownloadFileTest::kDummyChildId = 3;
336 const int DownloadFileTest::kDummyRequestId = 67; 336 const int DownloadFileTest::kDummyRequestId = 67;
337 337
338 // Rename the file before any data is downloaded, after some has, after it all 338 // Rename the file before any data is downloaded, after some has, after it all
339 // has, and after it's closed. 339 // has, and after it's closed.
340 TEST_F(DownloadFileTest, RenameFileFinal) { 340 TEST_F(DownloadFileTest, RenameFileFinal) {
341 ASSERT_TRUE(CreateDownloadFile(0, true)); 341 ASSERT_TRUE(CreateDownloadFile(0, true));
342 base::FilePath initial_path(download_file_->FullPath()); 342 base::FilePath initial_path(download_file_->FullPath());
343 EXPECT_TRUE(file_util::PathExists(initial_path)); 343 EXPECT_TRUE(base::PathExists(initial_path));
344 base::FilePath path_1(initial_path.InsertBeforeExtensionASCII("_1")); 344 base::FilePath path_1(initial_path.InsertBeforeExtensionASCII("_1"));
345 base::FilePath path_2(initial_path.InsertBeforeExtensionASCII("_2")); 345 base::FilePath path_2(initial_path.InsertBeforeExtensionASCII("_2"));
346 base::FilePath path_3(initial_path.InsertBeforeExtensionASCII("_3")); 346 base::FilePath path_3(initial_path.InsertBeforeExtensionASCII("_3"));
347 base::FilePath path_4(initial_path.InsertBeforeExtensionASCII("_4")); 347 base::FilePath path_4(initial_path.InsertBeforeExtensionASCII("_4"));
348 base::FilePath path_5(initial_path.InsertBeforeExtensionASCII("_5")); 348 base::FilePath path_5(initial_path.InsertBeforeExtensionASCII("_5"));
349 base::FilePath output_path; 349 base::FilePath output_path;
350 350
351 // Rename the file before downloading any data. 351 // Rename the file before downloading any data.
352 EXPECT_EQ(DOWNLOAD_INTERRUPT_REASON_NONE, 352 EXPECT_EQ(DOWNLOAD_INTERRUPT_REASON_NONE,
353 RenameAndUniquify(path_1, &output_path)); 353 RenameAndUniquify(path_1, &output_path));
354 base::FilePath renamed_path = download_file_->FullPath(); 354 base::FilePath renamed_path = download_file_->FullPath();
355 EXPECT_EQ(path_1, renamed_path); 355 EXPECT_EQ(path_1, renamed_path);
356 EXPECT_EQ(path_1, output_path); 356 EXPECT_EQ(path_1, output_path);
357 357
358 // Check the files. 358 // Check the files.
359 EXPECT_FALSE(file_util::PathExists(initial_path)); 359 EXPECT_FALSE(base::PathExists(initial_path));
360 EXPECT_TRUE(file_util::PathExists(path_1)); 360 EXPECT_TRUE(base::PathExists(path_1));
361 361
362 // Download the data. 362 // Download the data.
363 const char* chunks1[] = { kTestData1, kTestData2 }; 363 const char* chunks1[] = { kTestData1, kTestData2 };
364 AppendDataToFile(chunks1, 2); 364 AppendDataToFile(chunks1, 2);
365 365
366 // Rename the file after downloading some data. 366 // Rename the file after downloading some data.
367 EXPECT_EQ(DOWNLOAD_INTERRUPT_REASON_NONE, 367 EXPECT_EQ(DOWNLOAD_INTERRUPT_REASON_NONE,
368 RenameAndUniquify(path_2, &output_path)); 368 RenameAndUniquify(path_2, &output_path));
369 renamed_path = download_file_->FullPath(); 369 renamed_path = download_file_->FullPath();
370 EXPECT_EQ(path_2, renamed_path); 370 EXPECT_EQ(path_2, renamed_path);
371 EXPECT_EQ(path_2, output_path); 371 EXPECT_EQ(path_2, output_path);
372 372
373 // Check the files. 373 // Check the files.
374 EXPECT_FALSE(file_util::PathExists(path_1)); 374 EXPECT_FALSE(base::PathExists(path_1));
375 EXPECT_TRUE(file_util::PathExists(path_2)); 375 EXPECT_TRUE(base::PathExists(path_2));
376 376
377 const char* chunks2[] = { kTestData3 }; 377 const char* chunks2[] = { kTestData3 };
378 AppendDataToFile(chunks2, 1); 378 AppendDataToFile(chunks2, 1);
379 379
380 // Rename the file after downloading all the data. 380 // Rename the file after downloading all the data.
381 EXPECT_EQ(DOWNLOAD_INTERRUPT_REASON_NONE, 381 EXPECT_EQ(DOWNLOAD_INTERRUPT_REASON_NONE,
382 RenameAndUniquify(path_3, &output_path)); 382 RenameAndUniquify(path_3, &output_path));
383 renamed_path = download_file_->FullPath(); 383 renamed_path = download_file_->FullPath();
384 EXPECT_EQ(path_3, renamed_path); 384 EXPECT_EQ(path_3, renamed_path);
385 EXPECT_EQ(path_3, output_path); 385 EXPECT_EQ(path_3, output_path);
386 386
387 // Check the files. 387 // Check the files.
388 EXPECT_FALSE(file_util::PathExists(path_2)); 388 EXPECT_FALSE(base::PathExists(path_2));
389 EXPECT_TRUE(file_util::PathExists(path_3)); 389 EXPECT_TRUE(base::PathExists(path_3));
390 390
391 // Should not be able to get the hash until the file is closed. 391 // Should not be able to get the hash until the file is closed.
392 std::string hash; 392 std::string hash;
393 EXPECT_FALSE(download_file_->GetHash(&hash)); 393 EXPECT_FALSE(download_file_->GetHash(&hash));
394 FinishStream(DOWNLOAD_INTERRUPT_REASON_NONE, true); 394 FinishStream(DOWNLOAD_INTERRUPT_REASON_NONE, true);
395 loop_.RunUntilIdle(); 395 loop_.RunUntilIdle();
396 396
397 // Rename the file after downloading all the data and closing the file. 397 // Rename the file after downloading all the data and closing the file.
398 EXPECT_EQ(DOWNLOAD_INTERRUPT_REASON_NONE, 398 EXPECT_EQ(DOWNLOAD_INTERRUPT_REASON_NONE,
399 RenameAndUniquify(path_4, &output_path)); 399 RenameAndUniquify(path_4, &output_path));
400 renamed_path = download_file_->FullPath(); 400 renamed_path = download_file_->FullPath();
401 EXPECT_EQ(path_4, renamed_path); 401 EXPECT_EQ(path_4, renamed_path);
402 EXPECT_EQ(path_4, output_path); 402 EXPECT_EQ(path_4, output_path);
403 403
404 // Check the files. 404 // Check the files.
405 EXPECT_FALSE(file_util::PathExists(path_3)); 405 EXPECT_FALSE(base::PathExists(path_3));
406 EXPECT_TRUE(file_util::PathExists(path_4)); 406 EXPECT_TRUE(base::PathExists(path_4));
407 407
408 // Check the hash. 408 // Check the hash.
409 EXPECT_TRUE(download_file_->GetHash(&hash)); 409 EXPECT_TRUE(download_file_->GetHash(&hash));
410 EXPECT_EQ(kDataHash, base::HexEncode(hash.data(), hash.size())); 410 EXPECT_EQ(kDataHash, base::HexEncode(hash.data(), hash.size()));
411 411
412 // Check that a rename with overwrite to an existing file succeeds. 412 // Check that a rename with overwrite to an existing file succeeds.
413 std::string file_contents; 413 std::string file_contents;
414 ASSERT_FALSE(file_util::PathExists(path_5)); 414 ASSERT_FALSE(base::PathExists(path_5));
415 static const char file_data[] = "xyzzy"; 415 static const char file_data[] = "xyzzy";
416 ASSERT_EQ(static_cast<int>(sizeof(file_data) - 1), 416 ASSERT_EQ(static_cast<int>(sizeof(file_data) - 1),
417 file_util::WriteFile(path_5, file_data, sizeof(file_data) - 1)); 417 file_util::WriteFile(path_5, file_data, sizeof(file_data) - 1));
418 ASSERT_TRUE(file_util::PathExists(path_5)); 418 ASSERT_TRUE(base::PathExists(path_5));
419 EXPECT_TRUE(file_util::ReadFileToString(path_5, &file_contents)); 419 EXPECT_TRUE(file_util::ReadFileToString(path_5, &file_contents));
420 EXPECT_EQ(std::string(file_data), file_contents); 420 EXPECT_EQ(std::string(file_data), file_contents);
421 421
422 EXPECT_EQ(DOWNLOAD_INTERRUPT_REASON_NONE, 422 EXPECT_EQ(DOWNLOAD_INTERRUPT_REASON_NONE,
423 RenameAndAnnotate(path_5, &output_path)); 423 RenameAndAnnotate(path_5, &output_path));
424 EXPECT_EQ(path_5, output_path); 424 EXPECT_EQ(path_5, output_path);
425 425
426 file_contents = ""; 426 file_contents = "";
427 EXPECT_TRUE(file_util::ReadFileToString(path_5, &file_contents)); 427 EXPECT_TRUE(file_util::ReadFileToString(path_5, &file_contents));
428 EXPECT_NE(std::string(file_data), file_contents); 428 EXPECT_NE(std::string(file_data), file_contents);
429 429
430 DestroyDownloadFile(0); 430 DestroyDownloadFile(0);
431 } 431 }
432 432
433 // Test to make sure the rename uniquifies if we aren't overwriting 433 // Test to make sure the rename uniquifies if we aren't overwriting
434 // and there's a file where we're aiming. 434 // and there's a file where we're aiming.
435 TEST_F(DownloadFileTest, RenameUniquifies) { 435 TEST_F(DownloadFileTest, RenameUniquifies) {
436 ASSERT_TRUE(CreateDownloadFile(0, true)); 436 ASSERT_TRUE(CreateDownloadFile(0, true));
437 base::FilePath initial_path(download_file_->FullPath()); 437 base::FilePath initial_path(download_file_->FullPath());
438 EXPECT_TRUE(file_util::PathExists(initial_path)); 438 EXPECT_TRUE(base::PathExists(initial_path));
439 base::FilePath path_1(initial_path.InsertBeforeExtensionASCII("_1")); 439 base::FilePath path_1(initial_path.InsertBeforeExtensionASCII("_1"));
440 base::FilePath path_1_suffixed(path_1.InsertBeforeExtensionASCII(" (1)")); 440 base::FilePath path_1_suffixed(path_1.InsertBeforeExtensionASCII(" (1)"));
441 441
442 ASSERT_FALSE(file_util::PathExists(path_1)); 442 ASSERT_FALSE(base::PathExists(path_1));
443 static const char file_data[] = "xyzzy"; 443 static const char file_data[] = "xyzzy";
444 ASSERT_EQ(static_cast<int>(sizeof(file_data)), 444 ASSERT_EQ(static_cast<int>(sizeof(file_data)),
445 file_util::WriteFile(path_1, file_data, sizeof(file_data))); 445 file_util::WriteFile(path_1, file_data, sizeof(file_data)));
446 ASSERT_TRUE(file_util::PathExists(path_1)); 446 ASSERT_TRUE(base::PathExists(path_1));
447 447
448 EXPECT_EQ(DOWNLOAD_INTERRUPT_REASON_NONE, RenameAndUniquify(path_1, NULL)); 448 EXPECT_EQ(DOWNLOAD_INTERRUPT_REASON_NONE, RenameAndUniquify(path_1, NULL));
449 EXPECT_TRUE(file_util::PathExists(path_1_suffixed)); 449 EXPECT_TRUE(base::PathExists(path_1_suffixed));
450 450
451 FinishStream(DOWNLOAD_INTERRUPT_REASON_NONE, true); 451 FinishStream(DOWNLOAD_INTERRUPT_REASON_NONE, true);
452 loop_.RunUntilIdle(); 452 loop_.RunUntilIdle();
453 DestroyDownloadFile(0); 453 DestroyDownloadFile(0);
454 } 454 }
455 455
456 // Test to make sure we get the proper error on failure. 456 // Test to make sure we get the proper error on failure.
457 TEST_F(DownloadFileTest, RenameError) { 457 TEST_F(DownloadFileTest, RenameError) {
458 ASSERT_TRUE(CreateDownloadFile(0, true)); 458 ASSERT_TRUE(CreateDownloadFile(0, true));
459 base::FilePath initial_path(download_file_->FullPath()); 459 base::FilePath initial_path(download_file_->FullPath());
460 460
461 // Create a subdirectory. 461 // Create a subdirectory.
462 base::FilePath tempdir( 462 base::FilePath tempdir(
463 initial_path.DirName().Append(FILE_PATH_LITERAL("tempdir"))); 463 initial_path.DirName().Append(FILE_PATH_LITERAL("tempdir")));
464 ASSERT_TRUE(file_util::CreateDirectory(tempdir)); 464 ASSERT_TRUE(file_util::CreateDirectory(tempdir));
465 base::FilePath target_path(tempdir.Append(initial_path.BaseName())); 465 base::FilePath target_path(tempdir.Append(initial_path.BaseName()));
466 466
467 // Targets 467 // Targets
468 base::FilePath target_path_suffixed( 468 base::FilePath target_path_suffixed(
469 target_path.InsertBeforeExtensionASCII(" (1)")); 469 target_path.InsertBeforeExtensionASCII(" (1)"));
470 ASSERT_FALSE(file_util::PathExists(target_path)); 470 ASSERT_FALSE(base::PathExists(target_path));
471 ASSERT_FALSE(file_util::PathExists(target_path_suffixed)); 471 ASSERT_FALSE(base::PathExists(target_path_suffixed));
472 472
473 // Make the directory unwritable and try to rename within it. 473 // Make the directory unwritable and try to rename within it.
474 { 474 {
475 file_util::PermissionRestorer restorer(tempdir); 475 file_util::PermissionRestorer restorer(tempdir);
476 ASSERT_TRUE(file_util::MakeFileUnwritable(tempdir)); 476 ASSERT_TRUE(file_util::MakeFileUnwritable(tempdir));
477 477
478 // Expect nulling out of further processing. 478 // Expect nulling out of further processing.
479 EXPECT_CALL(*input_stream_, RegisterCallback(IsNullCallback())); 479 EXPECT_CALL(*input_stream_, RegisterCallback(IsNullCallback()));
480 EXPECT_EQ(DOWNLOAD_INTERRUPT_REASON_FILE_ACCESS_DENIED, 480 EXPECT_EQ(DOWNLOAD_INTERRUPT_REASON_FILE_ACCESS_DENIED,
481 RenameAndAnnotate(target_path, NULL)); 481 RenameAndAnnotate(target_path, NULL));
482 EXPECT_FALSE(file_util::PathExists(target_path_suffixed)); 482 EXPECT_FALSE(base::PathExists(target_path_suffixed));
483 } 483 }
484 484
485 FinishStream(DOWNLOAD_INTERRUPT_REASON_NONE, true); 485 FinishStream(DOWNLOAD_INTERRUPT_REASON_NONE, true);
486 loop_.RunUntilIdle(); 486 loop_.RunUntilIdle();
487 DestroyDownloadFile(0); 487 DestroyDownloadFile(0);
488 } 488 }
489 489
490 // Various tests of the StreamActive method. 490 // Various tests of the StreamActive method.
491 TEST_F(DownloadFileTest, StreamEmptySuccess) { 491 TEST_F(DownloadFileTest, StreamEmptySuccess) {
492 ASSERT_TRUE(CreateDownloadFile(0, true)); 492 ASSERT_TRUE(CreateDownloadFile(0, true));
493 base::FilePath initial_path(download_file_->FullPath()); 493 base::FilePath initial_path(download_file_->FullPath());
494 EXPECT_TRUE(file_util::PathExists(initial_path)); 494 EXPECT_TRUE(base::PathExists(initial_path));
495 495
496 // Test that calling the sink_callback_ on an empty stream shouldn't 496 // Test that calling the sink_callback_ on an empty stream shouldn't
497 // do anything. 497 // do anything.
498 AppendDataToFile(NULL, 0); 498 AppendDataToFile(NULL, 0);
499 499
500 // Finish the download this way and make sure we see it on the 500 // Finish the download this way and make sure we see it on the
501 // observer. 501 // observer.
502 EXPECT_CALL(*(observer_.get()), DestinationCompleted(_)); 502 EXPECT_CALL(*(observer_.get()), DestinationCompleted(_));
503 FinishStream(DOWNLOAD_INTERRUPT_REASON_NONE, false); 503 FinishStream(DOWNLOAD_INTERRUPT_REASON_NONE, false);
504 loop_.RunUntilIdle(); 504 loop_.RunUntilIdle();
505 505
506 DestroyDownloadFile(0); 506 DestroyDownloadFile(0);
507 } 507 }
508 508
509 TEST_F(DownloadFileTest, StreamEmptyError) { 509 TEST_F(DownloadFileTest, StreamEmptyError) {
510 ASSERT_TRUE(CreateDownloadFile(0, true)); 510 ASSERT_TRUE(CreateDownloadFile(0, true));
511 base::FilePath initial_path(download_file_->FullPath()); 511 base::FilePath initial_path(download_file_->FullPath());
512 EXPECT_TRUE(file_util::PathExists(initial_path)); 512 EXPECT_TRUE(base::PathExists(initial_path));
513 513
514 // Finish the download in error and make sure we see it on the 514 // Finish the download in error and make sure we see it on the
515 // observer. 515 // observer.
516 EXPECT_CALL(*(observer_.get()), 516 EXPECT_CALL(*(observer_.get()),
517 DestinationError( 517 DestinationError(
518 DOWNLOAD_INTERRUPT_REASON_NETWORK_DISCONNECTED)) 518 DOWNLOAD_INTERRUPT_REASON_NETWORK_DISCONNECTED))
519 .WillOnce(InvokeWithoutArgs( 519 .WillOnce(InvokeWithoutArgs(
520 this, &DownloadFileTest::ConfirmUpdateDownloadInfo)); 520 this, &DownloadFileTest::ConfirmUpdateDownloadInfo));
521 521
522 // If this next EXPECT_CALL fails flakily, it's probably a real failure. 522 // If this next EXPECT_CALL fails flakily, it's probably a real failure.
523 // We'll be getting a stream of UpdateDownload calls from the timer, and 523 // We'll be getting a stream of UpdateDownload calls from the timer, and
524 // the last one may have the correct information even if the failure 524 // the last one may have the correct information even if the failure
525 // doesn't produce an update, as the timer update may have triggered at the 525 // doesn't produce an update, as the timer update may have triggered at the
526 // same time. 526 // same time.
527 EXPECT_CALL(*(observer_.get()), CurrentUpdateStatus(0, _, _)); 527 EXPECT_CALL(*(observer_.get()), CurrentUpdateStatus(0, _, _));
528 528
529 FinishStream(DOWNLOAD_INTERRUPT_REASON_NETWORK_DISCONNECTED, false); 529 FinishStream(DOWNLOAD_INTERRUPT_REASON_NETWORK_DISCONNECTED, false);
530 530
531 loop_.RunUntilIdle(); 531 loop_.RunUntilIdle();
532 532
533 DestroyDownloadFile(0); 533 DestroyDownloadFile(0);
534 } 534 }
535 535
536 TEST_F(DownloadFileTest, StreamNonEmptySuccess) { 536 TEST_F(DownloadFileTest, StreamNonEmptySuccess) {
537 ASSERT_TRUE(CreateDownloadFile(0, true)); 537 ASSERT_TRUE(CreateDownloadFile(0, true));
538 base::FilePath initial_path(download_file_->FullPath()); 538 base::FilePath initial_path(download_file_->FullPath());
539 EXPECT_TRUE(file_util::PathExists(initial_path)); 539 EXPECT_TRUE(base::PathExists(initial_path));
540 540
541 const char* chunks1[] = { kTestData1, kTestData2 }; 541 const char* chunks1[] = { kTestData1, kTestData2 };
542 ::testing::Sequence s1; 542 ::testing::Sequence s1;
543 SetupDataAppend(chunks1, 2, s1); 543 SetupDataAppend(chunks1, 2, s1);
544 SetupFinishStream(DOWNLOAD_INTERRUPT_REASON_NONE, s1); 544 SetupFinishStream(DOWNLOAD_INTERRUPT_REASON_NONE, s1);
545 EXPECT_CALL(*(observer_.get()), DestinationCompleted(_)); 545 EXPECT_CALL(*(observer_.get()), DestinationCompleted(_));
546 sink_callback_.Run(); 546 sink_callback_.Run();
547 VerifyStreamAndSize(); 547 VerifyStreamAndSize();
548 loop_.RunUntilIdle(); 548 loop_.RunUntilIdle();
549 DestroyDownloadFile(0); 549 DestroyDownloadFile(0);
550 } 550 }
551 551
552 TEST_F(DownloadFileTest, StreamNonEmptyError) { 552 TEST_F(DownloadFileTest, StreamNonEmptyError) {
553 ASSERT_TRUE(CreateDownloadFile(0, true)); 553 ASSERT_TRUE(CreateDownloadFile(0, true));
554 base::FilePath initial_path(download_file_->FullPath()); 554 base::FilePath initial_path(download_file_->FullPath());
555 EXPECT_TRUE(file_util::PathExists(initial_path)); 555 EXPECT_TRUE(base::PathExists(initial_path));
556 556
557 const char* chunks1[] = { kTestData1, kTestData2 }; 557 const char* chunks1[] = { kTestData1, kTestData2 };
558 ::testing::Sequence s1; 558 ::testing::Sequence s1;
559 SetupDataAppend(chunks1, 2, s1); 559 SetupDataAppend(chunks1, 2, s1);
560 SetupFinishStream(DOWNLOAD_INTERRUPT_REASON_NETWORK_DISCONNECTED, s1); 560 SetupFinishStream(DOWNLOAD_INTERRUPT_REASON_NETWORK_DISCONNECTED, s1);
561 561
562 EXPECT_CALL(*(observer_.get()), 562 EXPECT_CALL(*(observer_.get()),
563 DestinationError( 563 DestinationError(
564 DOWNLOAD_INTERRUPT_REASON_NETWORK_DISCONNECTED)) 564 DOWNLOAD_INTERRUPT_REASON_NETWORK_DISCONNECTED))
565 .WillOnce(InvokeWithoutArgs( 565 .WillOnce(InvokeWithoutArgs(
(...skipping 30 matching lines...) Expand all
596 596
597 EXPECT_EQ(static_cast<int64>(strlen(kTestData1) + strlen(kTestData2)), 597 EXPECT_EQ(static_cast<int64>(strlen(kTestData1) + strlen(kTestData2)),
598 bytes_); 598 bytes_);
599 EXPECT_EQ(download_file_->GetHashState(), hash_state_); 599 EXPECT_EQ(download_file_->GetHashState(), hash_state_);
600 600
601 FinishStream(DOWNLOAD_INTERRUPT_REASON_NONE, true); 601 FinishStream(DOWNLOAD_INTERRUPT_REASON_NONE, true);
602 DestroyDownloadFile(0); 602 DestroyDownloadFile(0);
603 } 603 }
604 604
605 } // namespace content 605 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/download/download_browsertest.cc ('k') | content/browser/download/drag_download_util.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698