| Index: chrome/browser/download/chrome_download_manager_delegate_unittest.cc
|
| diff --git a/chrome/browser/download/chrome_download_manager_delegate_unittest.cc b/chrome/browser/download/chrome_download_manager_delegate_unittest.cc
|
| index abc43122af4ce1835dd02ef366c56c5c3f6e0a95..054969d65220e38e4f803999557d2a176184ca53 100644
|
| --- a/chrome/browser/download/chrome_download_manager_delegate_unittest.cc
|
| +++ b/chrome/browser/download/chrome_download_manager_delegate_unittest.cc
|
| @@ -18,11 +18,16 @@
|
| #include "chrome/common/extensions/extension.h"
|
| #include "chrome/common/extensions/extension_switch_utils.h"
|
| #include "chrome/common/pref_names.h"
|
| +#include "chrome/test/base/chrome_render_view_host_test_harness.h"
|
| #include "chrome/test/base/testing_pref_service.h"
|
| #include "chrome/test/base/testing_profile.h"
|
| +#include "content/public/browser/web_contents.h"
|
| +#include "content/public/browser/web_contents_delegate.h"
|
| #include "content/public/test/mock_download_item.h"
|
| #include "content/public/test/mock_download_manager.h"
|
| #include "content/public/test/test_browser_thread.h"
|
| +#include "content/public/test/test_renderer_host.h"
|
| +#include "content/public/test/web_contents_tester.h"
|
| #include "testing/gmock/include/gmock/gmock.h"
|
| #include "testing/gtest/include/gtest/gtest.h"
|
|
|
| @@ -39,6 +44,11 @@ using ::testing::_;
|
|
|
| namespace {
|
|
|
| +class MockWebContentsDelegate : public content::WebContentsDelegate {
|
| + public:
|
| + virtual ~MockWebContentsDelegate() {}
|
| +};
|
| +
|
| // Google Mock action that posts a task to the current message loop that invokes
|
| // the first argument of the mocked method as a callback. Said argument must be
|
| // a base::Callback<void(ParamType)>. |result| must be of |ParamType| and is
|
| @@ -213,7 +223,8 @@ class TestChromeDownloadManagerDelegate : public ChromeDownloadManagerDelegate {
|
| #endif
|
| };
|
|
|
| -class ChromeDownloadManagerDelegateTest : public ::testing::Test {
|
| +class ChromeDownloadManagerDelegateTest :
|
| + public ChromeRenderViewHostTestHarness {
|
| public:
|
| ChromeDownloadManagerDelegateTest();
|
|
|
| @@ -268,26 +279,31 @@ class ChromeDownloadManagerDelegateTest : public ::testing::Test {
|
| content::DownloadDangerType danger_type,
|
| const FilePath& intermediate_path);
|
|
|
| - MessageLoopForUI message_loop_;
|
| TestingPrefService* pref_service_;
|
| ScopedTempDir test_download_dir_;
|
| - TestingProfile profile_;
|
| content::TestBrowserThread ui_thread_;
|
| content::TestBrowserThread file_thread_;
|
| scoped_refptr<content::MockDownloadManager> download_manager_;
|
| scoped_refptr<TestChromeDownloadManagerDelegate> delegate_;
|
| + MockWebContentsDelegate web_contents_delegate_;
|
| };
|
|
|
| ChromeDownloadManagerDelegateTest::ChromeDownloadManagerDelegateTest()
|
| - : ui_thread_(content::BrowserThread::UI, &message_loop_),
|
| + : ChromeRenderViewHostTestHarness(),
|
| + ui_thread_(content::BrowserThread::UI, &message_loop_),
|
| file_thread_(content::BrowserThread::FILE, &message_loop_),
|
| - download_manager_(new content::MockDownloadManager),
|
| - delegate_(new TestChromeDownloadManagerDelegate(&profile_)) {
|
| - delegate_->SetDownloadManager(download_manager_.get());
|
| - pref_service_ = profile_.GetTestingPrefService();
|
| + download_manager_(new content::MockDownloadManager) {
|
| }
|
|
|
| void ChromeDownloadManagerDelegateTest::SetUp() {
|
| + ChromeRenderViewHostTestHarness::SetUp();
|
| +
|
| + CHECK(profile());
|
| + delegate_ = new TestChromeDownloadManagerDelegate(profile());
|
| + delegate_->SetDownloadManager(download_manager_.get());
|
| + pref_service_ = profile()->GetTestingPrefService();
|
| + contents()->SetDelegate(&web_contents_delegate_);
|
| +
|
| ASSERT_TRUE(test_download_dir_.CreateUniqueTempDir());
|
| SetDefaultDownloadPath(test_download_dir_.path());
|
| }
|
| @@ -295,6 +311,7 @@ void ChromeDownloadManagerDelegateTest::SetUp() {
|
| void ChromeDownloadManagerDelegateTest::TearDown() {
|
| message_loop_.RunAllPending();
|
| delegate_->Shutdown();
|
| + ChromeRenderViewHostTestHarness::TearDown();
|
| }
|
|
|
| void ChromeDownloadManagerDelegateTest::VerifyAndClearExpectations() {
|
| @@ -320,6 +337,8 @@ content::MockDownloadItem*
|
| .WillByDefault(Return(false));
|
| ON_CALL(*item, IsTemporary())
|
| .WillByDefault(Return(false));
|
| + ON_CALL(*item, GetWebContents())
|
| + .WillByDefault(Return(contents()));
|
| EXPECT_CALL(*item, GetId())
|
| .WillRepeatedly(Return(id));
|
| EXPECT_CALL(*download_manager_, GetActiveDownloadItem(id))
|
| @@ -877,6 +896,42 @@ TEST_F(ChromeDownloadManagerDelegateTest, StartDownload_LastSavePath) {
|
| RunTestCases(kLastSavePathTestCases, 1);
|
| }
|
|
|
| +TEST_F(ChromeDownloadManagerDelegateTest, StartDownload_WebIntents) {
|
| + const DownloadTestCase kWebIntentsTestCases[] = {
|
| + {
|
| + // 1: A file which would be dangerous, but is handled by web intents.
|
| + // The name will be unaltered (the actual save name will have the
|
| + // .webintents extension).
|
| + AUTOMATIC,
|
| + content::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS,
|
| + "http://example.com/feed.exe", "application/rss+xml",
|
| + FILE_PATH_LITERAL(""),
|
| +
|
| + FILE_PATH_LITERAL("feed.exe.webintents"),
|
| + FILE_PATH_LITERAL(""),
|
| + DownloadItem::TARGET_DISPOSITION_OVERWRITE,
|
| +
|
| + EXPECT_CRDOWNLOAD
|
| + },
|
| +
|
| + {
|
| + // 2: A download with a forced path won't be handled by web intents.
|
| + FORCED,
|
| + content::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS,
|
| + "http://example.com/feed.exe", "application/rss+xml",
|
| + FILE_PATH_LITERAL("forced.feed.exe"),
|
| +
|
| + FILE_PATH_LITERAL("forced.feed.exe"),
|
| + FILE_PATH_LITERAL(""),
|
| + DownloadItem::TARGET_DISPOSITION_OVERWRITE,
|
| +
|
| + EXPECT_CRDOWNLOAD
|
| + },
|
| + };
|
| +
|
| + RunTestCases(kWebIntentsTestCases, arraysize(kWebIntentsTestCases));
|
| +}
|
| +
|
| // TODO(asanka): Add more tests.
|
| // * Default download path is not writable.
|
| // * Download path doesn't exist.
|
|
|