Merge pull request #2340 from atom/set_download_path_api
Implement setDownloadPath API.
This commit is contained in:
commit
898a838ad7
11 changed files with 76 additions and 9 deletions
|
@ -10,8 +10,11 @@
|
||||||
#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/common/native_mate_converters/gurl_converter.h"
|
#include "atom/common/native_mate_converters/gurl_converter.h"
|
||||||
#include "base/thread_task_runner_handle.h"
|
#include "base/files/file_path.h"
|
||||||
|
#include "base/prefs/pref_service.h"
|
||||||
#include "base/strings/string_util.h"
|
#include "base/strings/string_util.h"
|
||||||
|
#include "base/thread_task_runner_handle.h"
|
||||||
|
#include "chrome/common/pref_names.h"
|
||||||
#include "content/public/browser/browser_thread.h"
|
#include "content/public/browser/browser_thread.h"
|
||||||
#include "content/public/browser/storage_partition.h"
|
#include "content/public/browser/storage_partition.h"
|
||||||
#include "native_mate/callback.h"
|
#include "native_mate/callback.h"
|
||||||
|
@ -251,6 +254,11 @@ void Session::SetProxy(const std::string& proxy,
|
||||||
base::Bind(&SetProxyInIO, base::Unretained(getter), proxy, callback));
|
base::Bind(&SetProxyInIO, base::Unretained(getter), proxy, callback));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Session::SetDownloadPath(const std::string& path) {
|
||||||
|
browser_context_->prefs()->SetFilePath(prefs::kDownloadDefaultDirectory,
|
||||||
|
base::FilePath(path));
|
||||||
|
}
|
||||||
|
|
||||||
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_);
|
||||||
|
@ -266,6 +274,7 @@ mate::ObjectTemplateBuilder Session::GetObjectTemplateBuilder(
|
||||||
.SetMethod("clearCache", &Session::ClearCache)
|
.SetMethod("clearCache", &Session::ClearCache)
|
||||||
.SetMethod("clearStorageData", &Session::ClearStorageData)
|
.SetMethod("clearStorageData", &Session::ClearStorageData)
|
||||||
.SetMethod("setProxy", &Session::SetProxy)
|
.SetMethod("setProxy", &Session::SetProxy)
|
||||||
|
.SetMethod("setDownloadPath", &Session::SetDownloadPath)
|
||||||
.SetProperty("cookies", &Session::Cookies);
|
.SetProperty("cookies", &Session::Cookies);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -46,6 +46,7 @@ class Session: public mate::TrackableObject<Session> {
|
||||||
void ClearCache(const net::CompletionCallback& callback);
|
void ClearCache(const net::CompletionCallback& callback);
|
||||||
void ClearStorageData(mate::Arguments* args);
|
void ClearStorageData(mate::Arguments* args);
|
||||||
void SetProxy(const std::string& proxy, const base::Closure& callback);
|
void SetProxy(const std::string& proxy, const base::Closure& callback);
|
||||||
|
void SetDownloadPath(const std::string& path);
|
||||||
v8::Local<v8::Value> Cookies(v8::Isolate* isolate);
|
v8::Local<v8::Value> Cookies(v8::Isolate* isolate);
|
||||||
|
|
||||||
v8::Global<v8::Value> cookies_;
|
v8::Global<v8::Value> cookies_;
|
||||||
|
|
|
@ -15,10 +15,13 @@
|
||||||
#include "atom/common/chrome_version.h"
|
#include "atom/common/chrome_version.h"
|
||||||
#include "atom/common/options_switches.h"
|
#include "atom/common/options_switches.h"
|
||||||
#include "base/command_line.h"
|
#include "base/command_line.h"
|
||||||
|
#include "base/files/file_path.h"
|
||||||
|
#include "base/prefs/pref_registry_simple.h"
|
||||||
#include "base/strings/string_util.h"
|
#include "base/strings/string_util.h"
|
||||||
#include "base/strings/stringprintf.h"
|
#include "base/strings/stringprintf.h"
|
||||||
#include "base/threading/sequenced_worker_pool.h"
|
#include "base/threading/sequenced_worker_pool.h"
|
||||||
#include "base/threading/worker_pool.h"
|
#include "base/threading/worker_pool.h"
|
||||||
|
#include "chrome/common/pref_names.h"
|
||||||
#include "content/public/browser/browser_thread.h"
|
#include "content/public/browser/browser_thread.h"
|
||||||
#include "content/public/common/url_constants.h"
|
#include "content/public/common/url_constants.h"
|
||||||
#include "content/public/common/user_agent.h"
|
#include "content/public/common/user_agent.h"
|
||||||
|
@ -146,4 +149,11 @@ content::BrowserPluginGuestManager* AtomBrowserContext::GetGuestManager() {
|
||||||
return guest_manager_.get();
|
return guest_manager_.get();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void AtomBrowserContext::RegisterPrefs(PrefRegistrySimple* pref_registry) {
|
||||||
|
pref_registry->RegisterFilePathPref(prefs::kSelectFileLastDirectory,
|
||||||
|
base::FilePath());
|
||||||
|
pref_registry->RegisterFilePathPref(prefs::kDownloadDefaultDirectory,
|
||||||
|
base::FilePath());
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace atom
|
} // namespace atom
|
||||||
|
|
|
@ -32,6 +32,9 @@ class AtomBrowserContext : public brightray::BrowserContext {
|
||||||
content::DownloadManagerDelegate* GetDownloadManagerDelegate() override;
|
content::DownloadManagerDelegate* GetDownloadManagerDelegate() override;
|
||||||
content::BrowserPluginGuestManager* GetGuestManager() override;
|
content::BrowserPluginGuestManager* GetGuestManager() override;
|
||||||
|
|
||||||
|
// brightray::BrowserContext:
|
||||||
|
void RegisterPrefs(PrefRegistrySimple* pref_registry) override;
|
||||||
|
|
||||||
AtomURLRequestJobFactory* job_factory() const { return job_factory_; }
|
AtomURLRequestJobFactory* job_factory() const { return job_factory_; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
|
@ -6,10 +6,13 @@
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
|
#include "atom/browser/atom_browser_context.h"
|
||||||
#include "atom/browser/native_window.h"
|
#include "atom/browser/native_window.h"
|
||||||
#include "atom/browser/ui/file_dialog.h"
|
#include "atom/browser/ui/file_dialog.h"
|
||||||
#include "base/bind.h"
|
#include "base/bind.h"
|
||||||
#include "base/files/file_util.h"
|
#include "base/files/file_util.h"
|
||||||
|
#include "base/prefs/pref_service.h"
|
||||||
|
#include "chrome/common/pref_names.h"
|
||||||
#include "content/public/browser/browser_context.h"
|
#include "content/public/browser/browser_context.h"
|
||||||
#include "content/public/browser/browser_thread.h"
|
#include "content/public/browser/browser_thread.h"
|
||||||
#include "content/public/browser/download_manager.h"
|
#include "content/public/browser/download_manager.h"
|
||||||
|
@ -77,6 +80,11 @@ void AtomDownloadManagerDelegate::OnDownloadPathGenerated(
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Remeber the last selected download directory.
|
||||||
|
AtomBrowserContext* browser_context = static_cast<AtomBrowserContext*>(
|
||||||
|
download_manager_->GetBrowserContext());
|
||||||
|
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);
|
||||||
|
@ -92,9 +100,14 @@ bool AtomDownloadManagerDelegate::DetermineDownloadTarget(
|
||||||
const content::DownloadTargetCallback& callback) {
|
const content::DownloadTargetCallback& callback) {
|
||||||
DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
|
DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
|
||||||
|
|
||||||
if (default_download_path_.empty()) {
|
AtomBrowserContext* browser_context = static_cast<AtomBrowserContext*>(
|
||||||
|
download_manager_->GetBrowserContext());
|
||||||
|
base::FilePath default_download_path = browser_context->prefs()->GetFilePath(
|
||||||
|
prefs::kDownloadDefaultDirectory);
|
||||||
|
// If users didn't set download path, use 'Downloads' directory by default.
|
||||||
|
if (default_download_path.empty()) {
|
||||||
auto path = download_manager_->GetBrowserContext()->GetPath();
|
auto path = download_manager_->GetBrowserContext()->GetPath();
|
||||||
default_download_path_ = path.Append(FILE_PATH_LITERAL("Downloads"));
|
default_download_path = path.Append(FILE_PATH_LITERAL("Downloads"));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!download->GetForcedFilePath().empty()) {
|
if (!download->GetForcedFilePath().empty()) {
|
||||||
|
@ -118,7 +131,7 @@ bool AtomDownloadManagerDelegate::DetermineDownloadTarget(
|
||||||
download->GetContentDisposition(),
|
download->GetContentDisposition(),
|
||||||
download->GetSuggestedFilename(),
|
download->GetSuggestedFilename(),
|
||||||
download->GetMimeType(),
|
download->GetMimeType(),
|
||||||
default_download_path_,
|
default_download_path,
|
||||||
download_path_callback));
|
download_path_callback));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -47,7 +47,6 @@ class AtomDownloadManagerDelegate : public content::DownloadManagerDelegate {
|
||||||
|
|
||||||
private:
|
private:
|
||||||
content::DownloadManager* download_manager_;
|
content::DownloadManager* download_manager_;
|
||||||
base::FilePath default_download_path_;
|
|
||||||
base::WeakPtrFactory<AtomDownloadManagerDelegate> weak_ptr_factory_;
|
base::WeakPtrFactory<AtomDownloadManagerDelegate> weak_ptr_factory_;
|
||||||
|
|
||||||
DISALLOW_COPY_AND_ASSIGN(AtomDownloadManagerDelegate);
|
DISALLOW_COPY_AND_ASSIGN(AtomDownloadManagerDelegate);
|
||||||
|
|
|
@ -15,6 +15,7 @@
|
||||||
#include "base/files/file_path.h"
|
#include "base/files/file_path.h"
|
||||||
#include "base/prefs/pref_service.h"
|
#include "base/prefs/pref_service.h"
|
||||||
#include "base/strings/utf_string_conversions.h"
|
#include "base/strings/utf_string_conversions.h"
|
||||||
|
#include "chrome/common/pref_names.h"
|
||||||
#include "content/public/browser/render_view_host.h"
|
#include "content/public/browser/render_view_host.h"
|
||||||
#include "content/public/browser/web_contents.h"
|
#include "content/public/browser/web_contents.h"
|
||||||
#include "content/public/common/file_chooser_file_info.h"
|
#include "content/public/common/file_chooser_file_info.h"
|
||||||
|
@ -23,8 +24,6 @@
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
|
|
||||||
const char kSelectFileLastDirectory[] = "selectfile.last_directory";
|
|
||||||
|
|
||||||
file_dialog::Filters GetFileTypesFromAcceptType(
|
file_dialog::Filters GetFileTypesFromAcceptType(
|
||||||
const std::vector<base::string16>& accept_types) {
|
const std::vector<base::string16>& accept_types) {
|
||||||
file_dialog::Filters filters;
|
file_dialog::Filters filters;
|
||||||
|
@ -112,7 +111,7 @@ void WebDialogHelper::RunFileChooser(content::WebContents* web_contents,
|
||||||
AtomBrowserContext* browser_context = static_cast<AtomBrowserContext*>(
|
AtomBrowserContext* browser_context = static_cast<AtomBrowserContext*>(
|
||||||
window_->web_contents()->GetBrowserContext());
|
window_->web_contents()->GetBrowserContext());
|
||||||
base::FilePath default_file_path = browser_context->prefs()->GetFilePath(
|
base::FilePath default_file_path = browser_context->prefs()->GetFilePath(
|
||||||
kSelectFileLastDirectory).Append(params.default_file_name);
|
prefs::kSelectFileLastDirectory).Append(params.default_file_name);
|
||||||
if (file_dialog::ShowOpenDialog(window_,
|
if (file_dialog::ShowOpenDialog(window_,
|
||||||
base::UTF16ToUTF8(params.title),
|
base::UTF16ToUTF8(params.title),
|
||||||
default_file_path,
|
default_file_path,
|
||||||
|
@ -126,7 +125,7 @@ void WebDialogHelper::RunFileChooser(content::WebContents* web_contents,
|
||||||
result.push_back(info);
|
result.push_back(info);
|
||||||
}
|
}
|
||||||
if (!paths.empty()) {
|
if (!paths.empty()) {
|
||||||
browser_context->prefs()->SetFilePath(kSelectFileLastDirectory,
|
browser_context->prefs()->SetFilePath(prefs::kSelectFileLastDirectory,
|
||||||
paths[0].DirName());
|
paths[0].DirName());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
12
chromium_src/chrome/common/pref_names.cc
Normal file
12
chromium_src/chrome/common/pref_names.cc
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
// Copyright (c) 2012 The Chromium Authors. All rights reserved.
|
||||||
|
// Use of this source code is governed by a BSD-style license that can be
|
||||||
|
// found in the LICENSE file.
|
||||||
|
|
||||||
|
#include "chrome/common/pref_names.h"
|
||||||
|
|
||||||
|
namespace prefs {
|
||||||
|
|
||||||
|
const char kSelectFileLastDirectory[] = "selectfile.last_directory";
|
||||||
|
const char kDownloadDefaultDirectory[] = "download.default_directory";
|
||||||
|
|
||||||
|
} // namespace prefs
|
|
@ -0,0 +1,12 @@
|
||||||
|
// Copyright (c) 2012 The Chromium Authors. All rights reserved.
|
||||||
|
// Use of this source code is governed by a BSD-style license that can be
|
||||||
|
// found in the LICENSE file.
|
||||||
|
|
||||||
|
// Constants for the names of various preferences, for easier changing.
|
||||||
|
|
||||||
|
namespace prefs {
|
||||||
|
|
||||||
|
extern const char kSelectFileLastDirectory[];
|
||||||
|
extern const char kDownloadDefaultDirectory[];
|
||||||
|
|
||||||
|
} // namespace prefs
|
|
@ -1239,3 +1239,10 @@ proxy-uri = [<proxy-scheme>"://"]<proxy-host>[":"<proxy-port>]
|
||||||
and use socks4://foopy2 for all other
|
and use socks4://foopy2 for all other
|
||||||
URLs.
|
URLs.
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Session.setDownloadPath(path)
|
||||||
|
|
||||||
|
* `path` String - The download location
|
||||||
|
|
||||||
|
Sets download saving directory. By default, the download directory will be the
|
||||||
|
`Downloads` under the respective app folder.
|
||||||
|
|
|
@ -364,6 +364,8 @@
|
||||||
'chromium_src/chrome/browser/ui/views/frame/global_menu_bar_registrar_x11.cc',
|
'chromium_src/chrome/browser/ui/views/frame/global_menu_bar_registrar_x11.cc',
|
||||||
'chromium_src/chrome/browser/ui/views/frame/global_menu_bar_registrar_x11.h',
|
'chromium_src/chrome/browser/ui/views/frame/global_menu_bar_registrar_x11.h',
|
||||||
'chromium_src/chrome/common/chrome_utility_messages.h',
|
'chromium_src/chrome/common/chrome_utility_messages.h',
|
||||||
|
'chromium_src/chrome/common/pref_names.cc',
|
||||||
|
'chromium_src/chrome/common/pref_names.h',
|
||||||
'chromium_src/chrome/common/print_messages.cc',
|
'chromium_src/chrome/common/print_messages.cc',
|
||||||
'chromium_src/chrome/common/print_messages.h',
|
'chromium_src/chrome/common/print_messages.h',
|
||||||
'chromium_src/chrome/common/tts_messages.h',
|
'chromium_src/chrome/common/tts_messages.h',
|
||||||
|
|
Loading…
Reference in a new issue