Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2468)

Unified Diff: chrome/browser/ui/webui/options/password_manager_handler.h

Issue 1193143003: Enable import/export of passwords into/from Password Manager (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: comment Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/ui/webui/options/password_manager_handler.h
diff --git a/chrome/browser/ui/webui/options/password_manager_handler.h b/chrome/browser/ui/webui/options/password_manager_handler.h
index 520dbb8e7a92b03ec56ac9f5843104e296eb7593..aa5525ceef3b96d619a04eb168a1588a41705b8c 100644
--- a/chrome/browser/ui/webui/options/password_manager_handler.h
+++ b/chrome/browser/ui/webui/options/password_manager_handler.h
@@ -10,27 +10,46 @@
#include <string>
#include <vector>
+#include "base/gtest_prod_util.h"
#include "base/macros.h"
#include "build/build_config.h"
#include "chrome/browser/ui/passwords/password_manager_presenter.h"
#include "chrome/browser/ui/passwords/password_ui_view.h"
#include "chrome/browser/ui/webui/options/options_ui.h"
+#include "components/password_manager/core/browser/import/password_importer.h"
#include "components/prefs/pref_member.h"
+#include "ui/shell_dialogs/select_file_dialog.h"
+
+class PasswordManagerHandlerTest;
namespace options {
// The WebUI based PasswordUIView. Displays passwords in the web ui.
class PasswordManagerHandler : public OptionsPageUIHandler,
- public PasswordUIView {
+ public PasswordUIView,
+ public ui::SelectFileDialog::Listener {
public:
+ // Enumeration of different callers of SelectFile.
+ enum FileSelectorCaller {
+ IMPORT_FILE_SELECTED,
+ EXPORT_FILE_SELECTED,
+ };
+
PasswordManagerHandler();
~PasswordManagerHandler() override;
// OptionsPageUIHandler implementation.
void GetLocalizedValues(base::DictionaryValue* localized_strings) override;
void InitializeHandler() override;
+ void InitializePage() override;
void RegisterMessages() override;
+ // ui::SelectFileDialog::Listener implementation.
+ // |params| is of type FileSelectorCaller which indicates direction of IO.
+ void FileSelected(const base::FilePath& path,
+ int index,
+ void* params) override;
+
// PasswordUIView implementation.
Profile* GetProfile() override;
void ShowPassword(
@@ -47,6 +66,12 @@ class PasswordManagerHandler : public OptionsPageUIHandler,
#if !defined(OS_ANDROID)
gfx::NativeWindow GetNativeWindow() const override;
#endif
+
+ protected:
+ // This constructor is used for testing only.
+ explicit PasswordManagerHandler(
+ scoped_ptr<PasswordManagerPresenter> presenter);
+
private:
// Clears and then populates the list of passwords and password exceptions.
// Called when the JS PasswordManager object is initialized.
@@ -64,8 +89,48 @@ class PasswordManagerHandler : public OptionsPageUIHandler,
// |index| The index of the entry.
void HandleRequestShowPassword(const base::ListValue* args);
- // The PasswordManagerPresenter object owned by the this view.
- PasswordManagerPresenter password_manager_presenter_;
+ // Import from CSV/JSON file. The steps are:
+ // 1. user click import button -> HandlePasswordImport() ->
+ // start file selector
+ // 2. user selects file -> ImportPasswordFileSeleted() -> read to memory
+ // 3. read completes -> ImportPasswordFileRead() -> store to PasswordStore
+ void HandlePasswordImport(const base::ListValue* args);
+ void ImportPasswordFileSelected(const base::FilePath& path);
+ void ImportPasswordFileRead(password_manager::PasswordImporter::Result result,
+ const std::vector<autofill::PasswordForm>& forms);
+
+ // Export to CSV/JSON file. The steps are:
+ // 1. user click export button -> HandlePasswordExport() ->
+ // check OS password if necessary -> start file selector
+ // 2. user selects file -> ExportPasswordFileSeleted() ->
+ // write to memory buffer -> start write operation
+ void HandlePasswordExport(const base::ListValue* args);
+ void ExportPasswordFileSelected(const base::FilePath& path);
+
+ // A short class to persist imported password forms to password store.
+ class ImportPasswordResultConsumer
+ : public base::RefCountedThreadSafe<ImportPasswordResultConsumer> {
+ public:
+ explicit ImportPasswordResultConsumer(Profile* profile);
+
+ void ConsumePassword(password_manager::PasswordImporter::Result result,
+ const std::vector<autofill::PasswordForm>& forms);
+
+ private:
+ friend class base::RefCountedThreadSafe<ImportPasswordResultConsumer>;
+
+ ~ImportPasswordResultConsumer() {}
+
+ Profile* profile_;
+ };
+
+ // User pref for storing accept languages.
+ std::string languages_;
+
+ scoped_ptr<PasswordManagerPresenter> password_manager_presenter_;
+
+ // File picker to import/export file path.
+ scoped_refptr<ui::SelectFileDialog> select_file_dialog_;
DISALLOW_COPY_AND_ASSIGN(PasswordManagerHandler);
};

Powered by Google App Engine
This is Rietveld 408576698