mirror of
https://bitbucket.org/chromiumembedded/cef
synced 2025-06-05 21:39:12 +02:00
Update to Chromium revision 149431.
git-svn-id: https://chromiumembedded.googlecode.com/svn/trunk@730 5089003a-bbd8-11dd-ad1f-f1f9622dbc98
This commit is contained in:
@@ -58,9 +58,11 @@ scoped_refptr<content::DownloadManager> GetDownloadManager() {
|
||||
class CefBeforeDownloadCallbackImpl : public CefBeforeDownloadCallback {
|
||||
public:
|
||||
CefBeforeDownloadCallbackImpl(int32 download_id,
|
||||
const FilePath& suggested_name)
|
||||
const FilePath& suggested_name,
|
||||
const content::DownloadTargetCallback& callback)
|
||||
: download_id_(download_id),
|
||||
suggested_name_(suggested_name) {
|
||||
suggested_name_(suggested_name),
|
||||
callback_(callback) {
|
||||
}
|
||||
|
||||
virtual void Continue(const CefString& download_path,
|
||||
@@ -74,10 +76,12 @@ class CefBeforeDownloadCallbackImpl : public CefBeforeDownloadCallback {
|
||||
FilePath path = FilePath(download_path);
|
||||
CEF_POST_TASK(CEF_FILET,
|
||||
base::Bind(&CefBeforeDownloadCallbackImpl::GenerateFilename,
|
||||
download_id_, suggested_name_, path, show_dialog));
|
||||
download_id_, suggested_name_, path, show_dialog,
|
||||
callback_));
|
||||
}
|
||||
|
||||
download_id_ = 0;
|
||||
callback_.Reset();
|
||||
} else {
|
||||
CEF_POST_TASK(CEF_UIT,
|
||||
base::Bind(&CefBeforeDownloadCallbackImpl::Continue, this,
|
||||
@@ -86,10 +90,12 @@ class CefBeforeDownloadCallbackImpl : public CefBeforeDownloadCallback {
|
||||
}
|
||||
|
||||
private:
|
||||
static void GenerateFilename(int32 download_id,
|
||||
const FilePath& suggested_name,
|
||||
const FilePath& download_path,
|
||||
bool show_dialog) {
|
||||
static void GenerateFilename(
|
||||
int32 download_id,
|
||||
const FilePath& suggested_name,
|
||||
const FilePath& download_path,
|
||||
bool show_dialog,
|
||||
const content::DownloadTargetCallback& callback) {
|
||||
FilePath suggested_path = download_path;
|
||||
if (!suggested_path.empty()) {
|
||||
// Create the directory if necessary.
|
||||
@@ -111,18 +117,16 @@ class CefBeforeDownloadCallbackImpl : public CefBeforeDownloadCallback {
|
||||
}
|
||||
}
|
||||
|
||||
content::DownloadItem::TargetDisposition disposition = show_dialog ?
|
||||
DownloadItem::TARGET_DISPOSITION_PROMPT :
|
||||
DownloadItem::TARGET_DISPOSITION_OVERWRITE;
|
||||
|
||||
CEF_POST_TASK(CEF_UIT,
|
||||
base::Bind(&CefBeforeDownloadCallbackImpl::RestartDownload,
|
||||
download_id, suggested_path, disposition));
|
||||
base::Bind(&CefBeforeDownloadCallbackImpl::ChooseDownloadPath,
|
||||
download_id, suggested_path, show_dialog, callback));
|
||||
}
|
||||
|
||||
static void RestartDownload(int32 download_id,
|
||||
const FilePath& suggested_path,
|
||||
DownloadItem::TargetDisposition disposition) {
|
||||
static void ChooseDownloadPath(
|
||||
int32 download_id,
|
||||
const FilePath& suggested_path,
|
||||
bool show_dialog,
|
||||
const content::DownloadTargetCallback& callback) {
|
||||
scoped_refptr<content::DownloadManager> manager = GetDownloadManager();
|
||||
if (!manager)
|
||||
return;
|
||||
@@ -131,14 +135,28 @@ class CefBeforeDownloadCallbackImpl : public CefBeforeDownloadCallback {
|
||||
if (!item)
|
||||
return;
|
||||
|
||||
item->OnTargetPathDetermined(suggested_path,
|
||||
disposition,
|
||||
content::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS);
|
||||
manager->RestartDownload(download_id);
|
||||
FilePath result;
|
||||
if (show_dialog) {
|
||||
#if defined(OS_WIN) || defined(OS_MACOSX)
|
||||
WebContents* web_contents = item->GetWebContents();
|
||||
result = CefDownloadManagerDelegate::PlatformChooseDownloadPath(
|
||||
web_contents, suggested_path);
|
||||
#else
|
||||
NOTIMPLEMENTED();
|
||||
#endif
|
||||
} else {
|
||||
result = suggested_path;
|
||||
}
|
||||
|
||||
callback.Run(result,
|
||||
DownloadItem::TARGET_DISPOSITION_OVERWRITE,
|
||||
content::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS,
|
||||
result);
|
||||
}
|
||||
|
||||
int32 download_id_;
|
||||
FilePath suggested_name_;
|
||||
content::DownloadTargetCallback callback_;
|
||||
|
||||
IMPLEMENT_REFCOUNTING(CefBeforeDownloadCallbackImpl);
|
||||
DISALLOW_COPY_AND_ASSIGN(CefBeforeDownloadCallbackImpl);
|
||||
@@ -183,20 +201,25 @@ class CefDownloadItemCallbackImpl : public CefDownloadItemCallback {
|
||||
|
||||
|
||||
CefDownloadManagerDelegate::CefDownloadManagerDelegate() {
|
||||
// Balanced in Shutdown();
|
||||
AddRef();
|
||||
}
|
||||
|
||||
CefDownloadManagerDelegate::~CefDownloadManagerDelegate() {
|
||||
}
|
||||
|
||||
bool CefDownloadManagerDelegate::ShouldStartDownload(int32 download_id) {
|
||||
scoped_refptr<content::DownloadManager> manager = GetDownloadManager();
|
||||
DownloadItem* item = manager->GetActiveDownloadItem(download_id);
|
||||
void CefDownloadManagerDelegate::Shutdown() {
|
||||
Release();
|
||||
}
|
||||
|
||||
bool CefDownloadManagerDelegate::DetermineDownloadTarget(
|
||||
content::DownloadItem* item,
|
||||
const content::DownloadTargetCallback& callback) {
|
||||
if (!item->GetForcedFilePath().empty()) {
|
||||
item->OnTargetPathDetermined(
|
||||
item->GetForcedFilePath(),
|
||||
DownloadItem::TARGET_DISPOSITION_OVERWRITE,
|
||||
content::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS);
|
||||
callback.Run(item->GetForcedFilePath(),
|
||||
DownloadItem::TARGET_DISPOSITION_OVERWRITE,
|
||||
content::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS,
|
||||
item->GetForcedFilePath());
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -215,35 +238,17 @@ bool CefDownloadManagerDelegate::ShouldStartDownload(int32 download_id) {
|
||||
"download");
|
||||
|
||||
CefRefPtr<CefDownloadItemImpl> download_item(new CefDownloadItemImpl(item));
|
||||
CefRefPtr<CefBeforeDownloadCallback> callback(
|
||||
new CefBeforeDownloadCallbackImpl(download_id, suggested_name));
|
||||
CefRefPtr<CefBeforeDownloadCallback> callbackObj(
|
||||
new CefBeforeDownloadCallbackImpl(item->GetId(), suggested_name,
|
||||
callback));
|
||||
|
||||
handler->OnBeforeDownload(browser.get(), download_item.get(),
|
||||
suggested_name.value(), callback);
|
||||
suggested_name.value(), callbackObj);
|
||||
|
||||
download_item->Detach(NULL);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
void CefDownloadManagerDelegate::ChooseDownloadPath(
|
||||
content::DownloadItem* item) {
|
||||
FilePath result;
|
||||
#if defined(OS_WIN) || defined(OS_MACOSX)
|
||||
WebContents* web_contents = item->GetWebContents();
|
||||
const FilePath suggested_path(item->GetTargetFilePath());
|
||||
result = PlatformChooseDownloadPath(web_contents, suggested_path);
|
||||
#else
|
||||
NOTIMPLEMENTED();
|
||||
#endif
|
||||
|
||||
scoped_refptr<content::DownloadManager> manager = GetDownloadManager();
|
||||
if (result.empty()) {
|
||||
manager->FileSelectionCanceled(item->GetId());
|
||||
} else {
|
||||
manager->FileSelected(result, item->GetId());
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
void CefDownloadManagerDelegate::AddItemToPersistentStore(
|
||||
|
Reference in New Issue
Block a user