OLD | NEW |
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 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
136 } | 136 } |
137 | 137 |
138 class DownloadItemFactoryImpl : public DownloadItemFactory { | 138 class DownloadItemFactoryImpl : public DownloadItemFactory { |
139 public: | 139 public: |
140 DownloadItemFactoryImpl() {} | 140 DownloadItemFactoryImpl() {} |
141 virtual ~DownloadItemFactoryImpl() {} | 141 virtual ~DownloadItemFactoryImpl() {} |
142 | 142 |
143 virtual DownloadItemImpl* CreatePersistedItem( | 143 virtual DownloadItemImpl* CreatePersistedItem( |
144 DownloadItemImplDelegate* delegate, | 144 DownloadItemImplDelegate* delegate, |
145 DownloadId download_id, | 145 DownloadId download_id, |
146 const FilePath& path, | 146 const FilePath& current_path, |
147 const GURL& url, | 147 const FilePath& target_path, |
| 148 const std::vector<GURL>& url_chain, |
148 const GURL& referrer_url, | 149 const GURL& referrer_url, |
149 const base::Time& start_time, | 150 const base::Time& start_time, |
150 const base::Time& end_time, | 151 const base::Time& end_time, |
151 int64 received_bytes, | 152 int64 received_bytes, |
152 int64 total_bytes, | 153 int64 total_bytes, |
153 DownloadItem::DownloadState state, | 154 DownloadItem::DownloadState state, |
| 155 DownloadInterruptReason interrupt_reason, |
154 bool opened, | 156 bool opened, |
155 const net::BoundNetLog& bound_net_log) OVERRIDE { | 157 const net::BoundNetLog& bound_net_log) OVERRIDE { |
156 return new DownloadItemImpl( | 158 return new DownloadItemImpl( |
157 delegate, | 159 delegate, |
158 download_id, | 160 download_id, |
159 path, | 161 current_path, |
160 url, | 162 target_path, |
| 163 url_chain, |
161 referrer_url, | 164 referrer_url, |
162 start_time, | 165 start_time, |
163 end_time, | 166 end_time, |
164 received_bytes, | 167 received_bytes, |
165 total_bytes, | 168 total_bytes, |
166 state, | 169 state, |
| 170 interrupt_reason, |
167 opened, | 171 opened, |
168 bound_net_log); | 172 bound_net_log); |
169 } | 173 } |
170 | 174 |
171 virtual DownloadItemImpl* CreateActiveItem( | 175 virtual DownloadItemImpl* CreateActiveItem( |
172 DownloadItemImplDelegate* delegate, | 176 DownloadItemImplDelegate* delegate, |
173 const DownloadCreateInfo& info, | 177 const DownloadCreateInfo& info, |
174 scoped_ptr<DownloadRequestHandleInterface> request_handle, | 178 scoped_ptr<DownloadRequestHandleInterface> request_handle, |
175 const net::BoundNetLog& bound_net_log) OVERRIDE { | 179 const net::BoundNetLog& bound_net_log) OVERRIDE { |
176 return new DownloadItemImpl(delegate, info, request_handle.Pass(), | 180 return new DownloadItemImpl(delegate, info, request_handle.Pass(), |
(...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
345 FilePath website_save_directory; // Unused | 349 FilePath website_save_directory; // Unused |
346 bool skip_dir_check = false; // Unused | 350 bool skip_dir_check = false; // Unused |
347 delegate_->GetSaveDir(GetBrowserContext(), &website_save_directory, | 351 delegate_->GetSaveDir(GetBrowserContext(), &website_save_directory, |
348 &default_download_directory, &skip_dir_check); | 352 &default_download_directory, &skip_dir_check); |
349 } | 353 } |
350 | 354 |
351 // We create the DownloadItem before the DownloadFile because the | 355 // We create the DownloadItem before the DownloadFile because the |
352 // DownloadItem already needs to handle a state in which there is | 356 // DownloadItem already needs to handle a state in which there is |
353 // no associated DownloadFile (history downloads, !IN_PROGRESS downloads) | 357 // no associated DownloadFile (history downloads, !IN_PROGRESS downloads) |
354 DownloadItemImpl* download = | 358 DownloadItemImpl* download = |
355 CreateDownloadItem(info.get(), bound_net_log); | 359 CreateDownloadItemInternal(info.get(), bound_net_log); |
356 scoped_ptr<DownloadFile> download_file( | 360 scoped_ptr<DownloadFile> download_file( |
357 file_factory_->CreateFile( | 361 file_factory_->CreateFile( |
358 info->save_info.Pass(), default_download_directory, | 362 info->save_info.Pass(), default_download_directory, |
359 info->url(), info->referrer_url, | 363 info->url(), info->referrer_url, |
360 delegate_->GenerateFileHash(), | 364 delegate_->GenerateFileHash(), |
361 stream.Pass(), bound_net_log, | 365 stream.Pass(), bound_net_log, |
362 download->DestinationObserverAsWeakPtr())); | 366 download->DestinationObserverAsWeakPtr())); |
363 download->Start(download_file.Pass()); | 367 download->Start(download_file.Pass()); |
364 | 368 |
365 // Delay notification until after Start() so that download_file is bound | 369 // Delay notification until after Start() so that download_file is bound |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
405 void DownloadManagerImpl::OnFileRemovalDetected(int32 download_id) { | 409 void DownloadManagerImpl::OnFileRemovalDetected(int32 download_id) { |
406 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 410 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
407 if (ContainsKey(downloads_, download_id)) | 411 if (ContainsKey(downloads_, download_id)) |
408 downloads_[download_id]->OnDownloadedFileRemoved(); | 412 downloads_[download_id]->OnDownloadedFileRemoved(); |
409 } | 413 } |
410 | 414 |
411 BrowserContext* DownloadManagerImpl::GetBrowserContext() const { | 415 BrowserContext* DownloadManagerImpl::GetBrowserContext() const { |
412 return browser_context_; | 416 return browser_context_; |
413 } | 417 } |
414 | 418 |
415 DownloadItemImpl* DownloadManagerImpl::CreateDownloadItem( | 419 DownloadItemImpl* DownloadManagerImpl::CreateDownloadItemInternal( |
416 DownloadCreateInfo* info, const net::BoundNetLog& bound_net_log) { | 420 DownloadCreateInfo* info, const net::BoundNetLog& bound_net_log) { |
417 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 421 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
418 | 422 |
419 if (!info->download_id.IsValid()) | 423 if (!info->download_id.IsValid()) |
420 info->download_id = GetNextId(); | 424 info->download_id = GetNextId(); |
421 DownloadItemImpl* download = item_factory_->CreateActiveItem( | 425 DownloadItemImpl* download = item_factory_->CreateActiveItem( |
422 this, *info, | 426 this, *info, |
423 scoped_ptr<DownloadRequestHandleInterface>( | 427 scoped_ptr<DownloadRequestHandleInterface>( |
424 new DownloadRequestHandle(info->request_handle)).Pass(), | 428 new DownloadRequestHandle(info->request_handle)).Pass(), |
425 bound_net_log); | 429 bound_net_log); |
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
547 | 551 |
548 void DownloadManagerImpl::AddObserver(Observer* observer) { | 552 void DownloadManagerImpl::AddObserver(Observer* observer) { |
549 observers_.AddObserver(observer); | 553 observers_.AddObserver(observer); |
550 } | 554 } |
551 | 555 |
552 void DownloadManagerImpl::RemoveObserver(Observer* observer) { | 556 void DownloadManagerImpl::RemoveObserver(Observer* observer) { |
553 observers_.RemoveObserver(observer); | 557 observers_.RemoveObserver(observer); |
554 } | 558 } |
555 | 559 |
556 DownloadItem* DownloadManagerImpl::CreateDownloadItem( | 560 DownloadItem* DownloadManagerImpl::CreateDownloadItem( |
557 const FilePath& path, | 561 const FilePath& current_path, |
558 const GURL& url, | 562 const FilePath& target_path, |
| 563 const std::vector<GURL>& url_chain, |
559 const GURL& referrer_url, | 564 const GURL& referrer_url, |
560 const base::Time& start_time, | 565 const base::Time& start_time, |
561 const base::Time& end_time, | 566 const base::Time& end_time, |
562 int64 received_bytes, | 567 int64 received_bytes, |
563 int64 total_bytes, | 568 int64 total_bytes, |
564 DownloadItem::DownloadState state, | 569 DownloadItem::DownloadState state, |
| 570 DownloadInterruptReason interrupt_reason, |
565 bool opened) { | 571 bool opened) { |
566 DownloadItemImpl* item = item_factory_->CreatePersistedItem( | 572 DownloadItemImpl* item = item_factory_->CreatePersistedItem( |
567 this, | 573 this, |
568 GetNextId(), | 574 GetNextId(), |
569 path, | 575 current_path, |
570 url, | 576 target_path, |
| 577 url_chain, |
571 referrer_url, | 578 referrer_url, |
572 start_time, | 579 start_time, |
573 end_time, | 580 end_time, |
574 received_bytes, | 581 received_bytes, |
575 total_bytes, | 582 total_bytes, |
576 state, | 583 state, |
| 584 interrupt_reason, |
577 opened, | 585 opened, |
578 net::BoundNetLog::Make(net_log_, net::NetLog::SOURCE_DOWNLOAD)); | 586 net::BoundNetLog::Make(net_log_, net::NetLog::SOURCE_DOWNLOAD)); |
579 DCHECK(!ContainsKey(downloads_, item->GetId())); | 587 DCHECK(!ContainsKey(downloads_, item->GetId())); |
580 downloads_[item->GetId()] = item; | 588 downloads_[item->GetId()] = item; |
581 FOR_EACH_OBSERVER(Observer, observers_, OnDownloadCreated(this, item)); | 589 FOR_EACH_OBSERVER(Observer, observers_, OnDownloadCreated(this, item)); |
582 VLOG(20) << __FUNCTION__ << "() download = " << item->DebugString(true); | 590 VLOG(20) << __FUNCTION__ << "() download = " << item->DebugString(true); |
583 return item; | 591 return item; |
584 } | 592 } |
585 | 593 |
586 // TODO(asanka) Move into an observer. | 594 // TODO(asanka) Move into an observer. |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
625 it != downloads_.end(); ++it) { | 633 it != downloads_.end(); ++it) { |
626 DownloadItemImpl* item = it->second; | 634 DownloadItemImpl* item = it->second; |
627 if (item->IsComplete() && | 635 if (item->IsComplete() && |
628 !item->GetOpened()) | 636 !item->GetOpened()) |
629 ++num_unopened; | 637 ++num_unopened; |
630 } | 638 } |
631 RecordOpensOutstanding(num_unopened); | 639 RecordOpensOutstanding(num_unopened); |
632 } | 640 } |
633 | 641 |
634 } // namespace content | 642 } // namespace content |
OLD | NEW |