| 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/file_path.h" | 8 #include "base/file_path.h" |
| 9 #include "base/file_util.h" | 9 #include "base/file_util.h" |
| 10 #include "base/scoped_temp_dir.h" | 10 #include "base/scoped_temp_dir.h" |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 68 // We're in a content_browsertest; we know that the DownloadManager | 68 // We're in a content_browsertest; we know that the DownloadManager |
| 69 // is a DownloadManagerImpl. | 69 // is a DownloadManagerImpl. |
| 70 return static_cast<DownloadManagerImpl*>( | 70 return static_cast<DownloadManagerImpl*>( |
| 71 BrowserContext::GetDownloadManager( | 71 BrowserContext::GetDownloadManager( |
| 72 shell->web_contents()->GetBrowserContext())); | 72 shell->web_contents()->GetBrowserContext())); |
| 73 } | 73 } |
| 74 | 74 |
| 75 class DownloadFileWithDelay : public DownloadFileImpl { | 75 class DownloadFileWithDelay : public DownloadFileImpl { |
| 76 public: | 76 public: |
| 77 DownloadFileWithDelay( | 77 DownloadFileWithDelay( |
| 78 const DownloadCreateInfo* info, | 78 scoped_ptr<DownloadCreateInfo> info, |
| 79 scoped_ptr<content::ByteStreamReader> stream, | 79 scoped_ptr<content::ByteStreamReader> stream, |
| 80 DownloadRequestHandleInterface* request_handle, | 80 DownloadRequestHandleInterface* request_handle, |
| 81 scoped_refptr<content::DownloadManager> download_manager, | 81 scoped_refptr<content::DownloadManager> download_manager, |
| 82 bool calculate_hash, | 82 bool calculate_hash, |
| 83 scoped_ptr<content::PowerSaveBlocker> power_save_blocker, | 83 scoped_ptr<content::PowerSaveBlocker> power_save_blocker, |
| 84 const net::BoundNetLog& bound_net_log, | 84 const net::BoundNetLog& bound_net_log, |
| 85 // |owner| is required to outlive the DownloadFileWithDelay. | 85 // |owner| is required to outlive the DownloadFileWithDelay. |
| 86 DownloadFileWithDelayFactory* owner); | 86 DownloadFileWithDelayFactory* owner); |
| 87 | 87 |
| 88 virtual ~DownloadFileWithDelay(); | 88 virtual ~DownloadFileWithDelay(); |
| (...skipping 27 matching lines...) Expand all Loading... |
| 116 DISALLOW_COPY_AND_ASSIGN(DownloadFileWithDelay); | 116 DISALLOW_COPY_AND_ASSIGN(DownloadFileWithDelay); |
| 117 }; | 117 }; |
| 118 | 118 |
| 119 class DownloadFileWithDelayFactory : public DownloadFileFactory { | 119 class DownloadFileWithDelayFactory : public DownloadFileFactory { |
| 120 public: | 120 public: |
| 121 DownloadFileWithDelayFactory(); | 121 DownloadFileWithDelayFactory(); |
| 122 virtual ~DownloadFileWithDelayFactory(); | 122 virtual ~DownloadFileWithDelayFactory(); |
| 123 | 123 |
| 124 // DownloadFileFactory interface. | 124 // DownloadFileFactory interface. |
| 125 virtual content::DownloadFile* CreateFile( | 125 virtual content::DownloadFile* CreateFile( |
| 126 DownloadCreateInfo* info, | 126 scoped_ptr<DownloadCreateInfo> info, |
| 127 scoped_ptr<content::ByteStreamReader> stream, | 127 scoped_ptr<content::ByteStreamReader> stream, |
| 128 DownloadManager* download_manager, | 128 DownloadManager* download_manager, |
| 129 bool calculate_hash, | 129 bool calculate_hash, |
| 130 const net::BoundNetLog& bound_net_log) OVERRIDE; | 130 const net::BoundNetLog& bound_net_log) OVERRIDE; |
| 131 | 131 |
| 132 // Must all be called on the UI thread. | 132 // Must all be called on the UI thread. |
| 133 void AddRenameCallback(base::Closure callback); | 133 void AddRenameCallback(base::Closure callback); |
| 134 void AddDetachCallback(base::Closure callback); | 134 void AddDetachCallback(base::Closure callback); |
| 135 void GetAllRenameCallbacks(std::vector<base::Closure>* results); | 135 void GetAllRenameCallbacks(std::vector<base::Closure>* results); |
| 136 void GetAllDetachCallbacks(std::vector<base::Closure>* results); | 136 void GetAllDetachCallbacks(std::vector<base::Closure>* results); |
| 137 | 137 |
| 138 // Do not return until either GetAllRenameCallbacks() or | 138 // Do not return until either GetAllRenameCallbacks() or |
| 139 // GetAllDetachCallbacks() will return a non-empty list. | 139 // GetAllDetachCallbacks() will return a non-empty list. |
| 140 void WaitForSomeCallback(); | 140 void WaitForSomeCallback(); |
| 141 | 141 |
| 142 private: | 142 private: |
| 143 std::vector<base::Closure> rename_callbacks_; | 143 std::vector<base::Closure> rename_callbacks_; |
| 144 std::vector<base::Closure> detach_callbacks_; | 144 std::vector<base::Closure> detach_callbacks_; |
| 145 bool waiting_; | 145 bool waiting_; |
| 146 | 146 |
| 147 DISALLOW_COPY_AND_ASSIGN(DownloadFileWithDelayFactory); | 147 DISALLOW_COPY_AND_ASSIGN(DownloadFileWithDelayFactory); |
| 148 }; | 148 }; |
| 149 | 149 |
| 150 DownloadFileWithDelay::DownloadFileWithDelay( | 150 DownloadFileWithDelay::DownloadFileWithDelay( |
| 151 const DownloadCreateInfo* info, | 151 scoped_ptr<DownloadCreateInfo> info, |
| 152 scoped_ptr<content::ByteStreamReader> stream, | 152 scoped_ptr<content::ByteStreamReader> stream, |
| 153 DownloadRequestHandleInterface* request_handle, | 153 DownloadRequestHandleInterface* request_handle, |
| 154 scoped_refptr<content::DownloadManager> download_manager, | 154 scoped_refptr<content::DownloadManager> download_manager, |
| 155 bool calculate_hash, | 155 bool calculate_hash, |
| 156 scoped_ptr<content::PowerSaveBlocker> power_save_blocker, | 156 scoped_ptr<content::PowerSaveBlocker> power_save_blocker, |
| 157 const net::BoundNetLog& bound_net_log, | 157 const net::BoundNetLog& bound_net_log, |
| 158 DownloadFileWithDelayFactory* owner) | 158 DownloadFileWithDelayFactory* owner) |
| 159 : DownloadFileImpl(info, stream.Pass(), request_handle, download_manager, | 159 : DownloadFileImpl(info.Pass(), stream.Pass(), request_handle, |
| 160 calculate_hash, power_save_blocker.Pass(), | 160 download_manager, calculate_hash, |
| 161 bound_net_log), | 161 power_save_blocker.Pass(), bound_net_log), |
| 162 owner_(owner) {} | 162 owner_(owner) {} |
| 163 | 163 |
| 164 DownloadFileWithDelay::~DownloadFileWithDelay() {} | 164 DownloadFileWithDelay::~DownloadFileWithDelay() {} |
| 165 | 165 |
| 166 void DownloadFileWithDelay::Rename(const FilePath& full_path, | 166 void DownloadFileWithDelay::Rename(const FilePath& full_path, |
| 167 bool overwrite_existing_file, | 167 bool overwrite_existing_file, |
| 168 const RenameCompletionCallback& callback) { | 168 const RenameCompletionCallback& callback) { |
| 169 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); | 169 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); |
| 170 DownloadFileImpl::Rename( | 170 DownloadFileImpl::Rename( |
| 171 full_path, overwrite_existing_file, | 171 full_path, overwrite_existing_file, |
| (...skipping 24 matching lines...) Expand all Loading... |
| 196 const base::Closure& original_callback) { | 196 const base::Closure& original_callback) { |
| 197 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 197 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 198 factory->AddDetachCallback(original_callback); | 198 factory->AddDetachCallback(original_callback); |
| 199 } | 199 } |
| 200 | 200 |
| 201 DownloadFileWithDelayFactory::DownloadFileWithDelayFactory() | 201 DownloadFileWithDelayFactory::DownloadFileWithDelayFactory() |
| 202 : waiting_(false) {} | 202 : waiting_(false) {} |
| 203 DownloadFileWithDelayFactory::~DownloadFileWithDelayFactory() {} | 203 DownloadFileWithDelayFactory::~DownloadFileWithDelayFactory() {} |
| 204 | 204 |
| 205 DownloadFile* DownloadFileWithDelayFactory::CreateFile( | 205 DownloadFile* DownloadFileWithDelayFactory::CreateFile( |
| 206 DownloadCreateInfo* info, | 206 scoped_ptr<DownloadCreateInfo> info, |
| 207 scoped_ptr<content::ByteStreamReader> stream, | 207 scoped_ptr<content::ByteStreamReader> stream, |
| 208 DownloadManager* download_manager, | 208 DownloadManager* download_manager, |
| 209 bool calculate_hash, | 209 bool calculate_hash, |
| 210 const net::BoundNetLog& bound_net_log) { | 210 const net::BoundNetLog& bound_net_log) { |
| 211 // Ownership will be taken by DownloadFileWithDelay. |
| 212 DownloadRequestHandle* request_handle( |
| 213 new DownloadRequestHandle(info->request_handle)); |
| 214 |
| 211 return new DownloadFileWithDelay( | 215 return new DownloadFileWithDelay( |
| 212 info, stream.Pass(), new DownloadRequestHandle(info->request_handle), | 216 info.Pass(), stream.Pass(), request_handle, download_manager, |
| 213 download_manager, calculate_hash, | 217 calculate_hash, |
| 214 scoped_ptr<content::PowerSaveBlocker>( | 218 scoped_ptr<content::PowerSaveBlocker>( |
| 215 new content::PowerSaveBlocker( | 219 new content::PowerSaveBlocker( |
| 216 content::PowerSaveBlocker::kPowerSaveBlockPreventAppSuspension, | 220 content::PowerSaveBlocker::kPowerSaveBlockPreventAppSuspension, |
| 217 "Download in progress")).Pass(), | 221 "Download in progress")).Pass(), |
| 218 bound_net_log, this); | 222 bound_net_log, this); |
| 219 } | 223 } |
| 220 | 224 |
| 221 void DownloadFileWithDelayFactory::AddRenameCallback(base::Closure callback) { | 225 void DownloadFileWithDelayFactory::AddRenameCallback(base::Closure callback) { |
| 222 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 226 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 223 rename_callbacks_.push_back(callback); | 227 rename_callbacks_.push_back(callback); |
| (...skipping 30 matching lines...) Expand all Loading... |
| 254 } | 258 } |
| 255 } | 259 } |
| 256 | 260 |
| 257 bool WasPersisted(DownloadItem* item) { | 261 bool WasPersisted(DownloadItem* item) { |
| 258 return item->IsPersisted(); | 262 return item->IsPersisted(); |
| 259 } | 263 } |
| 260 | 264 |
| 261 class CountingDownloadFile : public DownloadFileImpl { | 265 class CountingDownloadFile : public DownloadFileImpl { |
| 262 public: | 266 public: |
| 263 CountingDownloadFile( | 267 CountingDownloadFile( |
| 264 const DownloadCreateInfo* info, | 268 scoped_ptr<DownloadCreateInfo> info, |
| 265 scoped_ptr<content::ByteStreamReader> stream, | 269 scoped_ptr<content::ByteStreamReader> stream, |
| 266 DownloadRequestHandleInterface* request_handle, | 270 DownloadRequestHandleInterface* request_handle, |
| 267 scoped_refptr<content::DownloadManager> download_manager, | 271 scoped_refptr<content::DownloadManager> download_manager, |
| 268 bool calculate_hash, | 272 bool calculate_hash, |
| 269 scoped_ptr<content::PowerSaveBlocker> power_save_blocker, | 273 scoped_ptr<content::PowerSaveBlocker> power_save_blocker, |
| 270 const net::BoundNetLog& bound_net_log) | 274 const net::BoundNetLog& bound_net_log) |
| 271 : DownloadFileImpl(info, stream.Pass(), request_handle, download_manager, | 275 : DownloadFileImpl(info.Pass(), stream.Pass(), request_handle, |
| 272 calculate_hash, power_save_blocker.Pass(), | 276 download_manager, calculate_hash, |
| 273 bound_net_log) {} | 277 power_save_blocker.Pass(), bound_net_log) {} |
| 274 | 278 |
| 275 virtual ~CountingDownloadFile() { | 279 virtual ~CountingDownloadFile() { |
| 276 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); | 280 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); |
| 277 active_files_--; | 281 active_files_--; |
| 278 } | 282 } |
| 279 | 283 |
| 280 virtual content::DownloadInterruptReason Initialize() OVERRIDE { | 284 virtual content::DownloadInterruptReason Initialize() OVERRIDE { |
| 281 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); | 285 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); |
| 282 active_files_++; | 286 active_files_++; |
| 283 return DownloadFileImpl::Initialize(); | 287 return DownloadFileImpl::Initialize(); |
| (...skipping 22 matching lines...) Expand all Loading... |
| 306 | 310 |
| 307 int CountingDownloadFile::active_files_ = 0; | 311 int CountingDownloadFile::active_files_ = 0; |
| 308 | 312 |
| 309 class CountingDownloadFileFactory : public DownloadFileFactory { | 313 class CountingDownloadFileFactory : public DownloadFileFactory { |
| 310 public: | 314 public: |
| 311 CountingDownloadFileFactory() {} | 315 CountingDownloadFileFactory() {} |
| 312 virtual ~CountingDownloadFileFactory() {} | 316 virtual ~CountingDownloadFileFactory() {} |
| 313 | 317 |
| 314 // DownloadFileFactory interface. | 318 // DownloadFileFactory interface. |
| 315 virtual content::DownloadFile* CreateFile( | 319 virtual content::DownloadFile* CreateFile( |
| 316 DownloadCreateInfo* info, | 320 scoped_ptr<DownloadCreateInfo> info, |
| 317 scoped_ptr<content::ByteStreamReader> stream, | 321 scoped_ptr<content::ByteStreamReader> stream, |
| 318 DownloadManager* download_manager, | 322 DownloadManager* download_manager, |
| 319 bool calculate_hash, | 323 bool calculate_hash, |
| 320 const net::BoundNetLog& bound_net_log) OVERRIDE { | 324 const net::BoundNetLog& bound_net_log) OVERRIDE { |
| 325 DownloadRequestHandle* request_handle( |
| 326 new DownloadRequestHandle(info->request_handle)); |
| 327 |
| 321 return new CountingDownloadFile( | 328 return new CountingDownloadFile( |
| 322 info, stream.Pass(), new DownloadRequestHandle(info->request_handle), | 329 info.Pass(), stream.Pass(), |
| 330 request_handle, // CountingDownloadFile takes ownership |
| 323 download_manager, calculate_hash, | 331 download_manager, calculate_hash, |
| 324 scoped_ptr<content::PowerSaveBlocker>( | 332 scoped_ptr<content::PowerSaveBlocker>( |
| 325 new content::PowerSaveBlocker( | 333 new content::PowerSaveBlocker( |
| 326 content::PowerSaveBlocker::kPowerSaveBlockPreventAppSuspension, | 334 content::PowerSaveBlocker::kPowerSaveBlockPreventAppSuspension, |
| 327 "Download in progress")).Pass(), | 335 "Download in progress")).Pass(), |
| 328 bound_net_log); | 336 bound_net_log); |
| 329 } | 337 } |
| 330 }; | 338 }; |
| 331 | 339 |
| 332 } // namespace | 340 } // namespace |
| (...skipping 408 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 741 // Shutdown the download manager. Mostly this is confirming a lack of | 749 // Shutdown the download manager. Mostly this is confirming a lack of |
| 742 // crashes. | 750 // crashes. |
| 743 DownloadManagerForShell(shell())->Shutdown(); | 751 DownloadManagerForShell(shell())->Shutdown(); |
| 744 | 752 |
| 745 // Run the detach callback; shouldn't cause any problems. | 753 // Run the detach callback; shouldn't cause any problems. |
| 746 callbacks[0].Run(); | 754 callbacks[0].Run(); |
| 747 callbacks.clear(); | 755 callbacks.clear(); |
| 748 } | 756 } |
| 749 | 757 |
| 750 } // namespace content | 758 } // namespace content |
| OLD | NEW |