Chromium Code Reviews| 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 "base/at_exit.h" | 5 #include "base/at_exit.h" |
| 6 #include "base/files/file_path.h" | 6 #include "base/files/file_path.h" |
| 7 #include "base/files/scoped_temp_dir.h" | 7 #include "base/files/scoped_temp_dir.h" |
| 8 #include "base/location.h" | 8 #include "base/location.h" |
| 9 #include "base/observer_list.h" | 9 #include "base/observer_list.h" |
| 10 #include "base/prefs/pref_service.h" | 10 #include "base/prefs/pref_service.h" |
| (...skipping 29 matching lines...) Expand all Loading... | |
| 40 #if defined(ENABLE_PLUGINS) | 40 #if defined(ENABLE_PLUGINS) |
| 41 #include "content/public/browser/plugin_service.h" | 41 #include "content/public/browser/plugin_service.h" |
| 42 #include "content/public/browser/plugin_service_filter.h" | 42 #include "content/public/browser/plugin_service_filter.h" |
| 43 #include "content/public/common/webplugininfo.h" | 43 #include "content/public/common/webplugininfo.h" |
| 44 #endif | 44 #endif |
| 45 | 45 |
| 46 #if defined(ENABLE_EXTENSIONS) | 46 #if defined(ENABLE_EXTENSIONS) |
| 47 #include "extensions/common/extension.h" | 47 #include "extensions/common/extension.h" |
| 48 #endif | 48 #endif |
| 49 | 49 |
| 50 #if defined(OS_ANDROID) | |
| 51 #include "content/public/browser/android/download_controller_android.h" | |
| 52 #include "content/public/common/context_menu_params.h" | |
| 53 using content::WebContents; | |
| 54 using content::ContextMenuParams; | |
| 55 #endif | |
| 56 | |
| 50 using ::testing::AnyNumber; | 57 using ::testing::AnyNumber; |
| 51 using ::testing::Invoke; | 58 using ::testing::Invoke; |
| 52 using ::testing::Ref; | 59 using ::testing::Ref; |
| 53 using ::testing::Return; | 60 using ::testing::Return; |
| 54 using ::testing::ReturnRef; | 61 using ::testing::ReturnRef; |
| 55 using ::testing::ReturnRefOfCopy; | 62 using ::testing::ReturnRefOfCopy; |
| 56 using ::testing::Truly; | 63 using ::testing::Truly; |
| 57 using ::testing::WithArg; | 64 using ::testing::WithArg; |
| 58 using ::testing::_; | 65 using ::testing::_; |
| 59 using content::DownloadItem; | 66 using content::DownloadItem; |
| 60 | 67 |
| 61 namespace { | 68 namespace { |
| 62 | 69 |
| 63 // No-op delegate. | 70 // No-op delegate. |
| 64 class NullWebContentsDelegate : public content::WebContentsDelegate { | 71 class NullWebContentsDelegate : public content::WebContentsDelegate { |
| 65 public: | 72 public: |
| 66 NullWebContentsDelegate() {} | 73 NullWebContentsDelegate() {} |
| 67 ~NullWebContentsDelegate() override {} | 74 ~NullWebContentsDelegate() override {} |
| 68 }; | 75 }; |
| 69 | 76 |
| 77 #if defined(OS_ANDROID) | |
| 78 class MockDownloadControllerAndroid | |
| 79 : public content::DownloadControllerAndroid { | |
| 80 public: | |
| 81 MockDownloadControllerAndroid() | |
| 82 : require_user_permission_prompt_(false), | |
| 83 approve_user_request_(true) {} | |
| 84 ~MockDownloadControllerAndroid() override {} | |
| 85 | |
| 86 void CreateGETDownload(int render_process_id, int render_view_id, | |
| 87 int request_id) override {}; | |
| 88 void OnDownloadStarted(DownloadItem* download_item) override {}; | |
| 89 void StartContextMenuDownload( | |
| 90 const ContextMenuParams& params, WebContents* web_contents, | |
| 91 bool is_link, const std::string& extra_headers) override {}; | |
| 92 void DangerousDownloadValidated( | |
| 93 WebContents* web_contents, int download_id, bool accept) override {}; | |
| 94 bool RequireUserPermissionPrompt(WebContents* web_contents) override { | |
| 95 return require_user_permission_prompt_; | |
| 96 } | |
| 97 void PromptUserForPermission( | |
| 98 WebContents* web_contents, | |
| 99 const UserPermissionPromptCallback& callback) override { | |
| 100 ASSERT_TRUE(require_user_permission_prompt_); | |
| 101 base::ThreadTaskRunnerHandle::Get()->PostTask( | |
| 102 FROM_HERE, base::Bind(callback, approve_user_request_)); | |
| 103 } | |
| 104 | |
| 105 void set_require_user_permission_prompt(bool require_user_permission_prompt) { | |
| 106 require_user_permission_prompt_ = require_user_permission_prompt; | |
| 107 } | |
| 108 void set_approve_user_request(bool approve_user_request) { | |
| 109 approve_user_request_ = approve_user_request; | |
| 110 } | |
| 111 private: | |
| 112 bool require_user_permission_prompt_; | |
| 113 bool approve_user_request_; | |
| 114 }; | |
| 115 #endif | |
| 116 | |
| 70 // Google Mock action that posts a task to the current message loop that invokes | 117 // Google Mock action that posts a task to the current message loop that invokes |
| 71 // the first argument of the mocked method as a callback. Said argument must be | 118 // the first argument of the mocked method as a callback. Said argument must be |
| 72 // a base::Callback<void(ParamType)>. |result| must be of |ParamType| and is | 119 // a base::Callback<void(ParamType)>. |result| must be of |ParamType| and is |
| 73 // bound as that parameter. | 120 // bound as that parameter. |
| 74 // Example: | 121 // Example: |
| 75 // class FooClass { | 122 // class FooClass { |
| 76 // public: | 123 // public: |
| 77 // virtual void Foo(base::Callback<void(bool)> callback); | 124 // virtual void Foo(base::Callback<void(bool)> callback); |
| 78 // }; | 125 // }; |
| 79 // ... | 126 // ... |
| (...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 250 } | 297 } |
| 251 | 298 |
| 252 MockDownloadTargetDeterminerDelegate* delegate() { | 299 MockDownloadTargetDeterminerDelegate* delegate() { |
| 253 return &delegate_; | 300 return &delegate_; |
| 254 } | 301 } |
| 255 | 302 |
| 256 DownloadPrefs* download_prefs() { | 303 DownloadPrefs* download_prefs() { |
| 257 return download_prefs_.get(); | 304 return download_prefs_.get(); |
| 258 } | 305 } |
| 259 | 306 |
| 307 #if defined(OS_ANDROID) | |
| 308 MockDownloadControllerAndroid* download_controller() { | |
| 309 return &download_controller_; | |
| 310 } | |
| 311 #endif | |
| 312 | |
| 260 private: | 313 private: |
| 261 scoped_ptr<DownloadPrefs> download_prefs_; | 314 scoped_ptr<DownloadPrefs> download_prefs_; |
| 262 ::testing::NiceMock<MockDownloadTargetDeterminerDelegate> delegate_; | 315 ::testing::NiceMock<MockDownloadTargetDeterminerDelegate> delegate_; |
| 263 NullWebContentsDelegate web_contents_delegate_; | 316 NullWebContentsDelegate web_contents_delegate_; |
| 264 base::ScopedTempDir test_download_dir_; | 317 base::ScopedTempDir test_download_dir_; |
| 265 base::FilePath test_virtual_dir_; | 318 base::FilePath test_virtual_dir_; |
| 319 #if defined(OS_ANDROID) | |
| 320 MockDownloadControllerAndroid download_controller_; | |
| 321 #endif | |
| 266 }; | 322 }; |
| 267 | 323 |
| 268 void DownloadTargetDeterminerTest::SetUp() { | 324 void DownloadTargetDeterminerTest::SetUp() { |
| 269 ChromeRenderViewHostTestHarness::SetUp(); | 325 ChromeRenderViewHostTestHarness::SetUp(); |
| 270 CHECK(profile()); | 326 CHECK(profile()); |
| 271 download_prefs_.reset(new DownloadPrefs(profile())); | 327 download_prefs_.reset(new DownloadPrefs(profile())); |
| 272 web_contents()->SetDelegate(&web_contents_delegate_); | 328 web_contents()->SetDelegate(&web_contents_delegate_); |
| 273 ASSERT_TRUE(test_download_dir_.CreateUniqueTempDir()); | 329 ASSERT_TRUE(test_download_dir_.CreateUniqueTempDir()); |
| 274 test_virtual_dir_ = test_download_dir().Append(FILE_PATH_LITERAL("virtual")); | 330 test_virtual_dir_ = test_download_dir().Append(FILE_PATH_LITERAL("virtual")); |
| 275 download_prefs_->SetDownloadPath(test_download_dir()); | 331 download_prefs_->SetDownloadPath(test_download_dir()); |
| 276 delegate_.SetupDefaults(); | 332 delegate_.SetupDefaults(); |
| 333 #if defined(OS_ANDROID) | |
| 334 DownloadTargetDeterminer::SetDownloadControllerAndroidForTestings( | |
| 335 &download_controller_); | |
|
asanka
2015/07/06 21:09:41
You are setting a global pointer to a temporary va
qinmin
2015/07/07 00:54:22
Done.
| |
| 336 #endif | |
| 277 } | 337 } |
| 278 | 338 |
| 279 void DownloadTargetDeterminerTest::TearDown() { | 339 void DownloadTargetDeterminerTest::TearDown() { |
| 280 download_prefs_.reset(); | 340 download_prefs_.reset(); |
| 281 ChromeRenderViewHostTestHarness::TearDown(); | 341 ChromeRenderViewHostTestHarness::TearDown(); |
| 282 } | 342 } |
| 283 | 343 |
| 284 content::MockDownloadItem* | 344 content::MockDownloadItem* |
| 285 DownloadTargetDeterminerTest::CreateActiveDownloadItem( | 345 DownloadTargetDeterminerTest::CreateActiveDownloadItem( |
| 286 int32 id, | 346 int32 id, |
| (...skipping 860 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1147 }, | 1207 }, |
| 1148 }; | 1208 }; |
| 1149 | 1209 |
| 1150 SetPromptForDownload(true); | 1210 SetPromptForDownload(true); |
| 1151 EnableAutoOpenBasedOnExtension( | 1211 EnableAutoOpenBasedOnExtension( |
| 1152 base::FilePath(FILE_PATH_LITERAL("dummy.dummy"))); | 1212 base::FilePath(FILE_PATH_LITERAL("dummy.dummy"))); |
| 1153 RunTestCasesWithActiveItem(kPromptingTestCases, | 1213 RunTestCasesWithActiveItem(kPromptingTestCases, |
| 1154 arraysize(kPromptingTestCases)); | 1214 arraysize(kPromptingTestCases)); |
| 1155 } | 1215 } |
| 1156 | 1216 |
| 1217 #if defined(OS_ANDROID) | |
| 1218 TEST_F(DownloadTargetDeterminerTest, | |
| 1219 TargetDeterminer_ApprovePromptForUserPermission) { | |
| 1220 const DownloadTestCase kUserPermissionTestCases[] = { | |
| 1221 { | |
| 1222 // 0: Automatic Safe | |
| 1223 AUTOMATIC, | |
| 1224 content::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS, | |
| 1225 "http://example.com/foo.txt", "text/plain", | |
| 1226 FILE_PATH_LITERAL(""), | |
| 1227 | |
| 1228 FILE_PATH_LITERAL("foo.txt"), | |
| 1229 DownloadItem::TARGET_DISPOSITION_OVERWRITE, | |
| 1230 | |
| 1231 EXPECT_CRDOWNLOAD | |
| 1232 }, | |
| 1233 }; | |
| 1234 download_controller()->set_require_user_permission_prompt(true); | |
| 1235 RunTestCasesWithActiveItem(kUserPermissionTestCases, | |
| 1236 arraysize(kUserPermissionTestCases)); | |
| 1237 } | |
| 1238 | |
| 1239 TEST_F(DownloadTargetDeterminerTest, | |
| 1240 TargetDeterminer_DisapprovePromptForUserPermission) { | |
| 1241 const DownloadTestCase kUserPermissionTestCases[] = { | |
| 1242 { | |
| 1243 // 0: Automatic Safe | |
| 1244 AUTOMATIC, | |
| 1245 content::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS, | |
| 1246 "http://example.com/foo.txt", "text/plain", | |
| 1247 FILE_PATH_LITERAL(""), | |
| 1248 | |
| 1249 FILE_PATH_LITERAL(""), | |
| 1250 DownloadItem::TARGET_DISPOSITION_OVERWRITE, | |
| 1251 | |
| 1252 EXPECT_LOCAL_PATH | |
| 1253 }, | |
| 1254 }; | |
| 1255 download_controller()->set_require_user_permission_prompt(true); | |
| 1256 download_controller()->set_approve_user_request(false); | |
| 1257 RunTestCasesWithActiveItem(kUserPermissionTestCases, | |
| 1258 arraysize(kUserPermissionTestCases)); | |
| 1259 } | |
| 1260 #endif | |
| 1261 | |
| 1157 #if defined(ENABLE_EXTENSIONS) | 1262 #if defined(ENABLE_EXTENSIONS) |
| 1158 // These test cases are run with "Prompt for download" user preference set to | 1263 // These test cases are run with "Prompt for download" user preference set to |
| 1159 // true. Automatic extension downloads shouldn't cause prompting. | 1264 // true. Automatic extension downloads shouldn't cause prompting. |
| 1160 // Android doesn't support extensions. | 1265 // Android doesn't support extensions. |
| 1161 TEST_F(DownloadTargetDeterminerTest, TargetDeterminer_PromptAlways_Extension) { | 1266 TEST_F(DownloadTargetDeterminerTest, TargetDeterminer_PromptAlways_Extension) { |
| 1162 const DownloadTestCase kPromptingTestCases[] = { | 1267 const DownloadTestCase kPromptingTestCases[] = { |
| 1163 { | 1268 { |
| 1164 // 0: Automatic Browser Extension download. - Shouldn't prompt for browser | 1269 // 0: Automatic Browser Extension download. - Shouldn't prompt for browser |
| 1165 // extension downloads even if "Prompt for download" preference is set. | 1270 // extension downloads even if "Prompt for download" preference is set. |
| 1166 AUTOMATIC, | 1271 AUTOMATIC, |
| (...skipping 1072 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2239 EXPECT_CALL(mock_plugin_filter_, MockPluginAvailable(npapi_plugin.path())) | 2344 EXPECT_CALL(mock_plugin_filter_, MockPluginAvailable(npapi_plugin.path())) |
| 2240 .WillRepeatedly(Return(true)); | 2345 .WillRepeatedly(Return(true)); |
| 2241 | 2346 |
| 2242 target_info = RunDownloadTargetDeterminer( | 2347 target_info = RunDownloadTargetDeterminer( |
| 2243 GetPathInDownloadDir(kInitialPath), item.get()); | 2348 GetPathInDownloadDir(kInitialPath), item.get()); |
| 2244 EXPECT_FALSE(target_info->is_filetype_handled_safely); | 2349 EXPECT_FALSE(target_info->is_filetype_handled_safely); |
| 2245 } | 2350 } |
| 2246 #endif // defined(ENABLE_PLUGINS) | 2351 #endif // defined(ENABLE_PLUGINS) |
| 2247 | 2352 |
| 2248 } // namespace | 2353 } // namespace |
| OLD | NEW |