Commit 2bad7cee authored by Jan Wilken Dörrie's avatar Jan Wilken Dörrie Committed by Commit Bot

[Passwords] Clean-Up implementation of passwordsPrivate API

This change cleans-up the implementation of the chrome.passwordsPrivate
API by making use of modern language features and introducing small
helpers to reduce redundancy.

Bug: 1047726
Change-Id: I2a478bd197b0a6677876f423922c179205952e3f
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2036171
Auto-Submit: Jan Wilken Dörrie <jdoerrie@chromium.org>
Commit-Queue: Vasilii Sukhanov <vasilii@chromium.org>
Reviewed-by: default avatarVasilii Sukhanov <vasilii@chromium.org>
Cr-Commit-Position: refs/heads/master@{#738131}
parent 5be12bf8
......@@ -25,13 +25,20 @@
namespace extensions {
////////////////////////////////////////////////////////////////////////////////
// PasswordsPrivateRecordPasswordsPageAccessInSettingsFunction
namespace {
using ResponseAction = ExtensionFunction::ResponseAction;
PasswordsPrivateRecordPasswordsPageAccessInSettingsFunction::
~PasswordsPrivateRecordPasswordsPageAccessInSettingsFunction() {}
PasswordsPrivateDelegate* GetDelegate(
content::BrowserContext* browser_context) {
return PasswordsPrivateDelegateFactory::GetForBrowserContext(browser_context,
/*create=*/true);
}
ExtensionFunction::ResponseAction
} // namespace
// PasswordsPrivateRecordPasswordsPageAccessInSettingsFunction
ResponseAction
PasswordsPrivateRecordPasswordsPageAccessInSettingsFunction::Run() {
UMA_HISTOGRAM_ENUMERATION(
"PasswordManager.ManagePasswordsReferrer",
......@@ -48,21 +55,13 @@ PasswordsPrivateRecordPasswordsPageAccessInSettingsFunction::Run() {
return RespondNow(NoArguments());
}
////////////////////////////////////////////////////////////////////////////////
// PasswordsPrivateChangeSavedPasswordFunction
PasswordsPrivateChangeSavedPasswordFunction::
~PasswordsPrivateChangeSavedPasswordFunction() {}
ExtensionFunction::ResponseAction
PasswordsPrivateChangeSavedPasswordFunction::Run() {
std::unique_ptr<api::passwords_private::ChangeSavedPassword::Params>
parameters =
ResponseAction PasswordsPrivateChangeSavedPasswordFunction::Run() {
auto parameters =
api::passwords_private::ChangeSavedPassword::Params::Create(*args_);
EXTENSION_FUNCTION_VALIDATE(parameters.get());
EXTENSION_FUNCTION_VALIDATE(parameters);
PasswordsPrivateDelegateFactory::GetForBrowserContext(browser_context(),
true /* create */)
GetDelegate(browser_context())
->ChangeSavedPassword(
parameters->id, base::UTF8ToUTF16(parameters->new_username),
parameters->new_password ? base::make_optional(base::UTF8ToUTF16(
......@@ -72,87 +71,43 @@ PasswordsPrivateChangeSavedPasswordFunction::Run() {
return RespondNow(NoArguments());
}
////////////////////////////////////////////////////////////////////////////////
// PasswordsPrivateRemoveSavedPasswordFunction
PasswordsPrivateRemoveSavedPasswordFunction::
~PasswordsPrivateRemoveSavedPasswordFunction() {}
ExtensionFunction::ResponseAction
PasswordsPrivateRemoveSavedPasswordFunction::Run() {
std::unique_ptr<api::passwords_private::RemoveSavedPassword::Params>
parameters =
ResponseAction PasswordsPrivateRemoveSavedPasswordFunction::Run() {
auto parameters =
api::passwords_private::RemoveSavedPassword::Params::Create(*args_);
EXTENSION_FUNCTION_VALIDATE(parameters.get());
PasswordsPrivateDelegate* delegate =
PasswordsPrivateDelegateFactory::GetForBrowserContext(browser_context(),
true /* create */);
delegate->RemoveSavedPassword(parameters->id);
EXTENSION_FUNCTION_VALIDATE(parameters);
GetDelegate(browser_context())->RemoveSavedPassword(parameters->id);
return RespondNow(NoArguments());
}
////////////////////////////////////////////////////////////////////////////////
// PasswordsPrivateRemovePasswordExceptionFunction
PasswordsPrivateRemovePasswordExceptionFunction::
~PasswordsPrivateRemovePasswordExceptionFunction() {}
ExtensionFunction::ResponseAction
PasswordsPrivateRemovePasswordExceptionFunction::Run() {
std::unique_ptr<api::passwords_private::RemovePasswordException::Params>
parameters =
api::passwords_private::RemovePasswordException::Params::Create(
*args_);
EXTENSION_FUNCTION_VALIDATE(parameters.get());
PasswordsPrivateDelegate* delegate =
PasswordsPrivateDelegateFactory::GetForBrowserContext(browser_context(),
true /* create */);
delegate->RemovePasswordException(parameters->id);
ResponseAction PasswordsPrivateRemovePasswordExceptionFunction::Run() {
auto parameters =
api::passwords_private::RemovePasswordException::Params::Create(*args_);
EXTENSION_FUNCTION_VALIDATE(parameters);
GetDelegate(browser_context())->RemovePasswordException(parameters->id);
return RespondNow(NoArguments());
}
////////////////////////////////////////////////////////////////////////////////
// PasswordsPrivateUndoRemoveSavedPasswordOrExceptionFunction
PasswordsPrivateUndoRemoveSavedPasswordOrExceptionFunction::
~PasswordsPrivateUndoRemoveSavedPasswordOrExceptionFunction() {}
ExtensionFunction::ResponseAction
ResponseAction
PasswordsPrivateUndoRemoveSavedPasswordOrExceptionFunction::Run() {
PasswordsPrivateDelegate* delegate =
PasswordsPrivateDelegateFactory::GetForBrowserContext(browser_context(),
true /* create */);
delegate->UndoRemoveSavedPasswordOrException();
GetDelegate(browser_context())->UndoRemoveSavedPasswordOrException();
return RespondNow(NoArguments());
}
////////////////////////////////////////////////////////////////////////////////
// PasswordsPrivateRequestPlaintextPasswordFunction
ResponseAction PasswordsPrivateRequestPlaintextPasswordFunction::Run() {
auto parameters =
api::passwords_private::RequestPlaintextPassword::Params::Create(*args_);
EXTENSION_FUNCTION_VALIDATE(parameters);
PasswordsPrivateRequestPlaintextPasswordFunction::
~PasswordsPrivateRequestPlaintextPasswordFunction() {}
ExtensionFunction::ResponseAction
PasswordsPrivateRequestPlaintextPasswordFunction::Run() {
std::unique_ptr<api::passwords_private::RequestPlaintextPassword::Params>
parameters =
api::passwords_private::RequestPlaintextPassword::Params::Create(
*args_);
EXTENSION_FUNCTION_VALIDATE(parameters.get());
PasswordsPrivateDelegate* delegate =
PasswordsPrivateDelegateFactory::GetForBrowserContext(browser_context(),
true /* create */);
delegate->RequestShowPassword(
GetDelegate(browser_context())
->RequestShowPassword(
parameters->id,
base::BindOnce(
&PasswordsPrivateRequestPlaintextPasswordFunction::GotPassword, this),
&PasswordsPrivateRequestPlaintextPasswordFunction::GotPassword,
this),
GetSenderWebContents());
// GotPassword() might respond before we reach this point.
......@@ -167,14 +122,8 @@ void PasswordsPrivateRequestPlaintextPasswordFunction::GotPassword(
Respond(NoArguments());
}
////////////////////////////////////////////////////////////////////////////////
// PasswordsPrivateGetSavedPasswordListFunction
PasswordsPrivateGetSavedPasswordListFunction::
~PasswordsPrivateGetSavedPasswordListFunction() {}
ExtensionFunction::ResponseAction
PasswordsPrivateGetSavedPasswordListFunction::Run() {
ResponseAction PasswordsPrivateGetSavedPasswordListFunction::Run() {
// GetList() can immediately call GotList() (which would Respond() before
// RespondLater()). So we post a task to preserve order.
base::ThreadTaskRunnerHandle::Get()->PostTask(
......@@ -185,10 +134,8 @@ PasswordsPrivateGetSavedPasswordListFunction::Run() {
}
void PasswordsPrivateGetSavedPasswordListFunction::GetList() {
PasswordsPrivateDelegate* delegate =
PasswordsPrivateDelegateFactory::GetForBrowserContext(browser_context(),
true /* create */);
delegate->GetSavedPasswordsList(base::BindOnce(
GetDelegate(browser_context())
->GetSavedPasswordsList(base::BindOnce(
&PasswordsPrivateGetSavedPasswordListFunction::GotList, this));
}
......@@ -198,14 +145,8 @@ void PasswordsPrivateGetSavedPasswordListFunction::GotList(
api::passwords_private::GetSavedPasswordList::Results::Create(list)));
}
////////////////////////////////////////////////////////////////////////////////
// PasswordsPrivateGetPasswordExceptionListFunction
PasswordsPrivateGetPasswordExceptionListFunction::
~PasswordsPrivateGetPasswordExceptionListFunction() {}
ExtensionFunction::ResponseAction
PasswordsPrivateGetPasswordExceptionListFunction::Run() {
ResponseAction PasswordsPrivateGetPasswordExceptionListFunction::Run() {
// GetList() can immediately call GotList() (which would Respond() before
// RespondLater()). So we post a task to preserve order.
base::ThreadTaskRunnerHandle::Get()->PostTask(
......@@ -216,10 +157,8 @@ PasswordsPrivateGetPasswordExceptionListFunction::Run() {
}
void PasswordsPrivateGetPasswordExceptionListFunction::GetList() {
PasswordsPrivateDelegate* delegate =
PasswordsPrivateDelegateFactory::GetForBrowserContext(browser_context(),
true /* create */);
delegate->GetPasswordExceptionsList(base::Bind(
GetDelegate(browser_context())
->GetPasswordExceptionsList(base::BindOnce(
&PasswordsPrivateGetPasswordExceptionListFunction::GotList, this));
}
......@@ -230,33 +169,16 @@ void PasswordsPrivateGetPasswordExceptionListFunction::GotList(
entries)));
}
////////////////////////////////////////////////////////////////////////////////
// PasswordsPrivateImportPasswordsFunction
PasswordsPrivateImportPasswordsFunction::
~PasswordsPrivateImportPasswordsFunction() {}
ExtensionFunction::ResponseAction
PasswordsPrivateImportPasswordsFunction::Run() {
PasswordsPrivateDelegate* delegate =
PasswordsPrivateDelegateFactory::GetForBrowserContext(browser_context(),
true /* create */);
delegate->ImportPasswords(GetSenderWebContents());
ResponseAction PasswordsPrivateImportPasswordsFunction::Run() {
GetDelegate(browser_context())->ImportPasswords(GetSenderWebContents());
return RespondNow(NoArguments());
}
////////////////////////////////////////////////////////////////////////////////
// PasswordsPrivateExportPasswordsFunction
PasswordsPrivateExportPasswordsFunction::
~PasswordsPrivateExportPasswordsFunction() {}
ExtensionFunction::ResponseAction
PasswordsPrivateExportPasswordsFunction::Run() {
PasswordsPrivateDelegate* delegate =
PasswordsPrivateDelegateFactory::GetForBrowserContext(browser_context(),
true /* create */);
delegate->ExportPasswords(
ResponseAction PasswordsPrivateExportPasswordsFunction::Run() {
GetDelegate(browser_context())
->ExportPasswords(
base::BindOnce(
&PasswordsPrivateExportPasswordsFunction::ExportRequestCompleted,
this),
......@@ -272,34 +194,17 @@ void PasswordsPrivateExportPasswordsFunction::ExportRequestCompleted(
Error(error);
}
////////////////////////////////////////////////////////////////////////////////
// PasswordsPrivateCancelExportPasswordsFunction
PasswordsPrivateCancelExportPasswordsFunction::
~PasswordsPrivateCancelExportPasswordsFunction() {}
ExtensionFunction::ResponseAction
PasswordsPrivateCancelExportPasswordsFunction::Run() {
PasswordsPrivateDelegate* delegate =
PasswordsPrivateDelegateFactory::GetForBrowserContext(browser_context(),
true /* create */);
delegate->CancelExportPasswords();
ResponseAction PasswordsPrivateCancelExportPasswordsFunction::Run() {
GetDelegate(browser_context())->CancelExportPasswords();
return RespondNow(NoArguments());
}
////////////////////////////////////////////////////////////////////////////////
// PasswordsPrivateRequestExportProgressStatusFunction
PasswordsPrivateRequestExportProgressStatusFunction::
~PasswordsPrivateRequestExportProgressStatusFunction() {}
ExtensionFunction::ResponseAction
PasswordsPrivateRequestExportProgressStatusFunction::Run() {
PasswordsPrivateDelegate* delegate =
PasswordsPrivateDelegateFactory::GetForBrowserContext(browser_context(),
true /* create */);
return RespondNow(OneArgument(std::make_unique<base::Value>(
ToString(delegate->GetExportProgressStatus()))));
ResponseAction PasswordsPrivateRequestExportProgressStatusFunction::Run() {
return RespondNow(ArgumentList(
api::passwords_private::RequestExportProgressStatus::Results::Create(
GetDelegate(browser_context())->GetExportProgressStatus())));
}
} // namespace extensions
......@@ -7,11 +7,9 @@
#include <string>
#include "base/macros.h"
#include "base/optional.h"
#include "base/strings/string16.h"
#include "chrome/browser/extensions/api/passwords_private/passwords_private_delegate.h"
#include "chrome/browser/ui/passwords/settings/password_manager_presenter.h"
#include "extensions/browser/extension_function.h"
namespace extensions {
......@@ -19,117 +17,93 @@ namespace extensions {
class PasswordsPrivateRecordPasswordsPageAccessInSettingsFunction
: public ExtensionFunction {
public:
PasswordsPrivateRecordPasswordsPageAccessInSettingsFunction() {}
DECLARE_EXTENSION_FUNCTION(
"passwordsPrivate.recordPasswordsPageAccessInSettings",
PASSWORDSPRIVATE_RECORDPASSWORDSPAGEACCESSINSETTINGS)
protected:
~PasswordsPrivateRecordPasswordsPageAccessInSettingsFunction() override;
~PasswordsPrivateRecordPasswordsPageAccessInSettingsFunction() override =
default;
// ExtensionFunction overrides.
ResponseAction Run() override;
private:
DISALLOW_COPY_AND_ASSIGN(
PasswordsPrivateRecordPasswordsPageAccessInSettingsFunction);
};
class PasswordsPrivateChangeSavedPasswordFunction : public ExtensionFunction {
public:
PasswordsPrivateChangeSavedPasswordFunction() {}
DECLARE_EXTENSION_FUNCTION("passwordsPrivate.changeSavedPassword",
PASSWORDSPRIVATE_CHANGESAVEDPASSWORD)
protected:
~PasswordsPrivateChangeSavedPasswordFunction() override;
~PasswordsPrivateChangeSavedPasswordFunction() override = default;
// ExtensionFunction overrides.
ResponseAction Run() override;
private:
DISALLOW_COPY_AND_ASSIGN(PasswordsPrivateChangeSavedPasswordFunction);
};
class PasswordsPrivateRemoveSavedPasswordFunction : public ExtensionFunction {
public:
PasswordsPrivateRemoveSavedPasswordFunction() {}
DECLARE_EXTENSION_FUNCTION("passwordsPrivate.removeSavedPassword",
PASSWORDSPRIVATE_REMOVESAVEDPASSWORD)
protected:
~PasswordsPrivateRemoveSavedPasswordFunction() override;
~PasswordsPrivateRemoveSavedPasswordFunction() override = default;
// ExtensionFunction overrides.
ResponseAction Run() override;
private:
DISALLOW_COPY_AND_ASSIGN(PasswordsPrivateRemoveSavedPasswordFunction);
};
class PasswordsPrivateRemovePasswordExceptionFunction
: public ExtensionFunction {
public:
PasswordsPrivateRemovePasswordExceptionFunction() {}
DECLARE_EXTENSION_FUNCTION("passwordsPrivate.removePasswordException",
PASSWORDSPRIVATE_REMOVEPASSWORDEXCEPTION)
protected:
~PasswordsPrivateRemovePasswordExceptionFunction() override;
~PasswordsPrivateRemovePasswordExceptionFunction() override = default;
// ExtensionFunction overrides.
ResponseAction Run() override;
private:
DISALLOW_COPY_AND_ASSIGN(PasswordsPrivateRemovePasswordExceptionFunction);
};
class PasswordsPrivateUndoRemoveSavedPasswordOrExceptionFunction
: public ExtensionFunction {
public:
PasswordsPrivateUndoRemoveSavedPasswordOrExceptionFunction() {}
DECLARE_EXTENSION_FUNCTION(
"passwordsPrivate.undoRemoveSavedPasswordOrException",
PASSWORDSPRIVATE_UNDOREMOVESAVEDPASSWORDOREXCEPTION)
protected:
~PasswordsPrivateUndoRemoveSavedPasswordOrExceptionFunction() override;
~PasswordsPrivateUndoRemoveSavedPasswordOrExceptionFunction() override =
default;
// ExtensionFunction overrides.
ResponseAction Run() override;
private:
DISALLOW_COPY_AND_ASSIGN(
PasswordsPrivateUndoRemoveSavedPasswordOrExceptionFunction);
};
class PasswordsPrivateRequestPlaintextPasswordFunction
: public ExtensionFunction {
public:
PasswordsPrivateRequestPlaintextPasswordFunction() {}
DECLARE_EXTENSION_FUNCTION("passwordsPrivate.requestPlaintextPassword",
PASSWORDSPRIVATE_REQUESTPLAINTEXTPASSWORD)
protected:
~PasswordsPrivateRequestPlaintextPasswordFunction() override;
~PasswordsPrivateRequestPlaintextPasswordFunction() override = default;
// ExtensionFunction overrides.
ResponseAction Run() override;
private:
void GotPassword(base::Optional<base::string16> password);
DISALLOW_COPY_AND_ASSIGN(PasswordsPrivateRequestPlaintextPasswordFunction);
};
class PasswordsPrivateGetSavedPasswordListFunction : public ExtensionFunction {
public:
PasswordsPrivateGetSavedPasswordListFunction() {}
DECLARE_EXTENSION_FUNCTION("passwordsPrivate.getSavedPasswordList",
PASSWORDSPRIVATE_GETSAVEDPASSWORDLIST)
protected:
~PasswordsPrivateGetSavedPasswordListFunction() override;
~PasswordsPrivateGetSavedPasswordListFunction() override = default;
// ExtensionFunction overrides.
ResponseAction Run() override;
......@@ -137,19 +111,16 @@ class PasswordsPrivateGetSavedPasswordListFunction : public ExtensionFunction {
private:
void GetList();
void GotList(const PasswordsPrivateDelegate::UiEntries& entries);
DISALLOW_COPY_AND_ASSIGN(PasswordsPrivateGetSavedPasswordListFunction);
};
class PasswordsPrivateGetPasswordExceptionListFunction
: public ExtensionFunction {
public:
PasswordsPrivateGetPasswordExceptionListFunction() {}
DECLARE_EXTENSION_FUNCTION("passwordsPrivate.getPasswordExceptionList",
PASSWORDSPRIVATE_GETPASSWORDEXCEPTIONLIST)
protected:
~PasswordsPrivateGetPasswordExceptionListFunction() override;
~PasswordsPrivateGetPasswordExceptionListFunction() override = default;
// ExtensionFunction overrides.
ResponseAction Run() override;
......@@ -157,75 +128,58 @@ class PasswordsPrivateGetPasswordExceptionListFunction
private:
void GetList();
void GotList(const PasswordsPrivateDelegate::ExceptionEntries& entries);
DISALLOW_COPY_AND_ASSIGN(PasswordsPrivateGetPasswordExceptionListFunction);
};
class PasswordsPrivateImportPasswordsFunction : public ExtensionFunction {
public:
PasswordsPrivateImportPasswordsFunction() {}
DECLARE_EXTENSION_FUNCTION("passwordsPrivate.importPasswords",
PASSWORDSPRIVATE_IMPORTPASSWORDS)
protected:
~PasswordsPrivateImportPasswordsFunction() override;
~PasswordsPrivateImportPasswordsFunction() override = default;
// ExtensionFunction overrides.
ResponseAction Run() override;
private:
DISALLOW_COPY_AND_ASSIGN(PasswordsPrivateImportPasswordsFunction);
};
class PasswordsPrivateExportPasswordsFunction : public ExtensionFunction {
public:
PasswordsPrivateExportPasswordsFunction() {}
DECLARE_EXTENSION_FUNCTION("passwordsPrivate.exportPasswords",
PASSWORDSPRIVATE_EXPORTPASSWORDS)
protected:
~PasswordsPrivateExportPasswordsFunction() override;
~PasswordsPrivateExportPasswordsFunction() override = default;
// ExtensionFunction overrides.
ResponseAction Run() override;
private:
void ExportRequestCompleted(const std::string& error);
DISALLOW_COPY_AND_ASSIGN(PasswordsPrivateExportPasswordsFunction);
};
class PasswordsPrivateCancelExportPasswordsFunction : public ExtensionFunction {
public:
PasswordsPrivateCancelExportPasswordsFunction() {}
DECLARE_EXTENSION_FUNCTION("passwordsPrivate.cancelExportPasswords",
PASSWORDSPRIVATE_CANCELEXPORTPASSWORDS)
protected:
~PasswordsPrivateCancelExportPasswordsFunction() override;
~PasswordsPrivateCancelExportPasswordsFunction() override = default;
// ExtensionFunction overrides.
ResponseAction Run() override;
private:
DISALLOW_COPY_AND_ASSIGN(PasswordsPrivateCancelExportPasswordsFunction);
};
class PasswordsPrivateRequestExportProgressStatusFunction
: public ExtensionFunction {
public:
PasswordsPrivateRequestExportProgressStatusFunction() {}
DECLARE_EXTENSION_FUNCTION("passwordsPrivate.requestExportProgressStatus",
PASSWORDSPRIVATE_REQUESTEXPORTPROGRESSSTATUS)
protected:
~PasswordsPrivateRequestExportProgressStatusFunction() override;
~PasswordsPrivateRequestExportProgressStatusFunction() override = default;
// ExtensionFunction overrides.
ResponseAction Run() override;
private:
DISALLOW_COPY_AND_ASSIGN(PasswordsPrivateRequestExportProgressStatusFunction);
};
} // namespace extensions
......
......@@ -73,9 +73,8 @@ class TestDelegate : public PasswordsPrivateDelegate {
std::move(callback).Run(current_entries_);
}
void GetPasswordExceptionsList(
const ExceptionEntriesCallback& callback) override {
callback.Run(current_exceptions_);
void GetPasswordExceptionsList(ExceptionEntriesCallback callback) override {
std::move(callback).Run(current_exceptions_);
}
void ChangeSavedPassword(int id,
......
......@@ -45,9 +45,8 @@ class PasswordsPrivateDelegate : public KeyedService {
// Gets the password exceptions list.
using ExceptionEntries = std::vector<api::passwords_private::ExceptionEntry>;
using ExceptionEntriesCallback =
base::Callback<void(const ExceptionEntries&)>;
virtual void GetPasswordExceptionsList(
const ExceptionEntriesCallback& callback) = 0;
base::OnceCallback<void(const ExceptionEntries&)>;
virtual void GetPasswordExceptionsList(ExceptionEntriesCallback callback) = 0;
// Changes the username and password corresponding to |id|.
// |id|: The id for the password entry being updated.
......
......@@ -131,11 +131,11 @@ void PasswordsPrivateDelegateImpl::SendPasswordExceptionsList() {
}
void PasswordsPrivateDelegateImpl::GetPasswordExceptionsList(
const ExceptionEntriesCallback& callback) {
ExceptionEntriesCallback callback) {
if (current_exceptions_initialized_)
callback.Run(current_exceptions_);
std::move(callback).Run(current_exceptions_);
else
get_password_exception_list_callbacks_.push_back(callback);
get_password_exception_list_callbacks_.push_back(std::move(callback));
}
void PasswordsPrivateDelegateImpl::ChangeSavedPassword(
......@@ -306,8 +306,8 @@ void PasswordsPrivateDelegateImpl::SetPasswordExceptionList(
current_exceptions_initialized_ = true;
InitializeIfNecessary();
for (const auto& callback : get_password_exception_list_callbacks_)
callback.Run(current_exceptions_);
for (auto& callback : get_password_exception_list_callbacks_)
std::move(callback).Run(current_exceptions_);
get_password_exception_list_callbacks_.clear();
}
......
......@@ -45,8 +45,7 @@ class PasswordsPrivateDelegateImpl : public PasswordsPrivateDelegate,
// PasswordsPrivateDelegate implementation.
void GetSavedPasswordsList(UiEntriesCallback callback) override;
void GetPasswordExceptionsList(
const ExceptionEntriesCallback& callback) override;
void GetPasswordExceptionsList(ExceptionEntriesCallback callback) override;
void ChangeSavedPassword(
int id,
base::string16 new_username,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment