| Index: chrome/browser/download/download_browsertest.cc
|
| diff --git a/chrome/browser/download/download_browsertest.cc b/chrome/browser/download/download_browsertest.cc
|
| index 51d3c9ca4c6f4d630b91b4e22728f0fa3176a51b..9a63aa68f9f94a3e9fb6f15e2514a7832c7eed48 100644
|
| --- a/chrome/browser/download/download_browsertest.cc
|
| +++ b/chrome/browser/download/download_browsertest.cc
|
| @@ -48,6 +48,7 @@
|
| #include "chrome/browser/net/url_request_mock_util.h"
|
| #include "chrome/browser/notifications/notification_ui_manager.h"
|
| #include "chrome/browser/permissions/permission_request_manager.h"
|
| +#include "chrome/browser/platform_util_internal.h"
|
| #include "chrome/browser/profiles/profile.h"
|
| #include "chrome/browser/renderer_context_menu/render_view_context_menu_browsertest_util.h"
|
| #include "chrome/browser/renderer_context_menu/render_view_context_menu_test_util.h"
|
| @@ -163,6 +164,47 @@ class CreatedObserver : public content::DownloadManager::Observer {
|
| DISALLOW_COPY_AND_ASSIGN(CreatedObserver);
|
| };
|
|
|
| +class ShownObserver : public content::DownloadItem::Observer {
|
| + public:
|
| + explicit ShownObserver(DownloadItem* item)
|
| + : item_(item),
|
| + waiting_(false) {
|
| + item->AddObserver(this);
|
| + }
|
| +
|
| + ~ShownObserver() override {
|
| + if (item_)
|
| + item_->RemoveObserver(this);
|
| + }
|
| +
|
| + void Wait() {
|
| + if (DownloadItemModel(item_).GetOpenedOrShown()) {
|
| + return;
|
| + }
|
| + waiting_ = true;
|
| + content::RunMessageLoop();
|
| + waiting_ = false;
|
| + }
|
| +
|
| + private:
|
| + void OnDownloadShown(content::DownloadItem* item) override {
|
| + DCHECK_EQ(item_, item);
|
| + if (waiting_)
|
| + base::MessageLoopForUI::current()->QuitWhenIdle();
|
| + }
|
| +
|
| + void OnDownloadDestroyed(content::DownloadItem* item) override {
|
| + DCHECK_EQ(item_, item);
|
| + item_->RemoveObserver(this);
|
| + item_ = NULL;
|
| + }
|
| +
|
| + content::DownloadItem* item_;
|
| + bool waiting_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(ShownObserver);
|
| +};
|
| +
|
| class PercentWaiter : public content::DownloadItem::Observer {
|
| public:
|
| explicit PercentWaiter(DownloadItem* item)
|
| @@ -420,6 +462,10 @@ class DownloadTest : public InProcessBrowserTest {
|
| DownloadTest() {}
|
|
|
| void SetUpOnMainThread() override {
|
| + // This prevents platfrom_util from invoking any shell or external APIs
|
| + // during tests. Doing so may result in external applications being launched
|
| + // and intefering with tests.
|
| + platform_util::internal::DisableShellOperationsForTesting();
|
| BrowserThread::PostTask(
|
| BrowserThread::IO, FROM_HERE,
|
| base::Bind(&chrome_browser_net::SetUrlRequestMocksEnabled, true));
|
| @@ -3672,4 +3718,45 @@ IN_PROC_BROWSER_TEST_F(DownloadTest, CrxDenyInstallClosesShelf) {
|
| // Download shelf should close.
|
| EXPECT_FALSE(browser()->window()->IsDownloadShelfVisible());
|
| }
|
| -#endif // defined(OS_CHROMEOS)
|
| +
|
| +IN_PROC_BROWSER_TEST_F(DownloadTest, OpenClosesShelf) {
|
| + base::FilePath file(FILE_PATH_LITERAL(kDownloadTest1Path));
|
| + GURL url(URLRequestMockHTTPJob::GetMockUrl("download-test1.lib"));
|
| +
|
| + DownloadAndWait(browser(), url);
|
| +
|
| + std::vector<DownloadItem*> download_items;
|
| + GetDownloads(browser(), &download_items);
|
| + ASSERT_EQ(1UL, download_items.size());
|
| +
|
| + ShownObserver observer(download_items[0]);
|
| + download_items[0]->OpenDownload();
|
| + observer.Wait();
|
| +
|
| + EXPECT_TRUE(DownloadItemModel(download_items[0]).GetOpenedOrShown());
|
| +
|
| + // Download shelf should close.
|
| + EXPECT_FALSE(browser()->window()->IsDownloadShelfVisible());
|
| +}
|
| +
|
| +IN_PROC_BROWSER_TEST_F(DownloadTest, ShowInShellClosesShelf) {
|
| + base::FilePath file(FILE_PATH_LITERAL(kDownloadTest1Path));
|
| + GURL url(URLRequestMockHTTPJob::GetMockUrl("download-test1.lib"));
|
| +
|
| + DownloadAndWait(browser(), url);
|
| +
|
| + std::vector<DownloadItem*> download_items;
|
| + GetDownloads(browser(), &download_items);
|
| + ASSERT_EQ(1UL, download_items.size());
|
| +
|
| + ShownObserver observer(download_items[0]);
|
| + download_items[0]->ShowDownloadInShell();
|
| + observer.Wait();
|
| +
|
| + EXPECT_TRUE(DownloadItemModel(download_items[0]).GetOpenedOrShown());
|
| +
|
| + // Download shelf should close.
|
| + EXPECT_FALSE(browser()->window()->IsDownloadShelfVisible());
|
| +}
|
| +
|
| +#endif // !defined(OS_CHROMEOS)
|
|
|