Make <input type="file"\> remember last used directory.

This commit is contained in:
Haojian Wu 2015-07-13 16:19:30 +08:00
parent 04606a9f97
commit 21e5054fac

View file

@ -7,10 +7,13 @@
#include <string>
#include <vector>
#include "atom/browser/atom_browser_context.h"
#include "atom/browser/native_window.h"
#include "atom/browser/ui/file_dialog.h"
#include "base/bind.h"
#include "base/files/file_enumerator.h"
#include "base/files/file_path.h"
#include "base/prefs/pref_service.h"
#include "base/strings/utf_string_conversions.h"
#include "content/public/browser/render_view_host.h"
#include "content/public/browser/web_contents.h"
@ -20,6 +23,8 @@
namespace {
const char kSelectFileLastDirectory[] = "selectfile.last_directory";
file_dialog::Filters GetFileTypesFromAcceptType(
const std::vector<base::string16>& accept_types) {
file_dialog::Filters filters;
@ -103,9 +108,13 @@ void WebDialogHelper::RunFileChooser(content::WebContents* web_contents,
}
std::vector<base::FilePath> paths;
AtomBrowserContext* browser_context = static_cast<AtomBrowserContext*>(
window_->web_contents()->GetBrowserContext());
base::FilePath default_file_path = browser_context->prefs()->GetFilePath(
kSelectFileLastDirectory).Append(params.default_file_name);
if (file_dialog::ShowOpenDialog(window_,
base::UTF16ToUTF8(params.title),
params.default_file_name,
default_file_path,
filters,
flags,
&paths)) {
@ -115,6 +124,10 @@ void WebDialogHelper::RunFileChooser(content::WebContents* web_contents,
info.display_name = path.BaseName().value();
result.push_back(info);
}
if (!paths.empty()) {
browser_context->prefs()->SetFilePath(kSelectFileLastDirectory,
paths[0].DirName());
}
}
}