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

Side by Side Diff: chrome/browser/safe_browsing/incident_reporting/download_metadata_manager.cc

Issue 1551503002: Convert Pass()→std::move() in //chrome (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 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
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 "chrome/browser/safe_browsing/incident_reporting/download_metadata_mana ger.h" 5 #include "chrome/browser/safe_browsing/incident_reporting/download_metadata_mana ger.h"
6 6
7 #include <limits.h> 7 #include <limits.h>
8 #include <stdint.h> 8 #include <stdint.h>
9
10 #include <list> 9 #include <list>
10 #include <utility>
11 11
12 #include "base/bind.h" 12 #include "base/bind.h"
13 #include "base/callback.h" 13 #include "base/callback.h"
14 #include "base/files/file.h" 14 #include "base/files/file.h"
15 #include "base/files/file_util.h" 15 #include "base/files/file_util.h"
16 #include "base/files/important_file_writer.h" 16 #include "base/files/important_file_writer.h"
17 #include "base/location.h" 17 #include "base/location.h"
18 #include "base/macros.h" 18 #include "base/macros.h"
19 #include "base/metrics/histogram.h" 19 #include "base/metrics/histogram.h"
20 #include "base/sequenced_task_runner.h" 20 #include "base/sequenced_task_runner.h"
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
65 65
66 // Returns the ClientDownloadRequest for a download or null if there is none. 66 // Returns the ClientDownloadRequest for a download or null if there is none.
67 static scoped_ptr<ClientDownloadRequest> TakeRequestForDownload( 67 static scoped_ptr<ClientDownloadRequest> TakeRequestForDownload(
68 content::DownloadItem* item); 68 content::DownloadItem* item);
69 69
70 private: 70 private:
71 // A unique id for associating metadata with a content::DownloadItem. 71 // A unique id for associating metadata with a content::DownloadItem.
72 static const void* const kKey_; 72 static const void* const kKey_;
73 73
74 explicit DownloadItemData(scoped_ptr<ClientDownloadRequest> request) 74 explicit DownloadItemData(scoped_ptr<ClientDownloadRequest> request)
75 : request_(request.Pass()) {} 75 : request_(std::move(request)) {}
76 ~DownloadItemData() override {} 76 ~DownloadItemData() override {}
77 77
78 scoped_ptr<ClientDownloadRequest> request_; 78 scoped_ptr<ClientDownloadRequest> request_;
79 79
80 DISALLOW_COPY_AND_ASSIGN(DownloadItemData); 80 DISALLOW_COPY_AND_ASSIGN(DownloadItemData);
81 }; 81 };
82 82
83 // Make the key's value unique by setting it to its own location. 83 // Make the key's value unique by setting it to its own location.
84 // static 84 // static
85 const void* const DownloadItemData::kKey_ = &DownloadItemData::kKey_; 85 const void* const DownloadItemData::kKey_ = &DownloadItemData::kKey_;
86 86
87 // static 87 // static
88 void DownloadItemData::SetRequestForDownload( 88 void DownloadItemData::SetRequestForDownload(
89 content::DownloadItem* item, 89 content::DownloadItem* item,
90 scoped_ptr<ClientDownloadRequest> request) { 90 scoped_ptr<ClientDownloadRequest> request) {
91 item->SetUserData(&kKey_, new DownloadItemData(request.Pass())); 91 item->SetUserData(&kKey_, new DownloadItemData(std::move(request)));
92 } 92 }
93 93
94 // static 94 // static
95 scoped_ptr<ClientDownloadRequest> DownloadItemData::TakeRequestForDownload( 95 scoped_ptr<ClientDownloadRequest> DownloadItemData::TakeRequestForDownload(
96 content::DownloadItem* item) { 96 content::DownloadItem* item) {
97 DownloadItemData* data = 97 DownloadItemData* data =
98 static_cast<DownloadItemData*>(item->GetUserData(&kKey_)); 98 static_cast<DownloadItemData*>(item->GetUserData(&kKey_));
99 if (!data) 99 if (!data)
100 return nullptr; 100 return nullptr;
101 scoped_ptr<ClientDownloadRequest> request = data->request_.Pass(); 101 scoped_ptr<ClientDownloadRequest> request = std::move(data->request_);
102 item->RemoveUserData(&kKey_); 102 item->RemoveUserData(&kKey_);
103 return request.Pass(); 103 return request;
104 } 104 }
105 105
106 106
107 // Utility functions------------------------------------------------------------ 107 // Utility functions------------------------------------------------------------
108 108
109 // Returns the path to the metadata file for |browser_context|. 109 // Returns the path to the metadata file for |browser_context|.
110 base::FilePath GetMetadataPath(content::BrowserContext* browser_context) { 110 base::FilePath GetMetadataPath(content::BrowserContext* browser_context) {
111 return browser_context->GetPath().Append(kDownloadMetadataBasename); 111 return browser_context->GetPath().Append(kDownloadMetadataBasename);
112 } 112 }
113 113
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
183 UMA_HISTOGRAM_BOOLEAN("SBIRS.DownloadMetadata.DeleteSuccess", success); 183 UMA_HISTOGRAM_BOOLEAN("SBIRS.DownloadMetadata.DeleteSuccess", success);
184 } 184 }
185 185
186 // Runs |callback| with the DownloadDetails in |download_metadata|. 186 // Runs |callback| with the DownloadDetails in |download_metadata|.
187 void ReturnResults( 187 void ReturnResults(
188 const DownloadMetadataManager::GetDownloadDetailsCallback& callback, 188 const DownloadMetadataManager::GetDownloadDetailsCallback& callback,
189 scoped_ptr<DownloadMetadata> download_metadata) { 189 scoped_ptr<DownloadMetadata> download_metadata) {
190 if (!download_metadata->has_download_id()) 190 if (!download_metadata->has_download_id())
191 callback.Run(scoped_ptr<ClientIncidentReport_DownloadDetails>()); 191 callback.Run(scoped_ptr<ClientIncidentReport_DownloadDetails>());
192 else 192 else
193 callback.Run(make_scoped_ptr(download_metadata->release_download()).Pass()); 193 callback.Run(make_scoped_ptr(download_metadata->release_download()));
194 } 194 }
195 195
196 } // namespace 196 } // namespace
197 197
198 // Applies operations to the profile's persistent DownloadMetadata as they occur 198 // Applies operations to the profile's persistent DownloadMetadata as they occur
199 // on its corresponding download item. An instance can be in one of three 199 // on its corresponding download item. An instance can be in one of three
200 // states: waiting for metatada load, waiting for metadata to load after its 200 // states: waiting for metatada load, waiting for metadata to load after its
201 // corresponding DownloadManager has gone down, and not waiting for metadata to 201 // corresponding DownloadManager has gone down, and not waiting for metadata to
202 // load. The instance observes all download items beloing to its manager. While 202 // load. The instance observes all download items beloing to its manager. While
203 // it is waiting for metadata to load, it records all operations on download 203 // it is waiting for metadata to load, it records all operations on download
(...skipping 271 matching lines...) Expand 10 before | Expand all | Expand 10 after
475 download->AddObserver(this); 475 download->AddObserver(this);
476 } 476 }
477 477
478 void DownloadMetadataManager::ManagerContext::SetRequest( 478 void DownloadMetadataManager::ManagerContext::SetRequest(
479 content::DownloadItem* download, 479 content::DownloadItem* download,
480 scoped_ptr<ClientDownloadRequest> request) { 480 scoped_ptr<ClientDownloadRequest> request) {
481 DCHECK(request); 481 DCHECK(request);
482 // Hold on to the request for completion time if the download is in progress. 482 // Hold on to the request for completion time if the download is in progress.
483 // Otherwise, commit the request. 483 // Otherwise, commit the request.
484 if (download->GetState() == content::DownloadItem::IN_PROGRESS) 484 if (download->GetState() == content::DownloadItem::IN_PROGRESS)
485 DownloadItemData::SetRequestForDownload(download, request.Pass()); 485 DownloadItemData::SetRequestForDownload(download, std::move(request));
486 else 486 else
487 CommitRequest(download, request.Pass()); 487 CommitRequest(download, std::move(request));
488 } 488 }
489 489
490 void DownloadMetadataManager::ManagerContext::GetDownloadDetails( 490 void DownloadMetadataManager::ManagerContext::GetDownloadDetails(
491 const GetDownloadDetailsCallback& callback) { 491 const GetDownloadDetailsCallback& callback) {
492 if (state_ != LOAD_COMPLETE) { 492 if (state_ != LOAD_COMPLETE) {
493 get_details_callbacks_.push_back(callback); 493 get_details_callbacks_.push_back(callback);
494 } else { 494 } else {
495 callback.Run(download_metadata_ ? 495 callback.Run(download_metadata_ ?
496 make_scoped_ptr(new ClientIncidentReport_DownloadDetails( 496 make_scoped_ptr(new ClientIncidentReport_DownloadDetails(
497 download_metadata_->download())) : 497 download_metadata_->download())) :
498 nullptr); 498 nullptr);
499 } 499 }
500 } 500 }
501 501
502 void DownloadMetadataManager::ManagerContext::OnDownloadUpdated( 502 void DownloadMetadataManager::ManagerContext::OnDownloadUpdated(
503 content::DownloadItem* download) { 503 content::DownloadItem* download) {
504 // Persist metadata for this download if it has just completed. 504 // Persist metadata for this download if it has just completed.
505 if (download->GetState() == content::DownloadItem::COMPLETE) { 505 if (download->GetState() == content::DownloadItem::COMPLETE) {
506 // Ignore downloads we don't have a ClientDownloadRequest for. 506 // Ignore downloads we don't have a ClientDownloadRequest for.
507 scoped_ptr<ClientDownloadRequest> request = 507 scoped_ptr<ClientDownloadRequest> request =
508 DownloadItemData::TakeRequestForDownload(download); 508 DownloadItemData::TakeRequestForDownload(download);
509 if (request) 509 if (request)
510 CommitRequest(download, request.Pass()); 510 CommitRequest(download, std::move(request));
511 } 511 }
512 } 512 }
513 513
514 void DownloadMetadataManager::ManagerContext::OnDownloadOpened( 514 void DownloadMetadataManager::ManagerContext::OnDownloadOpened(
515 content::DownloadItem* download) { 515 content::DownloadItem* download) {
516 const base::Time now = base::Time::Now(); 516 const base::Time now = base::Time::Now();
517 if (state_ != LOAD_COMPLETE) 517 if (state_ != LOAD_COMPLETE)
518 pending_items_[download->GetId()].last_opened_time = now; 518 pending_items_[download->GetId()].last_opened_time = now;
519 else if (HasMetadataFor(download)) 519 else if (HasMetadataFor(download))
520 UpdateLastOpenedTime(now); 520 UpdateLastOpenedTime(now);
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
620 620
621 void DownloadMetadataManager::ManagerContext::OnMetadataReady( 621 void DownloadMetadataManager::ManagerContext::OnMetadataReady(
622 scoped_ptr<DownloadMetadata> download_metadata) { 622 scoped_ptr<DownloadMetadata> download_metadata) {
623 DCHECK_NE(state_, LOAD_COMPLETE); 623 DCHECK_NE(state_, LOAD_COMPLETE);
624 624
625 const bool is_detached = (state_ == DETACHED_WAIT); 625 const bool is_detached = (state_ == DETACHED_WAIT);
626 626
627 // Note that any available data has been read. 627 // Note that any available data has been read.
628 state_ = LOAD_COMPLETE; 628 state_ = LOAD_COMPLETE;
629 if (download_metadata->has_download_id()) 629 if (download_metadata->has_download_id())
630 download_metadata_ = download_metadata.Pass(); 630 download_metadata_ = std::move(download_metadata);
631 else 631 else
632 download_metadata_.reset(); 632 download_metadata_.reset();
633 633
634 // Process all operations that had been held while waiting for the metadata. 634 // Process all operations that had been held while waiting for the metadata.
635 if (download_metadata_) { 635 if (download_metadata_) {
636 const auto& iter = pending_items_.find(download_metadata_->download_id()); 636 const auto& iter = pending_items_.find(download_metadata_->download_id());
637 if (iter != pending_items_.end()) { 637 if (iter != pending_items_.end()) {
638 const ItemData& item_data = iter->second; 638 const ItemData& item_data = iter->second;
639 if (item_data.removed) 639 if (item_data.removed)
640 RemoveMetadata(); 640 RemoveMetadata();
(...skipping 14 matching lines...) Expand all
655 } 655 }
656 656
657 void DownloadMetadataManager::ManagerContext::UpdateLastOpenedTime( 657 void DownloadMetadataManager::ManagerContext::UpdateLastOpenedTime(
658 const base::Time& last_opened_time) { 658 const base::Time& last_opened_time) {
659 download_metadata_->mutable_download()->set_open_time_msec( 659 download_metadata_->mutable_download()->set_open_time_msec(
660 last_opened_time.ToJavaTime()); 660 last_opened_time.ToJavaTime());
661 WriteMetadata(); 661 WriteMetadata();
662 } 662 }
663 663
664 } // namespace safe_browsing 664 } // namespace safe_browsing
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698