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

Side by Side Diff: chrome/browser/download/download_manager.h

Issue 16522: Unbreak unit tests. Revert r7564. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 11 years, 11 months 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
« no previous file with comments | « chrome/browser/download/download_file.cc ('k') | chrome/browser/download/download_manager.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
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
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
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
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__
OLDNEW
« no previous file with comments | « chrome/browser/download/download_file.cc ('k') | chrome/browser/download/download_manager.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698