| Index: chrome/browser/password_manager/password_form_manager_win.cc
|
| diff --git a/chrome/browser/password_manager/password_form_manager_win.cc b/chrome/browser/password_manager/password_form_manager_win.cc
|
| index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..a075617e074bbf67590cced8793e04f11d860618 100644
|
| --- a/chrome/browser/password_manager/password_form_manager_win.cc
|
| +++ b/chrome/browser/password_manager/password_form_manager_win.cc
|
| @@ -0,0 +1,77 @@
|
| +// Copyright (c) 2009 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#include "chrome/browser/password_manager/password_form_manager.h"
|
| +
|
| +#include "base/string_util.h"
|
| +#include "chrome/browser/password_manager/ie7_password.h"
|
| +#include "chrome/browser/password_manager/password_manager.h"
|
| +#include "chrome/browser/profile.h"
|
| +
|
| +void PasswordFormManager::FetchMatchingIE7LoginFromWebDatabase() {
|
| + DCHECK_EQ(state_, PRE_MATCHING_PHASE);
|
| + DCHECK(!pending_login_query_);
|
| + state_ = MATCHING_PHASE;
|
| + WebDataService* web_data_service =
|
| + profile_->GetWebDataService(Profile::EXPLICIT_ACCESS);
|
| + if (!web_data_service) {
|
| + NOTREACHED();
|
| + return;
|
| + }
|
| +
|
| + IE7PasswordInfo info;
|
| + std::wstring url = ASCIIToWide(observed_form_.origin.spec());
|
| + info.url_hash = ie7_password::GetUrlHash(url);
|
| + pending_login_query_ = web_data_service->GetIE7Login(info, this);
|
| +}
|
| +
|
| +void PasswordFormManager::OnIE7RequestDone(WebDataService::Handle h,
|
| + const WDTypedResult* result) {
|
| + // Get the result from the database into a usable form.
|
| + const WDResult<IE7PasswordInfo>* r =
|
| + static_cast<const WDResult<IE7PasswordInfo>*>(result);
|
| + IE7PasswordInfo result_value = r->GetValue();
|
| +
|
| + state_ = POST_MATCHING_PHASE;
|
| +
|
| + if (!result_value.encrypted_data.empty()) {
|
| + // We got a result.
|
| + // Delete the entry. If it's good we will add it to the real saved password
|
| + // table.
|
| + WebDataService* web_data_service =
|
| + profile_->GetWebDataService(Profile::EXPLICIT_ACCESS);
|
| + if (!web_data_service) {
|
| + NOTREACHED();
|
| + return;
|
| + }
|
| + web_data_service->RemoveIE7Login(result_value);
|
| +
|
| + std::wstring username;
|
| + std::wstring password;
|
| + std::wstring url = ASCIIToWide(observed_form_.origin.spec());
|
| + if (!ie7_password::DecryptPassword(url, result_value.encrypted_data,
|
| + &username, &password)) {
|
| + return;
|
| + }
|
| +
|
| + PasswordForm* auto_fill = new PasswordForm(observed_form_);
|
| + auto_fill->username_value = username;
|
| + auto_fill->password_value = password;
|
| + auto_fill->preferred = true;
|
| + auto_fill->ssl_valid = observed_form_.origin.SchemeIsSecure();
|
| + auto_fill->date_created = result_value.date_created;
|
| + // Add this PasswordForm to the saved password table.
|
| + web_data_service->AddLogin(*auto_fill);
|
| +
|
| + if (IgnoreResult(*auto_fill)) {
|
| + delete auto_fill;
|
| + return;
|
| + }
|
| +
|
| + best_matches_[auto_fill->username_value] = auto_fill;
|
| + preferred_match_ = auto_fill;
|
| + password_manager_->Autofill(observed_form_, best_matches_,
|
| + preferred_match_);
|
| + }
|
| +}
|
|
|