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

Side by Side Diff: chrome/browser/download/download_browsertest.cc

Issue 10867060: Move some download tests to content from chrome. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Incorporated comments. Created 8 years, 3 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
« no previous file with comments | « no previous file | content/browser/download/download_browsertest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 <sstream> 5 #include <sstream>
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/bind_helpers.h" 8 #include "base/bind_helpers.h"
9 #include "base/file_path.h" 9 #include "base/file_path.h"
10 #include "base/file_util.h" 10 #include "base/file_util.h"
(...skipping 1389 matching lines...) Expand 10 before | Expand all | Expand 10 after
1400 ExpectWindowCountAfterDownload(1); 1400 ExpectWindowCountAfterDownload(1);
1401 #endif 1401 #endif
1402 1402
1403 EXPECT_EQ(1, browser()->tab_count()); 1403 EXPECT_EQ(1, browser()->tab_count());
1404 // Download shelf should close. Download panel stays open on ChromeOS. 1404 // Download shelf should close. Download panel stays open on ChromeOS.
1405 EXPECT_FALSE(browser()->window()->IsDownloadShelfVisible()); 1405 EXPECT_FALSE(browser()->window()->IsDownloadShelfVisible());
1406 1406
1407 CheckDownload(browser(), file, file); 1407 CheckDownload(browser(), file, file);
1408 } 1408 }
1409 1409
1410 // Check that downloading multiple (in this case, 2) files does not result in
1411 // corrupted files.
1412 IN_PROC_BROWSER_TEST_F(DownloadTest, MultiDownload) {
1413 EXPECT_EQ(1, browser()->tab_count());
1414
1415 // Create a download, wait until it's started, and confirm
1416 // we're in the expected state.
1417 scoped_ptr<content::DownloadTestObserver> observer1(
1418 CreateInProgressWaiter(browser(), 1));
1419 ui_test_utils::NavigateToURL(
1420 browser(), GURL(URLRequestSlowDownloadJob::kUnknownSizeUrl));
1421 observer1->WaitForFinished();
1422
1423 std::vector<DownloadItem*> downloads;
1424 DownloadManagerForBrowser(browser())->SearchDownloads(
1425 string16(), &downloads);
1426 ASSERT_EQ(1u, downloads.size());
1427 ASSERT_EQ(DownloadItem::IN_PROGRESS, downloads[0]->GetState());
1428 EXPECT_TRUE(browser()->window()->IsDownloadShelfVisible());
1429 DownloadItem* download1 = downloads[0]; // The only download.
1430
1431 // Start the second download and wait until it's done.
1432 FilePath file(FILE_PATH_LITERAL("download-test1.lib"));
1433 GURL url(URLRequestMockHTTPJob::GetMockUrl(file));
1434 // Download the file and wait. We do not expect the Select File dialog.
1435 DownloadAndWait(browser(), url);
1436
1437 // Should now have 2 items on the download shelf.
1438 downloads.clear();
1439 DownloadManagerForBrowser(browser())->SearchDownloads(
1440 string16(), &downloads);
1441 ASSERT_EQ(2u, downloads.size());
1442 // We don't know the order of the downloads.
1443 DownloadItem* download2 = downloads[(download1 == downloads[0]) ? 1 : 0];
1444
1445 ASSERT_EQ(DownloadItem::IN_PROGRESS, download1->GetState());
1446 ASSERT_EQ(DownloadItem::COMPLETE, download2->GetState());
1447 // The download shelf should be open.
1448 EXPECT_TRUE(browser()->window()->IsDownloadShelfVisible());
1449
1450 // Allow the first request to finish. We do this by loading a third URL
1451 // in a separate tab.
1452 scoped_ptr<content::DownloadTestObserver> observer2(
1453 CreateWaiter(browser(), 1));
1454 GURL finish_url(URLRequestSlowDownloadJob::kFinishDownloadUrl);
1455 ui_test_utils::NavigateToURLWithDisposition(
1456 browser(),
1457 finish_url,
1458 NEW_FOREGROUND_TAB,
1459 ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION);
1460 observer2->WaitForFinished(); // Wait for the third request.
1461 EXPECT_EQ(1u, observer2->NumDownloadsSeenInState(DownloadItem::COMPLETE));
1462
1463 // Get the important info from other threads and check it.
1464 EXPECT_TRUE(EnsureNoPendingDownloads());
1465
1466 EXPECT_TRUE(browser()->window()->IsDownloadShelfVisible());
1467
1468 // The |DownloadItem|s should now be done and have the final file names.
1469 // Verify that the files have the expected data and size.
1470 // |file1| should be full of '*'s, and |file2| should be the same as the
1471 // source file.
1472 FilePath file1(download1->GetFullPath());
1473 size_t file_size1 = URLRequestSlowDownloadJob::kFirstDownloadSize +
1474 URLRequestSlowDownloadJob::kSecondDownloadSize;
1475 std::string expected_contents(file_size1, '*');
1476 ASSERT_TRUE(VerifyFile(file1, expected_contents, file_size1));
1477
1478 FilePath file2(download2->GetFullPath());
1479 ASSERT_TRUE(file_util::ContentsEqual(OriginFile(file), file2));
1480 }
1481
1482 IN_PROC_BROWSER_TEST_F(DownloadTest, DownloadCancelled) {
1483 EXPECT_EQ(1, browser()->tab_count());
1484
1485 // TODO(rdsmith): Fragile code warning! The code below relies on the
1486 // DownloadTestObserverInProgress only finishing when the new download
1487 // has reached the state of being entered into the history and being
1488 // user-visible (that's what's required for the Remove to be valid and
1489 // for the download shelf to be visible). By the pure semantics of
1490 // DownloadTestObserverInProgress, that's not guaranteed; DownloadItems
1491 // are created in the IN_PROGRESS state and made known to the DownloadManager
1492 // immediately, so any ModelChanged event on the DownloadManager after
1493 // navigation would allow the observer to return. However, the only
1494 // ModelChanged() event the code will currently fire is in
1495 // OnCreateDownloadEntryComplete, at which point the download item will
1496 // be in the state we need.
1497 // The right way to fix this is to create finer grained states on the
1498 // DownloadItem, and wait for the state that indicates the item has been
1499 // entered in the history and made visible in the UI.
1500
1501 // Create a download, wait until it's started, and confirm
1502 // we're in the expected state.
1503 scoped_ptr<content::DownloadTestObserver> observer(
1504 CreateInProgressWaiter(browser(), 1));
1505 ui_test_utils::NavigateToURL(
1506 browser(), GURL(URLRequestSlowDownloadJob::kUnknownSizeUrl));
1507 observer->WaitForFinished();
1508
1509 std::vector<DownloadItem*> downloads;
1510 DownloadManagerForBrowser(browser())->SearchDownloads(
1511 string16(), &downloads);
1512 ASSERT_EQ(1u, downloads.size());
1513 ASSERT_EQ(DownloadItem::IN_PROGRESS, downloads[0]->GetState());
1514 EXPECT_TRUE(browser()->window()->IsDownloadShelfVisible());
1515
1516 // Cancel the download and wait for download system quiesce.
1517 downloads[0]->Delete(DownloadItem::DELETE_DUE_TO_USER_DISCARD);
1518 scoped_refptr<content::DownloadTestFlushObserver> flush_observer(
1519 new content::DownloadTestFlushObserver(
1520 DownloadManagerForBrowser(browser())));
1521 flush_observer->WaitForFlush();
1522
1523 // Get the important info from other threads and check it.
1524 EXPECT_TRUE(EnsureNoPendingDownloads());
1525
1526 // Using "DownloadItem::Remove" follows the discard dangerous download path,
1527 // which completely removes the browser from the shelf and closes the shelf
1528 // if it was there. Download panel stays open on ChromeOS.
1529 EXPECT_FALSE(browser()->window()->IsDownloadShelfVisible());
1530 }
1531
1532 // Confirm a download makes it into the history properly. 1410 // Confirm a download makes it into the history properly.
1533 IN_PROC_BROWSER_TEST_F(DownloadTest, DownloadHistoryCheck) { 1411 IN_PROC_BROWSER_TEST_F(DownloadTest, DownloadHistoryCheck) {
1534 FilePath file(FILE_PATH_LITERAL("download-test1.lib")); 1412 FilePath file(FILE_PATH_LITERAL("download-test1.lib"));
1535 GURL url(URLRequestMockHTTPJob::GetMockUrl(file)); 1413 GURL url(URLRequestMockHTTPJob::GetMockUrl(file));
1536 FilePath origin_file(OriginFile(file)); 1414 FilePath origin_file(OriginFile(file));
1537 int64 origin_size; 1415 int64 origin_size;
1538 file_util::GetFileSize(origin_file, &origin_size); 1416 file_util::GetFileSize(origin_file, &origin_size);
1539 1417
1540 // Download the file and wait. We do not expect the Select File dialog. 1418 // Download the file and wait. We do not expect the Select File dialog.
1541 DownloadAndWait(browser(), url); 1419 DownloadAndWait(browser(), url);
(...skipping 927 matching lines...) Expand 10 before | Expand all | Expand 10 after
2469 GetDownloads(browser(), &download_items); 2347 GetDownloads(browser(), &download_items);
2470 ASSERT_EQ(1u, download_items.size()); 2348 ASSERT_EQ(1u, download_items.size());
2471 ASSERT_EQ(test_server()->GetURL("echoheader?Referer"), 2349 ASSERT_EQ(test_server()->GetURL("echoheader?Referer"),
2472 download_items[0]->GetOriginalUrl()); 2350 download_items[0]->GetOriginalUrl());
2473 2351
2474 // Check that the file contains the expected referrer. 2352 // Check that the file contains the expected referrer.
2475 FilePath file(download_items[0]->GetFullPath()); 2353 FilePath file(download_items[0]->GetFullPath());
2476 std::string expected_contents = test_server()->GetURL("").spec(); 2354 std::string expected_contents = test_server()->GetURL("").spec();
2477 ASSERT_TRUE(VerifyFile(file, expected_contents, expected_contents.length())); 2355 ASSERT_TRUE(VerifyFile(file, expected_contents, expected_contents.length()));
2478 } 2356 }
OLDNEW
« no previous file with comments | « no previous file | content/browser/download/download_browsertest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698