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

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

Issue 10915205: Merge 155443 - Change policy to not trigger dangerous download UI for web intents dispatched files. (Closed) Base URL: svn://svn.chromium.org/chrome/branches/1229/src/
Patch Set: 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
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 "base/file_path.h" 5 #include "base/file_path.h"
6 #include "base/file_util.h" 6 #include "base/file_util.h"
7 #include "base/message_loop.h" 7 #include "base/message_loop.h"
8 #include "base/observer_list.h" 8 #include "base/observer_list.h"
9 #include "base/scoped_temp_dir.h" 9 #include "base/scoped_temp_dir.h"
10 #include "base/stl_util.h" 10 #include "base/stl_util.h"
11 #include "base/string_util.h" 11 #include "base/string_util.h"
12 #include "base/value_conversions.h" 12 #include "base/value_conversions.h"
13 #include "chrome/browser/download/chrome_download_manager_delegate.h" 13 #include "chrome/browser/download/chrome_download_manager_delegate.h"
14 #include "chrome/browser/download/download_prefs.h" 14 #include "chrome/browser/download/download_prefs.h"
15 #include "chrome/browser/download/download_util.h" 15 #include "chrome/browser/download/download_util.h"
16 #include "chrome/browser/prefs/pref_service.h" 16 #include "chrome/browser/prefs/pref_service.h"
17 #include "chrome/browser/safe_browsing/download_protection_service.h" 17 #include "chrome/browser/safe_browsing/download_protection_service.h"
18 #include "chrome/common/extensions/extension.h" 18 #include "chrome/common/extensions/extension.h"
19 #include "chrome/common/extensions/extension_switch_utils.h" 19 #include "chrome/common/extensions/extension_switch_utils.h"
20 #include "chrome/common/pref_names.h" 20 #include "chrome/common/pref_names.h"
21 #include "chrome/test/base/chrome_render_view_host_test_harness.h"
21 #include "chrome/test/base/testing_pref_service.h" 22 #include "chrome/test/base/testing_pref_service.h"
22 #include "chrome/test/base/testing_profile.h" 23 #include "chrome/test/base/testing_profile.h"
24 #include "content/public/browser/web_contents.h"
25 #include "content/public/browser/web_contents_delegate.h"
23 #include "content/public/test/mock_download_item.h" 26 #include "content/public/test/mock_download_item.h"
24 #include "content/public/test/mock_download_manager.h" 27 #include "content/public/test/mock_download_manager.h"
25 #include "content/public/test/test_browser_thread.h" 28 #include "content/public/test/test_browser_thread.h"
29 #include "content/public/test/test_renderer_host.h"
30 #include "content/public/test/web_contents_tester.h"
26 #include "testing/gmock/include/gmock/gmock.h" 31 #include "testing/gmock/include/gmock/gmock.h"
27 #include "testing/gtest/include/gtest/gtest.h" 32 #include "testing/gtest/include/gtest/gtest.h"
28 33
29 using content::DownloadItem; 34 using content::DownloadItem;
30 using safe_browsing::DownloadProtectionService; 35 using safe_browsing::DownloadProtectionService;
31 using ::testing::AtMost; 36 using ::testing::AtMost;
32 using ::testing::Invoke; 37 using ::testing::Invoke;
33 using ::testing::Return; 38 using ::testing::Return;
34 using ::testing::ReturnPointee; 39 using ::testing::ReturnPointee;
35 using ::testing::ReturnRef; 40 using ::testing::ReturnRef;
36 using ::testing::ReturnRefOfCopy; 41 using ::testing::ReturnRefOfCopy;
37 using ::testing::WithArg; 42 using ::testing::WithArg;
38 using ::testing::_; 43 using ::testing::_;
39 44
40 namespace { 45 namespace {
41 46
47 class MockWebContentsDelegate : public content::WebContentsDelegate {
48 public:
49 virtual ~MockWebContentsDelegate() {}
50 };
51
42 // Google Mock action that posts a task to the current message loop that invokes 52 // Google Mock action that posts a task to the current message loop that invokes
43 // the first argument of the mocked method as a callback. Said argument must be 53 // the first argument of the mocked method as a callback. Said argument must be
44 // a base::Callback<void(ParamType)>. |result| must be of |ParamType| and is 54 // a base::Callback<void(ParamType)>. |result| must be of |ParamType| and is
45 // bound as that parameter. 55 // bound as that parameter.
46 // Example: 56 // Example:
47 // class FooClass { 57 // class FooClass {
48 // public: 58 // public:
49 // virtual void Foo(base::Callback<void(bool)> callback); 59 // virtual void Foo(base::Callback<void(bool)> callback);
50 // }; 60 // };
51 // ... 61 // ...
(...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after
206 #endif 216 #endif
207 217
208 private: 218 private:
209 ~TestChromeDownloadManagerDelegate() {} 219 ~TestChromeDownloadManagerDelegate() {}
210 220
211 #if defined(ENABLE_SAFE_BROWSING) 221 #if defined(ENABLE_SAFE_BROWSING)
212 scoped_ptr<TestDownloadProtectionService> download_protection_service_; 222 scoped_ptr<TestDownloadProtectionService> download_protection_service_;
213 #endif 223 #endif
214 }; 224 };
215 225
216 class ChromeDownloadManagerDelegateTest : public ::testing::Test { 226 class ChromeDownloadManagerDelegateTest :
227 public ChromeRenderViewHostTestHarness {
217 public: 228 public:
218 ChromeDownloadManagerDelegateTest(); 229 ChromeDownloadManagerDelegateTest();
219 230
220 // ::testing::Test 231 // ::testing::Test
221 virtual void SetUp() OVERRIDE; 232 virtual void SetUp() OVERRIDE;
222 virtual void TearDown() OVERRIDE; 233 virtual void TearDown() OVERRIDE;
223 234
224 // Verifies and clears test expectations for |delegate_| and 235 // Verifies and clears test expectations for |delegate_| and
225 // |download_manager_|. 236 // |download_manager_|.
226 void VerifyAndClearExpectations(); 237 void VerifyAndClearExpectations();
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
261 272
262 private: 273 private:
263 // Verifies that |target_path|, |disposition|, |danger_type| and 274 // Verifies that |target_path|, |disposition|, |danger_type| and
264 // |intermediate_path| matches the expectations of |test_case|. 275 // |intermediate_path| matches the expectations of |test_case|.
265 void DownloadTargetVerifier(const DownloadTestCase* test_case, 276 void DownloadTargetVerifier(const DownloadTestCase* test_case,
266 const FilePath& target_path, 277 const FilePath& target_path,
267 DownloadItem::TargetDisposition disposition, 278 DownloadItem::TargetDisposition disposition,
268 content::DownloadDangerType danger_type, 279 content::DownloadDangerType danger_type,
269 const FilePath& intermediate_path); 280 const FilePath& intermediate_path);
270 281
271 MessageLoopForUI message_loop_;
272 TestingPrefService* pref_service_; 282 TestingPrefService* pref_service_;
273 ScopedTempDir test_download_dir_; 283 ScopedTempDir test_download_dir_;
274 TestingProfile profile_;
275 content::TestBrowserThread ui_thread_; 284 content::TestBrowserThread ui_thread_;
276 content::TestBrowserThread file_thread_; 285 content::TestBrowserThread file_thread_;
277 scoped_refptr<content::MockDownloadManager> download_manager_; 286 scoped_refptr<content::MockDownloadManager> download_manager_;
278 scoped_refptr<TestChromeDownloadManagerDelegate> delegate_; 287 scoped_refptr<TestChromeDownloadManagerDelegate> delegate_;
288 MockWebContentsDelegate web_contents_delegate_;
279 }; 289 };
280 290
281 ChromeDownloadManagerDelegateTest::ChromeDownloadManagerDelegateTest() 291 ChromeDownloadManagerDelegateTest::ChromeDownloadManagerDelegateTest()
282 : ui_thread_(content::BrowserThread::UI, &message_loop_), 292 : ChromeRenderViewHostTestHarness(),
293 ui_thread_(content::BrowserThread::UI, &message_loop_),
283 file_thread_(content::BrowserThread::FILE, &message_loop_), 294 file_thread_(content::BrowserThread::FILE, &message_loop_),
284 download_manager_(new content::MockDownloadManager), 295 download_manager_(new content::MockDownloadManager) {
285 delegate_(new TestChromeDownloadManagerDelegate(&profile_)) {
286 delegate_->SetDownloadManager(download_manager_.get());
287 pref_service_ = profile_.GetTestingPrefService();
288 } 296 }
289 297
290 void ChromeDownloadManagerDelegateTest::SetUp() { 298 void ChromeDownloadManagerDelegateTest::SetUp() {
299 ChromeRenderViewHostTestHarness::SetUp();
300
301 CHECK(profile());
302 delegate_ = new TestChromeDownloadManagerDelegate(profile());
303 delegate_->SetDownloadManager(download_manager_.get());
304 pref_service_ = profile()->GetTestingPrefService();
305 contents()->SetDelegate(&web_contents_delegate_);
306
291 ASSERT_TRUE(test_download_dir_.CreateUniqueTempDir()); 307 ASSERT_TRUE(test_download_dir_.CreateUniqueTempDir());
292 SetDefaultDownloadPath(test_download_dir_.path()); 308 SetDefaultDownloadPath(test_download_dir_.path());
293 } 309 }
294 310
295 void ChromeDownloadManagerDelegateTest::TearDown() { 311 void ChromeDownloadManagerDelegateTest::TearDown() {
296 message_loop_.RunAllPending(); 312 message_loop_.RunAllPending();
297 delegate_->Shutdown(); 313 delegate_->Shutdown();
314 ChromeRenderViewHostTestHarness::TearDown();
298 } 315 }
299 316
300 void ChromeDownloadManagerDelegateTest::VerifyAndClearExpectations() { 317 void ChromeDownloadManagerDelegateTest::VerifyAndClearExpectations() {
301 ::testing::Mock::VerifyAndClearExpectations(delegate_); 318 ::testing::Mock::VerifyAndClearExpectations(delegate_);
302 ::testing::Mock::VerifyAndClearExpectations(download_manager_); 319 ::testing::Mock::VerifyAndClearExpectations(download_manager_);
303 } 320 }
304 321
305 content::MockDownloadItem* 322 content::MockDownloadItem*
306 ChromeDownloadManagerDelegateTest::CreateActiveDownloadItem(int32 id) { 323 ChromeDownloadManagerDelegateTest::CreateActiveDownloadItem(int32 id) {
307 content::MockDownloadItem* item = 324 content::MockDownloadItem* item =
308 new ::testing::NiceMock<content::MockDownloadItem>(); 325 new ::testing::NiceMock<content::MockDownloadItem>();
309 ON_CALL(*item, GetFullPath()) 326 ON_CALL(*item, GetFullPath())
310 .WillByDefault(ReturnRefOfCopy(FilePath())); 327 .WillByDefault(ReturnRefOfCopy(FilePath()));
311 ON_CALL(*item, GetHash()) 328 ON_CALL(*item, GetHash())
312 .WillByDefault(ReturnRefOfCopy(std::string())); 329 .WillByDefault(ReturnRefOfCopy(std::string()));
313 ON_CALL(*item, GetReferrerUrl()) 330 ON_CALL(*item, GetReferrerUrl())
314 .WillByDefault(ReturnRefOfCopy(GURL())); 331 .WillByDefault(ReturnRefOfCopy(GURL()));
315 ON_CALL(*item, GetTransitionType()) 332 ON_CALL(*item, GetTransitionType())
316 .WillByDefault(Return(content::PAGE_TRANSITION_LINK)); 333 .WillByDefault(Return(content::PAGE_TRANSITION_LINK));
317 ON_CALL(*item, HasUserGesture()) 334 ON_CALL(*item, HasUserGesture())
318 .WillByDefault(Return(false)); 335 .WillByDefault(Return(false));
319 ON_CALL(*item, IsDangerous()) 336 ON_CALL(*item, IsDangerous())
320 .WillByDefault(Return(false)); 337 .WillByDefault(Return(false));
321 ON_CALL(*item, IsTemporary()) 338 ON_CALL(*item, IsTemporary())
322 .WillByDefault(Return(false)); 339 .WillByDefault(Return(false));
340 ON_CALL(*item, GetWebContents())
341 .WillByDefault(Return(contents()));
323 EXPECT_CALL(*item, GetId()) 342 EXPECT_CALL(*item, GetId())
324 .WillRepeatedly(Return(id)); 343 .WillRepeatedly(Return(id));
325 EXPECT_CALL(*download_manager_, GetActiveDownloadItem(id)) 344 EXPECT_CALL(*download_manager_, GetActiveDownloadItem(id))
326 .WillRepeatedly(Return(item)); 345 .WillRepeatedly(Return(item));
327 return item; 346 return item;
328 } 347 }
329 348
330 void ChromeDownloadManagerDelegateTest::EnableAutoOpenBasedOnExtension( 349 void ChromeDownloadManagerDelegateTest::EnableAutoOpenBasedOnExtension(
331 const FilePath& path) { 350 const FilePath& path) {
332 EXPECT_TRUE( 351 EXPECT_TRUE(
(...skipping 537 matching lines...) Expand 10 before | Expand all | Expand 10 after
870 RunTestCases(kLastSavePathTestCases, arraysize(kLastSavePathTestCases)); 889 RunTestCases(kLastSavePathTestCases, arraysize(kLastSavePathTestCases));
871 890
872 // Now clear the last download path. 891 // Now clear the last download path.
873 delegate()->ClearLastDownloadPath(); 892 delegate()->ClearLastDownloadPath();
874 893
875 // Run the first test case again. Since the last download path was cleared, 894 // Run the first test case again. Since the last download path was cleared,
876 // this test case should behave identically to the first time it was run. 895 // this test case should behave identically to the first time it was run.
877 RunTestCases(kLastSavePathTestCases, 1); 896 RunTestCases(kLastSavePathTestCases, 1);
878 } 897 }
879 898
899 TEST_F(ChromeDownloadManagerDelegateTest, StartDownload_WebIntents) {
900 const DownloadTestCase kWebIntentsTestCases[] = {
901 {
902 // 1: A file which would be dangerous, but is handled by web intents.
903 // The name will be unaltered (the actual save name will have the
904 // .webintents extension).
905 AUTOMATIC,
906 content::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS,
907 "http://example.com/feed.exe", "application/rss+xml",
908 FILE_PATH_LITERAL(""),
909
910 FILE_PATH_LITERAL("feed.exe.webintents"),
911 FILE_PATH_LITERAL(""),
912 DownloadItem::TARGET_DISPOSITION_OVERWRITE,
913
914 EXPECT_CRDOWNLOAD
915 },
916
917 {
918 // 2: A download with a forced path won't be handled by web intents.
919 FORCED,
920 content::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS,
921 "http://example.com/feed.exe", "application/rss+xml",
922 FILE_PATH_LITERAL("forced.feed.exe"),
923
924 FILE_PATH_LITERAL("forced.feed.exe"),
925 FILE_PATH_LITERAL(""),
926 DownloadItem::TARGET_DISPOSITION_OVERWRITE,
927
928 EXPECT_CRDOWNLOAD
929 },
930 };
931
932 RunTestCases(kWebIntentsTestCases, arraysize(kWebIntentsTestCases));
933 }
934
880 // TODO(asanka): Add more tests. 935 // TODO(asanka): Add more tests.
881 // * Default download path is not writable. 936 // * Default download path is not writable.
882 // * Download path doesn't exist. 937 // * Download path doesn't exist.
883 // * IsDangerousFile(). 938 // * IsDangerousFile().
884 // * Filename generation. 939 // * Filename generation.
OLDNEW
« no previous file with comments | « chrome/browser/download/chrome_download_manager_delegate.cc ('k') | content/browser/web_contents/render_view_host_manager.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698