| 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/native_backend_gnome_x.h" | 5 #include "chrome/browser/password_manager/native_backend_gnome_x.h" |
| 6 | 6 |
| 7 #include <dlfcn.h> | 7 #include <dlfcn.h> |
| 8 #include <gnome-keyring.h> | 8 #include <gnome-keyring.h> |
| 9 #include <stddef.h> | 9 #include <stddef.h> |
| 10 #include <stdint.h> | 10 #include <stdint.h> |
| 11 | |
| 12 #include <map> | 11 #include <map> |
| 13 #include <string> | 12 #include <string> |
| 13 #include <utility> |
| 14 #include <vector> | 14 #include <vector> |
| 15 | 15 |
| 16 #include "base/logging.h" | 16 #include "base/logging.h" |
| 17 #include "base/memory/scoped_ptr.h" | 17 #include "base/memory/scoped_ptr.h" |
| 18 #include "base/metrics/histogram.h" | 18 #include "base/metrics/histogram.h" |
| 19 #include "base/strings/string_number_conversions.h" | 19 #include "base/strings/string_number_conversions.h" |
| 20 #include "base/strings/string_piece.h" | 20 #include "base/strings/string_piece.h" |
| 21 #include "base/strings/string_util.h" | 21 #include "base/strings/string_util.h" |
| 22 #include "base/strings/stringprintf.h" | 22 #include "base/strings/stringprintf.h" |
| 23 #include "base/strings/utf_string_conversions.h" | 23 #include "base/strings/utf_string_conversions.h" |
| (...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 161 form->skip_zero_click = uint_attr_map["skip_zero_click"]; | 161 form->skip_zero_click = uint_attr_map["skip_zero_click"]; |
| 162 form->generation_upload_status = | 162 form->generation_upload_status = |
| 163 static_cast<PasswordForm::GenerationUploadStatus>( | 163 static_cast<PasswordForm::GenerationUploadStatus>( |
| 164 uint_attr_map["generation_upload_status"]); | 164 uint_attr_map["generation_upload_status"]); |
| 165 if (!string_attr_map["form_data"].empty()) { | 165 if (!string_attr_map["form_data"].empty()) { |
| 166 bool success = DeserializeFormDataFromBase64String( | 166 bool success = DeserializeFormDataFromBase64String( |
| 167 string_attr_map["form_data"], &form->form_data); | 167 string_attr_map["form_data"], &form->form_data); |
| 168 FormDeserializationStatus status = success ? GNOME_SUCCESS : GNOME_FAILURE; | 168 FormDeserializationStatus status = success ? GNOME_SUCCESS : GNOME_FAILURE; |
| 169 LogFormDataDeserializationStatus(status); | 169 LogFormDataDeserializationStatus(status); |
| 170 } | 170 } |
| 171 return form.Pass(); | 171 return form; |
| 172 } | 172 } |
| 173 | 173 |
| 174 // Converts native credentials in |found| to PasswordForms. If not NULL, | 174 // Converts native credentials in |found| to PasswordForms. If not NULL, |
| 175 // |lookup_form| is used to filter out results -- only credentials with signon | 175 // |lookup_form| is used to filter out results -- only credentials with signon |
| 176 // realms passing the PSL matching against |lookup_form->signon_realm| will be | 176 // realms passing the PSL matching against |lookup_form->signon_realm| will be |
| 177 // kept. PSL matched results get their signon_realm, origin, and action | 177 // kept. PSL matched results get their signon_realm, origin, and action |
| 178 // rewritten to those of |lookup_form_|, with the original signon_realm saved | 178 // rewritten to those of |lookup_form_|, with the original signon_realm saved |
| 179 // into the result's original_signon_realm data member. | 179 // into the result's original_signon_realm data member. |
| 180 ScopedVector<PasswordForm> ConvertFormList(GList* found, | 180 ScopedVector<PasswordForm> ConvertFormList(GList* found, |
| 181 const PasswordForm* lookup_form) { | 181 const PasswordForm* lookup_form) { |
| (...skipping 16 matching lines...) Expand all Loading... |
| 198 continue; | 198 continue; |
| 199 } | 199 } |
| 200 psl_domain_match_metric = password_manager::PSL_DOMAIN_MATCH_FOUND; | 200 psl_domain_match_metric = password_manager::PSL_DOMAIN_MATCH_FOUND; |
| 201 form->is_public_suffix_match = true; | 201 form->is_public_suffix_match = true; |
| 202 } | 202 } |
| 203 if (data->secret) { | 203 if (data->secret) { |
| 204 form->password_value = UTF8ToUTF16(data->secret); | 204 form->password_value = UTF8ToUTF16(data->secret); |
| 205 } else { | 205 } else { |
| 206 LOG(WARNING) << "Unable to access password from list element!"; | 206 LOG(WARNING) << "Unable to access password from list element!"; |
| 207 } | 207 } |
| 208 forms.push_back(form.Pass()); | 208 forms.push_back(std::move(form)); |
| 209 } else { | 209 } else { |
| 210 LOG(WARNING) << "Could not initialize PasswordForm from attributes!"; | 210 LOG(WARNING) << "Could not initialize PasswordForm from attributes!"; |
| 211 } | 211 } |
| 212 } | 212 } |
| 213 if (lookup_form) { | 213 if (lookup_form) { |
| 214 const GURL signon_realm(lookup_form->signon_realm); | 214 const GURL signon_realm(lookup_form->signon_realm); |
| 215 std::string registered_domain = | 215 std::string registered_domain = |
| 216 password_manager::GetRegistryControlledDomain(signon_realm); | 216 password_manager::GetRegistryControlledDomain(signon_realm); |
| 217 UMA_HISTOGRAM_ENUMERATION( | 217 UMA_HISTOGRAM_ENUMERATION( |
| 218 "PasswordManager.PslDomainMatchTriggering", | 218 "PasswordManager.PslDomainMatchTriggering", |
| 219 password_manager::ShouldPSLDomainMatchingApply(registered_domain) | 219 password_manager::ShouldPSLDomainMatchingApply(registered_domain) |
| 220 ? psl_domain_match_metric | 220 ? psl_domain_match_metric |
| 221 : password_manager::PSL_DOMAIN_MATCH_NOT_USED, | 221 : password_manager::PSL_DOMAIN_MATCH_NOT_USED, |
| 222 password_manager::PSL_DOMAIN_MATCH_COUNT); | 222 password_manager::PSL_DOMAIN_MATCH_COUNT); |
| 223 } | 223 } |
| 224 return forms.Pass(); | 224 return forms; |
| 225 } | 225 } |
| 226 | 226 |
| 227 // Schema is analagous to the fields in PasswordForm. | 227 // Schema is analagous to the fields in PasswordForm. |
| 228 const GnomeKeyringPasswordSchema kGnomeSchema = { | 228 const GnomeKeyringPasswordSchema kGnomeSchema = { |
| 229 GNOME_KEYRING_ITEM_GENERIC_SECRET, { | 229 GNOME_KEYRING_ITEM_GENERIC_SECRET, { |
| 230 { "origin_url", GNOME_KEYRING_ATTRIBUTE_TYPE_STRING }, | 230 { "origin_url", GNOME_KEYRING_ATTRIBUTE_TYPE_STRING }, |
| 231 { "action_url", GNOME_KEYRING_ATTRIBUTE_TYPE_STRING }, | 231 { "action_url", GNOME_KEYRING_ATTRIBUTE_TYPE_STRING }, |
| 232 { "username_element", GNOME_KEYRING_ATTRIBUTE_TYPE_STRING }, | 232 { "username_element", GNOME_KEYRING_ATTRIBUTE_TYPE_STRING }, |
| 233 { "username_value", GNOME_KEYRING_ATTRIBUTE_TYPE_STRING }, | 233 { "username_value", GNOME_KEYRING_ATTRIBUTE_TYPE_STRING }, |
| 234 { "password_element", GNOME_KEYRING_ATTRIBUTE_TYPE_STRING }, | 234 { "password_element", GNOME_KEYRING_ATTRIBUTE_TYPE_STRING }, |
| (...skipping 227 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 462 | 462 |
| 463 GnomeKeyringResult GKRMethod::WaitResult() { | 463 GnomeKeyringResult GKRMethod::WaitResult() { |
| 464 DCHECK_CURRENTLY_ON(BrowserThread::DB); | 464 DCHECK_CURRENTLY_ON(BrowserThread::DB); |
| 465 event_.Wait(); | 465 event_.Wait(); |
| 466 return result_; | 466 return result_; |
| 467 } | 467 } |
| 468 | 468 |
| 469 GnomeKeyringResult GKRMethod::WaitResult(ScopedVector<PasswordForm>* forms) { | 469 GnomeKeyringResult GKRMethod::WaitResult(ScopedVector<PasswordForm>* forms) { |
| 470 DCHECK_CURRENTLY_ON(BrowserThread::DB); | 470 DCHECK_CURRENTLY_ON(BrowserThread::DB); |
| 471 event_.Wait(); | 471 event_.Wait(); |
| 472 *forms = forms_.Pass(); | 472 *forms = std::move(forms_); |
| 473 return result_; | 473 return result_; |
| 474 } | 474 } |
| 475 | 475 |
| 476 // static | 476 // static |
| 477 void GKRMethod::AppendString(GKRMethod::ScopedAttributeList* list, | 477 void GKRMethod::AppendString(GKRMethod::ScopedAttributeList* list, |
| 478 const char* name, | 478 const char* name, |
| 479 const char* value) { | 479 const char* value) { |
| 480 gnome_keyring_attribute_list_append_string(list->get(), name, value); | 480 gnome_keyring_attribute_list_append_string(list->get(), name, value); |
| 481 } | 481 } |
| 482 | 482 |
| (...skipping 319 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 802 ScopedVector<PasswordForm> forms; | 802 ScopedVector<PasswordForm> forms; |
| 803 if (!GetLoginsBetween(get_begin, get_end, date_to_compare, &forms)) | 803 if (!GetLoginsBetween(get_begin, get_end, date_to_compare, &forms)) |
| 804 return false; | 804 return false; |
| 805 | 805 |
| 806 for (size_t i = 0; i < forms.size(); ++i) { | 806 for (size_t i = 0; i < forms.size(); ++i) { |
| 807 if (!RemoveLogin(*forms[i], changes)) | 807 if (!RemoveLogin(*forms[i], changes)) |
| 808 return false; | 808 return false; |
| 809 } | 809 } |
| 810 return true; | 810 return true; |
| 811 } | 811 } |
| OLD | NEW |