| 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 "content/public/test/test_file_error_injector.h" | 5 #include "content/public/test/test_file_error_injector.h" |
| 6 | 6 |
| 7 #include <vector> | 7 #include <vector> |
| 8 | 8 |
| 9 #include "base/compiler_specific.h" | 9 #include "base/compiler_specific.h" |
| 10 #include "base/logging.h" | 10 #include "base/logging.h" |
| (...skipping 21 matching lines...) Expand all Loading... |
| 32 } | 32 } |
| 33 | 33 |
| 34 // A class that performs file operations and injects errors. | 34 // A class that performs file operations and injects errors. |
| 35 class DownloadFileWithErrors: public DownloadFileImpl { | 35 class DownloadFileWithErrors: public DownloadFileImpl { |
| 36 public: | 36 public: |
| 37 typedef base::Callback<void(const GURL& url, content::DownloadId id)> | 37 typedef base::Callback<void(const GURL& url, content::DownloadId id)> |
| 38 ConstructionCallback; | 38 ConstructionCallback; |
| 39 typedef base::Callback<void(const GURL& url)> DestructionCallback; | 39 typedef base::Callback<void(const GURL& url)> DestructionCallback; |
| 40 | 40 |
| 41 DownloadFileWithErrors( | 41 DownloadFileWithErrors( |
| 42 const DownloadCreateInfo* info, | 42 scoped_ptr<DownloadCreateInfo> info, |
| 43 scoped_ptr<content::ByteStreamReader> stream, | 43 scoped_ptr<content::ByteStreamReader> stream, |
| 44 DownloadRequestHandleInterface* request_handle, | 44 scoped_ptr<DownloadRequestHandleInterface> request_handle, |
| 45 content::DownloadManager* download_manager, | 45 content::DownloadManager* download_manager, |
| 46 bool calculate_hash, | 46 bool calculate_hash, |
| 47 const net::BoundNetLog& bound_net_log, | 47 const net::BoundNetLog& bound_net_log, |
| 48 content::DownloadId download_id, |
| 49 const GURL& source_url, |
| 48 const content::TestFileErrorInjector::FileErrorInfo& error_info, | 50 const content::TestFileErrorInjector::FileErrorInfo& error_info, |
| 49 const ConstructionCallback& ctor_callback, | 51 const ConstructionCallback& ctor_callback, |
| 50 const DestructionCallback& dtor_callback); | 52 const DestructionCallback& dtor_callback); |
| 51 | 53 |
| 52 ~DownloadFileWithErrors(); | 54 ~DownloadFileWithErrors(); |
| 53 | 55 |
| 54 // DownloadFile interface. | 56 // DownloadFile interface. |
| 55 virtual content::DownloadInterruptReason Initialize() OVERRIDE; | 57 virtual content::DownloadInterruptReason Initialize() OVERRIDE; |
| 56 virtual content::DownloadInterruptReason AppendDataToFile( | 58 virtual content::DownloadInterruptReason AppendDataToFile( |
| 57 const char* data, size_t data_len) OVERRIDE; | 59 const char* data, size_t data_len) OVERRIDE; |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 95 content::DownloadInterruptReason original_error, | 97 content::DownloadInterruptReason original_error, |
| 96 const FilePath& path_result) { | 98 const FilePath& path_result) { |
| 97 original_callback.Run( | 99 original_callback.Run( |
| 98 overwrite_error, | 100 overwrite_error, |
| 99 overwrite_error == content::DOWNLOAD_INTERRUPT_REASON_NONE ? | 101 overwrite_error == content::DOWNLOAD_INTERRUPT_REASON_NONE ? |
| 100 path_result : FilePath()); | 102 path_result : FilePath()); |
| 101 } | 103 } |
| 102 | 104 |
| 103 | 105 |
| 104 DownloadFileWithErrors::DownloadFileWithErrors( | 106 DownloadFileWithErrors::DownloadFileWithErrors( |
| 105 const DownloadCreateInfo* info, | 107 scoped_ptr<DownloadCreateInfo> info, |
| 106 scoped_ptr<content::ByteStreamReader> stream, | 108 scoped_ptr<content::ByteStreamReader> stream, |
| 107 DownloadRequestHandleInterface* request_handle, | 109 scoped_ptr<DownloadRequestHandleInterface> request_handle, |
| 108 content::DownloadManager* download_manager, | 110 content::DownloadManager* download_manager, |
| 109 bool calculate_hash, | 111 bool calculate_hash, |
| 110 const net::BoundNetLog& bound_net_log, | 112 const net::BoundNetLog& bound_net_log, |
| 113 content::DownloadId download_id, |
| 114 const GURL& source_url, |
| 111 const content::TestFileErrorInjector::FileErrorInfo& error_info, | 115 const content::TestFileErrorInjector::FileErrorInfo& error_info, |
| 112 const ConstructionCallback& ctor_callback, | 116 const ConstructionCallback& ctor_callback, |
| 113 const DestructionCallback& dtor_callback) | 117 const DestructionCallback& dtor_callback) |
| 114 : DownloadFileImpl(info, | 118 : DownloadFileImpl(info.Pass(), |
| 115 stream.Pass(), | 119 stream.Pass(), |
| 116 request_handle, | 120 request_handle.Pass(), |
| 117 download_manager, | 121 download_manager, |
| 118 calculate_hash, | 122 calculate_hash, |
| 119 scoped_ptr<content::PowerSaveBlocker>(NULL).Pass(), | 123 scoped_ptr<content::PowerSaveBlocker>(), |
| 120 bound_net_log), | 124 bound_net_log), |
| 121 source_url_(info->url()), | 125 source_url_(source_url), |
| 122 error_info_(error_info), | 126 error_info_(error_info), |
| 123 destruction_callback_(dtor_callback) { | 127 destruction_callback_(dtor_callback) { |
| 124 ctor_callback.Run(source_url_, info->download_id); | 128 ctor_callback.Run(source_url_, download_id); |
| 125 } | 129 } |
| 126 | 130 |
| 127 DownloadFileWithErrors::~DownloadFileWithErrors() { | 131 DownloadFileWithErrors::~DownloadFileWithErrors() { |
| 128 destruction_callback_.Run(source_url_); | 132 destruction_callback_.Run(source_url_); |
| 129 } | 133 } |
| 130 | 134 |
| 131 content::DownloadInterruptReason DownloadFileWithErrors::Initialize() { | 135 content::DownloadInterruptReason DownloadFileWithErrors::Initialize() { |
| 132 return ShouldReturnError( | 136 return ShouldReturnError( |
| 133 content::TestFileErrorInjector::FILE_OPERATION_INITIALIZE, | 137 content::TestFileErrorInjector::FILE_OPERATION_INITIALIZE, |
| 134 DownloadFileImpl::Initialize()); | 138 DownloadFileImpl::Initialize()); |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 191 class DownloadFileWithErrorsFactory : public content::DownloadFileFactory { | 195 class DownloadFileWithErrorsFactory : public content::DownloadFileFactory { |
| 192 public: | 196 public: |
| 193 | 197 |
| 194 DownloadFileWithErrorsFactory( | 198 DownloadFileWithErrorsFactory( |
| 195 const DownloadFileWithErrors::ConstructionCallback& ctor_callback, | 199 const DownloadFileWithErrors::ConstructionCallback& ctor_callback, |
| 196 const DownloadFileWithErrors::DestructionCallback& dtor_callback); | 200 const DownloadFileWithErrors::DestructionCallback& dtor_callback); |
| 197 virtual ~DownloadFileWithErrorsFactory(); | 201 virtual ~DownloadFileWithErrorsFactory(); |
| 198 | 202 |
| 199 // DownloadFileFactory interface. | 203 // DownloadFileFactory interface. |
| 200 virtual DownloadFile* CreateFile( | 204 virtual DownloadFile* CreateFile( |
| 201 DownloadCreateInfo* info, | 205 scoped_ptr<DownloadCreateInfo> info, |
| 202 scoped_ptr<content::ByteStreamReader> stream, | 206 scoped_ptr<content::ByteStreamReader> stream, |
| 203 content::DownloadManager* download_manager, | 207 content::DownloadManager* download_manager, |
| 204 bool calculate_hash, | 208 bool calculate_hash, |
| 205 const net::BoundNetLog& bound_net_log); | 209 const net::BoundNetLog& bound_net_log); |
| 206 | 210 |
| 207 bool AddError( | 211 bool AddError( |
| 208 const TestFileErrorInjector::FileErrorInfo& error_info); | 212 const TestFileErrorInjector::FileErrorInfo& error_info); |
| 209 | 213 |
| 210 void ClearErrors(); | 214 void ClearErrors(); |
| 211 | 215 |
| (...skipping 10 matching lines...) Expand all Loading... |
| 222 const DownloadFileWithErrors::ConstructionCallback& ctor_callback, | 226 const DownloadFileWithErrors::ConstructionCallback& ctor_callback, |
| 223 const DownloadFileWithErrors::DestructionCallback& dtor_callback) | 227 const DownloadFileWithErrors::DestructionCallback& dtor_callback) |
| 224 : construction_callback_(ctor_callback), | 228 : construction_callback_(ctor_callback), |
| 225 destruction_callback_(dtor_callback) { | 229 destruction_callback_(dtor_callback) { |
| 226 } | 230 } |
| 227 | 231 |
| 228 DownloadFileWithErrorsFactory::~DownloadFileWithErrorsFactory() { | 232 DownloadFileWithErrorsFactory::~DownloadFileWithErrorsFactory() { |
| 229 } | 233 } |
| 230 | 234 |
| 231 content::DownloadFile* DownloadFileWithErrorsFactory::CreateFile( | 235 content::DownloadFile* DownloadFileWithErrorsFactory::CreateFile( |
| 232 DownloadCreateInfo* info, | 236 scoped_ptr<DownloadCreateInfo> info, |
| 233 scoped_ptr<content::ByteStreamReader> stream, | 237 scoped_ptr<content::ByteStreamReader> stream, |
| 234 content::DownloadManager* download_manager, | 238 content::DownloadManager* download_manager, |
| 235 bool calculate_hash, | 239 bool calculate_hash, |
| 236 const net::BoundNetLog& bound_net_log) { | 240 const net::BoundNetLog& bound_net_log) { |
| 237 std::string url = info->url().spec(); | 241 GURL url = info->url(); |
| 238 | 242 |
| 239 if (injected_errors_.find(url) == injected_errors_.end()) { | 243 if (injected_errors_.find(url.spec()) == injected_errors_.end()) { |
| 240 // Have to create entry, because FileErrorInfo is not a POD type. | 244 // Have to create entry, because FileErrorInfo is not a POD type. |
| 241 TestFileErrorInjector::FileErrorInfo err_info = { | 245 TestFileErrorInjector::FileErrorInfo err_info = { |
| 242 url, | 246 url.spec(), |
| 243 TestFileErrorInjector::FILE_OPERATION_INITIALIZE, | 247 TestFileErrorInjector::FILE_OPERATION_INITIALIZE, |
| 244 -1, | 248 -1, |
| 245 content::DOWNLOAD_INTERRUPT_REASON_NONE | 249 content::DOWNLOAD_INTERRUPT_REASON_NONE |
| 246 }; | 250 }; |
| 247 injected_errors_[url] = err_info; | 251 injected_errors_[url.spec()] = err_info; |
| 248 } | 252 } |
| 249 | 253 |
| 254 scoped_ptr<DownloadRequestHandleInterface> request_handle( |
| 255 new DownloadRequestHandle(info->request_handle)); |
| 256 DownloadId download_id(info->download_id); |
| 257 |
| 250 return new DownloadFileWithErrors( | 258 return new DownloadFileWithErrors( |
| 251 info, | 259 info.Pass(), |
| 252 stream.Pass(), | 260 stream.Pass(), |
| 253 new DownloadRequestHandle(info->request_handle), | 261 request_handle.Pass(), |
| 254 download_manager, | 262 download_manager, |
| 255 calculate_hash, | 263 calculate_hash, |
| 256 bound_net_log, | 264 bound_net_log, |
| 257 injected_errors_[url], | 265 download_id, |
| 266 url, |
| 267 injected_errors_[url.spec()], |
| 258 construction_callback_, | 268 construction_callback_, |
| 259 destruction_callback_); | 269 destruction_callback_); |
| 260 } | 270 } |
| 261 | 271 |
| 262 bool DownloadFileWithErrorsFactory::AddError( | 272 bool DownloadFileWithErrorsFactory::AddError( |
| 263 const TestFileErrorInjector::FileErrorInfo& error_info) { | 273 const TestFileErrorInjector::FileErrorInfo& error_info) { |
| 264 // Creates an empty entry if necessary. Duplicate entries overwrite. | 274 // Creates an empty entry if necessary. Duplicate entries overwrite. |
| 265 injected_errors_[error_info.url] = error_info; | 275 injected_errors_[error_info.url] = error_info; |
| 266 | 276 |
| 267 return true; | 277 return true; |
| (...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 456 case FILE_OPERATION_RENAME: | 466 case FILE_OPERATION_RENAME: |
| 457 return "RENAME"; | 467 return "RENAME"; |
| 458 default: | 468 default: |
| 459 break; | 469 break; |
| 460 } | 470 } |
| 461 | 471 |
| 462 return "Unknown"; | 472 return "Unknown"; |
| 463 } | 473 } |
| 464 | 474 |
| 465 } // namespace content | 475 } // namespace content |
| OLD | NEW |