| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/password_manager/password_store_win.h" | 5 #include "chrome/browser/password_manager/password_store_win.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 | 8 |
| 9 #include <map> | 9 #include <map> |
| 10 #include <memory> | 10 #include <memory> |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 63 | 63 |
| 64 // Gets logins from IE7 if no others are found. Also copies them into | 64 // Gets logins from IE7 if no others are found. Also copies them into |
| 65 // Chrome's WebDatabase so we don't need to look next time. | 65 // Chrome's WebDatabase so we don't need to look next time. |
| 66 std::vector<std::unique_ptr<PasswordForm>> GetIE7Results( | 66 std::vector<std::unique_ptr<PasswordForm>> GetIE7Results( |
| 67 const WDTypedResult* result, | 67 const WDTypedResult* result, |
| 68 const PasswordStore::FormDigest& form); | 68 const PasswordStore::FormDigest& form); |
| 69 | 69 |
| 70 // WebDataServiceConsumer implementation. | 70 // WebDataServiceConsumer implementation. |
| 71 void OnWebDataServiceRequestDone( | 71 void OnWebDataServiceRequestDone( |
| 72 PasswordWebDataService::Handle handle, | 72 PasswordWebDataService::Handle handle, |
| 73 const WDTypedResult* result) override; | 73 std::unique_ptr<WDTypedResult> result) override; |
| 74 | 74 |
| 75 scoped_refptr<PasswordWebDataService> web_data_service_; | 75 scoped_refptr<PasswordWebDataService> web_data_service_; |
| 76 | 76 |
| 77 // This creates a cycle between us and PasswordStore. The cycle is broken | 77 // This creates a cycle between us and PasswordStore. The cycle is broken |
| 78 // from PasswordStoreWin::ShutdownOnUIThread, which deletes us. | 78 // from PasswordStoreWin::ShutdownOnUIThread, which deletes us. |
| 79 scoped_refptr<PasswordStoreWin> password_store_; | 79 scoped_refptr<PasswordStoreWin> password_store_; |
| 80 | 80 |
| 81 PendingRequestMap pending_requests_; | 81 PendingRequestMap pending_requests_; |
| 82 | 82 |
| 83 DISALLOW_COPY_AND_ASSIGN(DBHandler); | 83 DISALLOW_COPY_AND_ASSIGN(DBHandler); |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 139 password_store_->AddLoginImpl(*matched_form); | 139 password_store_->AddLoginImpl(*matched_form); |
| 140 matched_forms.push_back(std::move(matched_form)); | 140 matched_forms.push_back(std::move(matched_form)); |
| 141 } | 141 } |
| 142 } | 142 } |
| 143 } | 143 } |
| 144 return matched_forms; | 144 return matched_forms; |
| 145 } | 145 } |
| 146 | 146 |
| 147 void PasswordStoreWin::DBHandler::OnWebDataServiceRequestDone( | 147 void PasswordStoreWin::DBHandler::OnWebDataServiceRequestDone( |
| 148 PasswordWebDataService::Handle handle, | 148 PasswordWebDataService::Handle handle, |
| 149 const WDTypedResult* result) { | 149 std::unique_ptr<WDTypedResult> result) { |
| 150 // TODO(robliao): Remove ScopedTracker below once https://crbug.com/422460 is | 150 // TODO(robliao): Remove ScopedTracker below once https://crbug.com/422460 is |
| 151 // fixed. | 151 // fixed. |
| 152 tracked_objects::ScopedTracker tracking_profile( | 152 tracked_objects::ScopedTracker tracking_profile( |
| 153 FROM_HERE_WITH_EXPLICIT_FUNCTION( | 153 FROM_HERE_WITH_EXPLICIT_FUNCTION( |
| 154 "422460 PasswordStoreWin::DBHandler::OnWebDataServiceRequestDone")); | 154 "422460 PasswordStoreWin::DBHandler::OnWebDataServiceRequestDone")); |
| 155 | 155 |
| 156 DCHECK_CURRENTLY_ON(BrowserThread::DB); | 156 DCHECK_CURRENTLY_ON(BrowserThread::DB); |
| 157 | 157 |
| 158 PendingRequestMap::iterator i = pending_requests_.find(handle); | 158 PendingRequestMap::iterator i = pending_requests_.find(handle); |
| 159 DCHECK(i != pending_requests_.end()); | 159 DCHECK(i != pending_requests_.end()); |
| 160 | 160 |
| 161 ResultCallback result_callback(i->second.result_callback); | 161 ResultCallback result_callback(i->second.result_callback); |
| 162 std::unique_ptr<PasswordStore::FormDigest> form = std::move(i->second.form); | 162 std::unique_ptr<PasswordStore::FormDigest> form = std::move(i->second.form); |
| 163 pending_requests_.erase(i); | 163 pending_requests_.erase(i); |
| 164 | 164 |
| 165 if (!result) { | 165 if (!result) { |
| 166 // The WDS returns NULL if it is shutting down. Run callback with empty | 166 // The WDS returns NULL if it is shutting down. Run callback with empty |
| 167 // result. | 167 // result. |
| 168 result_callback.Run(std::vector<std::unique_ptr<PasswordForm>>()); | 168 result_callback.Run(std::vector<std::unique_ptr<PasswordForm>>()); |
| 169 return; | 169 return; |
| 170 } | 170 } |
| 171 | 171 |
| 172 DCHECK_EQ(PASSWORD_IE7_RESULT, result->GetType()); | 172 DCHECK_EQ(PASSWORD_IE7_RESULT, result->GetType()); |
| 173 result_callback.Run(GetIE7Results(result, *form)); | 173 result_callback.Run(GetIE7Results(result.get(), *form)); |
| 174 } | 174 } |
| 175 | 175 |
| 176 PasswordStoreWin::PasswordStoreWin( | 176 PasswordStoreWin::PasswordStoreWin( |
| 177 scoped_refptr<base::SingleThreadTaskRunner> main_thread_runner, | 177 scoped_refptr<base::SingleThreadTaskRunner> main_thread_runner, |
| 178 scoped_refptr<base::SingleThreadTaskRunner> db_thread_runner, | 178 scoped_refptr<base::SingleThreadTaskRunner> db_thread_runner, |
| 179 std::unique_ptr<password_manager::LoginDatabase> login_db, | 179 std::unique_ptr<password_manager::LoginDatabase> login_db, |
| 180 const scoped_refptr<PasswordWebDataService>& web_data_service) | 180 const scoped_refptr<PasswordWebDataService>& web_data_service) |
| 181 : PasswordStoreDefault(main_thread_runner, | 181 : PasswordStoreDefault(main_thread_runner, |
| 182 db_thread_runner, | 182 db_thread_runner, |
| 183 std::move(login_db)) { | 183 std::move(login_db)) { |
| (...skipping 30 matching lines...) Expand all Loading... |
| 214 std::vector<std::unique_ptr<PasswordForm>> matched_forms( | 214 std::vector<std::unique_ptr<PasswordForm>> matched_forms( |
| 215 FillMatchingLogins(form)); | 215 FillMatchingLogins(form)); |
| 216 if (matched_forms.empty() && db_handler_) { | 216 if (matched_forms.empty() && db_handler_) { |
| 217 db_handler_->GetIE7Login( | 217 db_handler_->GetIE7Login( |
| 218 form, base::Bind(&GetLoginsRequest::NotifyConsumerWithResults, | 218 form, base::Bind(&GetLoginsRequest::NotifyConsumerWithResults, |
| 219 base::Owned(request.release()))); | 219 base::Owned(request.release()))); |
| 220 } else { | 220 } else { |
| 221 request->NotifyConsumerWithResults(std::move(matched_forms)); | 221 request->NotifyConsumerWithResults(std::move(matched_forms)); |
| 222 } | 222 } |
| 223 } | 223 } |
| OLD | NEW |