| 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> |
| (...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 150 : base::Time::FromInternalValue(date_created); | 150 : base::Time::FromInternalValue(date_created); |
| 151 form->blacklisted_by_user = uint_attr_map["blacklisted_by_user"]; | 151 form->blacklisted_by_user = uint_attr_map["blacklisted_by_user"]; |
| 152 form->type = static_cast<PasswordForm::Type>(uint_attr_map["type"]); | 152 form->type = static_cast<PasswordForm::Type>(uint_attr_map["type"]); |
| 153 form->times_used = uint_attr_map["times_used"]; | 153 form->times_used = uint_attr_map["times_used"]; |
| 154 form->scheme = static_cast<PasswordForm::Scheme>(uint_attr_map["scheme"]); | 154 form->scheme = static_cast<PasswordForm::Scheme>(uint_attr_map["scheme"]); |
| 155 int64_t date_synced = 0; | 155 int64_t date_synced = 0; |
| 156 base::StringToInt64(string_attr_map["date_synced"], &date_synced); | 156 base::StringToInt64(string_attr_map["date_synced"], &date_synced); |
| 157 form->date_synced = base::Time::FromInternalValue(date_synced); | 157 form->date_synced = base::Time::FromInternalValue(date_synced); |
| 158 form->display_name = UTF8ToUTF16(string_attr_map["display_name"]); | 158 form->display_name = UTF8ToUTF16(string_attr_map["display_name"]); |
| 159 form->icon_url = GURL(string_attr_map["avatar_url"]); | 159 form->icon_url = GURL(string_attr_map["avatar_url"]); |
| 160 form->federation_url = GURL(string_attr_map["federation_url"]); | 160 form->federation_origin = |
| 161 url::Origin(GURL(string_attr_map["federation_url"])); |
| 161 form->skip_zero_click = uint_attr_map["skip_zero_click"]; | 162 form->skip_zero_click = uint_attr_map["skip_zero_click"]; |
| 162 form->generation_upload_status = | 163 form->generation_upload_status = |
| 163 static_cast<PasswordForm::GenerationUploadStatus>( | 164 static_cast<PasswordForm::GenerationUploadStatus>( |
| 164 uint_attr_map["generation_upload_status"]); | 165 uint_attr_map["generation_upload_status"]); |
| 165 if (!string_attr_map["form_data"].empty()) { | 166 if (!string_attr_map["form_data"].empty()) { |
| 166 bool success = DeserializeFormDataFromBase64String( | 167 bool success = DeserializeFormDataFromBase64String( |
| 167 string_attr_map["form_data"], &form->form_data); | 168 string_attr_map["form_data"], &form->form_data); |
| 168 FormDeserializationStatus status = success ? GNOME_SUCCESS : GNOME_FAILURE; | 169 FormDeserializationStatus status = success ? GNOME_SUCCESS : GNOME_FAILURE; |
| 169 LogFormDataDeserializationStatus(status); | 170 LogFormDataDeserializationStatus(status); |
| 170 } | 171 } |
| (...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 337 void GKRMethod::AddLogin(const PasswordForm& form, const char* app_string) { | 338 void GKRMethod::AddLogin(const PasswordForm& form, const char* app_string) { |
| 338 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 339 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 339 int64_t date_created = form.date_created.ToInternalValue(); | 340 int64_t date_created = form.date_created.ToInternalValue(); |
| 340 // If we are asked to save a password with 0 date, use the current time. | 341 // If we are asked to save a password with 0 date, use the current time. |
| 341 // We don't want to actually save passwords as though on January 1, 1601. | 342 // We don't want to actually save passwords as though on January 1, 1601. |
| 342 if (!date_created) | 343 if (!date_created) |
| 343 date_created = base::Time::Now().ToInternalValue(); | 344 date_created = base::Time::Now().ToInternalValue(); |
| 344 int64_t date_synced = form.date_synced.ToInternalValue(); | 345 int64_t date_synced = form.date_synced.ToInternalValue(); |
| 345 std::string form_data; | 346 std::string form_data; |
| 346 SerializeFormDataToBase64String(form.form_data, &form_data); | 347 SerializeFormDataToBase64String(form.form_data, &form_data); |
| 348 // clang-format off |
| 347 gnome_keyring_store_password( | 349 gnome_keyring_store_password( |
| 348 &kGnomeSchema, | 350 &kGnomeSchema, |
| 349 nullptr, // Default keyring. | 351 nullptr, // Default keyring. |
| 350 form.origin.spec().c_str(), // Display name. | 352 form.origin.spec().c_str(), // Display name. |
| 351 UTF16ToUTF8(form.password_value).c_str(), | 353 UTF16ToUTF8(form.password_value).c_str(), OnOperationDone, |
| 352 OnOperationDone, | 354 this, // data |
| 353 this, // data | |
| 354 nullptr, // destroy_data | 355 nullptr, // destroy_data |
| 355 "origin_url", form.origin.spec().c_str(), | 356 "origin_url", form.origin.spec().c_str(), |
| 356 "action_url", form.action.spec().c_str(), | 357 "action_url", form.action.spec().c_str(), |
| 357 "username_element", UTF16ToUTF8(form.username_element).c_str(), | 358 "username_element", UTF16ToUTF8(form.username_element).c_str(), |
| 358 "username_value", UTF16ToUTF8(form.username_value).c_str(), | 359 "username_value", UTF16ToUTF8(form.username_value).c_str(), |
| 359 "password_element", UTF16ToUTF8(form.password_element).c_str(), | 360 "password_element", UTF16ToUTF8(form.password_element).c_str(), |
| 360 "submit_element", UTF16ToUTF8(form.submit_element).c_str(), | 361 "submit_element", UTF16ToUTF8(form.submit_element).c_str(), |
| 361 "signon_realm", form.signon_realm.c_str(), | 362 "signon_realm", form.signon_realm.c_str(), |
| 362 "ssl_valid", form.ssl_valid, | 363 "ssl_valid", form.ssl_valid, |
| 363 "preferred", form.preferred, | 364 "preferred", form.preferred, |
| 364 "date_created", base::Int64ToString(date_created).c_str(), | 365 "date_created", base::Int64ToString(date_created).c_str(), |
| 365 "blacklisted_by_user", form.blacklisted_by_user, | 366 "blacklisted_by_user", form.blacklisted_by_user, |
| 366 "type", form.type, | 367 "type", form.type, |
| 367 "times_used", form.times_used, | 368 "times_used", form.times_used, |
| 368 "scheme", form.scheme, | 369 "scheme", form.scheme, |
| 369 "date_synced", base::Int64ToString(date_synced).c_str(), | 370 "date_synced", base::Int64ToString(date_synced).c_str(), |
| 370 "display_name", UTF16ToUTF8(form.display_name).c_str(), | 371 "display_name", UTF16ToUTF8(form.display_name).c_str(), |
| 371 "avatar_url", form.icon_url.spec().c_str(), | 372 "avatar_url", form.icon_url.spec().c_str(), |
| 372 "federation_url", form.federation_url.spec().c_str(), | 373 "federation_url", form.federation_origin.Serialize().c_str(), |
| 373 "skip_zero_click", form.skip_zero_click, | 374 "skip_zero_click", form.skip_zero_click, |
| 374 "generation_upload_status", form.generation_upload_status, | 375 "generation_upload_status", form.generation_upload_status, |
| 375 "form_data", form_data.c_str(), | 376 "form_data", form_data.c_str(), |
| 376 "application", app_string, | 377 "application", app_string, |
| 377 nullptr); | 378 nullptr); |
| 379 // clang-format on |
| 378 } | 380 } |
| 379 | 381 |
| 380 void GKRMethod::LoginSearch(const PasswordForm& form, | 382 void GKRMethod::LoginSearch(const PasswordForm& form, |
| 381 const char* app_string) { | 383 const char* app_string) { |
| 382 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 384 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 383 lookup_form_.reset(nullptr); | 385 lookup_form_.reset(nullptr); |
| 384 // Search GNOME Keyring for matching passwords to update. | 386 // Search GNOME Keyring for matching passwords to update. |
| 385 ScopedAttributeList attrs(gnome_keyring_attribute_list_new()); | 387 ScopedAttributeList attrs(gnome_keyring_attribute_list_new()); |
| 386 AppendString(&attrs, "origin_url", form.origin.spec()); | 388 AppendString(&attrs, "origin_url", form.origin.spec()); |
| 387 AppendString(&attrs, "username_element", UTF16ToUTF8(form.username_element)); | 389 AppendString(&attrs, "username_element", UTF16ToUTF8(form.username_element)); |
| (...skipping 414 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 802 ScopedVector<PasswordForm> forms; | 804 ScopedVector<PasswordForm> forms; |
| 803 if (!GetLoginsBetween(get_begin, get_end, date_to_compare, &forms)) | 805 if (!GetLoginsBetween(get_begin, get_end, date_to_compare, &forms)) |
| 804 return false; | 806 return false; |
| 805 | 807 |
| 806 for (size_t i = 0; i < forms.size(); ++i) { | 808 for (size_t i = 0; i < forms.size(); ++i) { |
| 807 if (!RemoveLogin(*forms[i], changes)) | 809 if (!RemoveLogin(*forms[i], changes)) |
| 808 return false; | 810 return false; |
| 809 } | 811 } |
| 810 return true; | 812 return true; |
| 811 } | 813 } |
| OLD | NEW |