| OLD | NEW |
| 1 // Copyright (c) 2015 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2015 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_libsecret.h" | 5 #include "chrome/browser/password_manager/native_backend_libsecret.h" |
| 6 | 6 |
| 7 #include <dlfcn.h> | 7 #include <dlfcn.h> |
| 8 #include <stddef.h> | 8 #include <stddef.h> |
| 9 #include <stdint.h> | 9 #include <stdint.h> |
| 10 | 10 |
| 11 #include <limits> | 11 #include <limits> |
| 12 #include <list> | 12 #include <list> |
| 13 #include <utility> | 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/stringprintf.h" | 20 #include "base/strings/stringprintf.h" |
| 21 #include "base/strings/utf_string_conversions.h" | 21 #include "base/strings/utf_string_conversions.h" |
| 22 #include "components/password_manager/core/browser/password_manager_metrics_util
.h" | 22 #include "components/password_manager/core/browser/password_manager_metrics_util
.h" |
| 23 #include "components/password_manager/core/browser/password_manager_util.h" | 23 #include "components/password_manager/core/browser/password_manager_util.h" |
| 24 #include "url/origin.h" |
| 24 | 25 |
| 25 using autofill::PasswordForm; | 26 using autofill::PasswordForm; |
| 26 using base::UTF8ToUTF16; | 27 using base::UTF8ToUTF16; |
| 27 using base::UTF16ToUTF8; | 28 using base::UTF16ToUTF8; |
| 28 | 29 |
| 29 namespace { | 30 namespace { |
| 30 const char kEmptyString[] = ""; | 31 const char kEmptyString[] = ""; |
| 31 const int kMaxPossibleTimeTValue = std::numeric_limits<int>::max(); | 32 const int kMaxPossibleTimeTValue = std::numeric_limits<int>::max(); |
| 32 } // namespace | 33 } // namespace |
| 33 | 34 |
| (...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 185 form->times_used = GetUintFromAttributes(attrs, "times_used"); | 186 form->times_used = GetUintFromAttributes(attrs, "times_used"); |
| 186 form->scheme = | 187 form->scheme = |
| 187 static_cast<PasswordForm::Scheme>(GetUintFromAttributes(attrs, "scheme")); | 188 static_cast<PasswordForm::Scheme>(GetUintFromAttributes(attrs, "scheme")); |
| 188 int64_t date_synced = 0; | 189 int64_t date_synced = 0; |
| 189 base::StringToInt64(GetStringFromAttributes(attrs, "date_synced"), | 190 base::StringToInt64(GetStringFromAttributes(attrs, "date_synced"), |
| 190 &date_synced); | 191 &date_synced); |
| 191 form->date_synced = base::Time::FromInternalValue(date_synced); | 192 form->date_synced = base::Time::FromInternalValue(date_synced); |
| 192 form->display_name = | 193 form->display_name = |
| 193 UTF8ToUTF16(GetStringFromAttributes(attrs, "display_name")); | 194 UTF8ToUTF16(GetStringFromAttributes(attrs, "display_name")); |
| 194 form->icon_url = GURL(GetStringFromAttributes(attrs, "avatar_url")); | 195 form->icon_url = GURL(GetStringFromAttributes(attrs, "avatar_url")); |
| 195 form->federation_url = GURL(GetStringFromAttributes(attrs, "federation_url")); | 196 form->federation_origin = |
| 197 url::Origin(GURL(GetStringFromAttributes(attrs, "federation_url"))); |
| 196 form->skip_zero_click = GetUintFromAttributes(attrs, "skip_zero_click"); | 198 form->skip_zero_click = GetUintFromAttributes(attrs, "skip_zero_click"); |
| 197 form->generation_upload_status = | 199 form->generation_upload_status = |
| 198 static_cast<PasswordForm::GenerationUploadStatus>( | 200 static_cast<PasswordForm::GenerationUploadStatus>( |
| 199 GetUintFromAttributes(attrs, "generation_upload_status")); | 201 GetUintFromAttributes(attrs, "generation_upload_status")); |
| 200 base::StringPiece encoded_form_data = | 202 base::StringPiece encoded_form_data = |
| 201 GetStringFromAttributes(attrs, "form_data"); | 203 GetStringFromAttributes(attrs, "form_data"); |
| 202 if (!encoded_form_data.empty()) { | 204 if (!encoded_form_data.empty()) { |
| 203 bool success = DeserializeFormDataFromBase64String(encoded_form_data, | 205 bool success = DeserializeFormDataFromBase64String(encoded_form_data, |
| 204 &form->form_data); | 206 &form->form_data); |
| 205 password_manager::metrics_util::FormDeserializationStatus status = | 207 password_manager::metrics_util::FormDeserializationStatus status = |
| (...skipping 235 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 441 bool NativeBackendLibsecret::RawAddLogin(const PasswordForm& form) { | 443 bool NativeBackendLibsecret::RawAddLogin(const PasswordForm& form) { |
| 442 int64_t date_created = form.date_created.ToInternalValue(); | 444 int64_t date_created = form.date_created.ToInternalValue(); |
| 443 // If we are asked to save a password with 0 date, use the current time. | 445 // If we are asked to save a password with 0 date, use the current time. |
| 444 // We don't want to actually save passwords as though on January 1, 1601. | 446 // We don't want to actually save passwords as though on January 1, 1601. |
| 445 if (!date_created) | 447 if (!date_created) |
| 446 date_created = base::Time::Now().ToInternalValue(); | 448 date_created = base::Time::Now().ToInternalValue(); |
| 447 int64_t date_synced = form.date_synced.ToInternalValue(); | 449 int64_t date_synced = form.date_synced.ToInternalValue(); |
| 448 std::string form_data; | 450 std::string form_data; |
| 449 SerializeFormDataToBase64String(form.form_data, &form_data); | 451 SerializeFormDataToBase64String(form.form_data, &form_data); |
| 450 GError* error = nullptr; | 452 GError* error = nullptr; |
| 453 // clang-format off |
| 451 secret_password_store_sync( | 454 secret_password_store_sync( |
| 452 &kLibsecretSchema, | 455 &kLibsecretSchema, |
| 453 nullptr, // Default collection. | 456 nullptr, // Default collection. |
| 454 form.origin.spec().c_str(), // Display name. | 457 form.origin.spec().c_str(), // Display name. |
| 455 UTF16ToUTF8(form.password_value).c_str(), | 458 UTF16ToUTF8(form.password_value).c_str(), |
| 456 nullptr, // no cancellable ojbect | 459 nullptr, // no cancellable ojbect |
| 457 &error, | 460 &error, |
| 458 "origin_url", form.origin.spec().c_str(), | 461 "origin_url", form.origin.spec().c_str(), |
| 459 "action_url", form.action.spec().c_str(), | 462 "action_url", form.action.spec().c_str(), |
| 460 "username_element", UTF16ToUTF8(form.username_element).c_str(), | 463 "username_element", UTF16ToUTF8(form.username_element).c_str(), |
| 461 "username_value", UTF16ToUTF8(form.username_value).c_str(), | 464 "username_value", UTF16ToUTF8(form.username_value).c_str(), |
| 462 "password_element", UTF16ToUTF8(form.password_element).c_str(), | 465 "password_element", UTF16ToUTF8(form.password_element).c_str(), |
| 463 "submit_element", UTF16ToUTF8(form.submit_element).c_str(), | 466 "submit_element", UTF16ToUTF8(form.submit_element).c_str(), |
| 464 "signon_realm", form.signon_realm.c_str(), | 467 "signon_realm", form.signon_realm.c_str(), |
| 465 "ssl_valid", form.ssl_valid, | 468 "ssl_valid", form.ssl_valid, |
| 466 "preferred", form.preferred, | 469 "preferred", form.preferred, |
| 467 "date_created", base::Int64ToString(date_created).c_str(), | 470 "date_created", base::Int64ToString(date_created).c_str(), |
| 468 "blacklisted_by_user", form.blacklisted_by_user, | 471 "blacklisted_by_user", form.blacklisted_by_user, |
| 469 "type", form.type, | 472 "type", form.type, |
| 470 "times_used", form.times_used, | 473 "times_used", form.times_used, |
| 471 "scheme", form.scheme, | 474 "scheme", form.scheme, |
| 472 "date_synced", base::Int64ToString(date_synced).c_str(), | 475 "date_synced", base::Int64ToString(date_synced).c_str(), |
| 473 "display_name", UTF16ToUTF8(form.display_name).c_str(), | 476 "display_name", UTF16ToUTF8(form.display_name).c_str(), |
| 474 "avatar_url", form.icon_url.spec().c_str(), | 477 "avatar_url", form.icon_url.spec().c_str(), |
| 475 "federation_url", form.federation_url.spec().c_str(), | 478 "federation_url", form.federation_origin.Serialize().c_str(), |
| 476 "skip_zero_click", form.skip_zero_click, | 479 "skip_zero_click", form.skip_zero_click, |
| 477 "generation_upload_status", form.generation_upload_status, | 480 "generation_upload_status", form.generation_upload_status, |
| 478 "form_data", form_data.c_str(), | 481 "form_data", form_data.c_str(), |
| 479 "application", app_string_.c_str(), nullptr); | 482 "application", app_string_.c_str(), |
| 483 nullptr); |
| 484 // clang-format on |
| 480 | 485 |
| 481 if (error) { | 486 if (error) { |
| 482 LOG(ERROR) << "Libsecret add raw login failed: " << error->message; | 487 LOG(ERROR) << "Libsecret add raw login failed: " << error->message; |
| 483 g_error_free(error); | 488 g_error_free(error); |
| 484 return false; | 489 return false; |
| 485 } | 490 } |
| 486 return true; | 491 return true; |
| 487 } | 492 } |
| 488 | 493 |
| 489 bool NativeBackendLibsecret::GetAutofillableLogins( | 494 bool NativeBackendLibsecret::GetAutofillableLogins( |
| (...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 647 UMA_HISTOGRAM_ENUMERATION( | 652 UMA_HISTOGRAM_ENUMERATION( |
| 648 "PasswordManager.PslDomainMatchTriggering", | 653 "PasswordManager.PslDomainMatchTriggering", |
| 649 password_manager::ShouldPSLDomainMatchingApply(registered_domain) | 654 password_manager::ShouldPSLDomainMatchingApply(registered_domain) |
| 650 ? psl_domain_match_metric | 655 ? psl_domain_match_metric |
| 651 : password_manager::PSL_DOMAIN_MATCH_NOT_USED, | 656 : password_manager::PSL_DOMAIN_MATCH_NOT_USED, |
| 652 password_manager::PSL_DOMAIN_MATCH_COUNT); | 657 password_manager::PSL_DOMAIN_MATCH_COUNT); |
| 653 } | 658 } |
| 654 g_list_free(found); | 659 g_list_free(found); |
| 655 return forms; | 660 return forms; |
| 656 } | 661 } |
| OLD | NEW |