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
This commit is contained in:
Marshall Greenblatt 2015-01-12 19:47:40 +00:00
parent ad536f769f
commit 833f762273
6 changed files with 101 additions and 0 deletions

View File

@ -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;

View File

@ -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;
};

View File

@ -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<DownloadManager> manager_;
uint32 download_id_;

View File

@ -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<CefDownloadItemCallbackCppToC, CefDownloadItemCallback,
cef_download_item_callback_t>(cls) {
struct_.struct_.cancel = download_item_callback_cancel;
struct_.struct_.pause = download_item_callback_pause;
struct_.struct_.resume = download_item_callback_resume;
}
#ifndef NDEBUG

View File

@ -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<CefDownloadItemCallbackCToCpp,

View File

@ -34,6 +34,8 @@ class CefDownloadItemCallbackCToCpp
// CefDownloadItemCallback methods
virtual void Cancel() OVERRIDE;
virtual void Pause() OVERRIDE;
virtual void Resume() OVERRIDE;
};
#endif // USING_CEF_SHARED