| OLD | NEW |
| 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 "chrome/browser/download/download_browsertest.h" | 5 #include "chrome/browser/download/download_browsertest.h" |
| 6 | 6 |
| 7 #include <stdint.h> | 7 #include <stdint.h> |
| 8 #include <sstream> | 8 #include <sstream> |
| 9 #include <utility> | 9 #include <utility> |
| 10 | 10 |
| (...skipping 30 matching lines...) Expand all Loading... |
| 41 #include "chrome/browser/download/download_service_factory.h" | 41 #include "chrome/browser/download/download_service_factory.h" |
| 42 #include "chrome/browser/download/download_shelf.h" | 42 #include "chrome/browser/download/download_shelf.h" |
| 43 #include "chrome/browser/download/download_target_determiner.h" | 43 #include "chrome/browser/download/download_target_determiner.h" |
| 44 #include "chrome/browser/download/download_test_file_activity_observer.h" | 44 #include "chrome/browser/download/download_test_file_activity_observer.h" |
| 45 #include "chrome/browser/extensions/extension_service.h" | 45 #include "chrome/browser/extensions/extension_service.h" |
| 46 #include "chrome/browser/history/history_service_factory.h" | 46 #include "chrome/browser/history/history_service_factory.h" |
| 47 #include "chrome/browser/infobars/infobar_service.h" | 47 #include "chrome/browser/infobars/infobar_service.h" |
| 48 #include "chrome/browser/net/url_request_mock_util.h" | 48 #include "chrome/browser/net/url_request_mock_util.h" |
| 49 #include "chrome/browser/notifications/notification_ui_manager.h" | 49 #include "chrome/browser/notifications/notification_ui_manager.h" |
| 50 #include "chrome/browser/permissions/permission_request_manager.h" | 50 #include "chrome/browser/permissions/permission_request_manager.h" |
| 51 #include "chrome/browser/platform_util_internal.h" |
| 51 #include "chrome/browser/profiles/profile.h" | 52 #include "chrome/browser/profiles/profile.h" |
| 52 #include "chrome/browser/renderer_context_menu/render_view_context_menu_browsert
est_util.h" | 53 #include "chrome/browser/renderer_context_menu/render_view_context_menu_browsert
est_util.h" |
| 53 #include "chrome/browser/renderer_context_menu/render_view_context_menu_test_uti
l.h" | 54 #include "chrome/browser/renderer_context_menu/render_view_context_menu_test_uti
l.h" |
| 54 #include "chrome/browser/ui/browser.h" | 55 #include "chrome/browser/ui/browser.h" |
| 55 #include "chrome/browser/ui/browser_commands.h" | 56 #include "chrome/browser/ui/browser_commands.h" |
| 56 #include "chrome/browser/ui/browser_finder.h" | 57 #include "chrome/browser/ui/browser_finder.h" |
| 57 #include "chrome/browser/ui/browser_list.h" | 58 #include "chrome/browser/ui/browser_list.h" |
| 58 #include "chrome/browser/ui/browser_tabstrip.h" | 59 #include "chrome/browser/ui/browser_tabstrip.h" |
| 59 #include "chrome/browser/ui/browser_window.h" | 60 #include "chrome/browser/ui/browser_window.h" |
| 60 #include "chrome/browser/ui/chrome_pages.h" | 61 #include "chrome/browser/ui/chrome_pages.h" |
| (...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 156 if (waiting_) | 157 if (waiting_) |
| 157 base::MessageLoopForUI::current()->QuitWhenIdle(); | 158 base::MessageLoopForUI::current()->QuitWhenIdle(); |
| 158 } | 159 } |
| 159 | 160 |
| 160 content::DownloadManager* manager_; | 161 content::DownloadManager* manager_; |
| 161 bool waiting_; | 162 bool waiting_; |
| 162 | 163 |
| 163 DISALLOW_COPY_AND_ASSIGN(CreatedObserver); | 164 DISALLOW_COPY_AND_ASSIGN(CreatedObserver); |
| 164 }; | 165 }; |
| 165 | 166 |
| 167 class ShownObserver : public content::DownloadItem::Observer { |
| 168 public: |
| 169 explicit ShownObserver(DownloadItem* item) |
| 170 : item_(item), |
| 171 waiting_(false) { |
| 172 item->AddObserver(this); |
| 173 } |
| 174 |
| 175 ~ShownObserver() override { |
| 176 if (item_) |
| 177 item_->RemoveObserver(this); |
| 178 } |
| 179 |
| 180 void Wait() { |
| 181 if (DownloadItemModel(item_).GetOpenedOrShown()) { |
| 182 return; |
| 183 } |
| 184 waiting_ = true; |
| 185 content::RunMessageLoop(); |
| 186 waiting_ = false; |
| 187 } |
| 188 |
| 189 private: |
| 190 void OnDownloadShown(content::DownloadItem* item) override { |
| 191 DCHECK_EQ(item_, item); |
| 192 if (waiting_) |
| 193 base::MessageLoopForUI::current()->QuitWhenIdle(); |
| 194 } |
| 195 |
| 196 void OnDownloadDestroyed(content::DownloadItem* item) override { |
| 197 DCHECK_EQ(item_, item); |
| 198 item_->RemoveObserver(this); |
| 199 item_ = NULL; |
| 200 } |
| 201 |
| 202 content::DownloadItem* item_; |
| 203 bool waiting_; |
| 204 |
| 205 DISALLOW_COPY_AND_ASSIGN(ShownObserver); |
| 206 }; |
| 207 |
| 166 class PercentWaiter : public content::DownloadItem::Observer { | 208 class PercentWaiter : public content::DownloadItem::Observer { |
| 167 public: | 209 public: |
| 168 explicit PercentWaiter(DownloadItem* item) | 210 explicit PercentWaiter(DownloadItem* item) |
| 169 : item_(item), | 211 : item_(item), |
| 170 waiting_(false), | 212 waiting_(false), |
| 171 error_(false), | 213 error_(false), |
| 172 prev_percent_(0) { | 214 prev_percent_(0) { |
| 173 item_->AddObserver(this); | 215 item_->AddObserver(this); |
| 174 } | 216 } |
| 175 ~PercentWaiter() override { | 217 ~PercentWaiter() override { |
| (...skipping 237 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 413 }; | 455 }; |
| 414 | 456 |
| 415 struct FileErrorInjectInfo { | 457 struct FileErrorInjectInfo { |
| 416 DownloadInfo download_info; | 458 DownloadInfo download_info; |
| 417 content::TestFileErrorInjector::FileErrorInfo error_info; | 459 content::TestFileErrorInjector::FileErrorInfo error_info; |
| 418 }; | 460 }; |
| 419 | 461 |
| 420 DownloadTest() {} | 462 DownloadTest() {} |
| 421 | 463 |
| 422 void SetUpOnMainThread() override { | 464 void SetUpOnMainThread() override { |
| 465 // This prevents platfrom_util from invoking any shell or external APIs |
| 466 // during tests. Doing so may result in external applications being launched |
| 467 // and intefering with tests. |
| 468 platform_util::internal::DisableShellOperationsForTesting(); |
| 423 BrowserThread::PostTask( | 469 BrowserThread::PostTask( |
| 424 BrowserThread::IO, FROM_HERE, | 470 BrowserThread::IO, FROM_HERE, |
| 425 base::Bind(&chrome_browser_net::SetUrlRequestMocksEnabled, true)); | 471 base::Bind(&chrome_browser_net::SetUrlRequestMocksEnabled, true)); |
| 426 ASSERT_TRUE(InitialSetup()); | 472 ASSERT_TRUE(InitialSetup()); |
| 427 } | 473 } |
| 428 | 474 |
| 429 void TearDownOnMainThread() override { | 475 void TearDownOnMainThread() override { |
| 430 // Needs to be torn down on the main thread. file_activity_observer_ holds a | 476 // Needs to be torn down on the main thread. file_activity_observer_ holds a |
| 431 // reference to the ChromeDownloadManagerDelegate which should be destroyed | 477 // reference to the ChromeDownloadManagerDelegate which should be destroyed |
| 432 // on the UI thread. | 478 // on the UI thread. |
| (...skipping 3232 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3665 DangerousDownloadWaiter( | 3711 DangerousDownloadWaiter( |
| 3666 browser(), 1, | 3712 browser(), 1, |
| 3667 content::DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_DENY)); | 3713 content::DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_DENY)); |
| 3668 ui_test_utils::NavigateToURL(browser(), extension_url); | 3714 ui_test_utils::NavigateToURL(browser(), extension_url); |
| 3669 | 3715 |
| 3670 observer->WaitForFinished(); | 3716 observer->WaitForFinished(); |
| 3671 | 3717 |
| 3672 // Download shelf should close. | 3718 // Download shelf should close. |
| 3673 EXPECT_FALSE(browser()->window()->IsDownloadShelfVisible()); | 3719 EXPECT_FALSE(browser()->window()->IsDownloadShelfVisible()); |
| 3674 } | 3720 } |
| 3675 #endif // defined(OS_CHROMEOS) | 3721 |
| 3722 IN_PROC_BROWSER_TEST_F(DownloadTest, OpenClosesShelf) { |
| 3723 base::FilePath file(FILE_PATH_LITERAL(kDownloadTest1Path)); |
| 3724 GURL url(URLRequestMockHTTPJob::GetMockUrl("download-test1.lib")); |
| 3725 |
| 3726 DownloadAndWait(browser(), url); |
| 3727 |
| 3728 std::vector<DownloadItem*> download_items; |
| 3729 GetDownloads(browser(), &download_items); |
| 3730 ASSERT_EQ(1UL, download_items.size()); |
| 3731 |
| 3732 ShownObserver observer(download_items[0]); |
| 3733 download_items[0]->OpenDownload(); |
| 3734 observer.Wait(); |
| 3735 |
| 3736 EXPECT_TRUE(DownloadItemModel(download_items[0]).GetOpenedOrShown()); |
| 3737 |
| 3738 // Download shelf should close. |
| 3739 EXPECT_FALSE(browser()->window()->IsDownloadShelfVisible()); |
| 3740 } |
| 3741 |
| 3742 IN_PROC_BROWSER_TEST_F(DownloadTest, ShowInShellClosesShelf) { |
| 3743 base::FilePath file(FILE_PATH_LITERAL(kDownloadTest1Path)); |
| 3744 GURL url(URLRequestMockHTTPJob::GetMockUrl("download-test1.lib")); |
| 3745 |
| 3746 DownloadAndWait(browser(), url); |
| 3747 |
| 3748 std::vector<DownloadItem*> download_items; |
| 3749 GetDownloads(browser(), &download_items); |
| 3750 ASSERT_EQ(1UL, download_items.size()); |
| 3751 |
| 3752 ShownObserver observer(download_items[0]); |
| 3753 download_items[0]->ShowDownloadInShell(); |
| 3754 observer.Wait(); |
| 3755 |
| 3756 EXPECT_TRUE(DownloadItemModel(download_items[0]).GetOpenedOrShown()); |
| 3757 |
| 3758 // Download shelf should close. |
| 3759 EXPECT_FALSE(browser()->window()->IsDownloadShelfVisible()); |
| 3760 } |
| 3761 |
| 3762 #endif // !defined(OS_CHROMEOS) |
| OLD | NEW |