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

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

Issue 1251243003: Support restricting browsing data removal for downloads by origin. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@lkgr
Patch Set: Remove unneeded DCHECK; Initialize and clear download URLs along test fixture life cycle. Created 5 years, 4 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 (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/browser/download/download_manager_impl.h" 5 #include "content/browser/download/download_manager_impl.h"
6 6
7 #include <iterator> 7 #include <iterator>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/callback.h" 10 #include "base/callback.h"
(...skipping 26 matching lines...) Expand all
37 #include "content/public/browser/notification_types.h" 37 #include "content/public/browser/notification_types.h"
38 #include "content/public/browser/render_process_host.h" 38 #include "content/public/browser/render_process_host.h"
39 #include "content/public/browser/resource_context.h" 39 #include "content/public/browser/resource_context.h"
40 #include "content/public/browser/web_contents_delegate.h" 40 #include "content/public/browser/web_contents_delegate.h"
41 #include "content/public/common/referrer.h" 41 #include "content/public/common/referrer.h"
42 #include "net/base/elements_upload_data_stream.h" 42 #include "net/base/elements_upload_data_stream.h"
43 #include "net/base/load_flags.h" 43 #include "net/base/load_flags.h"
44 #include "net/base/request_priority.h" 44 #include "net/base/request_priority.h"
45 #include "net/base/upload_bytes_element_reader.h" 45 #include "net/base/upload_bytes_element_reader.h"
46 #include "net/url_request/url_request_context.h" 46 #include "net/url_request/url_request_context.h"
47 #include "url/origin.h"
47 48
48 namespace content { 49 namespace content {
49 namespace { 50 namespace {
50 51
51 void BeginDownload(scoped_ptr<DownloadUrlParameters> params, 52 void BeginDownload(scoped_ptr<DownloadUrlParameters> params,
52 uint32 download_id) { 53 uint32 download_id) {
53 DCHECK_CURRENTLY_ON(BrowserThread::IO); 54 DCHECK_CURRENTLY_ON(BrowserThread::IO);
54 // ResourceDispatcherHost{Base} is-not-a URLRequest::Delegate, and 55 // ResourceDispatcherHost{Base} is-not-a URLRequest::Delegate, and
55 // DownloadUrlParameters can-not include resource_dispatcher_host_impl.h, so 56 // DownloadUrlParameters can-not include resource_dispatcher_host_impl.h, so
56 // we must down cast. RDHI is the only subclass of RDH as of 2012 May 4. 57 // we must down cast. RDHI is the only subclass of RDH as of 2012 May 4.
(...skipping 501 matching lines...) Expand 10 before | Expand all | Expand 10 after
558 void DownloadManagerImpl::DownloadRemoved(DownloadItemImpl* download) { 559 void DownloadManagerImpl::DownloadRemoved(DownloadItemImpl* download) {
559 if (!download) 560 if (!download)
560 return; 561 return;
561 562
562 uint32 download_id = download->GetId(); 563 uint32 download_id = download->GetId();
563 if (downloads_.erase(download_id) == 0) 564 if (downloads_.erase(download_id) == 0)
564 return; 565 return;
565 delete download; 566 delete download;
566 } 567 }
567 568
568 int DownloadManagerImpl::RemoveDownloadsBetween(base::Time remove_begin, 569 namespace {
569 base::Time remove_end) { 570
571 bool RemoveDownloadBetween(base::Time remove_begin,
572 base::Time remove_end,
573 const DownloadItemImpl* download_item) {
574 return download_item->GetStartTime() >= remove_begin &&
575 (remove_end.is_null() || download_item->GetStartTime() < remove_end);
576 }
577
578 bool RemoveDownloadByOriginAndTime(const url::Origin& origin,
579 base::Time remove_begin,
580 base::Time remove_end,
581 const DownloadItemImpl* download_item) {
582 return origin.IsSameOriginWith(url::Origin(download_item->GetURL())) &&
583 RemoveDownloadBetween(remove_begin, remove_end, download_item);
584 }
585
586 } // namespace
587
588 int DownloadManagerImpl::RemoveDownloads(const DownloadRemover& remover) {
570 int count = 0; 589 int count = 0;
571 DownloadMap::const_iterator it = downloads_.begin(); 590 DownloadMap::const_iterator it = downloads_.begin();
572 while (it != downloads_.end()) { 591 while (it != downloads_.end()) {
573 DownloadItemImpl* download = it->second; 592 DownloadItemImpl* download = it->second;
574 593
575 // Increment done here to protect against invalidation below. 594 // Increment done here to protect against invalidation below.
576 ++it; 595 ++it;
577 596
578 if (download->GetStartTime() >= remove_begin && 597 if (download->GetState() != DownloadItem::IN_PROGRESS &&
579 (remove_end.is_null() || download->GetStartTime() < remove_end) && 598 remover.Run(download)) {
580 (download->GetState() != DownloadItem::IN_PROGRESS)) {
581 // Erases the download from downloads_.
582 download->Remove(); 599 download->Remove();
583 count++; 600 count++;
584 } 601 }
585 } 602 }
586 return count; 603 return count;
587 } 604 }
588 605
606 int DownloadManagerImpl::RemoveDownloadsByOriginAndTime(
607 const url::Origin& origin,
608 base::Time remove_begin,
609 base::Time remove_end) {
610 return RemoveDownloads(base::Bind(&RemoveDownloadByOriginAndTime,
611 base::ConstRef(origin), remove_begin,
612 remove_end));
613 }
614
615 int DownloadManagerImpl::RemoveDownloadsBetween(base::Time remove_begin,
616 base::Time remove_end) {
617 return RemoveDownloads(
618 base::Bind(&RemoveDownloadBetween, remove_begin, remove_end));
619 }
620
589 int DownloadManagerImpl::RemoveDownloads(base::Time remove_begin) { 621 int DownloadManagerImpl::RemoveDownloads(base::Time remove_begin) {
590 return RemoveDownloadsBetween(remove_begin, base::Time()); 622 return RemoveDownloadsBetween(remove_begin, base::Time());
591 } 623 }
592 624
593 int DownloadManagerImpl::RemoveAllDownloads() { 625 int DownloadManagerImpl::RemoveAllDownloads() {
594 // The null times make the date range unbounded. 626 // The null times make the date range unbounded.
595 int num_deleted = RemoveDownloadsBetween(base::Time(), base::Time()); 627 int num_deleted = RemoveDownloadsBetween(base::Time(), base::Time());
596 RecordClearAllSize(num_deleted); 628 RecordClearAllSize(num_deleted);
597 return num_deleted; 629 return num_deleted;
598 } 630 }
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after
716 if (delegate_) 748 if (delegate_)
717 delegate_->OpenDownload(download); 749 delegate_->OpenDownload(download);
718 } 750 }
719 751
720 void DownloadManagerImpl::ShowDownloadInShell(DownloadItemImpl* download) { 752 void DownloadManagerImpl::ShowDownloadInShell(DownloadItemImpl* download) {
721 if (delegate_) 753 if (delegate_)
722 delegate_->ShowDownloadInShell(download); 754 delegate_->ShowDownloadInShell(download);
723 } 755 }
724 756
725 } // namespace content 757 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/download/download_manager_impl.h ('k') | content/browser/download/download_manager_impl_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698