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 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
113 {"date_created", SECRET_SCHEMA_ATTRIBUTE_STRING}, | 113 {"date_created", SECRET_SCHEMA_ATTRIBUTE_STRING}, |
114 {"blacklisted_by_user", SECRET_SCHEMA_ATTRIBUTE_INTEGER}, | 114 {"blacklisted_by_user", SECRET_SCHEMA_ATTRIBUTE_INTEGER}, |
115 {"scheme", SECRET_SCHEMA_ATTRIBUTE_INTEGER}, | 115 {"scheme", SECRET_SCHEMA_ATTRIBUTE_INTEGER}, |
116 {"type", SECRET_SCHEMA_ATTRIBUTE_INTEGER}, | 116 {"type", SECRET_SCHEMA_ATTRIBUTE_INTEGER}, |
117 {"times_used", SECRET_SCHEMA_ATTRIBUTE_INTEGER}, | 117 {"times_used", SECRET_SCHEMA_ATTRIBUTE_INTEGER}, |
118 {"date_synced", SECRET_SCHEMA_ATTRIBUTE_STRING}, | 118 {"date_synced", SECRET_SCHEMA_ATTRIBUTE_STRING}, |
119 {"display_name", SECRET_SCHEMA_ATTRIBUTE_STRING}, | 119 {"display_name", SECRET_SCHEMA_ATTRIBUTE_STRING}, |
120 {"avatar_url", SECRET_SCHEMA_ATTRIBUTE_STRING}, | 120 {"avatar_url", SECRET_SCHEMA_ATTRIBUTE_STRING}, |
121 {"federation_url", SECRET_SCHEMA_ATTRIBUTE_STRING}, | 121 {"federation_url", SECRET_SCHEMA_ATTRIBUTE_STRING}, |
122 {"skip_zero_click", SECRET_SCHEMA_ATTRIBUTE_INTEGER}, | 122 {"skip_zero_click", SECRET_SCHEMA_ATTRIBUTE_INTEGER}, |
| 123 {"generation_upload_status", SECRET_SCHEMA_ATTRIBUTE_INTEGER}, |
123 // This field is always "chrome-profile_id" so that we can search for it. | 124 // This field is always "chrome-profile_id" so that we can search for it. |
124 {"application", SECRET_SCHEMA_ATTRIBUTE_STRING}, | 125 {"application", SECRET_SCHEMA_ATTRIBUTE_STRING}, |
125 {nullptr, SECRET_SCHEMA_ATTRIBUTE_STRING}}}; | 126 {nullptr, SECRET_SCHEMA_ATTRIBUTE_STRING}}}; |
126 | 127 |
127 const char* GetStringFromAttributes(GHashTable* attrs, const char* keyname) { | 128 const char* GetStringFromAttributes(GHashTable* attrs, const char* keyname) { |
128 gpointer value = g_hash_table_lookup(attrs, keyname); | 129 gpointer value = g_hash_table_lookup(attrs, keyname); |
129 return value ? static_cast<char*>(value) : kEmptyString; | 130 return value ? static_cast<char*>(value) : kEmptyString; |
130 } | 131 } |
131 | 132 |
132 uint32_t GetUintFromAttributes(GHashTable* attrs, const char* keyname) { | 133 uint32_t GetUintFromAttributes(GHashTable* attrs, const char* keyname) { |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
183 static_cast<PasswordForm::Scheme>(GetUintFromAttributes(attrs, "scheme")); | 184 static_cast<PasswordForm::Scheme>(GetUintFromAttributes(attrs, "scheme")); |
184 int64 date_synced = 0; | 185 int64 date_synced = 0; |
185 base::StringToInt64(GetStringFromAttributes(attrs, "date_synced"), | 186 base::StringToInt64(GetStringFromAttributes(attrs, "date_synced"), |
186 &date_synced); | 187 &date_synced); |
187 form->date_synced = base::Time::FromInternalValue(date_synced); | 188 form->date_synced = base::Time::FromInternalValue(date_synced); |
188 form->display_name = | 189 form->display_name = |
189 UTF8ToUTF16(GetStringFromAttributes(attrs, "display_name")); | 190 UTF8ToUTF16(GetStringFromAttributes(attrs, "display_name")); |
190 form->avatar_url = GURL(GetStringFromAttributes(attrs, "avatar_url")); | 191 form->avatar_url = GURL(GetStringFromAttributes(attrs, "avatar_url")); |
191 form->federation_url = GURL(GetStringFromAttributes(attrs, "federation_url")); | 192 form->federation_url = GURL(GetStringFromAttributes(attrs, "federation_url")); |
192 form->skip_zero_click = GetUintFromAttributes(attrs, "skip_zero_click"); | 193 form->skip_zero_click = GetUintFromAttributes(attrs, "skip_zero_click"); |
| 194 form->generation_upload_status = |
| 195 static_cast<PasswordForm::GenerationUploadStatus>( |
| 196 GetUintFromAttributes(attrs, "generation_upload_status")); |
193 | 197 |
194 return form.Pass(); | 198 return form.Pass(); |
195 } | 199 } |
196 | 200 |
197 class LibsecretAttributesBuilder { | 201 class LibsecretAttributesBuilder { |
198 public: | 202 public: |
199 LibsecretAttributesBuilder(); | 203 LibsecretAttributesBuilder(); |
200 ~LibsecretAttributesBuilder(); | 204 ~LibsecretAttributesBuilder(); |
201 void Append(const std::string& name, const std::string& value); | 205 void Append(const std::string& name, const std::string& value); |
202 void Append(const std::string& name, int64 value); | 206 void Append(const std::string& name, int64 value); |
(...skipping 229 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
432 "date_created", base::Int64ToString(date_created).c_str(), | 436 "date_created", base::Int64ToString(date_created).c_str(), |
433 "blacklisted_by_user", form.blacklisted_by_user, | 437 "blacklisted_by_user", form.blacklisted_by_user, |
434 "type", form.type, | 438 "type", form.type, |
435 "times_used", form.times_used, | 439 "times_used", form.times_used, |
436 "scheme", form.scheme, | 440 "scheme", form.scheme, |
437 "date_synced", base::Int64ToString(date_synced).c_str(), | 441 "date_synced", base::Int64ToString(date_synced).c_str(), |
438 "display_name", UTF16ToUTF8(form.display_name).c_str(), | 442 "display_name", UTF16ToUTF8(form.display_name).c_str(), |
439 "avatar_url", form.avatar_url.spec().c_str(), | 443 "avatar_url", form.avatar_url.spec().c_str(), |
440 "federation_url", form.federation_url.spec().c_str(), | 444 "federation_url", form.federation_url.spec().c_str(), |
441 "skip_zero_click", form.skip_zero_click, | 445 "skip_zero_click", form.skip_zero_click, |
| 446 "generation_upload_status", form.generation_upload_status, |
442 "application", app_string_.c_str(), nullptr); | 447 "application", app_string_.c_str(), nullptr); |
443 | 448 |
444 if (error) { | 449 if (error) { |
445 VLOG(1) << "Libsecret add raw login failed: " << error->message; | 450 VLOG(1) << "Libsecret add raw login failed: " << error->message; |
446 g_error_free(error); | 451 g_error_free(error); |
447 return false; | 452 return false; |
448 } | 453 } |
449 return true; | 454 return true; |
450 } | 455 } |
451 | 456 |
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
604 return true; | 609 return true; |
605 } | 610 } |
606 | 611 |
607 std::string NativeBackendLibsecret::GetProfileSpecificAppString( | 612 std::string NativeBackendLibsecret::GetProfileSpecificAppString( |
608 LocalProfileId id) { | 613 LocalProfileId id) { |
609 // Originally, the application string was always just "chrome" and used only | 614 // Originally, the application string was always just "chrome" and used only |
610 // so that we had *something* to search for since GNOME Keyring won't search | 615 // so that we had *something* to search for since GNOME Keyring won't search |
611 // for nothing. Now we use it to distinguish passwords for different profiles. | 616 // for nothing. Now we use it to distinguish passwords for different profiles. |
612 return base::StringPrintf("%s-%d", kLibsecretAppString, id); | 617 return base::StringPrintf("%s-%d", kLibsecretAppString, id); |
613 } | 618 } |
OLD | NEW |