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

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

Issue 6646051: Fix DCHECK, memory leak, and refactor PasswordStore to use CancelableRequest (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: use non-zero tests until http://crbug.com/77650 is addressed. Created 9 years, 9 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
« no previous file with comments | « chrome/browser/ui/webui/options/password_manager_handler.h ('k') | chrome/chrome_browser.gypi » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/ui/webui/options/password_manager_handler.cc
diff --git a/chrome/browser/ui/webui/options/password_manager_handler.cc b/chrome/browser/ui/webui/options/password_manager_handler.cc
index 850718dec08270479983d3deb540aa0a92826ab2..463c6aaa1e270d9539fe091bb8e135d115b6aadd 100644
--- a/chrome/browser/ui/webui/options/password_manager_handler.cc
+++ b/chrome/browser/ui/webui/options/password_manager_handler.cc
@@ -5,7 +5,6 @@
#include "chrome/browser/ui/webui/options/password_manager_handler.h"
#include "base/callback.h"
-#include "base/stl_util-inl.h"
#include "base/string_number_conversions.h"
#include "base/utf_string_conversions.h"
#include "base/values.h"
@@ -17,6 +16,7 @@
#include "grit/generated_resources.h"
#include "net/base/net_util.h"
#include "ui/base/l10n/l10n_util.h"
+#include "webkit/glue/password_form.h"
PasswordManagerHandler::PasswordManagerHandler()
: ALLOW_THIS_IN_INITIALIZER_LIST(populater_(this)),
@@ -24,9 +24,6 @@ PasswordManagerHandler::PasswordManagerHandler()
}
PasswordManagerHandler::~PasswordManagerHandler() {
- // TODO(scr): ScopedVector.
- STLDeleteElements(&password_list_);
- STLDeleteElements(&password_exception_list_);
GetPasswordStore()->RemoveObserver(this);
}
@@ -90,8 +87,8 @@ PasswordStore* PasswordManagerHandler::GetPasswordStore() {
void PasswordManagerHandler::UpdatePasswordLists(const ListValue* args) {
// Reset the current lists.
- STLDeleteElements(&password_list_);
- STLDeleteElements(&password_exception_list_);
+ password_list_.reset();
+ password_exception_list_.reset();
languages_ =
web_ui_->GetProfile()->GetPrefs()->GetString(prefs::kAcceptLanguages);
@@ -158,14 +155,12 @@ void PasswordManagerHandler::SetPasswordExceptionList() {
}
PasswordManagerHandler::ListPopulater::ListPopulater(
- PasswordManagerHandler* page) : page_(page),
- pending_login_query_(0) {
+ PasswordManagerHandler* page)
+ : page_(page),
+ pending_login_query_(0) {
}
PasswordManagerHandler::ListPopulater::~ListPopulater() {
- PasswordStore* store = page_->GetPasswordStore();
- if (store)
- store->CancelLoginsQuery(pending_login_query_);
}
PasswordManagerHandler::PasswordListPopulater::PasswordListPopulater(
@@ -173,20 +168,26 @@ PasswordManagerHandler::PasswordListPopulater::PasswordListPopulater(
}
void PasswordManagerHandler::PasswordListPopulater::Populate() {
- DCHECK(!pending_login_query_);
PasswordStore* store = page_->GetPasswordStore();
- if (store != NULL)
+ if (store != NULL) {
+ if (pending_login_query_)
+ store->CancelRequest(pending_login_query_);
+
pending_login_query_ = store->GetAutofillableLogins(this);
- else
+ } else {
LOG(ERROR) << "No password store! Cannot display passwords.";
+ }
}
void PasswordManagerHandler::PasswordListPopulater::
- OnPasswordStoreRequestDone(int handle,
- const std::vector<webkit_glue::PasswordForm*>& result) {
+ OnPasswordStoreRequestDone(
+ CancelableRequestProvider::Handle handle,
+ const std::vector<webkit_glue::PasswordForm*>& result) {
DCHECK_EQ(pending_login_query_, handle);
pending_login_query_ = 0;
- page_->password_list_ = result;
+ page_->password_list_.reset();
+ page_->password_list_.insert(page_->password_list_.end(),
+ result.begin(), result.end());
page_->SetPasswordList();
}
@@ -196,19 +197,25 @@ PasswordManagerHandler::PasswordExceptionListPopulater::
}
void PasswordManagerHandler::PasswordExceptionListPopulater::Populate() {
- DCHECK(!pending_login_query_);
PasswordStore* store = page_->GetPasswordStore();
- if (store != NULL)
+ if (store != NULL) {
+ if (pending_login_query_)
+ store->CancelRequest(pending_login_query_);
+
pending_login_query_ = store->GetBlacklistLogins(this);
- else
+ } else {
LOG(ERROR) << "No password store! Cannot display exceptions.";
+ }
}
void PasswordManagerHandler::PasswordExceptionListPopulater::
- OnPasswordStoreRequestDone(int handle,
- const std::vector<webkit_glue::PasswordForm*>& result) {
+ OnPasswordStoreRequestDone(
+ CancelableRequestProvider::Handle handle,
+ const std::vector<webkit_glue::PasswordForm*>& result) {
DCHECK_EQ(pending_login_query_, handle);
pending_login_query_ = 0;
- page_->password_exception_list_ = result;
+ page_->password_exception_list_.reset();
+ page_->password_exception_list_.insert(page_->password_exception_list_.end(),
+ result.begin(), result.end());
page_->SetPasswordExceptionList();
}
« no previous file with comments | « chrome/browser/ui/webui/options/password_manager_handler.h ('k') | chrome/chrome_browser.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698