Chromium Code Reviews| 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 <list> | 8 #include <list> |
| 9 | 9 |
| 10 #include "base/basictypes.h" | 10 #include "base/basictypes.h" |
| (...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 111 {"preferred", SECRET_SCHEMA_ATTRIBUTE_INTEGER}, | 111 {"preferred", SECRET_SCHEMA_ATTRIBUTE_INTEGER}, |
| 112 {"date_created", SECRET_SCHEMA_ATTRIBUTE_STRING}, | 112 {"date_created", SECRET_SCHEMA_ATTRIBUTE_STRING}, |
| 113 {"blacklisted_by_user", SECRET_SCHEMA_ATTRIBUTE_INTEGER}, | 113 {"blacklisted_by_user", SECRET_SCHEMA_ATTRIBUTE_INTEGER}, |
| 114 {"scheme", SECRET_SCHEMA_ATTRIBUTE_INTEGER}, | 114 {"scheme", SECRET_SCHEMA_ATTRIBUTE_INTEGER}, |
| 115 {"type", SECRET_SCHEMA_ATTRIBUTE_INTEGER}, | 115 {"type", SECRET_SCHEMA_ATTRIBUTE_INTEGER}, |
| 116 {"times_used", SECRET_SCHEMA_ATTRIBUTE_INTEGER}, | 116 {"times_used", SECRET_SCHEMA_ATTRIBUTE_INTEGER}, |
| 117 {"date_synced", SECRET_SCHEMA_ATTRIBUTE_STRING}, | 117 {"date_synced", SECRET_SCHEMA_ATTRIBUTE_STRING}, |
| 118 {"display_name", SECRET_SCHEMA_ATTRIBUTE_STRING}, | 118 {"display_name", SECRET_SCHEMA_ATTRIBUTE_STRING}, |
| 119 {"avatar_url", SECRET_SCHEMA_ATTRIBUTE_STRING}, | 119 {"avatar_url", SECRET_SCHEMA_ATTRIBUTE_STRING}, |
| 120 {"federation_url", SECRET_SCHEMA_ATTRIBUTE_STRING}, | 120 {"federation_url", SECRET_SCHEMA_ATTRIBUTE_STRING}, |
| 121 {"is_zero_click", SECRET_SCHEMA_ATTRIBUTE_INTEGER}, | 121 {"skip_next_zero_click", SECRET_SCHEMA_ATTRIBUTE_INTEGER}, |
|
Mike West
2015/02/03 14:15:41
Ditto.
vasilii
2015/02/03 19:49:17
As libsecret is just a wrapper around Gnome keyrin
| |
| 122 // This field is always "chrome-profile_id" so that we can search for it. | 122 // This field is always "chrome-profile_id" so that we can search for it. |
| 123 {"application", SECRET_SCHEMA_ATTRIBUTE_STRING}, | 123 {"application", SECRET_SCHEMA_ATTRIBUTE_STRING}, |
| 124 {nullptr, SECRET_SCHEMA_ATTRIBUTE_STRING}}}; | 124 {nullptr, SECRET_SCHEMA_ATTRIBUTE_STRING}}}; |
| 125 | 125 |
| 126 const char* GetStringFromAttributes(GHashTable* attrs, const char* keyname) { | 126 const char* GetStringFromAttributes(GHashTable* attrs, const char* keyname) { |
| 127 gpointer value = g_hash_table_lookup(attrs, keyname); | 127 gpointer value = g_hash_table_lookup(attrs, keyname); |
| 128 return value ? static_cast<char*>(value) : kEmptyString; | 128 return value ? static_cast<char*>(value) : kEmptyString; |
| 129 } | 129 } |
| 130 | 130 |
| 131 uint32_t GetUintFromAttributes(GHashTable* attrs, const char* keyname) { | 131 uint32_t GetUintFromAttributes(GHashTable* attrs, const char* keyname) { |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 173 form->scheme = | 173 form->scheme = |
| 174 static_cast<PasswordForm::Scheme>(GetUintFromAttributes(attrs, "scheme")); | 174 static_cast<PasswordForm::Scheme>(GetUintFromAttributes(attrs, "scheme")); |
| 175 int64 date_synced = 0; | 175 int64 date_synced = 0; |
| 176 base::StringToInt64(GetStringFromAttributes(attrs, "date_synced"), | 176 base::StringToInt64(GetStringFromAttributes(attrs, "date_synced"), |
| 177 &date_synced); | 177 &date_synced); |
| 178 form->date_synced = base::Time::FromInternalValue(date_synced); | 178 form->date_synced = base::Time::FromInternalValue(date_synced); |
| 179 form->display_name = | 179 form->display_name = |
| 180 UTF8ToUTF16(GetStringFromAttributes(attrs, "display_name")); | 180 UTF8ToUTF16(GetStringFromAttributes(attrs, "display_name")); |
| 181 form->avatar_url = GURL(GetStringFromAttributes(attrs, "avatar_url")); | 181 form->avatar_url = GURL(GetStringFromAttributes(attrs, "avatar_url")); |
| 182 form->federation_url = GURL(GetStringFromAttributes(attrs, "federation_url")); | 182 form->federation_url = GURL(GetStringFromAttributes(attrs, "federation_url")); |
| 183 form->is_zero_click = GetUintFromAttributes(attrs, "is_zero_click"); | 183 form->skip_next_zero_click = |
| 184 GetUintFromAttributes(attrs, "skip_next_zero_click"); | |
| 184 | 185 |
| 185 return form.Pass(); | 186 return form.Pass(); |
| 186 } | 187 } |
| 187 | 188 |
| 188 class LibsecretAttributesBuilder { | 189 class LibsecretAttributesBuilder { |
| 189 public: | 190 public: |
| 190 LibsecretAttributesBuilder(); | 191 LibsecretAttributesBuilder(); |
| 191 ~LibsecretAttributesBuilder(); | 192 ~LibsecretAttributesBuilder(); |
| 192 void Append(const std::string& name, const std::string& value); | 193 void Append(const std::string& name, const std::string& value); |
| 193 void Append(const std::string& name, int64 value); | 194 void Append(const std::string& name, int64 value); |
| (...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 403 if (!date_created) | 404 if (!date_created) |
| 404 date_created = time(nullptr); | 405 date_created = time(nullptr); |
| 405 int64 date_synced = form.date_synced.ToInternalValue(); | 406 int64 date_synced = form.date_synced.ToInternalValue(); |
| 406 GError* error = nullptr; | 407 GError* error = nullptr; |
| 407 secret_password_store_sync( | 408 secret_password_store_sync( |
| 408 &kLibsecretSchema, | 409 &kLibsecretSchema, |
| 409 nullptr, // Default collection. | 410 nullptr, // Default collection. |
| 410 form.origin.spec().c_str(), // Display name. | 411 form.origin.spec().c_str(), // Display name. |
| 411 UTF16ToUTF8(form.password_value).c_str(), | 412 UTF16ToUTF8(form.password_value).c_str(), |
| 412 nullptr, // no cancellable ojbect | 413 nullptr, // no cancellable ojbect |
| 413 &error, "origin_url", form.origin.spec().c_str(), "action_url", | 414 &error, |
|
Mike West
2015/02/03 14:15:41
Thanks for reformatting this. It's a good deal mor
vasilii
2015/02/03 19:49:17
Acknowledged.
| |
| 414 form.action.spec().c_str(), "username_element", | 415 "origin_url", form.origin.spec().c_str(), |
| 415 UTF16ToUTF8(form.username_element).c_str(), "username_value", | 416 "action_url", form.action.spec().c_str(), |
| 416 UTF16ToUTF8(form.username_value).c_str(), "password_element", | 417 "username_element", UTF16ToUTF8(form.username_element).c_str(), |
| 417 UTF16ToUTF8(form.password_element).c_str(), "submit_element", | 418 "username_value", UTF16ToUTF8(form.username_value).c_str(), |
| 418 UTF16ToUTF8(form.submit_element).c_str(), "signon_realm", | 419 "password_element", UTF16ToUTF8(form.password_element).c_str(), |
| 419 form.signon_realm.c_str(), "ssl_valid", form.ssl_valid, "preferred", | 420 "submit_element", UTF16ToUTF8(form.submit_element).c_str(), |
| 420 form.preferred, "date_created", base::Int64ToString(date_created).c_str(), | 421 "signon_realm", form.signon_realm.c_str(), |
| 421 "blacklisted_by_user", form.blacklisted_by_user, "type", form.type, | 422 "ssl_valid", form.ssl_valid, |
| 422 "times_used", form.times_used, "scheme", form.scheme, "date_synced", | 423 "preferred", form.preferred, |
| 423 base::Int64ToString(date_synced).c_str(), "display_name", | 424 "date_created", base::Int64ToString(date_created).c_str(), |
| 424 UTF16ToUTF8(form.display_name).c_str(), "avatar_url", | 425 "blacklisted_by_user", form.blacklisted_by_user, |
| 425 form.avatar_url.spec().c_str(), "federation_url", | 426 "type", form.type, |
| 426 form.federation_url.spec().c_str(), "is_zero_click", form.is_zero_click, | 427 "times_used", form.times_used, |
| 428 "scheme", form.scheme, | |
| 429 "date_synced", base::Int64ToString(date_synced).c_str(), | |
| 430 "display_name", UTF16ToUTF8(form.display_name).c_str(), | |
| 431 "avatar_url", form.avatar_url.spec().c_str(), | |
| 432 "federation_url", form.federation_url.spec().c_str(), | |
| 433 "skip_next_zero_click", form.skip_next_zero_click, | |
| 427 "application", app_string_.c_str(), nullptr); | 434 "application", app_string_.c_str(), nullptr); |
| 428 | 435 |
| 429 if (error) { | 436 if (error) { |
| 430 VLOG(1) << "Libsecret add raw login failed: " << error->message; | 437 VLOG(1) << "Libsecret add raw login failed: " << error->message; |
| 431 g_error_free(error); | 438 g_error_free(error); |
| 432 return false; | 439 return false; |
| 433 } | 440 } |
| 434 return true; | 441 return true; |
| 435 } | 442 } |
| 436 | 443 |
| (...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 589 return true; | 596 return true; |
| 590 } | 597 } |
| 591 | 598 |
| 592 std::string NativeBackendLibsecret::GetProfileSpecificAppString( | 599 std::string NativeBackendLibsecret::GetProfileSpecificAppString( |
| 593 LocalProfileId id) { | 600 LocalProfileId id) { |
| 594 // Originally, the application string was always just "chrome" and used only | 601 // Originally, the application string was always just "chrome" and used only |
| 595 // so that we had *something* to search for since GNOME Keyring won't search | 602 // so that we had *something* to search for since GNOME Keyring won't search |
| 596 // for nothing. Now we use it to distinguish passwords for different profiles. | 603 // for nothing. Now we use it to distinguish passwords for different profiles. |
| 597 return base::StringPrintf("%s-%d", kLibsecretAppString, id); | 604 return base::StringPrintf("%s-%d", kLibsecretAppString, id); |
| 598 } | 605 } |
| OLD | NEW |