Implement session.setOpenDownloadDialog() API.
This commit is contained in:
parent
e30dd943db
commit
87b9b0bc31
4 changed files with 31 additions and 9 deletions
|
@ -9,6 +9,7 @@
|
||||||
|
|
||||||
#include "atom/browser/api/atom_api_cookies.h"
|
#include "atom/browser/api/atom_api_cookies.h"
|
||||||
#include "atom/browser/atom_browser_context.h"
|
#include "atom/browser/atom_browser_context.h"
|
||||||
|
#include "atom/browser/atom_download_manager_delegate.h"
|
||||||
#include "atom/browser/api/atom_api_web_contents.h"
|
#include "atom/browser/api/atom_api_web_contents.h"
|
||||||
#include "atom/common/native_mate_converters/callback.h"
|
#include "atom/common/native_mate_converters/callback.h"
|
||||||
#include "atom/common/native_mate_converters/gurl_converter.h"
|
#include "atom/common/native_mate_converters/gurl_converter.h"
|
||||||
|
@ -245,7 +246,7 @@ Session::~Session() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void Session::OnDownloadCreated(content::DownloadManager* manager,
|
void Session::OnDownloadCreated(content::DownloadManager* manager,
|
||||||
content::DownloadItem* item) {
|
content::DownloadItem* item) {
|
||||||
auto web_contents = item->GetWebContents();
|
auto web_contents = item->GetWebContents();
|
||||||
bool prevent_default = Emit("will-download", item,
|
bool prevent_default = Emit("will-download", item,
|
||||||
api::WebContents::CreateFrom(isolate(),
|
api::WebContents::CreateFrom(isolate(),
|
||||||
|
@ -305,6 +306,13 @@ void Session::SetDownloadPath(const base::FilePath& path) {
|
||||||
prefs::kDownloadDefaultDirectory, path);
|
prefs::kDownloadDefaultDirectory, path);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Session::SetOpenDownloadDialog(bool open_download_dialog) {
|
||||||
|
AtomDownloadManagerDelegate* delegate =
|
||||||
|
static_cast<AtomDownloadManagerDelegate*>(
|
||||||
|
browser_context()->GetDownloadManagerDelegate());
|
||||||
|
delegate->SetOpenDownloadDialog(open_download_dialog);
|
||||||
|
}
|
||||||
|
|
||||||
v8::Local<v8::Value> Session::Cookies(v8::Isolate* isolate) {
|
v8::Local<v8::Value> Session::Cookies(v8::Isolate* isolate) {
|
||||||
if (cookies_.IsEmpty()) {
|
if (cookies_.IsEmpty()) {
|
||||||
auto handle = atom::api::Cookies::Create(isolate, browser_context());
|
auto handle = atom::api::Cookies::Create(isolate, browser_context());
|
||||||
|
@ -321,6 +329,7 @@ mate::ObjectTemplateBuilder Session::GetObjectTemplateBuilder(
|
||||||
.SetMethod("clearStorageData", &Session::ClearStorageData)
|
.SetMethod("clearStorageData", &Session::ClearStorageData)
|
||||||
.SetMethod("setProxy", &Session::SetProxy)
|
.SetMethod("setProxy", &Session::SetProxy)
|
||||||
.SetMethod("setDownloadPath", &Session::SetDownloadPath)
|
.SetMethod("setDownloadPath", &Session::SetDownloadPath)
|
||||||
|
.SetMethod("setOpenDownloadDialog", &Session::SetOpenDownloadDialog)
|
||||||
.SetProperty("cookies", &Session::Cookies);
|
.SetProperty("cookies", &Session::Cookies);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -43,6 +43,8 @@ class Session: public mate::TrackableObject<Session>,
|
||||||
|
|
||||||
AtomBrowserContext* browser_context() const { return browser_context_.get(); }
|
AtomBrowserContext* browser_context() const { return browser_context_.get(); }
|
||||||
|
|
||||||
|
void SetOpenDownloadDialog(bool open_download_dialog);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
explicit Session(AtomBrowserContext* browser_context);
|
explicit Session(AtomBrowserContext* browser_context);
|
||||||
~Session();
|
~Session();
|
||||||
|
|
|
@ -23,7 +23,8 @@ namespace atom {
|
||||||
AtomDownloadManagerDelegate::AtomDownloadManagerDelegate(
|
AtomDownloadManagerDelegate::AtomDownloadManagerDelegate(
|
||||||
content::DownloadManager* manager)
|
content::DownloadManager* manager)
|
||||||
: download_manager_(manager),
|
: download_manager_(manager),
|
||||||
weak_ptr_factory_(this) {}
|
weak_ptr_factory_(this),
|
||||||
|
open_download_dialog_(true) {}
|
||||||
|
|
||||||
AtomDownloadManagerDelegate::~AtomDownloadManagerDelegate() {
|
AtomDownloadManagerDelegate::~AtomDownloadManagerDelegate() {
|
||||||
if (download_manager_) {
|
if (download_manager_) {
|
||||||
|
@ -74,22 +75,30 @@ void AtomDownloadManagerDelegate::OnDownloadPathGenerated(
|
||||||
window = relay->window.get();
|
window = relay->window.get();
|
||||||
|
|
||||||
file_dialog::Filters filters;
|
file_dialog::Filters filters;
|
||||||
base::FilePath path;
|
base::FilePath path = default_path;
|
||||||
if (!file_dialog::ShowSaveDialog(window, item->GetURL().spec(), default_path,
|
if (open_download_dialog_ &&
|
||||||
|
!file_dialog::ShowSaveDialog(window, item->GetURL().spec(), default_path,
|
||||||
filters, &path)) {
|
filters, &path)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Remeber the last selected download directory.
|
if (open_download_dialog_) {
|
||||||
AtomBrowserContext* browser_context = static_cast<AtomBrowserContext*>(
|
// Remeber the last selected download directory.
|
||||||
download_manager_->GetBrowserContext());
|
AtomBrowserContext* browser_context = static_cast<AtomBrowserContext*>(
|
||||||
browser_context->prefs()->SetFilePath(prefs::kDownloadDefaultDirectory,
|
download_manager_->GetBrowserContext());
|
||||||
path.DirName());
|
browser_context->prefs()->SetFilePath(prefs::kDownloadDefaultDirectory,
|
||||||
|
path.DirName());
|
||||||
|
}
|
||||||
callback.Run(path,
|
callback.Run(path,
|
||||||
content::DownloadItem::TARGET_DISPOSITION_PROMPT,
|
content::DownloadItem::TARGET_DISPOSITION_PROMPT,
|
||||||
content::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS, path);
|
content::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS, path);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void AtomDownloadManagerDelegate::SetOpenDownloadDialog(
|
||||||
|
bool open_download_dialog) {
|
||||||
|
open_download_dialog_ = open_download_dialog;
|
||||||
|
}
|
||||||
|
|
||||||
void AtomDownloadManagerDelegate::Shutdown() {
|
void AtomDownloadManagerDelegate::Shutdown() {
|
||||||
weak_ptr_factory_.InvalidateWeakPtrs();
|
weak_ptr_factory_.InvalidateWeakPtrs();
|
||||||
download_manager_ = nullptr;
|
download_manager_ = nullptr;
|
||||||
|
|
|
@ -34,6 +34,7 @@ class AtomDownloadManagerDelegate : public content::DownloadManagerDelegate {
|
||||||
void OnDownloadPathGenerated(uint32 download_id,
|
void OnDownloadPathGenerated(uint32 download_id,
|
||||||
const content::DownloadTargetCallback& callback,
|
const content::DownloadTargetCallback& callback,
|
||||||
const base::FilePath& default_path);
|
const base::FilePath& default_path);
|
||||||
|
void SetOpenDownloadDialog(bool open_download_dialog);
|
||||||
|
|
||||||
// content::DownloadManagerDelegate:
|
// content::DownloadManagerDelegate:
|
||||||
void Shutdown() override;
|
void Shutdown() override;
|
||||||
|
@ -48,6 +49,7 @@ class AtomDownloadManagerDelegate : public content::DownloadManagerDelegate {
|
||||||
private:
|
private:
|
||||||
content::DownloadManager* download_manager_;
|
content::DownloadManager* download_manager_;
|
||||||
base::WeakPtrFactory<AtomDownloadManagerDelegate> weak_ptr_factory_;
|
base::WeakPtrFactory<AtomDownloadManagerDelegate> weak_ptr_factory_;
|
||||||
|
bool open_download_dialog_;
|
||||||
|
|
||||||
DISALLOW_COPY_AND_ASSIGN(AtomDownloadManagerDelegate);
|
DISALLOW_COPY_AND_ASSIGN(AtomDownloadManagerDelegate);
|
||||||
};
|
};
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue