OLD | NEW |
1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2008 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 // The DownloadManager object manages the process of downloading, including | 5 // The DownloadManager object manages the process of downloading, including |
6 // updates to the history system and providing the information for displaying | 6 // updates to the history system and providing the information for displaying |
7 // the downloads view in the Destinations tab. There is one DownloadManager per | 7 // the downloads view in the Destinations tab. There is one DownloadManager per |
8 // active profile in Chrome. | 8 // active profile in Chrome. |
9 // | 9 // |
10 // Each download is represented by a DownloadItem, and all DownloadItems | 10 // Each download is represented by a DownloadItem, and all DownloadItems |
(...skipping 25 matching lines...) Expand all Loading... |
36 #define CHROME_BROWSER_DOWNLOAD_DOWNLOAD_MANAGER_H__ | 36 #define CHROME_BROWSER_DOWNLOAD_DOWNLOAD_MANAGER_H__ |
37 | 37 |
38 #include "build/build_config.h" | 38 #include "build/build_config.h" |
39 | 39 |
40 #include <string> | 40 #include <string> |
41 #include <map> | 41 #include <map> |
42 #include <set> | 42 #include <set> |
43 #include <vector> | 43 #include <vector> |
44 | 44 |
45 #include "base/basictypes.h" | 45 #include "base/basictypes.h" |
46 #include "base/file_path.h" | |
47 #include "base/hash_tables.h" | 46 #include "base/hash_tables.h" |
48 #include "base/observer_list.h" | 47 #include "base/observer_list.h" |
49 #include "base/ref_counted.h" | 48 #include "base/ref_counted.h" |
50 #include "chrome/browser/cancelable_request.h" | 49 #include "chrome/browser/cancelable_request.h" |
51 #include "chrome/browser/history/download_types.h" | 50 #include "chrome/browser/history/download_types.h" |
52 #include "chrome/browser/history/history.h" | 51 #include "chrome/browser/history/history.h" |
53 #if defined(OS_WIN) | 52 #if defined(OS_WIN) |
54 // TODO(port): Port this header and remove #ifdef. | 53 // TODO(port): Port this header and remove #ifdef. |
55 #include "chrome/browser/shell_dialogs.h" | 54 #include "chrome/browser/shell_dialogs.h" |
56 #endif | 55 #endif |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
96 class Observer { | 95 class Observer { |
97 public: | 96 public: |
98 virtual void OnDownloadUpdated(DownloadItem* download) = 0; | 97 virtual void OnDownloadUpdated(DownloadItem* download) = 0; |
99 }; | 98 }; |
100 | 99 |
101 // Constructing from persistent store: | 100 // Constructing from persistent store: |
102 DownloadItem(const DownloadCreateInfo& info); | 101 DownloadItem(const DownloadCreateInfo& info); |
103 | 102 |
104 // Constructing from user action: | 103 // Constructing from user action: |
105 DownloadItem(int32 download_id, | 104 DownloadItem(int32 download_id, |
106 const FilePath& path, | 105 const std::wstring& path, |
107 int path_uniquifier, | 106 int path_uniquifier, |
108 const std::wstring& url, | 107 const std::wstring& url, |
109 const FilePath& original_name, | 108 const std::wstring& original_name, |
110 const base::Time start_time, | 109 const base::Time start_time, |
111 int64 download_size, | 110 int64 download_size, |
112 int render_process_id, | 111 int render_process_id, |
113 int request_id, | 112 int request_id, |
114 bool is_dangerous); | 113 bool is_dangerous); |
115 | 114 |
116 ~DownloadItem(); | 115 ~DownloadItem(); |
117 | 116 |
118 void Init(bool start_timer); | 117 void Init(bool start_timer); |
119 | 118 |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
158 | 157 |
159 // Simple speed estimate in bytes/s | 158 // Simple speed estimate in bytes/s |
160 int64 CurrentSpeed() const; | 159 int64 CurrentSpeed() const; |
161 | 160 |
162 // Rough percent complete, -1 means we don't know (since we didn't receive a | 161 // Rough percent complete, -1 means we don't know (since we didn't receive a |
163 // total size). | 162 // total size). |
164 int PercentComplete() const; | 163 int PercentComplete() const; |
165 | 164 |
166 // Update the download's path, the actual file is renamed on the download | 165 // Update the download's path, the actual file is renamed on the download |
167 // thread. | 166 // thread. |
168 void Rename(const FilePath& full_path); | 167 void Rename(const std::wstring& full_path); |
169 | 168 |
170 // Allow the user to temporarily pause a download or resume a paused download. | 169 // Allow the user to temporarily pause a download or resume a paused download. |
171 void TogglePause(); | 170 void TogglePause(); |
172 | 171 |
173 // Accessors | 172 // Accessors |
174 DownloadState state() const { return state_; } | 173 DownloadState state() const { return state_; } |
175 FilePath file_name() const { return file_name_; } | 174 std::wstring file_name() const { return file_name_; } |
176 void set_file_name(const FilePath& name) { file_name_ = name; } | 175 void set_file_name(const std::wstring& name) { file_name_ = name; } |
177 FilePath full_path() const { return full_path_; } | 176 std::wstring full_path() const { return full_path_; } |
178 void set_full_path(const FilePath& path) { full_path_ = path; } | 177 void set_full_path(const std::wstring& path) { full_path_ = path; } |
179 int path_uniquifier() const { return path_uniquifier_; } | 178 int path_uniquifier() const { return path_uniquifier_; } |
180 void set_path_uniquifier(int uniquifier) { path_uniquifier_ = uniquifier; } | 179 void set_path_uniquifier(int uniquifier) { path_uniquifier_ = uniquifier; } |
181 std::wstring url() const { return url_; } | 180 std::wstring url() const { return url_; } |
182 int64 total_bytes() const { return total_bytes_; } | 181 int64 total_bytes() const { return total_bytes_; } |
183 void set_total_bytes(int64 total_bytes) { total_bytes_ = total_bytes; } | 182 void set_total_bytes(int64 total_bytes) { total_bytes_ = total_bytes; } |
184 int64 received_bytes() const { return received_bytes_; } | 183 int64 received_bytes() const { return received_bytes_; } |
185 int32 id() const { return id_; } | 184 int32 id() const { return id_; } |
186 base::Time start_time() const { return start_time_; } | 185 base::Time start_time() const { return start_time_; } |
187 void set_db_handle(int64 handle) { db_handle_ = handle; } | 186 void set_db_handle(int64 handle) { db_handle_ = handle; } |
188 int64 db_handle() const { return db_handle_; } | 187 int64 db_handle() const { return db_handle_; } |
189 DownloadManager* manager() const { return manager_; } | 188 DownloadManager* manager() const { return manager_; } |
190 void set_manager(DownloadManager* manager) { manager_ = manager; } | 189 void set_manager(DownloadManager* manager) { manager_ = manager; } |
191 bool is_paused() const { return is_paused_; } | 190 bool is_paused() const { return is_paused_; } |
192 void set_is_paused(bool pause) { is_paused_ = pause; } | 191 void set_is_paused(bool pause) { is_paused_ = pause; } |
193 bool open_when_complete() const { return open_when_complete_; } | 192 bool open_when_complete() const { return open_when_complete_; } |
194 void set_open_when_complete(bool open) { open_when_complete_ = open; } | 193 void set_open_when_complete(bool open) { open_when_complete_ = open; } |
195 int render_process_id() const { return render_process_id_; } | 194 int render_process_id() const { return render_process_id_; } |
196 int request_id() const { return request_id_; } | 195 int request_id() const { return request_id_; } |
197 SafetyState safety_state() const { return safety_state_; } | 196 SafetyState safety_state() const { return safety_state_; } |
198 void set_safety_state(SafetyState safety_state) { | 197 void set_safety_state(SafetyState safety_state) { |
199 safety_state_ = safety_state; | 198 safety_state_ = safety_state; |
200 } | 199 } |
201 FilePath original_name() const { return original_name_; } | 200 std::wstring original_name() const { return original_name_; } |
202 void set_original_name(const FilePath& name) { original_name_ = name; } | 201 void set_original_name(const std::wstring& name) { original_name_ = name; } |
203 | 202 |
204 // Returns the file-name that should be reported to the user, which is | 203 // Returns the file-name that should be reported to the user, which is |
205 // file_name_ for safe downloads and original_name_ for dangerous ones with | 204 // file_name_ for safe downloads and original_name_ for dangerous ones with |
206 // the uniquifier number. | 205 // the uniquifier number. |
207 FilePath GetFileName() const; | 206 std::wstring GetFileName() const; |
208 | 207 |
209 private: | 208 private: |
210 // Internal helper for maintaining consistent received and total sizes. | 209 // Internal helper for maintaining consistent received and total sizes. |
211 void UpdateSize(int64 size); | 210 void UpdateSize(int64 size); |
212 | 211 |
213 // Request ID assigned by the ResourceDispatcherHost. | 212 // Request ID assigned by the ResourceDispatcherHost. |
214 int32 id_; | 213 int32 id_; |
215 | 214 |
216 // Full path to the downloaded file | 215 // Full path to the downloaded file |
217 FilePath full_path_; | 216 std::wstring full_path_; |
218 | 217 |
219 // A number that should be appended to the path to make it unique, or 0 if the | 218 // A number that should be appended to the path to make it unique, or 0 if the |
220 // path should be used as is. | 219 // path should be used as is. |
221 int path_uniquifier_; | 220 int path_uniquifier_; |
222 | 221 |
223 // Short display version of the file | 222 // Short display version of the file |
224 FilePath file_name_; | 223 std::wstring file_name_; |
225 | 224 |
226 // The URL from whence we came, for display | 225 // The URL from whence we came, for display |
227 std::wstring url_; | 226 std::wstring url_; |
228 | 227 |
229 // Total bytes expected | 228 // Total bytes expected |
230 int64 total_bytes_; | 229 int64 total_bytes_; |
231 | 230 |
232 // Current received bytes | 231 // Current received bytes |
233 int64 received_bytes_; | 232 int64 received_bytes_; |
234 | 233 |
(...skipping 23 matching lines...) Expand all Loading... |
258 | 257 |
259 // A flag for indicating if the download should be opened at completion. | 258 // A flag for indicating if the download should be opened at completion. |
260 bool open_when_complete_; | 259 bool open_when_complete_; |
261 | 260 |
262 // Whether the download is considered potentially safe or dangerous | 261 // Whether the download is considered potentially safe or dangerous |
263 // (executable files are typically considered dangerous). | 262 // (executable files are typically considered dangerous). |
264 SafetyState safety_state_; | 263 SafetyState safety_state_; |
265 | 264 |
266 // Dangerous download are given temporary names until the user approves them. | 265 // Dangerous download are given temporary names until the user approves them. |
267 // This stores their original name. | 266 // This stores their original name. |
268 FilePath original_name_; | 267 std::wstring original_name_; |
269 | 268 |
270 // For canceling or pausing requests. | 269 // For canceling or pausing requests. |
271 int render_process_id_; | 270 int render_process_id_; |
272 int request_id_; | 271 int request_id_; |
273 | 272 |
274 DISALLOW_EVIL_CONSTRUCTORS(DownloadItem); | 273 DISALLOW_EVIL_CONSTRUCTORS(DownloadItem); |
275 }; | 274 }; |
276 | 275 |
277 | 276 |
278 // DownloadManager ------------------------------------------------------------- | 277 // DownloadManager ------------------------------------------------------------- |
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
365 | 364 |
366 // Show or Open a download via the Windows shell. | 365 // Show or Open a download via the Windows shell. |
367 void ShowDownloadInShell(const DownloadItem* download); | 366 void ShowDownloadInShell(const DownloadItem* download); |
368 void OpenDownloadInShell(const DownloadItem* download, HWND parent_window); | 367 void OpenDownloadInShell(const DownloadItem* download, HWND parent_window); |
369 | 368 |
370 // The number of in progress (including paused) downloads. | 369 // The number of in progress (including paused) downloads. |
371 int in_progress_count() const { | 370 int in_progress_count() const { |
372 return static_cast<int>(in_progress_.size()); | 371 return static_cast<int>(in_progress_.size()); |
373 } | 372 } |
374 | 373 |
375 FilePath download_path() { | 374 std::wstring download_path() { return *download_path_; } |
376 return FilePath::FromWStringHack(*download_path_); | |
377 } | |
378 | 375 |
379 // Clears the last download path, used to initialize "save as" dialogs. | 376 // Clears the last download path, used to initialize "save as" dialogs. |
380 void ClearLastDownloadPath(); | 377 void ClearLastDownloadPath(); |
381 | 378 |
382 // Registers this file extension for automatic opening upon download | 379 // Registers this file extension for automatic opening upon download |
383 // completion if 'open' is true, or prevents the extension from automatic | 380 // completion if 'open' is true, or prevents the extension from automatic |
384 // opening if 'open' is false. | 381 // opening if 'open' is false. |
385 void OpenFilesOfExtension(const FilePath::StringType& extension, bool open); | 382 void OpenFilesOfExtension(const std::wstring& extension, bool open); |
386 | 383 |
387 // Tests if a file type should be opened automatically. | 384 // Tests if a file type should be opened automatically. |
388 bool ShouldOpenFileExtension(const FilePath::StringType& extension); | 385 bool ShouldOpenFileExtension(const std::wstring& extension); |
389 | 386 |
390 // Tests if we think the server means for this mime_type to be executable. | 387 // Tests if we think the server means for this mime_type to be executable. |
391 static bool IsExecutableMimeType(const std::string& mime_type); | 388 static bool IsExecutableMimeType(const std::string& mime_type); |
392 | 389 |
393 // Tests if a file type is considered executable. | 390 // Tests if a file type is considered executable. |
394 bool IsExecutable(const FilePath::StringType& extension); | 391 bool IsExecutable(const std::wstring& extension); |
395 | 392 |
396 // Resets the automatic open preference. | 393 // Resets the automatic open preference. |
397 void ResetAutoOpenFiles(); | 394 void ResetAutoOpenFiles(); |
398 | 395 |
399 // Returns true if there are automatic handlers registered for any file | 396 // Returns true if there are automatic handlers registered for any file |
400 // types. | 397 // types. |
401 bool HasAutoOpenFileTypesRegistered() const; | 398 bool HasAutoOpenFileTypesRegistered() const; |
402 | 399 |
403 // Overridden from SelectFileDialog::Listener: | 400 // Overridden from SelectFileDialog::Listener: |
404 // TODO(port): convert this to FilePath when SelectFileDialog gets converted. | |
405 virtual void FileSelected(const std::wstring& path, void* params); | 401 virtual void FileSelected(const std::wstring& path, void* params); |
406 virtual void FileSelectionCanceled(void* params); | 402 virtual void FileSelectionCanceled(void* params); |
407 | 403 |
408 // Deletes the specified path on the file thread. | 404 // Deletes the specified path on the file thread. |
409 void DeleteDownload(const FilePath& path); | 405 void DeleteDownload(const std::wstring& path); |
410 | 406 |
411 // Called when the user has validated the donwload of a dangerous file. | 407 // Called when the user has validated the donwload of a dangerous file. |
412 void DangerousDownloadValidated(DownloadItem* download); | 408 void DangerousDownloadValidated(DownloadItem* download); |
413 | 409 |
414 private: | 410 private: |
415 // Shutdown the download manager. This call is needed only after Init. | 411 // Shutdown the download manager. This call is needed only after Init. |
416 void Shutdown(); | 412 void Shutdown(); |
417 | 413 |
418 // Called on the download thread to check whether the suggested file path | 414 // Called on the download thread to check whether the suggested file path |
419 // exists. We don't check if the file exists on the UI thread to avoid UI | 415 // exists. We don't check if the file exists on the UI thread to avoid UI |
420 // stalls from interacting with the file system. | 416 // stalls from interacting with the file system. |
421 void CheckIfSuggestedPathExists(DownloadCreateInfo* info); | 417 void CheckIfSuggestedPathExists(DownloadCreateInfo* info); |
422 | 418 |
423 // Called on the UI thread once the DownloadManager has determined whether the | 419 // Called on the UI thread once the DownloadManager has determined whether the |
424 // suggested file path exists. | 420 // suggested file path exists. |
425 void OnPathExistenceAvailable(DownloadCreateInfo* info); | 421 void OnPathExistenceAvailable(DownloadCreateInfo* info); |
426 | 422 |
427 // Called back after a target path for the file to be downloaded to has been | 423 // Called back after a target path for the file to be downloaded to has been |
428 // determined, either automatically based on the suggested file name, or by | 424 // determined, either automatically based on the suggested file name, or by |
429 // the user in a Save As dialog box. | 425 // the user in a Save As dialog box. |
430 void ContinueStartDownload(DownloadCreateInfo* info, | 426 void ContinueStartDownload(DownloadCreateInfo* info, |
431 const FilePath& target_path); | 427 const std::wstring& target_path); |
432 | 428 |
433 // Update the history service for a particular download. | 429 // Update the history service for a particular download. |
434 void UpdateHistoryForDownload(DownloadItem* download); | 430 void UpdateHistoryForDownload(DownloadItem* download); |
435 void RemoveDownloadFromHistory(DownloadItem* download); | 431 void RemoveDownloadFromHistory(DownloadItem* download); |
436 void RemoveDownloadsFromHistoryBetween(const base::Time remove_begin, | 432 void RemoveDownloadsFromHistoryBetween(const base::Time remove_begin, |
437 const base::Time remove_before); | 433 const base::Time remove_before); |
438 | 434 |
439 // Inform the notification service of download starts and stops. | 435 // Inform the notification service of download starts and stops. |
440 void NotifyAboutDownloadStart(); | 436 void NotifyAboutDownloadStart(); |
441 void NotifyAboutDownloadStop(); | 437 void NotifyAboutDownloadStop(); |
442 | 438 |
443 // Create an extension based on the file name and mime type. | 439 // Create an extension based on the file name and mime type. |
444 void GenerateExtension(const FilePath& file_name, | 440 void GenerateExtension(const std::wstring& file_name, |
445 const std::string& mime_type, | 441 const std::string& mime_type, |
446 FilePath::StringType* generated_extension); | 442 std::wstring* generated_extension); |
447 | 443 |
448 // Create a file name based on the response from the server. | 444 // Create a file name based on the response from the server. |
449 void GenerateFilename(DownloadCreateInfo* info, FilePath* generated_name); | 445 void GenerateFilename(DownloadCreateInfo* info, std::wstring* generated_name); |
450 | 446 |
451 // Persist the automatic opening preference. | 447 // Persist the automatic opening preference. |
452 void SaveAutoOpens(); | 448 void SaveAutoOpens(); |
453 | 449 |
454 // Runs the network cancel on the IO thread. | 450 // Runs the network cancel on the IO thread. |
455 static void OnCancelDownloadRequest(ResourceDispatcherHost* rdh, | 451 static void OnCancelDownloadRequest(ResourceDispatcherHost* rdh, |
456 int render_process_id, | 452 int render_process_id, |
457 int request_id); | 453 int request_id); |
458 | 454 |
459 // Runs the pause on the IO thread. | 455 // Runs the pause on the IO thread. |
460 static void OnPauseDownloadRequest(ResourceDispatcherHost* rdh, | 456 static void OnPauseDownloadRequest(ResourceDispatcherHost* rdh, |
461 int render_process_id, | 457 int render_process_id, |
462 int request_id, | 458 int request_id, |
463 bool pause); | 459 bool pause); |
464 | 460 |
465 // Performs the last steps required when a download has been completed. | 461 // Performs the last steps required when a download has been completed. |
466 // It is necessary to break down the flow when a download is finished as | 462 // It is necessary to break down the flow when a download is finished as |
467 // dangerous downloads are downloaded to temporary files that need to be | 463 // dangerous downloads are downloaded to temporary files that need to be |
468 // renamed on the file thread first. | 464 // renamed on the file thread first. |
469 // Invoked on the UI thread. | 465 // Invoked on the UI thread. |
470 void ContinueDownloadFinished(DownloadItem* download); | 466 void ContinueDownloadFinished(DownloadItem* download); |
471 | 467 |
472 // Renames a finished dangerous download from its temporary file name to its | 468 // Renames a finished dangerous download from its temporary file name to its |
473 // real file name. | 469 // real file name. |
474 // Invoked on the file thread. | 470 // Invoked on the file thread. |
475 void ProceedWithFinishedDangerousDownload(int64 download_handle, | 471 void ProceedWithFinishedDangerousDownload(int64 download_handle, |
476 const FilePath& path, | 472 const std::wstring& path, |
477 const FilePath& original_name); | 473 const std::wstring& original_name); |
478 | 474 |
479 // Invoked on the UI thread when a dangerous downloaded file has been renamed. | 475 // Invoked on the UI thread when a dangerous downloaded file has been renamed. |
480 void DangerousDownloadRenamed(int64 download_handle, | 476 void DangerousDownloadRenamed(int64 download_handle, |
481 bool success, | 477 bool success, |
482 const FilePath& new_path, | 478 const std::wstring& new_path, |
483 int new_path_uniquifier); | 479 int new_path_uniquifier); |
484 | 480 |
485 // Checks whether a file represents a risk if downloaded. | 481 // Checks whether a file represents a risk if downloaded. |
486 bool IsDangerous(const FilePath& file_name); | 482 bool IsDangerous(const std::wstring& file_name); |
487 | 483 |
488 // Changes the paths and file name of the specified |download|, propagating | 484 // Changes the paths and file name of the specified |download|, propagating |
489 // the change to the history system. | 485 // the change to the history system. |
490 void RenameDownload(DownloadItem* download, const FilePath& new_path); | 486 void RenameDownload(DownloadItem* download, const std::wstring& new_path); |
491 | 487 |
492 // 'downloads_' is map of all downloads in this profile. The key is the handle | 488 // 'downloads_' is map of all downloads in this profile. The key is the handle |
493 // returned by the history system, which is unique across sessions. This map | 489 // returned by the history system, which is unique across sessions. This map |
494 // owns all the DownloadItems once they have been created in the history | 490 // owns all the DownloadItems once they have been created in the history |
495 // system. | 491 // system. |
496 // | 492 // |
497 // 'in_progress_' is a map of all downloads that are in progress and that have | 493 // 'in_progress_' is a map of all downloads that are in progress and that have |
498 // not yet received a valid history handle. The key is the ID assigned by the | 494 // not yet received a valid history handle. The key is the ID assigned by the |
499 // ResourceDispatcherHost, which is unique for the current session. This map | 495 // ResourceDispatcherHost, which is unique for the current session. This map |
500 // does not own the DownloadItems. | 496 // does not own the DownloadItems. |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
540 // A pointer to the file thread's loop. The file thread lives longer than | 536 // A pointer to the file thread's loop. The file thread lives longer than |
541 // the DownloadManager, so this is safe to cache. | 537 // the DownloadManager, so this is safe to cache. |
542 MessageLoop* file_loop_; | 538 MessageLoop* file_loop_; |
543 | 539 |
544 // User preferences | 540 // User preferences |
545 BooleanPrefMember prompt_for_download_; | 541 BooleanPrefMember prompt_for_download_; |
546 StringPrefMember download_path_; | 542 StringPrefMember download_path_; |
547 | 543 |
548 // The user's last choice for download directory. This is only used when the | 544 // The user's last choice for download directory. This is only used when the |
549 // user wants us to prompt for a save location for each download. | 545 // user wants us to prompt for a save location for each download. |
550 FilePath last_download_path_; | 546 std::wstring last_download_path_; |
551 | 547 |
552 // Set of file extensions to open at download completion. | 548 // Set of file extensions to open at download completion. |
553 std::set<FilePath::StringType> auto_open_; | 549 std::set<std::wstring> auto_open_; |
554 | 550 |
555 // Set of file extensions that are executables and shouldn't be auto opened. | 551 // Set of file extensions that are executables and shouldn't be auto opened. |
556 std::set<FilePath::StringType> exe_types_; | 552 std::set<std::wstring> exe_types_; |
557 | 553 |
558 // Keep track of downloads that are completed before the user selects the | 554 // Keep track of downloads that are completed before the user selects the |
559 // destination, so that observers are appropriately notified of completion | 555 // destination, so that observers are appropriately notified of completion |
560 // after this determination is made. | 556 // after this determination is made. |
561 // The map is of download_id->remaining size (bytes), both of which are | 557 // The map is of download_id->remaining size (bytes), both of which are |
562 // required when calling DownloadFinished. | 558 // required when calling DownloadFinished. |
563 typedef std::map<int32, int64> PendingFinishedMap; | 559 typedef std::map<int32, int64> PendingFinishedMap; |
564 PendingFinishedMap pending_finished_downloads_; | 560 PendingFinishedMap pending_finished_downloads_; |
565 | 561 |
566 // The "Save As" dialog box used to ask the user where a file should be | 562 // The "Save As" dialog box used to ask the user where a file should be |
567 // saved. | 563 // saved. |
568 scoped_refptr<SelectFileDialog> select_file_dialog_; | 564 scoped_refptr<SelectFileDialog> select_file_dialog_; |
569 | 565 |
570 DISALLOW_EVIL_CONSTRUCTORS(DownloadManager); | 566 DISALLOW_EVIL_CONSTRUCTORS(DownloadManager); |
571 }; | 567 }; |
572 | 568 |
573 #endif // defined(OS_WIN) | 569 #endif // defined(OS_WIN) |
574 | 570 |
575 #endif // CHROME_BROWSER_DOWNLOAD_DOWNLOAD_MANAGER_H__ | 571 #endif // CHROME_BROWSER_DOWNLOAD_DOWNLOAD_MANAGER_H__ |
OLD | NEW |