| Index: chrome/browser/automation/automation_provider_observers.cc
|
| diff --git a/chrome/browser/automation/automation_provider_observers.cc b/chrome/browser/automation/automation_provider_observers.cc
|
| index bb78b915b99f7abfeb15d1f50102dc9ff0bcbb98..09b6e600b30676e0590687d91b0cf9de64a93194 100644
|
| --- a/chrome/browser/automation/automation_provider_observers.cc
|
| +++ b/chrome/browser/automation/automation_provider_observers.cc
|
| @@ -1658,7 +1658,7 @@ void AutomationProviderGetPasswordsObserver::OnPasswordStoreRequestDone(
|
|
|
| ListValue* passwords = new ListValue;
|
| for (std::vector<webkit_glue::PasswordForm*>::const_iterator it =
|
| - result.begin(); it != result.end(); ++it) {
|
| + result.begin(); it != result.end(); ++it) {
|
| DictionaryValue* password_val = new DictionaryValue;
|
| webkit_glue::PasswordForm* password_form = *it;
|
| password_val->SetString("username_value", password_form->username_value);
|
| @@ -1671,8 +1671,7 @@ void AutomationProviderGetPasswordsObserver::OnPasswordStoreRequestDone(
|
| password_form->username_element);
|
| password_val->SetString("password_element",
|
| password_form->password_element);
|
| - password_val->SetString("submit_element",
|
| - password_form->submit_element);
|
| + password_val->SetString("submit_element", password_form->submit_element);
|
| password_val->SetString("action_target", password_form->action.spec());
|
| password_val->SetBoolean("blacklist", password_form->blacklisted_by_user);
|
| passwords->Append(password_val);
|
| @@ -1684,6 +1683,66 @@ void AutomationProviderGetPasswordsObserver::OnPasswordStoreRequestDone(
|
| delete this;
|
| }
|
|
|
| +PasswordStoreLoginsChangedObserver::PasswordStoreLoginsChangedObserver(
|
| + AutomationProvider* automation,
|
| + IPC::Message* reply_message,
|
| + const std::string& result_key)
|
| + : automation_(automation->AsWeakPtr()),
|
| + reply_message_(reply_message),
|
| + result_key_(result_key),
|
| + done_event_(false, false) {
|
| + AddRef();
|
| +}
|
| +
|
| +PasswordStoreLoginsChangedObserver::~PasswordStoreLoginsChangedObserver() {
|
| + DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| +}
|
| +
|
| +void PasswordStoreLoginsChangedObserver::Init() {
|
| + DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| + BrowserThread::PostTask(
|
| + BrowserThread::DB,
|
| + FROM_HERE,
|
| + NewRunnableMethod(
|
| + this, &PasswordStoreLoginsChangedObserver::RegisterObserversTask));
|
| + done_event_.Wait();
|
| +}
|
| +
|
| +void PasswordStoreLoginsChangedObserver::RegisterObserversTask() {
|
| + DCHECK(BrowserThread::CurrentlyOn(BrowserThread::DB));
|
| + registrar_.Add(this, NotificationType::LOGINS_CHANGED,
|
| + NotificationService::AllSources());
|
| + done_event_.Signal();
|
| +}
|
| +
|
| +void PasswordStoreLoginsChangedObserver::Observe(
|
| + NotificationType type,
|
| + const NotificationSource& source,
|
| + const NotificationDetails& details) {
|
| + DCHECK(BrowserThread::CurrentlyOn(BrowserThread::DB));
|
| + DCHECK(type.value == NotificationType::LOGINS_CHANGED);
|
| +
|
| + registrar_.RemoveAll(); // Must be done from thread BrowserThread::DB.
|
| +
|
| + // Notify thread BrowserThread::UI that we're done listening.
|
| + BrowserThread::PostTask(
|
| + BrowserThread::UI,
|
| + FROM_HERE,
|
| + NewRunnableMethod(
|
| + this, &PasswordStoreLoginsChangedObserver::IndicateDone));
|
| +}
|
| +
|
| +void PasswordStoreLoginsChangedObserver::IndicateDone() {
|
| + DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| + if (automation_) {
|
| + scoped_ptr<DictionaryValue> return_value(new DictionaryValue);
|
| + return_value->SetBoolean(result_key_, true);
|
| + AutomationJSONReply(
|
| + automation_, reply_message_.release()).SendSuccess(return_value.get());
|
| + }
|
| + Release();
|
| +}
|
| +
|
| AutomationProviderBrowsingDataObserver::AutomationProviderBrowsingDataObserver(
|
| AutomationProvider* provider,
|
| IPC::Message* reply_message)
|
|
|