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

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

Issue 55063002: Prefer opening PDF downloads in the browser. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Destroy PluginService once we are done with our plugin tests. Created 7 years, 1 month 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/files/file_path.h" 5 #include "base/files/file_path.h"
6 #include "base/files/scoped_temp_dir.h" 6 #include "base/files/scoped_temp_dir.h"
7 #include "base/message_loop/message_loop.h" 7 #include "base/message_loop/message_loop.h"
8 #include "base/prefs/pref_service.h" 8 #include "base/prefs/pref_service.h"
9 #include "base/run_loop.h" 9 #include "base/run_loop.h"
10 #include "chrome/browser/download/chrome_download_manager_delegate.h" 10 #include "chrome/browser/download/chrome_download_manager_delegate.h"
11 #include "chrome/browser/download/download_prefs.h" 11 #include "chrome/browser/download/download_prefs.h"
12 #include "chrome/browser/download/download_target_info.h"
12 #include "chrome/common/pref_names.h" 13 #include "chrome/common/pref_names.h"
13 #include "chrome/test/base/chrome_render_view_host_test_harness.h" 14 #include "chrome/test/base/chrome_render_view_host_test_harness.h"
14 #include "chrome/test/base/testing_pref_service_syncable.h" 15 #include "chrome/test/base/testing_pref_service_syncable.h"
15 #include "chrome/test/base/testing_profile.h" 16 #include "chrome/test/base/testing_profile.h"
16 #include "content/public/browser/download_interrupt_reasons.h" 17 #include "content/public/browser/download_interrupt_reasons.h"
17 #include "content/public/browser/web_contents.h" 18 #include "content/public/browser/web_contents.h"
18 #include "content/public/browser/web_contents_delegate.h" 19 #include "content/public/browser/web_contents_delegate.h"
19 #include "content/public/test/mock_download_item.h" 20 #include "content/public/test/mock_download_item.h"
20 #include "content/public/test/mock_download_manager.h" 21 #include "content/public/test/mock_download_manager.h"
21 #include "content/public/test/test_browser_thread.h" 22 #include "content/public/test/test_browser_thread.h"
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
58 ACTION_P(ScheduleCallback, result) { 59 ACTION_P(ScheduleCallback, result) {
59 base::MessageLoop::current()->PostTask(FROM_HERE, base::Bind(arg0, result)); 60 base::MessageLoop::current()->PostTask(FROM_HERE, base::Bind(arg0, result));
60 } 61 }
61 62
62 // Similar to ScheduleCallback, but binds 2 arguments. 63 // Similar to ScheduleCallback, but binds 2 arguments.
63 ACTION_P2(ScheduleCallback2, result0, result1) { 64 ACTION_P2(ScheduleCallback2, result0, result1) {
64 base::MessageLoop::current()->PostTask( 65 base::MessageLoop::current()->PostTask(
65 FROM_HERE, base::Bind(arg0, result0, result1)); 66 FROM_HERE, base::Bind(arg0, result0, result1));
66 } 67 }
67 68
68 struct DownloadTarget {
69 base::FilePath target_path;
70 base::FilePath intermediate_path;
71 DownloadItem::TargetDisposition target_disposition;
72 content::DownloadDangerType danger_type;
73 };
74
75 // Subclass of the ChromeDownloadManagerDelegate that uses a mock 69 // Subclass of the ChromeDownloadManagerDelegate that uses a mock
76 // DownloadProtectionService. 70 // DownloadProtectionService.
77 class TestChromeDownloadManagerDelegate : public ChromeDownloadManagerDelegate { 71 class TestChromeDownloadManagerDelegate : public ChromeDownloadManagerDelegate {
78 public: 72 public:
79 explicit TestChromeDownloadManagerDelegate(Profile* profile) 73 explicit TestChromeDownloadManagerDelegate(Profile* profile)
80 : ChromeDownloadManagerDelegate(profile) { 74 : ChromeDownloadManagerDelegate(profile) {
81 } 75 }
82 76
83 virtual safe_browsing::DownloadProtectionService* 77 virtual safe_browsing::DownloadProtectionService*
84 GetDownloadProtectionService() OVERRIDE { 78 GetDownloadProtectionService() OVERRIDE {
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
145 content::MockDownloadItem* CreateActiveDownloadItem(int32 id); 139 content::MockDownloadItem* CreateActiveDownloadItem(int32 id);
146 140
147 // Given the relative path |path|, returns the full path under the temporary 141 // Given the relative path |path|, returns the full path under the temporary
148 // downloads directory. 142 // downloads directory.
149 base::FilePath GetPathInDownloadDir(const char* path); 143 base::FilePath GetPathInDownloadDir(const char* path);
150 144
151 // Set the kDownloadDefaultDirectory user preference to |path|. 145 // Set the kDownloadDefaultDirectory user preference to |path|.
152 void SetDefaultDownloadPath(const base::FilePath& path); 146 void SetDefaultDownloadPath(const base::FilePath& path);
153 147
154 void DetermineDownloadTarget(DownloadItem* download, 148 void DetermineDownloadTarget(DownloadItem* download,
155 DownloadTarget* result); 149 DownloadTargetInfo* result);
156 150
157 const base::FilePath& default_download_path() const; 151 const base::FilePath& default_download_path() const;
158 TestChromeDownloadManagerDelegate* delegate(); 152 TestChromeDownloadManagerDelegate* delegate();
159 content::MockDownloadManager* download_manager(); 153 content::MockDownloadManager* download_manager();
160 DownloadPrefs* download_prefs(); 154 DownloadPrefs* download_prefs();
161 155
162 private: 156 private:
163 void OnDownloadTargetDone(DownloadTarget* result,
164 const base::FilePath& target_path,
165 DownloadItem::TargetDisposition disposition,
166 content::DownloadDangerType danger_type,
167 const base::FilePath& intermediate_path);
168
169 TestingPrefServiceSyncable* pref_service_; 157 TestingPrefServiceSyncable* pref_service_;
170 base::ScopedTempDir test_download_dir_; 158 base::ScopedTempDir test_download_dir_;
171 scoped_ptr<content::MockDownloadManager> download_manager_; 159 scoped_ptr<content::MockDownloadManager> download_manager_;
172 scoped_refptr<TestChromeDownloadManagerDelegate> delegate_; 160 scoped_refptr<TestChromeDownloadManagerDelegate> delegate_;
173 MockWebContentsDelegate web_contents_delegate_; 161 MockWebContentsDelegate web_contents_delegate_;
174 }; 162 };
175 163
176 ChromeDownloadManagerDelegateTest::ChromeDownloadManagerDelegateTest() 164 ChromeDownloadManagerDelegateTest::ChromeDownloadManagerDelegateTest()
177 : download_manager_(new ::testing::NiceMock<content::MockDownloadManager>) { 165 : download_manager_(new ::testing::NiceMock<content::MockDownloadManager>) {
178 } 166 }
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
245 test_download_dir_.path().AppendASCII(relative_path); 233 test_download_dir_.path().AppendASCII(relative_path);
246 return full_path.NormalizePathSeparators(); 234 return full_path.NormalizePathSeparators();
247 } 235 }
248 236
249 void ChromeDownloadManagerDelegateTest::SetDefaultDownloadPath( 237 void ChromeDownloadManagerDelegateTest::SetDefaultDownloadPath(
250 const base::FilePath& path) { 238 const base::FilePath& path) {
251 pref_service_->SetFilePath(prefs::kDownloadDefaultDirectory, path); 239 pref_service_->SetFilePath(prefs::kDownloadDefaultDirectory, path);
252 pref_service_->SetFilePath(prefs::kSaveFileDefaultDirectory, path); 240 pref_service_->SetFilePath(prefs::kSaveFileDefaultDirectory, path);
253 } 241 }
254 242
243 void StoreDownloadTargetInfo(const base::Closure& closure,
244 DownloadTargetInfo* target_info,
245 const base::FilePath& target_path,
246 DownloadItem::TargetDisposition target_disposition,
247 content::DownloadDangerType danger_type,
248 const base::FilePath& intermediate_path) {
249 target_info->target_path = target_path;
250 target_info->target_disposition = target_disposition;
251 target_info->danger_type = danger_type;
252 target_info->intermediate_path = intermediate_path;
253 closure.Run();
254 }
255
255 void ChromeDownloadManagerDelegateTest::DetermineDownloadTarget( 256 void ChromeDownloadManagerDelegateTest::DetermineDownloadTarget(
256 DownloadItem* download_item, 257 DownloadItem* download_item,
257 DownloadTarget* result) { 258 DownloadTargetInfo* result) {
258 base::WeakPtrFactory<ChromeDownloadManagerDelegateTest> factory(this); 259 base::RunLoop loop_runner;
259 delegate()->DetermineDownloadTarget( 260 delegate()->DetermineDownloadTarget(
260 download_item, 261 download_item,
261 base::Bind(&ChromeDownloadManagerDelegateTest::OnDownloadTargetDone, 262 base::Bind(&StoreDownloadTargetInfo, loop_runner.QuitClosure(), result));
262 factory.GetWeakPtr(), base::Unretained(result))); 263 loop_runner.Run();
263 base::RunLoop loop_runner;
264 loop_runner.RunUntilIdle();
265 }
266
267 void ChromeDownloadManagerDelegateTest::OnDownloadTargetDone(
268 DownloadTarget* result,
269 const base::FilePath& target_path,
270 DownloadItem::TargetDisposition target_disposition,
271 content::DownloadDangerType danger_type,
272 const base::FilePath& intermediate_path) {
273 result->target_path = target_path;
274 result->intermediate_path = intermediate_path;
275 result->target_disposition = target_disposition;
276 result->danger_type = danger_type;
277 } 264 }
278 265
279 const base::FilePath& ChromeDownloadManagerDelegateTest::default_download_path() 266 const base::FilePath& ChromeDownloadManagerDelegateTest::default_download_path()
280 const { 267 const {
281 return test_download_dir_.path(); 268 return test_download_dir_.path();
282 } 269 }
283 270
284 TestChromeDownloadManagerDelegate* 271 TestChromeDownloadManagerDelegate*
285 ChromeDownloadManagerDelegateTest::delegate() { 272 ChromeDownloadManagerDelegateTest::delegate() {
286 return delegate_.get(); 273 return delegate_.get();
(...skipping 27 matching lines...) Expand all
314 EXPECT_CALL(*automatic_download, GetURL()) 301 EXPECT_CALL(*automatic_download, GetURL())
315 .Times(::testing::AnyNumber()) 302 .Times(::testing::AnyNumber())
316 .WillRepeatedly(ReturnRef(download_url)); 303 .WillRepeatedly(ReturnRef(download_url));
317 EXPECT_CALL(*automatic_download, GetTargetDisposition()) 304 EXPECT_CALL(*automatic_download, GetTargetDisposition())
318 .Times(::testing::AnyNumber()) 305 .Times(::testing::AnyNumber())
319 .WillRepeatedly(Return(DownloadItem::TARGET_DISPOSITION_OVERWRITE)); 306 .WillRepeatedly(Return(DownloadItem::TARGET_DISPOSITION_OVERWRITE));
320 307
321 { 308 {
322 // When the prompt is displayed for the first download, the user selects a 309 // When the prompt is displayed for the first download, the user selects a
323 // path in a different directory. 310 // path in a different directory.
324 DownloadTarget result; 311 DownloadTargetInfo result;
325 base::FilePath expected_prompt_path(GetPathInDownloadDir("foo.txt")); 312 base::FilePath expected_prompt_path(GetPathInDownloadDir("foo.txt"));
326 base::FilePath user_selected_path(GetPathInDownloadDir("bar/baz.txt")); 313 base::FilePath user_selected_path(GetPathInDownloadDir("bar/baz.txt"));
327 EXPECT_CALL(*delegate(), 314 EXPECT_CALL(*delegate(),
328 MockPromptUserForDownloadPath(save_as_download.get(), 315 MockPromptUserForDownloadPath(save_as_download.get(),
329 expected_prompt_path, _)) 316 expected_prompt_path, _))
330 .WillOnce(Return(user_selected_path)); 317 .WillOnce(Return(user_selected_path));
331 DetermineDownloadTarget(save_as_download.get(), &result); 318 DetermineDownloadTarget(save_as_download.get(), &result);
332 EXPECT_EQ(user_selected_path, result.target_path); 319 EXPECT_EQ(user_selected_path, result.target_path);
333 VerifyAndClearExpectations(); 320 VerifyAndClearExpectations();
334 } 321 }
335 322
336 { 323 {
337 // The prompt path for the second download is the user selected directroy 324 // The prompt path for the second download is the user selected directroy
338 // from the previous download. 325 // from the previous download.
339 DownloadTarget result; 326 DownloadTargetInfo result;
340 base::FilePath expected_prompt_path(GetPathInDownloadDir("bar/foo.txt")); 327 base::FilePath expected_prompt_path(GetPathInDownloadDir("bar/foo.txt"));
341 EXPECT_CALL(*delegate(), 328 EXPECT_CALL(*delegate(),
342 MockPromptUserForDownloadPath(save_as_download.get(), 329 MockPromptUserForDownloadPath(save_as_download.get(),
343 expected_prompt_path, _)) 330 expected_prompt_path, _))
344 .WillOnce(Return(base::FilePath())); 331 .WillOnce(Return(base::FilePath()));
345 DetermineDownloadTarget(save_as_download.get(), &result); 332 DetermineDownloadTarget(save_as_download.get(), &result);
346 VerifyAndClearExpectations(); 333 VerifyAndClearExpectations();
347 } 334 }
348 335
349 { 336 {
350 // Start an automatic download. This one should get the default download 337 // Start an automatic download. This one should get the default download
351 // path since the last download path only affects Save As downloads. 338 // path since the last download path only affects Save As downloads.
352 DownloadTarget result; 339 DownloadTargetInfo result;
353 base::FilePath expected_path(GetPathInDownloadDir("foo.txt")); 340 base::FilePath expected_path(GetPathInDownloadDir("foo.txt"));
354 DetermineDownloadTarget(automatic_download.get(), &result); 341 DetermineDownloadTarget(automatic_download.get(), &result);
355 EXPECT_EQ(expected_path, result.target_path); 342 EXPECT_EQ(expected_path, result.target_path);
356 VerifyAndClearExpectations(); 343 VerifyAndClearExpectations();
357 } 344 }
358 345
359 { 346 {
360 // The prompt path for the next download should be the default. 347 // The prompt path for the next download should be the default.
361 download_prefs()->SetSaveFilePath(download_prefs()->DownloadPath()); 348 download_prefs()->SetSaveFilePath(download_prefs()->DownloadPath());
362 DownloadTarget result; 349 DownloadTargetInfo result;
363 base::FilePath expected_prompt_path(GetPathInDownloadDir("foo.txt")); 350 base::FilePath expected_prompt_path(GetPathInDownloadDir("foo.txt"));
364 EXPECT_CALL(*delegate(), 351 EXPECT_CALL(*delegate(),
365 MockPromptUserForDownloadPath(save_as_download.get(), 352 MockPromptUserForDownloadPath(save_as_download.get(),
366 expected_prompt_path, _)) 353 expected_prompt_path, _))
367 .WillOnce(Return(base::FilePath())); 354 .WillOnce(Return(base::FilePath()));
368 DetermineDownloadTarget(save_as_download.get(), &result); 355 DetermineDownloadTarget(save_as_download.get(), &result);
369 VerifyAndClearExpectations(); 356 VerifyAndClearExpectations();
370 } 357 }
371 } 358 }
OLDNEW
« no previous file with comments | « chrome/browser/download/chrome_download_manager_delegate.cc ('k') | chrome/browser/download/download_item_model.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698