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

Side by Side Diff: content/browser/download/save_file_manager.cc

Issue 1492283004: ABANDONED CL: Introducing a compile-time-safe SavePackageId type. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@type-safe-id-base
Patch Set: Created 5 years 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
OLDNEW
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 "build/build_config.h" 5 #include "build/build_config.h"
6 6
7 #include "content/browser/download/save_file_manager.h" 7 #include "content/browser/download/save_file_manager.h"
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/files/file_util.h" 10 #include "base/files/file_util.h"
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
61 // unique save ID. 61 // unique save ID.
62 int SaveFileManager::GetNextId() { 62 int SaveFileManager::GetNextId() {
63 DCHECK_CURRENTLY_ON(BrowserThread::IO); 63 DCHECK_CURRENTLY_ON(BrowserThread::IO);
64 return next_id_++; 64 return next_id_++;
65 } 65 }
66 66
67 void SaveFileManager::RegisterStartingRequest(const GURL& save_url, 67 void SaveFileManager::RegisterStartingRequest(const GURL& save_url,
68 SavePackage* save_package) { 68 SavePackage* save_package) {
69 // Make sure it runs in the UI thread. 69 // Make sure it runs in the UI thread.
70 DCHECK_CURRENTLY_ON(BrowserThread::UI); 70 DCHECK_CURRENTLY_ON(BrowserThread::UI);
71 int save_package_id = save_package->id(); 71 SavePackageId save_package_id = save_package->id();
72 72
73 // Register this starting request. 73 // Register this starting request.
74 StartingRequestsMap& starting_requests = 74 StartingRequestsMap& starting_requests =
75 contents_starting_requests_[save_package_id]; 75 contents_starting_requests_[save_package_id];
76 bool never_present = starting_requests.insert( 76 bool never_present = starting_requests.insert(
77 StartingRequestsMap::value_type(save_url.spec(), save_package)).second; 77 StartingRequestsMap::value_type(save_url.spec(), save_package)).second;
78 DCHECK(never_present); 78 DCHECK(never_present);
79 } 79 }
80 80
81 SavePackage* SaveFileManager::UnregisterStartingRequest(const GURL& save_url, 81 SavePackage* SaveFileManager::UnregisterStartingRequest(
82 int save_package_id) { 82 const GURL& save_url,
83 SavePackageId save_package_id) {
83 // Make sure it runs in UI thread. 84 // Make sure it runs in UI thread.
84 DCHECK_CURRENTLY_ON(BrowserThread::UI); 85 DCHECK_CURRENTLY_ON(BrowserThread::UI);
85 86
86 ContentsToStartingRequestsMap::iterator it = 87 ContentsToStartingRequestsMap::iterator it =
87 contents_starting_requests_.find(save_package_id); 88 contents_starting_requests_.find(save_package_id);
88 if (it != contents_starting_requests_.end()) { 89 if (it != contents_starting_requests_.end()) {
89 StartingRequestsMap& requests = it->second; 90 StartingRequestsMap& requests = it->second;
90 StartingRequestsMap::iterator sit = requests.find(save_url.spec()); 91 StartingRequestsMap::iterator sit = requests.find(save_url.spec());
91 if (sit == requests.end()) 92 if (sit == requests.end())
92 return NULL; 93 return NULL;
(...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after
260 } 261 }
261 262
262 // The IO thread will call this when saving is completed or it got error when 263 // The IO thread will call this when saving is completed or it got error when
263 // fetching data. In the former case, we forward the message to OnSaveFinished 264 // fetching data. In the former case, we forward the message to OnSaveFinished
264 // in UI thread. In the latter case, the save ID will be -1, which means the 265 // in UI thread. In the latter case, the save ID will be -1, which means the
265 // saving action did not even start, so we need to call OnErrorFinished in UI 266 // saving action did not even start, so we need to call OnErrorFinished in UI
266 // thread, which will use the save URL to find corresponding request record and 267 // thread, which will use the save URL to find corresponding request record and
267 // delete it. 268 // delete it.
268 void SaveFileManager::SaveFinished(int save_id, 269 void SaveFileManager::SaveFinished(int save_id,
269 const GURL& save_url, 270 const GURL& save_url,
270 int save_package_id, 271 SavePackageId save_package_id,
271 bool is_success) { 272 bool is_success) {
272 DVLOG(20) << " " << __FUNCTION__ << "()" 273 DVLOG(20) << " " << __FUNCTION__ << "()"
273 << " save_id = " << save_id << " save_url = \"" << save_url.spec() 274 << " save_id = " << save_id << " save_url = \"" << save_url.spec()
274 << "\"" 275 << "\""
275 << " save_package_id = " << save_package_id 276 << " save_package_id = " << save_package_id
276 << " is_success = " << is_success; 277 << " is_success = " << is_success;
277 DCHECK_CURRENTLY_ON(BrowserThread::FILE); 278 DCHECK_CURRENTLY_ON(BrowserThread::FILE);
278 SaveFileMap::iterator it = save_file_map_.find(save_id); 279 SaveFileMap::iterator it = save_file_map_.find(save_id);
279 if (it != save_file_map_.end()) { 280 if (it != save_file_map_.end()) {
280 SaveFile* save_file = it->second; 281 SaveFile* save_file = it->second;
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
349 void SaveFileManager::OnSaveFinished(int save_id, 350 void SaveFileManager::OnSaveFinished(int save_id,
350 int64 bytes_so_far, 351 int64 bytes_so_far,
351 bool is_success) { 352 bool is_success) {
352 DCHECK_CURRENTLY_ON(BrowserThread::UI); 353 DCHECK_CURRENTLY_ON(BrowserThread::UI);
353 SavePackage* package = LookupPackage(save_id); 354 SavePackage* package = LookupPackage(save_id);
354 if (package) 355 if (package)
355 package->SaveFinished(save_id, bytes_so_far, is_success); 356 package->SaveFinished(save_id, bytes_so_far, is_success);
356 } 357 }
357 358
358 void SaveFileManager::OnErrorFinished(const GURL& save_url, 359 void SaveFileManager::OnErrorFinished(const GURL& save_url,
359 int save_package_id) { 360 SavePackageId save_package_id) {
360 DCHECK_CURRENTLY_ON(BrowserThread::UI); 361 DCHECK_CURRENTLY_ON(BrowserThread::UI);
361 SavePackage* save_package = 362 SavePackage* save_package =
362 UnregisterStartingRequest(save_url, save_package_id); 363 UnregisterStartingRequest(save_url, save_package_id);
363 if (save_package) 364 if (save_package)
364 save_package->SaveFailed(save_url); 365 save_package->SaveFailed(save_url);
365 } 366 }
366 367
367 // Notifications sent from the UI thread and run on the IO thread. 368 // Notifications sent from the UI thread and run on the IO thread.
368 369
369 void SaveFileManager::OnSaveURL(const GURL& url, 370 void SaveFileManager::OnSaveURL(const GURL& url,
370 const Referrer& referrer, 371 const Referrer& referrer,
371 int save_package_id, 372 SavePackageId save_package_id,
372 int render_process_host_id, 373 int render_process_host_id,
373 int render_view_routing_id, 374 int render_view_routing_id,
374 int render_frame_routing_id, 375 int render_frame_routing_id,
375 ResourceContext* context) { 376 ResourceContext* context) {
376 DCHECK_CURRENTLY_ON(BrowserThread::IO); 377 DCHECK_CURRENTLY_ON(BrowserThread::IO);
377 ResourceDispatcherHostImpl::Get()->BeginSaveFile( 378 ResourceDispatcherHostImpl::Get()->BeginSaveFile(
378 url, referrer, save_package_id, render_process_host_id, 379 url, referrer, save_package_id, render_process_host_id,
379 render_view_routing_id, render_frame_routing_id, context); 380 render_view_routing_id, render_frame_routing_id, context);
380 } 381 }
381 382
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
433 save_file_map_.erase(it); 434 save_file_map_.erase(it);
434 delete save_file; 435 delete save_file;
435 } 436 }
436 } 437 }
437 438
438 // It is possible that SaveItem which has specified save_id has been canceled 439 // It is possible that SaveItem which has specified save_id has been canceled
439 // before this function runs. So if we can not find corresponding SaveFile by 440 // before this function runs. So if we can not find corresponding SaveFile by
440 // using specified save_id, just return. 441 // using specified save_id, just return.
441 void SaveFileManager::SaveLocalFile(const GURL& original_file_url, 442 void SaveFileManager::SaveLocalFile(const GURL& original_file_url,
442 int save_id, 443 int save_id,
443 int save_package_id) { 444 SavePackageId save_package_id) {
444 DCHECK_CURRENTLY_ON(BrowserThread::FILE); 445 DCHECK_CURRENTLY_ON(BrowserThread::FILE);
445 SaveFile* save_file = LookupSaveFile(save_id); 446 SaveFile* save_file = LookupSaveFile(save_id);
446 if (!save_file) 447 if (!save_file)
447 return; 448 return;
448 // If it has finished, just return. 449 // If it has finished, just return.
449 if (!save_file->InProgress()) 450 if (!save_file->InProgress())
450 return; 451 return;
451 452
452 // Close the save file before the copy operation. 453 // Close the save file before the copy operation.
453 save_file->Finish(); 454 save_file->Finish();
(...skipping 20 matching lines...) Expand all
474 DCHECK_CURRENTLY_ON(BrowserThread::FILE); 475 DCHECK_CURRENTLY_ON(BrowserThread::FILE);
475 DCHECK(!full_path.empty()); 476 DCHECK(!full_path.empty());
476 477
477 base::DeleteFile(full_path, is_dir); 478 base::DeleteFile(full_path, is_dir);
478 } 479 }
479 480
480 void SaveFileManager::RenameAllFiles(const FinalNameList& final_names, 481 void SaveFileManager::RenameAllFiles(const FinalNameList& final_names,
481 const base::FilePath& resource_dir, 482 const base::FilePath& resource_dir,
482 int render_process_id, 483 int render_process_id,
483 int render_frame_routing_id, 484 int render_frame_routing_id,
484 int save_package_id) { 485 SavePackageId save_package_id) {
485 DCHECK_CURRENTLY_ON(BrowserThread::FILE); 486 DCHECK_CURRENTLY_ON(BrowserThread::FILE);
486 487
487 if (!resource_dir.empty() && !base::PathExists(resource_dir)) 488 if (!resource_dir.empty() && !base::PathExists(resource_dir))
488 base::CreateDirectory(resource_dir); 489 base::CreateDirectory(resource_dir);
489 490
490 for (FinalNameList::const_iterator i = final_names.begin(); 491 for (FinalNameList::const_iterator i = final_names.begin();
491 i != final_names.end(); ++i) { 492 i != final_names.end(); ++i) {
492 SaveFileMap::iterator it = save_file_map_.find(i->first); 493 SaveFileMap::iterator it = save_file_map_.find(i->first);
493 if (it != save_file_map_.end()) { 494 if (it != save_file_map_.end()) {
494 SaveFile* save_file = it->second; 495 SaveFile* save_file = it->second;
495 DCHECK(!save_file->InProgress()); 496 DCHECK(!save_file->InProgress());
496 save_file->Rename(i->second); 497 save_file->Rename(i->second);
497 delete save_file; 498 delete save_file;
498 save_file_map_.erase(it); 499 save_file_map_.erase(it);
499 } 500 }
500 } 501 }
501 502
502 BrowserThread::PostTask( 503 BrowserThread::PostTask(
503 BrowserThread::UI, FROM_HERE, 504 BrowserThread::UI, FROM_HERE,
504 base::Bind(&SaveFileManager::OnFinishSavePageJob, this, render_process_id, 505 base::Bind(&SaveFileManager::OnFinishSavePageJob, this, render_process_id,
505 render_frame_routing_id, save_package_id)); 506 render_frame_routing_id, save_package_id));
506 } 507 }
507 508
508 void SaveFileManager::OnFinishSavePageJob(int render_process_id, 509 void SaveFileManager::OnFinishSavePageJob(int render_process_id,
509 int render_frame_routing_id, 510 int render_frame_routing_id,
510 int save_package_id) { 511 SavePackageId save_package_id) {
511 DCHECK_CURRENTLY_ON(BrowserThread::UI); 512 DCHECK_CURRENTLY_ON(BrowserThread::UI);
512 513
513 SavePackage* save_package = 514 SavePackage* save_package =
514 GetSavePackageFromRenderIds(render_process_id, render_frame_routing_id); 515 GetSavePackageFromRenderIds(render_process_id, render_frame_routing_id);
515 516
516 if (save_package && save_package->id() == save_package_id) 517 if (save_package && save_package->id() == save_package_id)
517 save_package->Finish(); 518 save_package->Finish();
518 } 519 }
519 520
520 void SaveFileManager::RemoveSavedFileFromFileMap( 521 void SaveFileManager::RemoveSavedFileFromFileMap(
521 const SaveIDList& save_ids) { 522 const SaveIDList& save_ids) {
522 DCHECK_CURRENTLY_ON(BrowserThread::FILE); 523 DCHECK_CURRENTLY_ON(BrowserThread::FILE);
523 524
524 for (SaveIDList::const_iterator i = save_ids.begin(); 525 for (SaveIDList::const_iterator i = save_ids.begin();
525 i != save_ids.end(); ++i) { 526 i != save_ids.end(); ++i) {
526 SaveFileMap::iterator it = save_file_map_.find(*i); 527 SaveFileMap::iterator it = save_file_map_.find(*i);
527 if (it != save_file_map_.end()) { 528 if (it != save_file_map_.end()) {
528 SaveFile* save_file = it->second; 529 SaveFile* save_file = it->second;
529 DCHECK(!save_file->InProgress()); 530 DCHECK(!save_file->InProgress());
530 base::DeleteFile(save_file->FullPath(), false); 531 base::DeleteFile(save_file->FullPath(), false);
531 delete save_file; 532 delete save_file;
532 save_file_map_.erase(it); 533 save_file_map_.erase(it);
533 } 534 }
534 } 535 }
535 } 536 }
536 537
537 } // namespace content 538 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/download/save_file_manager.h ('k') | content/browser/download/save_file_resource_handler.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698