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

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

Issue 7466033: Fix warning prompting on closing a window that will cancel downloads. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Merged up to latest (mostly around DownloadService changes. Created 9 years, 2 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 "base/bind.h" 5 #include "base/bind.h"
6 #include "base/bind_helpers.h" 6 #include "base/bind_helpers.h"
7 #include "base/file_path.h" 7 #include "base/file_path.h"
8 #include "base/file_util.h" 8 #include "base/file_util.h"
9 #include "base/memory/ref_counted.h" 9 #include "base/memory/ref_counted.h"
10 #include "base/path_service.h" 10 #include "base/path_service.h"
11 #include "base/scoped_temp_dir.h" 11 #include "base/scoped_temp_dir.h"
12 #include "base/stl_util.h" 12 #include "base/stl_util.h"
13 #include "base/test/test_file_util.h" 13 #include "base/test/test_file_util.h"
14 #include "base/utf_string_conversions.h" 14 #include "base/utf_string_conversions.h"
15 #include "chrome/browser/browser_process.h" 15 #include "chrome/browser/browser_process.h"
16 #include "chrome/browser/download/chrome_download_manager_delegate.h" 16 #include "chrome/browser/download/chrome_download_manager_delegate.h"
17 #include "chrome/browser/download/download_crx_util.h" 17 #include "chrome/browser/download/download_crx_util.h"
18 #include "chrome/browser/download/download_history.h" 18 #include "chrome/browser/download/download_history.h"
19 #include "chrome/browser/download/download_prefs.h" 19 #include "chrome/browser/download/download_prefs.h"
20 #include "chrome/browser/download/download_service.h" 20 #include "chrome/browser/download/download_service.h"
21 #include "chrome/browser/download/download_service_factory.h" 21 #include "chrome/browser/download/download_service_factory.h"
22 #include "chrome/browser/download/download_shelf.h" 22 #include "chrome/browser/download/download_shelf.h"
23 #include "chrome/browser/download/download_test_observer.h"
23 #include "chrome/browser/download/download_util.h" 24 #include "chrome/browser/download/download_util.h"
24 #include "chrome/browser/extensions/extension_install_ui.h" 25 #include "chrome/browser/extensions/extension_install_ui.h"
25 #include "chrome/browser/extensions/extension_service.h" 26 #include "chrome/browser/extensions/extension_service.h"
26 #include "chrome/browser/history/history.h" 27 #include "chrome/browser/history/history.h"
27 #include "chrome/browser/net/url_request_mock_util.h" 28 #include "chrome/browser/net/url_request_mock_util.h"
28 #include "chrome/browser/prefs/pref_service.h" 29 #include "chrome/browser/prefs/pref_service.h"
29 #include "chrome/browser/profiles/profile.h" 30 #include "chrome/browser/profiles/profile.h"
30 #include "chrome/browser/ui/browser.h" 31 #include "chrome/browser/ui/browser.h"
31 #include "chrome/browser/ui/browser_list.h" 32 #include "chrome/browser/ui/browser_list.h"
32 #include "chrome/browser/ui/browser_window.h" 33 #include "chrome/browser/ui/browser_window.h"
(...skipping 677 matching lines...) Expand 10 before | Expand all | Expand 10 after
710 711
711 DownloadPrefs* GetDownloadPrefs(Browser* browser) { 712 DownloadPrefs* GetDownloadPrefs(Browser* browser) {
712 return DownloadPrefs::FromDownloadManager( 713 return DownloadPrefs::FromDownloadManager(
713 DownloadManagerForBrowser(browser)); 714 DownloadManagerForBrowser(browser));
714 } 715 }
715 716
716 FilePath GetDownloadDirectory(Browser* browser) { 717 FilePath GetDownloadDirectory(Browser* browser) {
717 return GetDownloadPrefs(browser)->download_path(); 718 return GetDownloadPrefs(browser)->download_path();
718 } 719 }
719 720
720 // Create a DownloadsObserver that will wait for the 721 // Create a DownloadTestObserver that will wait for the
721 // specified number of downloads to finish. 722 // specified number of downloads to finish.
722 DownloadsObserver* CreateWaiter(Browser* browser, int num_downloads) { 723 DownloadTestObserver* CreateWaiter(Browser* browser, int num_downloads) {
723 DownloadManager* download_manager = DownloadManagerForBrowser(browser); 724 DownloadManager* download_manager = DownloadManagerForBrowser(browser);
724 return new DownloadsObserver( 725 return new DownloadTestObserver(
725 download_manager, num_downloads, 726 download_manager, num_downloads,
726 DownloadItem::COMPLETE, // Really done 727 DownloadItem::COMPLETE, // Really done
727 true, // Bail on select file 728 true, // Bail on select file
728 ON_DANGEROUS_DOWNLOAD_FAIL); 729 DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_FAIL);
729 } 730 }
730 731
731 // Create a DownloadsObserver that will wait for the 732 // Create a DownloadTestObserver that will wait for the
732 // specified number of downloads to start. 733 // specified number of downloads to start.
733 DownloadsObserver* CreateInProgressWaiter(Browser* browser, 734 DownloadTestObserver* CreateInProgressWaiter(Browser* browser,
734 int num_downloads) { 735 int num_downloads) {
735 DownloadManager* download_manager = DownloadManagerForBrowser(browser); 736 DownloadManager* download_manager = DownloadManagerForBrowser(browser);
736 return new DownloadsObserver( 737 return new DownloadTestObserver(
737 download_manager, num_downloads, 738 download_manager, num_downloads,
738 DownloadItem::IN_PROGRESS, // Has started 739 DownloadItem::IN_PROGRESS, // Has started
739 true, // Bail on select file 740 true, // Bail on select file
740 ON_DANGEROUS_DOWNLOAD_FAIL); 741 DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_FAIL);
741 } 742 }
742 743
743 // Create a DownloadsObserver that will wait for the 744 // Create a DownloadTestObserver that will wait for the
744 // specified number of downloads to finish, or for 745 // specified number of downloads to finish, or for
745 // a dangerous download warning to be shown. 746 // a dangerous download warning to be shown.
746 DownloadsObserver* DangerousInstallWaiter( 747 DownloadTestObserver* DangerousInstallWaiter(
747 Browser* browser, 748 Browser* browser,
748 int num_downloads, 749 int num_downloads,
749 DownloadItem::DownloadState final_state, 750 DownloadItem::DownloadState final_state,
750 DangerousDownloadAction dangerous_download_action) { 751 DownloadTestObserver::DangerousDownloadAction dangerous_download_action) {
751 DownloadManager* download_manager = DownloadManagerForBrowser(browser); 752 DownloadManager* download_manager = DownloadManagerForBrowser(browser);
752 return new DownloadsObserver( 753 return new DownloadTestObserver(
753 download_manager, num_downloads, 754 download_manager, num_downloads,
754 final_state, 755 final_state,
755 true, // Bail on select file 756 true, // Bail on select file
756 dangerous_download_action); 757 dangerous_download_action);
757 } 758 }
758 759
759 // Download |url|, then wait for the download to finish. 760 // Download |url|, then wait for the download to finish.
760 // |disposition| indicates where the navigation occurs (current tab, new 761 // |disposition| indicates where the navigation occurs (current tab, new
761 // foreground tab, etc). 762 // foreground tab, etc).
762 // |expectation| indicates whether or not a Select File dialog should be 763 // |expectation| indicates whether or not a Select File dialog should be
763 // open when the download is finished, or if we don't care. 764 // open when the download is finished, or if we don't care.
764 // If the dialog appears, the routine exits. The only effect |expectation| 765 // If the dialog appears, the routine exits. The only effect |expectation|
765 // has is whether or not the test succeeds. 766 // has is whether or not the test succeeds.
766 // |browser_test_flags| indicate what to wait for, and is an OR of 0 or more 767 // |browser_test_flags| indicate what to wait for, and is an OR of 0 or more
767 // values in the ui_test_utils::BrowserTestWaitFlags enum. 768 // values in the ui_test_utils::BrowserTestWaitFlags enum.
768 void DownloadAndWaitWithDisposition(Browser* browser, 769 void DownloadAndWaitWithDisposition(Browser* browser,
769 const GURL& url, 770 const GURL& url,
770 WindowOpenDisposition disposition, 771 WindowOpenDisposition disposition,
771 SelectExpectation expectation, 772 SelectExpectation expectation,
772 int browser_test_flags) { 773 int browser_test_flags) {
773 // Setup notification, navigate, and block. 774 // Setup notification, navigate, and block.
774 scoped_ptr<DownloadsObserver> observer(CreateWaiter(browser, 1)); 775 scoped_ptr<DownloadTestObserver> observer(CreateWaiter(browser, 1));
775 // This call will block until the condition specified by 776 // This call will block until the condition specified by
776 // |browser_test_flags|, but will not wait for the download to finish. 777 // |browser_test_flags|, but will not wait for the download to finish.
777 ui_test_utils::NavigateToURLWithDisposition(browser, 778 ui_test_utils::NavigateToURLWithDisposition(browser,
778 url, 779 url,
779 disposition, 780 disposition,
780 browser_test_flags); 781 browser_test_flags);
781 // Waits for the download to complete. 782 // Waits for the download to complete.
782 observer->WaitForFinished(); 783 observer->WaitForFinished();
783 784
784 // If specified, check the state of the select file dialog. 785 // If specified, check the state of the select file dialog.
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
855 // |expected_title_finished| need to be checked. 856 // |expected_title_finished| need to be checked.
856 FilePath filename; 857 FilePath filename;
857 net::FileURLToFilePath(url, &filename); 858 net::FileURLToFilePath(url, &filename);
858 string16 expected_title_in_progress( 859 string16 expected_title_in_progress(
859 ASCIIToUTF16(partial_indication) + filename.LossyDisplayName()); 860 ASCIIToUTF16(partial_indication) + filename.LossyDisplayName());
860 string16 expected_title_finished( 861 string16 expected_title_finished(
861 ASCIIToUTF16(total_indication) + filename.LossyDisplayName()); 862 ASCIIToUTF16(total_indication) + filename.LossyDisplayName());
862 863
863 // Download a partial web page in a background tab and wait. 864 // Download a partial web page in a background tab and wait.
864 // The mock system will not complete until it gets a special URL. 865 // The mock system will not complete until it gets a special URL.
865 scoped_ptr<DownloadsObserver> observer(CreateWaiter(browser, 1)); 866 scoped_ptr<DownloadTestObserver> observer(CreateWaiter(browser, 1));
866 ui_test_utils::NavigateToURL(browser, url); 867 ui_test_utils::NavigateToURL(browser, url);
867 868
868 // TODO(ahendrickson): check download status text before downloading. 869 // TODO(ahendrickson): check download status text before downloading.
869 // Need to: 870 // Need to:
870 // - Add a member function to the |DownloadShelf| interface class, that 871 // - Add a member function to the |DownloadShelf| interface class, that
871 // indicates how many members it has. 872 // indicates how many members it has.
872 // - Add a member function to |DownloadShelf| to get the status text 873 // - Add a member function to |DownloadShelf| to get the status text
873 // of a given member (for example, via the name in |DownloadItemView|'s 874 // of a given member (for example, via the name in |DownloadItemView|'s
874 // GetAccessibleState() member function), by index. 875 // GetAccessibleState() member function), by index.
875 // - Iterate over browser->window()->GetDownloadShelf()'s members 876 // - Iterate over browser->window()->GetDownloadShelf()'s members
(...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after
1030 // downloads preferences settings. 1031 // downloads preferences settings.
1031 IN_PROC_BROWSER_TEST_F(DownloadTest, DownloadMimeTypeSelect) { 1032 IN_PROC_BROWSER_TEST_F(DownloadTest, DownloadMimeTypeSelect) {
1032 ASSERT_TRUE(InitialSetup(true)); 1033 ASSERT_TRUE(InitialSetup(true));
1033 FilePath file(FILE_PATH_LITERAL("download-test1.lib")); 1034 FilePath file(FILE_PATH_LITERAL("download-test1.lib"));
1034 GURL url(URLRequestMockHTTPJob::GetMockUrl(file)); 1035 GURL url(URLRequestMockHTTPJob::GetMockUrl(file));
1035 1036
1036 NullSelectFile(browser()); 1037 NullSelectFile(browser());
1037 1038
1038 // Download the file and wait. We expect the Select File dialog to appear 1039 // Download the file and wait. We expect the Select File dialog to appear
1039 // due to the MIME type, but we still wait until the download completes. 1040 // due to the MIME type, but we still wait until the download completes.
1040 scoped_ptr<DownloadsObserver> observer( 1041 scoped_ptr<DownloadTestObserver> observer(
1041 new DownloadsObserver( 1042 new DownloadTestObserver(
1042 DownloadManagerForBrowser(browser()), 1043 DownloadManagerForBrowser(browser()),
1043 1, 1044 1,
1044 DownloadItem::COMPLETE, // Really done 1045 DownloadItem::COMPLETE, // Really done
1045 false, // Continue on select file. 1046 false, // Continue on select file.
1046 ON_DANGEROUS_DOWNLOAD_FAIL)); 1047 DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_FAIL));
1047 ui_test_utils::NavigateToURLWithDisposition( 1048 ui_test_utils::NavigateToURLWithDisposition(
1048 browser(), url, CURRENT_TAB, 1049 browser(), url, CURRENT_TAB,
1049 ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); 1050 ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION);
1050 observer->WaitForFinished(); 1051 observer->WaitForFinished();
1051 EXPECT_TRUE(observer->select_file_dialog_seen()); 1052 EXPECT_TRUE(observer->select_file_dialog_seen());
1052 1053
1053 // Check state. 1054 // Check state.
1054 EXPECT_EQ(1, browser()->tab_count()); 1055 EXPECT_EQ(1, browser()->tab_count());
1055 CheckDownload(browser(), file, file); 1056 CheckDownload(browser(), file, file);
1056 CheckDownloadUI(browser(), true, true, file); 1057 CheckDownloadUI(browser(), true, true, file);
(...skipping 397 matching lines...) Expand 10 before | Expand all | Expand 10 after
1454 CheckDownloadUI(browser(), false, true, file); 1455 CheckDownloadUI(browser(), false, true, file);
1455 1456
1456 CheckDownload(browser(), file, file); 1457 CheckDownload(browser(), file, file);
1457 } 1458 }
1458 1459
1459 IN_PROC_BROWSER_TEST_F(DownloadTest, DownloadCancelled) { 1460 IN_PROC_BROWSER_TEST_F(DownloadTest, DownloadCancelled) {
1460 ASSERT_TRUE(InitialSetup(false)); 1461 ASSERT_TRUE(InitialSetup(false));
1461 EXPECT_EQ(1, browser()->tab_count()); 1462 EXPECT_EQ(1, browser()->tab_count());
1462 1463
1463 // TODO(rdsmith): Fragile code warning! The code below relies on the 1464 // TODO(rdsmith): Fragile code warning! The code below relies on the
1464 // DownloadsObserver only finishing when the new download has reached 1465 // DownloadTestObserver only finishing when the new download has reached
1465 // the state of being entered into the history and being user-visible 1466 // the state of being entered into the history and being user-visible
1466 // (that's what's required for the Remove to be valid and for the 1467 // (that's what's required for the Remove to be valid and for the
1467 // download shelf to be visible). By the pure semantics of 1468 // download shelf to be visible). By the pure semantics of
1468 // DownloadsObserver, that's not guaranteed; DownloadItems are created 1469 // DownloadTestObserver, that's not guaranteed; DownloadItems are created
1469 // in the IN_PROGRESS state and made known to the DownloadManager 1470 // in the IN_PROGRESS state and made known to the DownloadManager
1470 // immediately, so any ModelChanged event on the DownloadManager after 1471 // immediately, so any ModelChanged event on the DownloadManager after
1471 // navigation would allow the observer to return. However, the only 1472 // navigation would allow the observer to return. However, the only
1472 // ModelChanged() event the code will currently fire is in 1473 // ModelChanged() event the code will currently fire is in
1473 // OnCreateDownloadEntryComplete, at which point the download item will 1474 // OnCreateDownloadEntryComplete, at which point the download item will
1474 // be in the state we need. 1475 // be in the state we need.
1475 // The right way to fix this is to create finer grained states on the 1476 // The right way to fix this is to create finer grained states on the
1476 // DownloadItem, and wait for the state that indicates the item has been 1477 // DownloadItem, and wait for the state that indicates the item has been
1477 // entered in the history and made visible in the UI. 1478 // entered in the history and made visible in the UI.
1478 1479
1479 // Create a download, wait until it's started, and confirm 1480 // Create a download, wait until it's started, and confirm
1480 // we're in the expected state. 1481 // we're in the expected state.
1481 scoped_ptr<DownloadsObserver> observer( 1482 scoped_ptr<DownloadTestObserver> observer(
1482 CreateInProgressWaiter(browser(), 1)); 1483 CreateInProgressWaiter(browser(), 1));
1483 ui_test_utils::NavigateToURL( 1484 ui_test_utils::NavigateToURL(
1484 browser(), GURL(URLRequestSlowDownloadJob::kUnknownSizeUrl)); 1485 browser(), GURL(URLRequestSlowDownloadJob::kUnknownSizeUrl));
1485 observer->WaitForFinished(); 1486 observer->WaitForFinished();
1486 1487
1487 std::vector<DownloadItem*> downloads; 1488 std::vector<DownloadItem*> downloads;
1488 DownloadManagerForBrowser(browser())->SearchDownloads( 1489 DownloadManagerForBrowser(browser())->SearchDownloads(
1489 string16(), &downloads); 1490 string16(), &downloads);
1490 ASSERT_EQ(1u, downloads.size()); 1491 ASSERT_EQ(1u, downloads.size());
1491 ASSERT_EQ(DownloadItem::IN_PROGRESS, downloads[0]->state()); 1492 ASSERT_EQ(DownloadItem::IN_PROGRESS, downloads[0]->state());
1492 CheckDownloadUI(browser(), true, true, FilePath()); 1493 CheckDownloadUI(browser(), true, true, FilePath());
1493 1494
1494 // Cancel the download and wait for download system quiesce. 1495 // Cancel the download and wait for download system quiesce.
1495 downloads[0]->Delete(DownloadItem::DELETE_DUE_TO_USER_DISCARD); 1496 downloads[0]->Delete(DownloadItem::DELETE_DUE_TO_USER_DISCARD);
1496 scoped_refptr<DownloadsFlushObserver> flush_observer( 1497 scoped_refptr<DownloadTestFlushObserver> flush_observer(
1497 new DownloadsFlushObserver(DownloadManagerForBrowser(browser()))); 1498 new DownloadTestFlushObserver(
1499 DownloadManagerForBrowser(browser())));
1498 flush_observer->WaitForFlush(); 1500 flush_observer->WaitForFlush();
1499 1501
1500 // Get the important info from other threads and check it. 1502 // Get the important info from other threads and check it.
1501 scoped_refptr<CancelTestDataCollector> info(new CancelTestDataCollector()); 1503 scoped_refptr<CancelTestDataCollector> info(new CancelTestDataCollector());
1502 info->WaitForDataCollected(); 1504 info->WaitForDataCollected();
1503 EXPECT_EQ(0, info->rdh_pending_requests()); 1505 EXPECT_EQ(0, info->rdh_pending_requests());
1504 EXPECT_EQ(0, info->dfm_pending_downloads()); 1506 EXPECT_EQ(0, info->dfm_pending_downloads());
1505 1507
1506 // Using "DownloadItem::Remove" follows the discard dangerous download path, 1508 // Using "DownloadItem::Remove" follows the discard dangerous download path,
1507 // which completely removes the browser from the shelf and closes the shelf 1509 // which completely removes the browser from the shelf and closes the shelf
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
1601 } 1603 }
1602 1604
1603 // Test to make sure the 'download' attribute in anchor tag is respected. 1605 // Test to make sure the 'download' attribute in anchor tag is respected.
1604 IN_PROC_BROWSER_TEST_F(DownloadTest, AnchorDownloadTag) { 1606 IN_PROC_BROWSER_TEST_F(DownloadTest, AnchorDownloadTag) {
1605 ASSERT_TRUE(InitialSetup(false)); 1607 ASSERT_TRUE(InitialSetup(false));
1606 FilePath file(FILE_PATH_LITERAL("download-anchor-attrib.html")); 1608 FilePath file(FILE_PATH_LITERAL("download-anchor-attrib.html"));
1607 GURL url(URLRequestMockHTTPJob::GetMockUrl(file)); 1609 GURL url(URLRequestMockHTTPJob::GetMockUrl(file));
1608 1610
1609 // Create a download, wait until it's complete, and confirm 1611 // Create a download, wait until it's complete, and confirm
1610 // we're in the expected state. 1612 // we're in the expected state.
1611 scoped_ptr<DownloadsObserver> observer(CreateWaiter(browser(), 1)); 1613 scoped_ptr<DownloadTestObserver> observer(CreateWaiter(browser(), 1));
1612 ui_test_utils::NavigateToURL(browser(), url); 1614 ui_test_utils::NavigateToURL(browser(), url);
1613 observer->WaitForFinished(); 1615 observer->WaitForFinished();
1614 1616
1615 // Confirm the downloaded data exists. 1617 // Confirm the downloaded data exists.
1616 FilePath downloaded_file = GetDownloadDirectory(browser()); 1618 FilePath downloaded_file = GetDownloadDirectory(browser());
1617 downloaded_file = downloaded_file.Append(FILE_PATH_LITERAL("a_red_dot.png")); 1619 downloaded_file = downloaded_file.Append(FILE_PATH_LITERAL("a_red_dot.png"));
1618 EXPECT_TRUE(file_util::PathExists(downloaded_file)); 1620 EXPECT_TRUE(file_util::PathExists(downloaded_file));
1619 } 1621 }
1620 1622
1621 // Test to make sure auto-open works. 1623 // Test to make sure auto-open works.
(...skipping 25 matching lines...) Expand all
1647 // Download shelf should close. Download panel stays open on ChromeOS. 1649 // Download shelf should close. Download panel stays open on ChromeOS.
1648 CheckDownloadUI(browser(), false, true, FilePath()); 1650 CheckDownloadUI(browser(), false, true, FilePath());
1649 } 1651 }
1650 1652
1651 // Download an extension. Expect a dangerous download warning. 1653 // Download an extension. Expect a dangerous download warning.
1652 // Deny the download. 1654 // Deny the download.
1653 IN_PROC_BROWSER_TEST_F(DownloadTest, CrxDenyInstall) { 1655 IN_PROC_BROWSER_TEST_F(DownloadTest, CrxDenyInstall) {
1654 ASSERT_TRUE(InitialSetup(false)); 1656 ASSERT_TRUE(InitialSetup(false));
1655 GURL extension_url(URLRequestMockHTTPJob::GetMockUrl(kGoodCrxPath)); 1657 GURL extension_url(URLRequestMockHTTPJob::GetMockUrl(kGoodCrxPath));
1656 1658
1657 scoped_ptr<DownloadsObserver> observer( 1659 scoped_ptr<DownloadTestObserver> observer(
1658 DangerousInstallWaiter(browser(), 1660 DangerousInstallWaiter(
1659 1, 1661 browser(), 1, DownloadItem::CANCELLED,
1660 DownloadItem::CANCELLED, 1662 DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_DENY));
1661 ON_DANGEROUS_DOWNLOAD_DENY));
1662 ui_test_utils::NavigateToURL(browser(), extension_url); 1663 ui_test_utils::NavigateToURL(browser(), extension_url);
1663 1664
1664 observer->WaitForFinished(); 1665 observer->WaitForFinished();
1665 EXPECT_EQ(1u, observer->NumDangerousDownloadsSeen()); 1666 EXPECT_EQ(1u, observer->NumDangerousDownloadsSeen());
1666 1667
1667 // Download shelf should close. Download panel stays open on ChromeOS. 1668 // Download shelf should close. Download panel stays open on ChromeOS.
1668 CheckDownloadUI(browser(), false, true, FilePath()); 1669 CheckDownloadUI(browser(), false, true, FilePath());
1669 1670
1670 // Check that the CRX is not installed. 1671 // Check that the CRX is not installed.
1671 ExtensionService* extension_service = 1672 ExtensionService* extension_service =
1672 browser()->profile()->GetExtensionService(); 1673 browser()->profile()->GetExtensionService();
1673 ASSERT_FALSE(extension_service->GetExtensionById(kGoodCrxId, false)); 1674 ASSERT_FALSE(extension_service->GetExtensionById(kGoodCrxId, false));
1674 } 1675 }
1675 1676
1676 // Download an extension. Expect a dangerous download warning. 1677 // Download an extension. Expect a dangerous download warning.
1677 // Allow the download, deny the install. 1678 // Allow the download, deny the install.
1678 IN_PROC_BROWSER_TEST_F(DownloadTest, CrxInstallDenysPermissions) { 1679 IN_PROC_BROWSER_TEST_F(DownloadTest, CrxInstallDenysPermissions) {
1679 ASSERT_TRUE(InitialSetup(false)); 1680 ASSERT_TRUE(InitialSetup(false));
1680 GURL extension_url(URLRequestMockHTTPJob::GetMockUrl(kGoodCrxPath)); 1681 GURL extension_url(URLRequestMockHTTPJob::GetMockUrl(kGoodCrxPath));
1681 1682
1682 // Install a mock install UI that simulates a user denying permission to 1683 // Install a mock install UI that simulates a user denying permission to
1683 // finish the install. 1684 // finish the install.
1684 download_crx_util::SetMockInstallUIForTesting( 1685 download_crx_util::SetMockInstallUIForTesting(
1685 new MockAbortExtensionInstallUI()); 1686 new MockAbortExtensionInstallUI());
1686 1687
1687 scoped_ptr<DownloadsObserver> observer( 1688 scoped_ptr<DownloadTestObserver> observer(
1688 DangerousInstallWaiter(browser(), 1689 DangerousInstallWaiter(
1689 1, 1690 browser(), 1, DownloadItem::COMPLETE,
1690 DownloadItem::COMPLETE, 1691 DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_ACCEPT));
1691 ON_DANGEROUS_DOWNLOAD_ACCEPT));
1692 ui_test_utils::NavigateToURL(browser(), extension_url); 1692 ui_test_utils::NavigateToURL(browser(), extension_url);
1693 1693
1694 observer->WaitForFinished(); 1694 observer->WaitForFinished();
1695 EXPECT_EQ(1u, observer->NumDangerousDownloadsSeen()); 1695 EXPECT_EQ(1u, observer->NumDangerousDownloadsSeen());
1696 1696
1697 // Download shelf should close. Download panel stays open on ChromeOS. 1697 // Download shelf should close. Download panel stays open on ChromeOS.
1698 CheckDownloadUI(browser(), false, true, FilePath()); 1698 CheckDownloadUI(browser(), false, true, FilePath());
1699 1699
1700 // Check that the extension was not installed. 1700 // Check that the extension was not installed.
1701 ExtensionService* extension_service = 1701 ExtensionService* extension_service =
1702 browser()->profile()->GetExtensionService(); 1702 browser()->profile()->GetExtensionService();
1703 ASSERT_FALSE(extension_service->GetExtensionById(kGoodCrxId, false)); 1703 ASSERT_FALSE(extension_service->GetExtensionById(kGoodCrxId, false));
1704 } 1704 }
1705 1705
1706 // Download an extension. Expect a dangerous download warning. 1706 // Download an extension. Expect a dangerous download warning.
1707 // Allow the download, and the install. 1707 // Allow the download, and the install.
1708 IN_PROC_BROWSER_TEST_F(DownloadTest, CrxInstallAcceptPermissions) { 1708 IN_PROC_BROWSER_TEST_F(DownloadTest, CrxInstallAcceptPermissions) {
1709 ASSERT_TRUE(InitialSetup(false)); 1709 ASSERT_TRUE(InitialSetup(false));
1710 GURL extension_url(URLRequestMockHTTPJob::GetMockUrl(kGoodCrxPath)); 1710 GURL extension_url(URLRequestMockHTTPJob::GetMockUrl(kGoodCrxPath));
1711 1711
1712 // Install a mock install UI that simulates a user allowing permission to 1712 // Install a mock install UI that simulates a user allowing permission to
1713 // finish the install. 1713 // finish the install.
1714 download_crx_util::SetMockInstallUIForTesting( 1714 download_crx_util::SetMockInstallUIForTesting(
1715 new MockAutoConfirmExtensionInstallUI(browser()->profile())); 1715 new MockAutoConfirmExtensionInstallUI(browser()->profile()));
1716 1716
1717 scoped_ptr<DownloadsObserver> observer( 1717 scoped_ptr<DownloadTestObserver> observer(
1718 DangerousInstallWaiter(browser(), 1718 DangerousInstallWaiter(
1719 1, 1719 browser(), 1, DownloadItem::COMPLETE,
1720 DownloadItem::COMPLETE, 1720 DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_ACCEPT));
1721 ON_DANGEROUS_DOWNLOAD_ACCEPT));
1722 ui_test_utils::NavigateToURL(browser(), extension_url); 1721 ui_test_utils::NavigateToURL(browser(), extension_url);
1723 1722
1724 observer->WaitForFinished(); 1723 observer->WaitForFinished();
1725 EXPECT_EQ(1u, observer->NumDangerousDownloadsSeen()); 1724 EXPECT_EQ(1u, observer->NumDangerousDownloadsSeen());
1726 1725
1727 // Download shelf should close. Download panel stays open on ChromeOS. 1726 // Download shelf should close. Download panel stays open on ChromeOS.
1728 CheckDownloadUI(browser(), false, true, FilePath()); 1727 CheckDownloadUI(browser(), false, true, FilePath());
1729 1728
1730 // Check that the extension was installed. 1729 // Check that the extension was installed.
1731 ExtensionService* extension_service = 1730 ExtensionService* extension_service =
1732 browser()->profile()->GetExtensionService(); 1731 browser()->profile()->GetExtensionService();
1733 ASSERT_TRUE(extension_service->GetExtensionById(kGoodCrxId, false)); 1732 ASSERT_TRUE(extension_service->GetExtensionById(kGoodCrxId, false));
1734 } 1733 }
1735 1734
1736 // Test installing a CRX that fails integrity checks. 1735 // Test installing a CRX that fails integrity checks.
1737 IN_PROC_BROWSER_TEST_F(DownloadTest, CrxInvalid) { 1736 IN_PROC_BROWSER_TEST_F(DownloadTest, CrxInvalid) {
1738 ASSERT_TRUE(InitialSetup(false)); 1737 ASSERT_TRUE(InitialSetup(false));
1739 FilePath file(FILE_PATH_LITERAL("extensions/bad_signature.crx")); 1738 FilePath file(FILE_PATH_LITERAL("extensions/bad_signature.crx"));
1740 GURL extension_url(URLRequestMockHTTPJob::GetMockUrl(file)); 1739 GURL extension_url(URLRequestMockHTTPJob::GetMockUrl(file));
1741 1740
1742 // Install a mock install UI that simulates a user allowing permission to 1741 // Install a mock install UI that simulates a user allowing permission to
1743 // finish the install, and dismisses any error message. We check that the 1742 // finish the install, and dismisses any error message. We check that the
1744 // install failed below. 1743 // install failed below.
1745 download_crx_util::SetMockInstallUIForTesting( 1744 download_crx_util::SetMockInstallUIForTesting(
1746 new MockAutoConfirmExtensionInstallUI(browser()->profile())); 1745 new MockAutoConfirmExtensionInstallUI(browser()->profile()));
1747 1746
1748 scoped_ptr<DownloadsObserver> observer( 1747 scoped_ptr<DownloadTestObserver> observer(
1749 DangerousInstallWaiter(browser(), 1748 DangerousInstallWaiter(
1750 1, 1749 browser(), 1, DownloadItem::COMPLETE,
1751 DownloadItem::COMPLETE, 1750 DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_ACCEPT));
1752 ON_DANGEROUS_DOWNLOAD_ACCEPT));
1753 ui_test_utils::NavigateToURL(browser(), extension_url); 1751 ui_test_utils::NavigateToURL(browser(), extension_url);
1754 1752
1755 observer->WaitForFinished(); 1753 observer->WaitForFinished();
1756 1754
1757 // Check that the extension was not installed. 1755 // Check that the extension was not installed.
1758 ExtensionService* extension_service = 1756 ExtensionService* extension_service =
1759 browser()->profile()->GetExtensionService(); 1757 browser()->profile()->GetExtensionService();
1760 ASSERT_FALSE(extension_service->GetExtensionById(kGoodCrxId, false)); 1758 ASSERT_FALSE(extension_service->GetExtensionById(kGoodCrxId, false));
1761 } 1759 }
1762 1760
1763 // Install a large (100kb) theme. 1761 // Install a large (100kb) theme.
1764 IN_PROC_BROWSER_TEST_F(DownloadTest, CrxLargeTheme) { 1762 IN_PROC_BROWSER_TEST_F(DownloadTest, CrxLargeTheme) {
1765 ASSERT_TRUE(InitialSetup(false)); 1763 ASSERT_TRUE(InitialSetup(false));
1766 GURL extension_url(URLRequestMockHTTPJob::GetMockUrl(kLargeThemePath)); 1764 GURL extension_url(URLRequestMockHTTPJob::GetMockUrl(kLargeThemePath));
1767 1765
1768 // Install a mock install UI that simulates a user allowing permission to 1766 // Install a mock install UI that simulates a user allowing permission to
1769 // finish the install. 1767 // finish the install.
1770 download_crx_util::SetMockInstallUIForTesting( 1768 download_crx_util::SetMockInstallUIForTesting(
1771 new MockAutoConfirmExtensionInstallUI(browser()->profile())); 1769 new MockAutoConfirmExtensionInstallUI(browser()->profile()));
1772 1770
1773 scoped_ptr<DownloadsObserver> observer( 1771 scoped_ptr<DownloadTestObserver> observer(
1774 DangerousInstallWaiter(browser(), 1772 DangerousInstallWaiter(
1775 1, 1773 browser(), 1, DownloadItem::COMPLETE,
1776 DownloadItem::COMPLETE, 1774 DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_ACCEPT));
1777 ON_DANGEROUS_DOWNLOAD_ACCEPT));
1778 ui_test_utils::NavigateToURL(browser(), extension_url); 1775 ui_test_utils::NavigateToURL(browser(), extension_url);
1779 1776
1780 observer->WaitForFinished(); 1777 observer->WaitForFinished();
1781 EXPECT_EQ(1u, observer->NumDangerousDownloadsSeen()); 1778 EXPECT_EQ(1u, observer->NumDangerousDownloadsSeen());
1782 1779
1783 // Download shelf should close. Download panel stays open on ChromeOS. 1780 // Download shelf should close. Download panel stays open on ChromeOS.
1784 CheckDownloadUI(browser(), false, true, FilePath()); 1781 CheckDownloadUI(browser(), false, true, FilePath());
1785 1782
1786 // Check that the extension was installed. 1783 // Check that the extension was installed.
1787 ExtensionService* extension_service = 1784 ExtensionService* extension_service =
1788 browser()->profile()->GetExtensionService(); 1785 browser()->profile()->GetExtensionService();
1789 ASSERT_TRUE(extension_service->GetExtensionById(kLargeThemeCrxId, false)); 1786 ASSERT_TRUE(extension_service->GetExtensionById(kLargeThemeCrxId, false));
1790 } 1787 }
OLDNEW
« no previous file with comments | « no previous file | chrome/browser/download/download_service.h » ('j') | chrome/browser/download/download_test_observer.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698