| Index: chrome/browser/download/chrome_download_manager_delegate.cc
|
| diff --git a/chrome/browser/download/chrome_download_manager_delegate.cc b/chrome/browser/download/chrome_download_manager_delegate.cc
|
| index fc95cbf4f129ef68b2e2c50d187f02548b1c81d1..5f8186ffab0d0e3d293e98151ff7be8c6f79d560 100644
|
| --- a/chrome/browser/download/chrome_download_manager_delegate.cc
|
| +++ b/chrome/browser/download/chrome_download_manager_delegate.cc
|
| @@ -20,14 +20,15 @@
|
| #include "chrome/browser/download/download_extensions.h"
|
| #include "chrome/browser/download/download_file_picker.h"
|
| #include "chrome/browser/download/download_history.h"
|
| -#include "chrome/browser/download/download_prefs.h"
|
| #include "chrome/browser/download/download_path_reservation_tracker.h"
|
| +#include "chrome/browser/download/download_prefs.h"
|
| #include "chrome/browser/download/download_status_updater.h"
|
| #include "chrome/browser/download/download_util.h"
|
| #include "chrome/browser/download/save_package_file_picker.h"
|
| #include "chrome/browser/extensions/api/downloads/downloads_api.h"
|
| #include "chrome/browser/extensions/crx_installer.h"
|
| #include "chrome/browser/extensions/extension_service.h"
|
| +#include "chrome/browser/history/history_service_factory.h"
|
| #include "chrome/browser/prefs/pref_member.h"
|
| #include "chrome/browser/prefs/pref_service.h"
|
| #include "chrome/browser/profiles/profile.h"
|
| @@ -39,6 +40,7 @@
|
| #include "chrome/common/pref_names.h"
|
| #include "content/public/browser/download_item.h"
|
| #include "content/public/browser/download_manager.h"
|
| +#include "content/public/browser/download_persistent_store_info.h"
|
| #include "content/public/browser/notification_source.h"
|
| #include "content/public/browser/web_contents.h"
|
| #include "content/public/browser/web_contents_delegate.h"
|
| @@ -118,6 +120,48 @@ void GenerateFileNameFromRequest(const DownloadItem& download_item,
|
| default_file_name);
|
| }
|
|
|
| +class HistoryServiceDownloadAdapter : public HistoryServiceDownloadInterface {
|
| + public:
|
| + explicit HistoryServiceDownloadAdapter(HistoryService* history_service)
|
| + : history_service_(history_service) {
|
| + }
|
| + virtual ~HistoryServiceDownloadAdapter() {}
|
| + virtual void QueryDownloads(
|
| + const HistoryService::DownloadQueryCallback& callback) OVERRIDE {
|
| + history_service_->QueryDownloads(&history_consumer_, callback);
|
| + history_service_->CleanUpInProgressEntries();
|
| + }
|
| + virtual HistoryService::Handle GetVisibleVisitCountToHost(
|
| + const GURL& referrer_url,
|
| + const HistoryService::GetVisibleVisitCountToHostCallback&
|
| + callback) OVERRIDE {
|
| + return history_service_->GetVisibleVisitCountToHost(
|
| + referrer_url, &history_consumer_, callback);
|
| + }
|
| + virtual void CreateDownload(
|
| + int32 id,
|
| + const content::DownloadPersistentStoreInfo& info,
|
| + const HistoryService::DownloadCreateCallback& callback) OVERRIDE {
|
| + history_service_->CreateDownload(id, info, &history_consumer_, callback);
|
| + }
|
| + virtual void UpdateDownload(
|
| + const content::DownloadPersistentStoreInfo& info) OVERRIDE {
|
| + history_service_->UpdateDownload(info);
|
| + }
|
| + virtual void RemoveDownloads(const std::set<int64>& handles) OVERRIDE {
|
| + history_service_->RemoveDownloads(handles);
|
| + }
|
| + virtual void OnDownloadHistoryDestroyed() OVERRIDE {
|
| + delete this;
|
| + }
|
| +
|
| + private:
|
| + CancelableRequestConsumer history_consumer_;
|
| + HistoryService* history_service_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(HistoryServiceDownloadAdapter);
|
| +};
|
| +
|
| } // namespace
|
|
|
| ChromeDownloadManagerDelegate::ChromeDownloadManagerDelegate(Profile* profile)
|
| @@ -131,18 +175,26 @@ ChromeDownloadManagerDelegate::~ChromeDownloadManagerDelegate() {
|
|
|
| void ChromeDownloadManagerDelegate::SetDownloadManager(DownloadManager* dm) {
|
| download_manager_ = dm;
|
| - download_history_.reset(new DownloadHistory(profile_));
|
| - download_history_->Load(
|
| - base::Bind(&DownloadManager::OnPersistentStoreQueryComplete,
|
| - base::Unretained(dm)));
|
| +
|
| #if !defined(OS_ANDROID)
|
| extension_event_router_.reset(new ExtensionDownloadsEventRouter(
|
| profile_, download_manager_));
|
| #endif
|
| +
|
| + if (profile_ == profile_->GetOriginalProfile()) {
|
| + HistoryService* hs = HistoryServiceFactory::GetForProfile(
|
| + profile_, Profile::EXPLICIT_ACCESS);
|
| + if (hs) {
|
| + download_history_.reset(new DownloadHistory(
|
| + download_manager_, new HistoryServiceDownloadAdapter(hs)));
|
| + download_history_->Load(base::Bind(
|
| + &DownloadManager::OnPersistentStoreQueryComplete,
|
| + download_manager_));
|
| + }
|
| + }
|
| }
|
|
|
| void ChromeDownloadManagerDelegate::Shutdown() {
|
| - download_history_.reset();
|
| download_prefs_.reset();
|
| #if !defined(OS_ANDROID)
|
| extension_event_router_.reset();
|
| @@ -252,12 +304,12 @@ bool ChromeDownloadManagerDelegate::ShouldOpenFileBasedOnExtension(
|
| void ChromeDownloadManagerDelegate::DisableSafeBrowsing(DownloadItem* item) {
|
| #if defined(ENABLE_SAFE_BROWSING)
|
| SafeBrowsingState* state = static_cast<SafeBrowsingState*>(
|
| - item->GetExternalData(&safe_browsing_id));
|
| + item->GetUserData(&safe_browsing_id));
|
| DCHECK(!state);
|
| if (!state)
|
| state = new SafeBrowsingState();
|
| state->SetVerdict(DownloadProtectionService::SAFE);
|
| - item->SetExternalData(&safe_browsing_id, state);
|
| + item->SetUserData(&safe_browsing_id, state);
|
| #endif
|
| }
|
|
|
| @@ -266,7 +318,7 @@ bool ChromeDownloadManagerDelegate::IsDownloadReadyForCompletion(
|
| const base::Closure& internal_complete_callback) {
|
| #if defined(ENABLE_SAFE_BROWSING)
|
| SafeBrowsingState* state = static_cast<SafeBrowsingState*>(
|
| - item->GetExternalData(&safe_browsing_id));
|
| + item->GetUserData(&safe_browsing_id));
|
| if (!state) {
|
| // Begin the safe browsing download protection check.
|
| DownloadProtectionService* service = GetDownloadProtectionService();
|
| @@ -275,7 +327,7 @@ bool ChromeDownloadManagerDelegate::IsDownloadReadyForCompletion(
|
| << item->DebugString(false);
|
| state = new SafeBrowsingState();
|
| state->set_callback(internal_complete_callback);
|
| - item->SetExternalData(&safe_browsing_id, state);
|
| + item->SetUserData(&safe_browsing_id, state);
|
| service->CheckClientDownload(
|
| DownloadProtectionService::DownloadInfo::FromDownloadItem(*item),
|
| base::Bind(
|
| @@ -422,35 +474,6 @@ bool ChromeDownloadManagerDelegate::GenerateFileHash() {
|
| #endif
|
| }
|
|
|
| -void ChromeDownloadManagerDelegate::AddItemToPersistentStore(
|
| - DownloadItem* item) {
|
| - download_history_->AddEntry(item,
|
| - base::Bind(&ChromeDownloadManagerDelegate::OnItemAddedToPersistentStore,
|
| - base::Unretained(this)));
|
| -}
|
| -
|
| -void ChromeDownloadManagerDelegate::UpdateItemInPersistentStore(
|
| - DownloadItem* item) {
|
| - download_history_->UpdateEntry(item);
|
| -}
|
| -
|
| -void ChromeDownloadManagerDelegate::UpdatePathForItemInPersistentStore(
|
| - DownloadItem* item,
|
| - const FilePath& new_path) {
|
| - download_history_->UpdateDownloadPath(item, new_path);
|
| -}
|
| -
|
| -void ChromeDownloadManagerDelegate::RemoveItemFromPersistentStore(
|
| - DownloadItem* item) {
|
| - download_history_->RemoveEntry(item);
|
| -}
|
| -
|
| -void ChromeDownloadManagerDelegate::RemoveItemsFromPersistentStoreBetween(
|
| - base::Time remove_begin,
|
| - base::Time remove_end) {
|
| - download_history_->RemoveEntriesBetween(remove_begin, remove_end);
|
| -}
|
| -
|
| void ChromeDownloadManagerDelegate::GetSaveDir(WebContents* web_contents,
|
| FilePath* website_save_dir,
|
| FilePath* download_save_dir,
|
| @@ -609,7 +632,7 @@ void ChromeDownloadManagerDelegate::CheckClientDownloadDone(
|
| }
|
|
|
| SafeBrowsingState* state = static_cast<SafeBrowsingState*>(
|
| - item->GetExternalData(&safe_browsing_id));
|
| + item->GetUserData(&safe_browsing_id));
|
| state->SetVerdict(result);
|
| }
|
|
|
| @@ -815,15 +838,3 @@ void ChromeDownloadManagerDelegate::OnTargetPathDetermined(
|
| }
|
| callback.Run(target_path, disposition, danger_type, intermediate_path);
|
| }
|
| -
|
| -void ChromeDownloadManagerDelegate::OnItemAddedToPersistentStore(
|
| - int32 download_id, int64 db_handle) {
|
| - // It's not immediately obvious, but HistoryBackend::CreateDownload() can
|
| - // call this function with an invalid |db_handle|. For instance, this can
|
| - // happen when the history database is offline. We cannot have multiple
|
| - // DownloadItems with the same invalid db_handle, so we need to assign a
|
| - // unique |db_handle| here.
|
| - if (db_handle == DownloadItem::kUninitializedHandle)
|
| - db_handle = download_history_->GetNextFakeDbHandle();
|
| - download_manager_->OnItemAddedToPersistentStore(download_id, db_handle);
|
| -}
|
|
|