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 // This file contains download browser tests that are known to be runnable | 5 // This file contains download browser tests that are known to be runnable |
6 // in a pure content context. Over time tests should be migrated here. | 6 // in a pure content context. Over time tests should be migrated here. |
7 | 7 |
8 #include "base/command_line.h" | 8 #include "base/command_line.h" |
9 #include "base/file_path.h" | 9 #include "base/file_path.h" |
10 #include "base/file_util.h" | 10 #include "base/file_util.h" |
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
72 // is a DownloadManagerImpl. | 72 // is a DownloadManagerImpl. |
73 return static_cast<DownloadManagerImpl*>( | 73 return static_cast<DownloadManagerImpl*>( |
74 BrowserContext::GetDownloadManager( | 74 BrowserContext::GetDownloadManager( |
75 shell->web_contents()->GetBrowserContext())); | 75 shell->web_contents()->GetBrowserContext())); |
76 } | 76 } |
77 | 77 |
78 class DownloadFileWithDelay : public DownloadFileImpl { | 78 class DownloadFileWithDelay : public DownloadFileImpl { |
79 public: | 79 public: |
80 DownloadFileWithDelay( | 80 DownloadFileWithDelay( |
81 scoped_ptr<DownloadSaveInfo> save_info, | 81 scoped_ptr<DownloadSaveInfo> save_info, |
82 const FilePath& default_download_directory, | 82 const base::FilePath& default_download_directory, |
83 const GURL& url, | 83 const GURL& url, |
84 const GURL& referrer_url, | 84 const GURL& referrer_url, |
85 bool calculate_hash, | 85 bool calculate_hash, |
86 scoped_ptr<ByteStreamReader> stream, | 86 scoped_ptr<ByteStreamReader> stream, |
87 const net::BoundNetLog& bound_net_log, | 87 const net::BoundNetLog& bound_net_log, |
88 scoped_ptr<PowerSaveBlocker> power_save_blocker, | 88 scoped_ptr<PowerSaveBlocker> power_save_blocker, |
89 base::WeakPtr<DownloadDestinationObserver> observer, | 89 base::WeakPtr<DownloadDestinationObserver> observer, |
90 base::WeakPtr<DownloadFileWithDelayFactory> owner); | 90 base::WeakPtr<DownloadFileWithDelayFactory> owner); |
91 | 91 |
92 virtual ~DownloadFileWithDelay(); | 92 virtual ~DownloadFileWithDelay(); |
93 | 93 |
94 // Wraps DownloadFileImpl::Rename* and intercepts the return callback, | 94 // Wraps DownloadFileImpl::Rename* and intercepts the return callback, |
95 // storing it in the factory that produced this object for later | 95 // storing it in the factory that produced this object for later |
96 // retrieval. | 96 // retrieval. |
97 virtual void RenameAndUniquify( | 97 virtual void RenameAndUniquify( |
98 const FilePath& full_path, | 98 const base::FilePath& full_path, |
99 const RenameCompletionCallback& callback) OVERRIDE; | 99 const RenameCompletionCallback& callback) OVERRIDE; |
100 virtual void RenameAndAnnotate( | 100 virtual void RenameAndAnnotate( |
101 const FilePath& full_path, | 101 const base::FilePath& full_path, |
102 const RenameCompletionCallback& callback) OVERRIDE; | 102 const RenameCompletionCallback& callback) OVERRIDE; |
103 | 103 |
104 private: | 104 private: |
105 static void RenameCallbackWrapper( | 105 static void RenameCallbackWrapper( |
106 DownloadFileWithDelayFactory* factory, | 106 DownloadFileWithDelayFactory* factory, |
107 const RenameCompletionCallback& original_callback, | 107 const RenameCompletionCallback& original_callback, |
108 DownloadInterruptReason reason, | 108 DownloadInterruptReason reason, |
109 const FilePath& path); | 109 const base::FilePath& path); |
110 | 110 |
111 // This variable may only be read on the FILE thread, and may only be | 111 // This variable may only be read on the FILE thread, and may only be |
112 // indirected through (e.g. methods on DownloadFileWithDelayFactory called) | 112 // indirected through (e.g. methods on DownloadFileWithDelayFactory called) |
113 // on the UI thread. This is because after construction, | 113 // on the UI thread. This is because after construction, |
114 // DownloadFileWithDelay lives on the file thread, but | 114 // DownloadFileWithDelay lives on the file thread, but |
115 // DownloadFileWithDelayFactory is purely a UI thread object. | 115 // DownloadFileWithDelayFactory is purely a UI thread object. |
116 base::WeakPtr<DownloadFileWithDelayFactory> owner_; | 116 base::WeakPtr<DownloadFileWithDelayFactory> owner_; |
117 | 117 |
118 DISALLOW_COPY_AND_ASSIGN(DownloadFileWithDelay); | 118 DISALLOW_COPY_AND_ASSIGN(DownloadFileWithDelay); |
119 }; | 119 }; |
120 | 120 |
121 // All routines on this class must be called on the UI thread. | 121 // All routines on this class must be called on the UI thread. |
122 class DownloadFileWithDelayFactory : public DownloadFileFactory { | 122 class DownloadFileWithDelayFactory : public DownloadFileFactory { |
123 public: | 123 public: |
124 DownloadFileWithDelayFactory(); | 124 DownloadFileWithDelayFactory(); |
125 virtual ~DownloadFileWithDelayFactory(); | 125 virtual ~DownloadFileWithDelayFactory(); |
126 | 126 |
127 // DownloadFileFactory interface. | 127 // DownloadFileFactory interface. |
128 virtual DownloadFile* CreateFile( | 128 virtual DownloadFile* CreateFile( |
129 scoped_ptr<DownloadSaveInfo> save_info, | 129 scoped_ptr<DownloadSaveInfo> save_info, |
130 const FilePath& default_download_directory, | 130 const base::FilePath& default_download_directory, |
131 const GURL& url, | 131 const GURL& url, |
132 const GURL& referrer_url, | 132 const GURL& referrer_url, |
133 bool calculate_hash, | 133 bool calculate_hash, |
134 scoped_ptr<ByteStreamReader> stream, | 134 scoped_ptr<ByteStreamReader> stream, |
135 const net::BoundNetLog& bound_net_log, | 135 const net::BoundNetLog& bound_net_log, |
136 base::WeakPtr<DownloadDestinationObserver> observer) OVERRIDE; | 136 base::WeakPtr<DownloadDestinationObserver> observer) OVERRIDE; |
137 | 137 |
138 void AddRenameCallback(base::Closure callback); | 138 void AddRenameCallback(base::Closure callback); |
139 void GetAllRenameCallbacks(std::vector<base::Closure>* results); | 139 void GetAllRenameCallbacks(std::vector<base::Closure>* results); |
140 | 140 |
141 // Do not return until GetAllRenameCallbacks() will return a non-empty list. | 141 // Do not return until GetAllRenameCallbacks() will return a non-empty list. |
142 void WaitForSomeCallback(); | 142 void WaitForSomeCallback(); |
143 | 143 |
144 private: | 144 private: |
145 base::WeakPtrFactory<DownloadFileWithDelayFactory> weak_ptr_factory_; | 145 base::WeakPtrFactory<DownloadFileWithDelayFactory> weak_ptr_factory_; |
146 std::vector<base::Closure> rename_callbacks_; | 146 std::vector<base::Closure> rename_callbacks_; |
147 bool waiting_; | 147 bool waiting_; |
148 | 148 |
149 DISALLOW_COPY_AND_ASSIGN(DownloadFileWithDelayFactory); | 149 DISALLOW_COPY_AND_ASSIGN(DownloadFileWithDelayFactory); |
150 }; | 150 }; |
151 | 151 |
152 DownloadFileWithDelay::DownloadFileWithDelay( | 152 DownloadFileWithDelay::DownloadFileWithDelay( |
153 scoped_ptr<DownloadSaveInfo> save_info, | 153 scoped_ptr<DownloadSaveInfo> save_info, |
154 const FilePath& default_download_directory, | 154 const base::FilePath& default_download_directory, |
155 const GURL& url, | 155 const GURL& url, |
156 const GURL& referrer_url, | 156 const GURL& referrer_url, |
157 bool calculate_hash, | 157 bool calculate_hash, |
158 scoped_ptr<ByteStreamReader> stream, | 158 scoped_ptr<ByteStreamReader> stream, |
159 const net::BoundNetLog& bound_net_log, | 159 const net::BoundNetLog& bound_net_log, |
160 scoped_ptr<PowerSaveBlocker> power_save_blocker, | 160 scoped_ptr<PowerSaveBlocker> power_save_blocker, |
161 base::WeakPtr<DownloadDestinationObserver> observer, | 161 base::WeakPtr<DownloadDestinationObserver> observer, |
162 base::WeakPtr<DownloadFileWithDelayFactory> owner) | 162 base::WeakPtr<DownloadFileWithDelayFactory> owner) |
163 : DownloadFileImpl( | 163 : DownloadFileImpl( |
164 save_info.Pass(), default_download_directory, url, referrer_url, | 164 save_info.Pass(), default_download_directory, url, referrer_url, |
165 calculate_hash, stream.Pass(), bound_net_log, | 165 calculate_hash, stream.Pass(), bound_net_log, |
166 power_save_blocker.Pass(), observer), | 166 power_save_blocker.Pass(), observer), |
167 owner_(owner) {} | 167 owner_(owner) {} |
168 | 168 |
169 DownloadFileWithDelay::~DownloadFileWithDelay() {} | 169 DownloadFileWithDelay::~DownloadFileWithDelay() {} |
170 | 170 |
171 void DownloadFileWithDelay::RenameAndUniquify( | 171 void DownloadFileWithDelay::RenameAndUniquify( |
172 const FilePath& full_path, const RenameCompletionCallback& callback) { | 172 const base::FilePath& full_path, |
| 173 const RenameCompletionCallback& callback) { |
173 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); | 174 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); |
174 DownloadFileImpl::RenameAndUniquify( | 175 DownloadFileImpl::RenameAndUniquify( |
175 full_path, base::Bind(DownloadFileWithDelay::RenameCallbackWrapper, | 176 full_path, base::Bind(DownloadFileWithDelay::RenameCallbackWrapper, |
176 owner_, callback)); | 177 owner_, callback)); |
177 } | 178 } |
178 | 179 |
179 void DownloadFileWithDelay::RenameAndAnnotate( | 180 void DownloadFileWithDelay::RenameAndAnnotate( |
180 const FilePath& full_path, const RenameCompletionCallback& callback) { | 181 const base::FilePath& full_path, const RenameCompletionCallback& callback) { |
181 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); | 182 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); |
182 DownloadFileImpl::RenameAndAnnotate( | 183 DownloadFileImpl::RenameAndAnnotate( |
183 full_path, base::Bind(DownloadFileWithDelay::RenameCallbackWrapper, | 184 full_path, base::Bind(DownloadFileWithDelay::RenameCallbackWrapper, |
184 owner_, callback)); | 185 owner_, callback)); |
185 } | 186 } |
186 | 187 |
187 // static | 188 // static |
188 void DownloadFileWithDelay::RenameCallbackWrapper( | 189 void DownloadFileWithDelay::RenameCallbackWrapper( |
189 DownloadFileWithDelayFactory* factory, | 190 DownloadFileWithDelayFactory* factory, |
190 const RenameCompletionCallback& original_callback, | 191 const RenameCompletionCallback& original_callback, |
191 DownloadInterruptReason reason, | 192 DownloadInterruptReason reason, |
192 const FilePath& path) { | 193 const base::FilePath& path) { |
193 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 194 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
194 factory->AddRenameCallback(base::Bind(original_callback, reason, path)); | 195 factory->AddRenameCallback(base::Bind(original_callback, reason, path)); |
195 } | 196 } |
196 | 197 |
197 DownloadFileWithDelayFactory::DownloadFileWithDelayFactory() | 198 DownloadFileWithDelayFactory::DownloadFileWithDelayFactory() |
198 : weak_ptr_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)), | 199 : weak_ptr_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)), |
199 waiting_(false) {} | 200 waiting_(false) {} |
200 DownloadFileWithDelayFactory::~DownloadFileWithDelayFactory() {} | 201 DownloadFileWithDelayFactory::~DownloadFileWithDelayFactory() {} |
201 | 202 |
202 DownloadFile* DownloadFileWithDelayFactory::CreateFile( | 203 DownloadFile* DownloadFileWithDelayFactory::CreateFile( |
203 scoped_ptr<DownloadSaveInfo> save_info, | 204 scoped_ptr<DownloadSaveInfo> save_info, |
204 const FilePath& default_download_directory, | 205 const base::FilePath& default_download_directory, |
205 const GURL& url, | 206 const GURL& url, |
206 const GURL& referrer_url, | 207 const GURL& referrer_url, |
207 bool calculate_hash, | 208 bool calculate_hash, |
208 scoped_ptr<ByteStreamReader> stream, | 209 scoped_ptr<ByteStreamReader> stream, |
209 const net::BoundNetLog& bound_net_log, | 210 const net::BoundNetLog& bound_net_log, |
210 base::WeakPtr<DownloadDestinationObserver> observer) { | 211 base::WeakPtr<DownloadDestinationObserver> observer) { |
211 scoped_ptr<PowerSaveBlocker> psb( | 212 scoped_ptr<PowerSaveBlocker> psb( |
212 PowerSaveBlocker::Create( | 213 PowerSaveBlocker::Create( |
213 PowerSaveBlocker::kPowerSaveBlockPreventAppSuspension, | 214 PowerSaveBlocker::kPowerSaveBlockPreventAppSuspension, |
214 "Download in progress")); | 215 "Download in progress")); |
(...skipping 23 matching lines...) Expand all Loading... |
238 waiting_ = true; | 239 waiting_ = true; |
239 RunMessageLoop(); | 240 RunMessageLoop(); |
240 waiting_ = false; | 241 waiting_ = false; |
241 } | 242 } |
242 } | 243 } |
243 | 244 |
244 class CountingDownloadFile : public DownloadFileImpl { | 245 class CountingDownloadFile : public DownloadFileImpl { |
245 public: | 246 public: |
246 CountingDownloadFile( | 247 CountingDownloadFile( |
247 scoped_ptr<DownloadSaveInfo> save_info, | 248 scoped_ptr<DownloadSaveInfo> save_info, |
248 const FilePath& default_downloads_directory, | 249 const base::FilePath& default_downloads_directory, |
249 const GURL& url, | 250 const GURL& url, |
250 const GURL& referrer_url, | 251 const GURL& referrer_url, |
251 bool calculate_hash, | 252 bool calculate_hash, |
252 scoped_ptr<ByteStreamReader> stream, | 253 scoped_ptr<ByteStreamReader> stream, |
253 const net::BoundNetLog& bound_net_log, | 254 const net::BoundNetLog& bound_net_log, |
254 scoped_ptr<PowerSaveBlocker> power_save_blocker, | 255 scoped_ptr<PowerSaveBlocker> power_save_blocker, |
255 base::WeakPtr<DownloadDestinationObserver> observer) | 256 base::WeakPtr<DownloadDestinationObserver> observer) |
256 : DownloadFileImpl(save_info.Pass(), default_downloads_directory, | 257 : DownloadFileImpl(save_info.Pass(), default_downloads_directory, |
257 url, referrer_url, calculate_hash, | 258 url, referrer_url, calculate_hash, |
258 stream.Pass(), bound_net_log, | 259 stream.Pass(), bound_net_log, |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
293 int CountingDownloadFile::active_files_ = 0; | 294 int CountingDownloadFile::active_files_ = 0; |
294 | 295 |
295 class CountingDownloadFileFactory : public DownloadFileFactory { | 296 class CountingDownloadFileFactory : public DownloadFileFactory { |
296 public: | 297 public: |
297 CountingDownloadFileFactory() {} | 298 CountingDownloadFileFactory() {} |
298 virtual ~CountingDownloadFileFactory() {} | 299 virtual ~CountingDownloadFileFactory() {} |
299 | 300 |
300 // DownloadFileFactory interface. | 301 // DownloadFileFactory interface. |
301 virtual DownloadFile* CreateFile( | 302 virtual DownloadFile* CreateFile( |
302 scoped_ptr<DownloadSaveInfo> save_info, | 303 scoped_ptr<DownloadSaveInfo> save_info, |
303 const FilePath& default_downloads_directory, | 304 const base::FilePath& default_downloads_directory, |
304 const GURL& url, | 305 const GURL& url, |
305 const GURL& referrer_url, | 306 const GURL& referrer_url, |
306 bool calculate_hash, | 307 bool calculate_hash, |
307 scoped_ptr<ByteStreamReader> stream, | 308 scoped_ptr<ByteStreamReader> stream, |
308 const net::BoundNetLog& bound_net_log, | 309 const net::BoundNetLog& bound_net_log, |
309 base::WeakPtr<DownloadDestinationObserver> observer) OVERRIDE { | 310 base::WeakPtr<DownloadDestinationObserver> observer) OVERRIDE { |
310 scoped_ptr<PowerSaveBlocker> psb( | 311 scoped_ptr<PowerSaveBlocker> psb( |
311 PowerSaveBlocker::Create( | 312 PowerSaveBlocker::Create( |
312 PowerSaveBlocker::kPowerSaveBlockPreventAppSuspension, | 313 PowerSaveBlocker::kPowerSaveBlockPreventAppSuspension, |
313 "Download in progress")); | 314 "Download in progress")); |
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
386 TestShellDownloadManagerDelegate* delegate = | 387 TestShellDownloadManagerDelegate* delegate = |
387 new TestShellDownloadManagerDelegate(); | 388 new TestShellDownloadManagerDelegate(); |
388 delegate->SetDownloadBehaviorForTesting(downloads_directory_.path()); | 389 delegate->SetDownloadBehaviorForTesting(downloads_directory_.path()); |
389 DownloadManager* manager = DownloadManagerForShell(shell()); | 390 DownloadManager* manager = DownloadManagerForShell(shell()); |
390 manager->SetDelegate(delegate); | 391 manager->SetDelegate(delegate); |
391 delegate->SetDownloadManager(manager); | 392 delegate->SetDownloadManager(manager); |
392 | 393 |
393 BrowserThread::PostTask( | 394 BrowserThread::PostTask( |
394 BrowserThread::IO, FROM_HERE, | 395 BrowserThread::IO, FROM_HERE, |
395 base::Bind(&URLRequestSlowDownloadJob::AddUrlHandler)); | 396 base::Bind(&URLRequestSlowDownloadJob::AddUrlHandler)); |
396 FilePath mock_base(GetTestFilePath("download", "")); | 397 base::FilePath mock_base(GetTestFilePath("download", "")); |
397 BrowserThread::PostTask( | 398 BrowserThread::PostTask( |
398 BrowserThread::IO, FROM_HERE, | 399 BrowserThread::IO, FROM_HERE, |
399 base::Bind(&URLRequestMockHTTPJob::AddUrlHandler, mock_base)); | 400 base::Bind(&URLRequestMockHTTPJob::AddUrlHandler, mock_base)); |
400 } | 401 } |
401 | 402 |
402 TestShellDownloadManagerDelegate* GetDownloadManagerDelegate( | 403 TestShellDownloadManagerDelegate* GetDownloadManagerDelegate( |
403 DownloadManager* manager) { | 404 DownloadManager* manager) { |
404 return static_cast<TestShellDownloadManagerDelegate*>( | 405 return static_cast<TestShellDownloadManagerDelegate*>( |
405 manager->GetDelegate()); | 406 manager->GetDelegate()); |
406 } | 407 } |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
442 void DownloadAndWait(Shell* shell, const GURL& url, | 443 void DownloadAndWait(Shell* shell, const GURL& url, |
443 DownloadItem::DownloadState expected_terminal_state) { | 444 DownloadItem::DownloadState expected_terminal_state) { |
444 scoped_ptr<DownloadTestObserver> observer(CreateWaiter(shell, 1)); | 445 scoped_ptr<DownloadTestObserver> observer(CreateWaiter(shell, 1)); |
445 NavigateToURL(shell, url); | 446 NavigateToURL(shell, url); |
446 observer->WaitForFinished(); | 447 observer->WaitForFinished(); |
447 EXPECT_EQ(1u, observer->NumDownloadsSeenInState(expected_terminal_state)); | 448 EXPECT_EQ(1u, observer->NumDownloadsSeenInState(expected_terminal_state)); |
448 } | 449 } |
449 | 450 |
450 // Checks that |path| is has |file_size| bytes, and matches the |value| | 451 // Checks that |path| is has |file_size| bytes, and matches the |value| |
451 // string. | 452 // string. |
452 bool VerifyFile(const FilePath& path, | 453 bool VerifyFile(const base::FilePath& path, |
453 const std::string& value, | 454 const std::string& value, |
454 const int64 file_size) { | 455 const int64 file_size) { |
455 std::string file_contents; | 456 std::string file_contents; |
456 | 457 |
457 bool read = file_util::ReadFileToString(path, &file_contents); | 458 bool read = file_util::ReadFileToString(path, &file_contents); |
458 EXPECT_TRUE(read) << "Failed reading file: " << path.value() << std::endl; | 459 EXPECT_TRUE(read) << "Failed reading file: " << path.value() << std::endl; |
459 if (!read) | 460 if (!read) |
460 return false; // Couldn't read the file. | 461 return false; // Couldn't read the file. |
461 | 462 |
462 // Note: we don't handle really large files (more than size_t can hold) | 463 // Note: we don't handle really large files (more than size_t can hold) |
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
524 NavigateToURL(shell(), GURL(URLRequestSlowDownloadJob::kUnknownSizeUrl)); | 525 NavigateToURL(shell(), GURL(URLRequestSlowDownloadJob::kUnknownSizeUrl)); |
525 observer1->WaitForFinished(); | 526 observer1->WaitForFinished(); |
526 | 527 |
527 std::vector<DownloadItem*> downloads; | 528 std::vector<DownloadItem*> downloads; |
528 DownloadManagerForShell(shell())->GetAllDownloads(&downloads); | 529 DownloadManagerForShell(shell())->GetAllDownloads(&downloads); |
529 ASSERT_EQ(1u, downloads.size()); | 530 ASSERT_EQ(1u, downloads.size()); |
530 ASSERT_EQ(DownloadItem::IN_PROGRESS, downloads[0]->GetState()); | 531 ASSERT_EQ(DownloadItem::IN_PROGRESS, downloads[0]->GetState()); |
531 DownloadItem* download1 = downloads[0]; // The only download. | 532 DownloadItem* download1 = downloads[0]; // The only download. |
532 | 533 |
533 // Start the second download and wait until it's done. | 534 // Start the second download and wait until it's done. |
534 FilePath file(FILE_PATH_LITERAL("download-test.lib")); | 535 base::FilePath file(FILE_PATH_LITERAL("download-test.lib")); |
535 GURL url(URLRequestMockHTTPJob::GetMockUrl(file)); | 536 GURL url(URLRequestMockHTTPJob::GetMockUrl(file)); |
536 // Download the file and wait. | 537 // Download the file and wait. |
537 DownloadAndWait(shell(), url, DownloadItem::COMPLETE); | 538 DownloadAndWait(shell(), url, DownloadItem::COMPLETE); |
538 | 539 |
539 // Should now have 2 items on the manager. | 540 // Should now have 2 items on the manager. |
540 downloads.clear(); | 541 downloads.clear(); |
541 DownloadManagerForShell(shell())->GetAllDownloads(&downloads); | 542 DownloadManagerForShell(shell())->GetAllDownloads(&downloads); |
542 ASSERT_EQ(2u, downloads.size()); | 543 ASSERT_EQ(2u, downloads.size()); |
543 // We don't know the order of the downloads. | 544 // We don't know the order of the downloads. |
544 DownloadItem* download2 = downloads[(download1 == downloads[0]) ? 1 : 0]; | 545 DownloadItem* download2 = downloads[(download1 == downloads[0]) ? 1 : 0]; |
545 | 546 |
546 ASSERT_EQ(DownloadItem::IN_PROGRESS, download1->GetState()); | 547 ASSERT_EQ(DownloadItem::IN_PROGRESS, download1->GetState()); |
547 ASSERT_EQ(DownloadItem::COMPLETE, download2->GetState()); | 548 ASSERT_EQ(DownloadItem::COMPLETE, download2->GetState()); |
548 | 549 |
549 // Allow the first request to finish. | 550 // Allow the first request to finish. |
550 scoped_ptr<DownloadTestObserver> observer2(CreateWaiter(shell(), 1)); | 551 scoped_ptr<DownloadTestObserver> observer2(CreateWaiter(shell(), 1)); |
551 NavigateToURL(shell(), GURL(URLRequestSlowDownloadJob::kFinishDownloadUrl)); | 552 NavigateToURL(shell(), GURL(URLRequestSlowDownloadJob::kFinishDownloadUrl)); |
552 observer2->WaitForFinished(); // Wait for the third request. | 553 observer2->WaitForFinished(); // Wait for the third request. |
553 EXPECT_EQ(1u, observer2->NumDownloadsSeenInState(DownloadItem::COMPLETE)); | 554 EXPECT_EQ(1u, observer2->NumDownloadsSeenInState(DownloadItem::COMPLETE)); |
554 | 555 |
555 // Get the important info from other threads and check it. | 556 // Get the important info from other threads and check it. |
556 EXPECT_TRUE(EnsureNoPendingDownloads()); | 557 EXPECT_TRUE(EnsureNoPendingDownloads()); |
557 | 558 |
558 // The |DownloadItem|s should now be done and have the final file names. | 559 // The |DownloadItem|s should now be done and have the final file names. |
559 // Verify that the files have the expected data and size. | 560 // Verify that the files have the expected data and size. |
560 // |file1| should be full of '*'s, and |file2| should be the same as the | 561 // |file1| should be full of '*'s, and |file2| should be the same as the |
561 // source file. | 562 // source file. |
562 FilePath file1(download1->GetFullPath()); | 563 base::FilePath file1(download1->GetFullPath()); |
563 size_t file_size1 = URLRequestSlowDownloadJob::kFirstDownloadSize + | 564 size_t file_size1 = URLRequestSlowDownloadJob::kFirstDownloadSize + |
564 URLRequestSlowDownloadJob::kSecondDownloadSize; | 565 URLRequestSlowDownloadJob::kSecondDownloadSize; |
565 std::string expected_contents(file_size1, '*'); | 566 std::string expected_contents(file_size1, '*'); |
566 ASSERT_TRUE(VerifyFile(file1, expected_contents, file_size1)); | 567 ASSERT_TRUE(VerifyFile(file1, expected_contents, file_size1)); |
567 | 568 |
568 FilePath file2(download2->GetFullPath()); | 569 base::FilePath file2(download2->GetFullPath()); |
569 ASSERT_TRUE(file_util::ContentsEqual( | 570 ASSERT_TRUE(file_util::ContentsEqual( |
570 file2, GetTestFilePath("download", "download-test.lib"))); | 571 file2, GetTestFilePath("download", "download-test.lib"))); |
571 } | 572 } |
572 | 573 |
573 // Try to cancel just before we release the download file, by delaying final | 574 // Try to cancel just before we release the download file, by delaying final |
574 // rename callback. | 575 // rename callback. |
575 IN_PROC_BROWSER_TEST_F(DownloadContentTest, CancelAtFinalRename) { | 576 IN_PROC_BROWSER_TEST_F(DownloadContentTest, CancelAtFinalRename) { |
576 // Setup new factory. | 577 // Setup new factory. |
577 DownloadFileWithDelayFactory* file_factory = | 578 DownloadFileWithDelayFactory* file_factory = |
578 new DownloadFileWithDelayFactory(); | 579 new DownloadFileWithDelayFactory(); |
579 DownloadManagerImpl* download_manager(DownloadManagerForShell(shell())); | 580 DownloadManagerImpl* download_manager(DownloadManagerForShell(shell())); |
580 download_manager->SetDownloadFileFactoryForTesting( | 581 download_manager->SetDownloadFileFactoryForTesting( |
581 scoped_ptr<DownloadFileFactory>(file_factory).Pass()); | 582 scoped_ptr<DownloadFileFactory>(file_factory).Pass()); |
582 | 583 |
583 // Create a download | 584 // Create a download |
584 FilePath file(FILE_PATH_LITERAL("download-test.lib")); | 585 base::FilePath file(FILE_PATH_LITERAL("download-test.lib")); |
585 NavigateToURL(shell(), URLRequestMockHTTPJob::GetMockUrl(file)); | 586 NavigateToURL(shell(), URLRequestMockHTTPJob::GetMockUrl(file)); |
586 | 587 |
587 // Wait until the first (intermediate file) rename and execute the callback. | 588 // Wait until the first (intermediate file) rename and execute the callback. |
588 file_factory->WaitForSomeCallback(); | 589 file_factory->WaitForSomeCallback(); |
589 std::vector<base::Closure> callbacks; | 590 std::vector<base::Closure> callbacks; |
590 file_factory->GetAllRenameCallbacks(&callbacks); | 591 file_factory->GetAllRenameCallbacks(&callbacks); |
591 ASSERT_EQ(1u, callbacks.size()); | 592 ASSERT_EQ(1u, callbacks.size()); |
592 callbacks[0].Run(); | 593 callbacks[0].Run(); |
593 callbacks.clear(); | 594 callbacks.clear(); |
594 | 595 |
(...skipping 28 matching lines...) Expand all Loading... |
623 // Mark delegate for delayed open. | 624 // Mark delegate for delayed open. |
624 GetDownloadManagerDelegate(download_manager)->SetDelayedOpen(true); | 625 GetDownloadManagerDelegate(download_manager)->SetDelayedOpen(true); |
625 | 626 |
626 // Setup new factory. | 627 // Setup new factory. |
627 DownloadFileWithDelayFactory* file_factory = | 628 DownloadFileWithDelayFactory* file_factory = |
628 new DownloadFileWithDelayFactory(); | 629 new DownloadFileWithDelayFactory(); |
629 download_manager->SetDownloadFileFactoryForTesting( | 630 download_manager->SetDownloadFileFactoryForTesting( |
630 scoped_ptr<DownloadFileFactory>(file_factory).Pass()); | 631 scoped_ptr<DownloadFileFactory>(file_factory).Pass()); |
631 | 632 |
632 // Create a download | 633 // Create a download |
633 FilePath file(FILE_PATH_LITERAL("download-test.lib")); | 634 base::FilePath file(FILE_PATH_LITERAL("download-test.lib")); |
634 NavigateToURL(shell(), URLRequestMockHTTPJob::GetMockUrl(file)); | 635 NavigateToURL(shell(), URLRequestMockHTTPJob::GetMockUrl(file)); |
635 | 636 |
636 // Wait until the first (intermediate file) rename and execute the callback. | 637 // Wait until the first (intermediate file) rename and execute the callback. |
637 file_factory->WaitForSomeCallback(); | 638 file_factory->WaitForSomeCallback(); |
638 std::vector<base::Closure> callbacks; | 639 std::vector<base::Closure> callbacks; |
639 file_factory->GetAllRenameCallbacks(&callbacks); | 640 file_factory->GetAllRenameCallbacks(&callbacks); |
640 ASSERT_EQ(1u, callbacks.size()); | 641 ASSERT_EQ(1u, callbacks.size()); |
641 callbacks[0].Run(); | 642 callbacks[0].Run(); |
642 callbacks.clear(); | 643 callbacks.clear(); |
643 | 644 |
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
719 // Mark delegate for delayed open. | 720 // Mark delegate for delayed open. |
720 GetDownloadManagerDelegate(download_manager)->SetDelayedOpen(true); | 721 GetDownloadManagerDelegate(download_manager)->SetDelayedOpen(true); |
721 | 722 |
722 // Setup new factory. | 723 // Setup new factory. |
723 DownloadFileWithDelayFactory* file_factory = | 724 DownloadFileWithDelayFactory* file_factory = |
724 new DownloadFileWithDelayFactory(); | 725 new DownloadFileWithDelayFactory(); |
725 download_manager->SetDownloadFileFactoryForTesting( | 726 download_manager->SetDownloadFileFactoryForTesting( |
726 scoped_ptr<DownloadFileFactory>(file_factory).Pass()); | 727 scoped_ptr<DownloadFileFactory>(file_factory).Pass()); |
727 | 728 |
728 // Create a download | 729 // Create a download |
729 FilePath file(FILE_PATH_LITERAL("download-test.lib")); | 730 base::FilePath file(FILE_PATH_LITERAL("download-test.lib")); |
730 NavigateToURL(shell(), URLRequestMockHTTPJob::GetMockUrl(file)); | 731 NavigateToURL(shell(), URLRequestMockHTTPJob::GetMockUrl(file)); |
731 | 732 |
732 // Wait until the first (intermediate file) rename and execute the callback. | 733 // Wait until the first (intermediate file) rename and execute the callback. |
733 file_factory->WaitForSomeCallback(); | 734 file_factory->WaitForSomeCallback(); |
734 std::vector<base::Closure> callbacks; | 735 std::vector<base::Closure> callbacks; |
735 file_factory->GetAllRenameCallbacks(&callbacks); | 736 file_factory->GetAllRenameCallbacks(&callbacks); |
736 ASSERT_EQ(1u, callbacks.size()); | 737 ASSERT_EQ(1u, callbacks.size()); |
737 callbacks[0].Run(); | 738 callbacks[0].Run(); |
738 callbacks.clear(); | 739 callbacks.clear(); |
739 | 740 |
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
849 ASSERT_TRUE(file_util::ReadFileToString( | 850 ASSERT_TRUE(file_util::ReadFileToString( |
850 download->GetFullPath(), &file_contents)); | 851 download->GetFullPath(), &file_contents)); |
851 EXPECT_EQ(static_cast<size_t>(initial_chunk * 2), file_contents.size()); | 852 EXPECT_EQ(static_cast<size_t>(initial_chunk * 2), file_contents.size()); |
852 // In conditional to avoid spamming the console with two 800 char strings. | 853 // In conditional to avoid spamming the console with two 800 char strings. |
853 if (expected_contents != file_contents) | 854 if (expected_contents != file_contents) |
854 EXPECT_TRUE(false) << "File contents do not have expected value."; | 855 EXPECT_TRUE(false) << "File contents do not have expected value."; |
855 } | 856 } |
856 } | 857 } |
857 | 858 |
858 } // namespace content | 859 } // namespace content |
OLD | NEW |