From 833f7622731190d21d660b3d0509752e0b17dc1f Mon Sep 17 00:00:00 2001 From: Marshall Greenblatt Date: Mon, 12 Jan 2015 19:47:40 +0000 Subject: [PATCH] Add the ability to Pause/Resume downloads via new CefDownloadItemCallback methods (issue #1425). git-svn-id: https://chromiumembedded.googlecode.com/svn/trunk@1966 5089003a-bbd8-11dd-ad1f-f1f9622dbc98 --- include/capi/cef_download_handler_capi.h | 10 ++++++ include/cef_download_handler.h | 12 +++++++ libcef/browser/download_manager_delegate.cc | 31 +++++++++++++++++++ .../cpptoc/download_item_callback_cpptoc.cc | 26 ++++++++++++++++ .../ctocpp/download_item_callback_ctocpp.cc | 20 ++++++++++++ .../ctocpp/download_item_callback_ctocpp.h | 2 ++ 6 files changed, 101 insertions(+) diff --git a/include/capi/cef_download_handler_capi.h b/include/capi/cef_download_handler_capi.h index 7793db96d..6acf4fafa 100644 --- a/include/capi/cef_download_handler_capi.h +++ b/include/capi/cef_download_handler_capi.h @@ -80,6 +80,16 @@ typedef struct _cef_download_item_callback_t { // Call to cancel the download. /// void (CEF_CALLBACK *cancel)(struct _cef_download_item_callback_t* self); + + /// + // Call to pause the download. + /// + void (CEF_CALLBACK *pause)(struct _cef_download_item_callback_t* self); + + /// + // Call to resume the download. + /// + void (CEF_CALLBACK *resume)(struct _cef_download_item_callback_t* self); } cef_download_item_callback_t; diff --git a/include/cef_download_handler.h b/include/cef_download_handler.h index f7c26b3cd..4f58af485 100644 --- a/include/cef_download_handler.h +++ b/include/cef_download_handler.h @@ -71,6 +71,18 @@ class CefDownloadItemCallback : public virtual CefBase { /// /*--cef()--*/ virtual void Cancel() =0; + + /// + // Call to pause the download. + /// + /*--cef()--*/ + virtual void Pause() =0; + + /// + // Call to resume the download. + /// + /*--cef()--*/ + virtual void Resume() =0; }; diff --git a/libcef/browser/download_manager_delegate.cc b/libcef/browser/download_manager_delegate.cc index 7ef38acf8..753b919d9 100644 --- a/libcef/browser/download_manager_delegate.cc +++ b/libcef/browser/download_manager_delegate.cc @@ -208,6 +208,15 @@ class CefDownloadItemCallbackImpl : public CefDownloadItemCallback { base::Bind(&CefDownloadItemCallbackImpl::DoCancel, this)); } + void Pause() override { + CEF_POST_TASK(CEF_UIT, + base::Bind(&CefDownloadItemCallbackImpl::DoPause, this)); + } + + void Resume() override { + CEF_POST_TASK(CEF_UIT, + base::Bind(&CefDownloadItemCallbackImpl::DoResume, this)); + } private: void DoCancel() { if (download_id_ <= 0) @@ -222,6 +231,28 @@ class CefDownloadItemCallbackImpl : public CefDownloadItemCallback { download_id_ = 0; } + void DoPause() { + if (download_id_ <= 0) + return; + + if (manager_) { + DownloadItem* item = manager_->GetDownload(download_id_); + if (item && item->GetState() == content::DownloadItem::IN_PROGRESS) + item->Pause(); + } + } + + void DoResume() { + if (download_id_ <= 0) + return; + + if (manager_) { + DownloadItem* item = manager_->GetDownload(download_id_); + if (item && item->CanResume()) + item->Resume(); + } + } + base::WeakPtr manager_; uint32 download_id_; diff --git a/libcef_dll/cpptoc/download_item_callback_cpptoc.cc b/libcef_dll/cpptoc/download_item_callback_cpptoc.cc index b4e193514..b62d476a5 100644 --- a/libcef_dll/cpptoc/download_item_callback_cpptoc.cc +++ b/libcef_dll/cpptoc/download_item_callback_cpptoc.cc @@ -27,6 +27,30 @@ void CEF_CALLBACK download_item_callback_cancel( CefDownloadItemCallbackCppToC::Get(self)->Cancel(); } +void CEF_CALLBACK download_item_callback_pause( + struct _cef_download_item_callback_t* self) { + // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING + + DCHECK(self); + if (!self) + return; + + // Execute + CefDownloadItemCallbackCppToC::Get(self)->Pause(); +} + +void CEF_CALLBACK download_item_callback_resume( + struct _cef_download_item_callback_t* self) { + // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING + + DCHECK(self); + if (!self) + return; + + // Execute + CefDownloadItemCallbackCppToC::Get(self)->Resume(); +} + // CONSTRUCTOR - Do not edit by hand. @@ -35,6 +59,8 @@ CefDownloadItemCallbackCppToC::CefDownloadItemCallbackCppToC( : CefCppToC(cls) { struct_.struct_.cancel = download_item_callback_cancel; + struct_.struct_.pause = download_item_callback_pause; + struct_.struct_.resume = download_item_callback_resume; } #ifndef NDEBUG diff --git a/libcef_dll/ctocpp/download_item_callback_ctocpp.cc b/libcef_dll/ctocpp/download_item_callback_ctocpp.cc index 8197173d0..e219bbee1 100644 --- a/libcef_dll/ctocpp/download_item_callback_ctocpp.cc +++ b/libcef_dll/ctocpp/download_item_callback_ctocpp.cc @@ -25,6 +25,26 @@ void CefDownloadItemCallbackCToCpp::Cancel() { struct_->cancel(struct_); } +void CefDownloadItemCallbackCToCpp::Pause() { + if (CEF_MEMBER_MISSING(struct_, pause)) + return; + + // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING + + // Execute + struct_->pause(struct_); +} + +void CefDownloadItemCallbackCToCpp::Resume() { + if (CEF_MEMBER_MISSING(struct_, resume)) + return; + + // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING + + // Execute + struct_->resume(struct_); +} + #ifndef NDEBUG template<> base::AtomicRefCount CefCToCpp