Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(292)

Side by Side Diff: chrome/browser/password_manager/native_backend_gnome_x.cc

Issue 895653002: Serialize date_created in PasswordStoreX properly (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: KWallet implementation Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 9
10 #include <map> 10 #include <map>
(...skipping 13 matching lines...) Expand all
24 #include "base/time/time.h" 24 #include "base/time/time.h"
25 #include "components/autofill/core/common/password_form.h" 25 #include "components/autofill/core/common/password_form.h"
26 #include "components/password_manager/core/browser/psl_matching_helper.h" 26 #include "components/password_manager/core/browser/psl_matching_helper.h"
27 #include "content/public/browser/browser_thread.h" 27 #include "content/public/browser/browser_thread.h"
28 28
29 using autofill::PasswordForm; 29 using autofill::PasswordForm;
30 using base::UTF8ToUTF16; 30 using base::UTF8ToUTF16;
31 using base::UTF16ToUTF8; 31 using base::UTF16ToUTF8;
32 using content::BrowserThread; 32 using content::BrowserThread;
33 33
34 namespace {
35 const int kMaxPossibleTimeTValue = std::numeric_limits<int>::max();
36 }
37
34 #define GNOME_KEYRING_DEFINE_POINTER(name) \ 38 #define GNOME_KEYRING_DEFINE_POINTER(name) \
35 typeof(&::gnome_keyring_##name) GnomeKeyringLoader::gnome_keyring_##name; 39 typeof(&::gnome_keyring_##name) GnomeKeyringLoader::gnome_keyring_##name;
36 GNOME_KEYRING_FOR_EACH_FUNC(GNOME_KEYRING_DEFINE_POINTER) 40 GNOME_KEYRING_FOR_EACH_FUNC(GNOME_KEYRING_DEFINE_POINTER)
37 #undef GNOME_KEYRING_DEFINE_POINTER 41 #undef GNOME_KEYRING_DEFINE_POINTER
38 42
39 bool GnomeKeyringLoader::keyring_loaded = false; 43 bool GnomeKeyringLoader::keyring_loaded = false;
40 44
41 #if defined(DLOPEN_GNOME_KEYRING) 45 #if defined(DLOPEN_GNOME_KEYRING)
42 46
43 #define GNOME_KEYRING_FUNCTION_INFO(name) \ 47 #define GNOME_KEYRING_FUNCTION_INFO(name) \
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
124 form->username_value = UTF8ToUTF16(string_attr_map["username_value"]); 128 form->username_value = UTF8ToUTF16(string_attr_map["username_value"]);
125 form->password_element = UTF8ToUTF16(string_attr_map["password_element"]); 129 form->password_element = UTF8ToUTF16(string_attr_map["password_element"]);
126 form->submit_element = UTF8ToUTF16(string_attr_map["submit_element"]); 130 form->submit_element = UTF8ToUTF16(string_attr_map["submit_element"]);
127 form->signon_realm = string_attr_map["signon_realm"]; 131 form->signon_realm = string_attr_map["signon_realm"];
128 form->ssl_valid = uint_attr_map["ssl_valid"]; 132 form->ssl_valid = uint_attr_map["ssl_valid"];
129 form->preferred = uint_attr_map["preferred"]; 133 form->preferred = uint_attr_map["preferred"];
130 int64 date_created = 0; 134 int64 date_created = 0;
131 bool date_ok = base::StringToInt64(string_attr_map["date_created"], 135 bool date_ok = base::StringToInt64(string_attr_map["date_created"],
132 &date_created); 136 &date_created);
133 DCHECK(date_ok); 137 DCHECK(date_ok);
134 form->date_created = base::Time::FromTimeT(date_created); 138 // In past date_created was stored as time_t. We can distinguish between
139 // them by taking into consideration that INT_MAX correspond to
vabr (Chromium) 2015/02/03 16:06:42 nit: INT_MAX -> kMaxPossibleTimeTValue (Also for l
dvadym 2015/02/04 10:40:25 Done.
140 // 2038 year in time_t and internal values of base::Time are much bigger.
vabr (Chromium) 2015/02/03 16:06:42 Perhaps you could explain more clearly: In the pas
dvadym 2015/02/04 10:40:25 Done.
141 form->date_created = date_created < kMaxPossibleTimeTValue
vabr (Chromium) 2015/02/03 16:06:42 I suggest pulling this check and kMaxPossibleTimeT
dvadym 2015/02/04 10:40:25 Keyring backend will finally disappear, so after o
142 ? base::Time::FromTimeT(date_created)
143 : base::Time::FromInternalValue(date_created);
135 form->blacklisted_by_user = uint_attr_map["blacklisted_by_user"]; 144 form->blacklisted_by_user = uint_attr_map["blacklisted_by_user"];
136 form->type = static_cast<PasswordForm::Type>(uint_attr_map["type"]); 145 form->type = static_cast<PasswordForm::Type>(uint_attr_map["type"]);
137 form->times_used = uint_attr_map["times_used"]; 146 form->times_used = uint_attr_map["times_used"];
138 form->scheme = static_cast<PasswordForm::Scheme>(uint_attr_map["scheme"]); 147 form->scheme = static_cast<PasswordForm::Scheme>(uint_attr_map["scheme"]);
139 int64 date_synced = 0; 148 int64 date_synced = 0;
140 base::StringToInt64(string_attr_map["date_synced"], &date_synced); 149 base::StringToInt64(string_attr_map["date_synced"], &date_synced);
141 form->date_synced = base::Time::FromInternalValue(date_synced); 150 form->date_synced = base::Time::FromInternalValue(date_synced);
142 form->display_name = UTF8ToUTF16(string_attr_map["display_name"]); 151 form->display_name = UTF8ToUTF16(string_attr_map["display_name"]);
143 form->avatar_url = GURL(string_attr_map["avatar_url"]); 152 form->avatar_url = GURL(string_attr_map["avatar_url"]);
144 form->federation_url = GURL(string_attr_map["federation_url"]); 153 form->federation_url = GURL(string_attr_map["federation_url"]);
(...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after
310 // matching is used to find a result, then the results signon realm, origin 319 // matching is used to find a result, then the results signon realm, origin
311 // and action are stored are replaced by those of |lookup_form_|. 320 // and action are stored are replaced by those of |lookup_form_|.
312 // Additionally, |lookup_form_->signon_realm| is also used to narrow down the 321 // Additionally, |lookup_form_->signon_realm| is also used to narrow down the
313 // found logins to those which indeed PSL-match the look-up. And finally, 322 // found logins to those which indeed PSL-match the look-up. And finally,
314 // |lookup_form_| set to NULL means that PSL matching is not required. 323 // |lookup_form_| set to NULL means that PSL matching is not required.
315 scoped_ptr<PasswordForm> lookup_form_; 324 scoped_ptr<PasswordForm> lookup_form_;
316 }; 325 };
317 326
318 void GKRMethod::AddLogin(const PasswordForm& form, const char* app_string) { 327 void GKRMethod::AddLogin(const PasswordForm& form, const char* app_string) {
319 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 328 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
320 time_t date_created = form.date_created.ToTimeT(); 329 int64 date_created = form.date_created.ToInternalValue();
321 // If we are asked to save a password with 0 date, use the current time. 330 // If we are asked to save a password with 0 date, use the current time.
322 // We don't want to actually save passwords as though on January 1, 1970. 331 // We don't want to actually save passwords as though on January 1, 1601.
323 if (!date_created) 332 if (!date_created)
324 date_created = time(NULL); 333 date_created = base::Time::Now().ToInternalValue();
325 int64 date_synced = form.date_synced.ToInternalValue(); 334 int64 date_synced = form.date_synced.ToInternalValue();
326 gnome_keyring_store_password( 335 gnome_keyring_store_password(
327 &kGnomeSchema, 336 &kGnomeSchema,
328 NULL, // Default keyring. 337 NULL, // Default keyring.
329 form.origin.spec().c_str(), // Display name. 338 form.origin.spec().c_str(), // Display name.
330 UTF16ToUTF8(form.password_value).c_str(), 339 UTF16ToUTF8(form.password_value).c_str(),
331 OnOperationDone, 340 OnOperationDone,
332 this, // data 341 this, // data
333 NULL, // destroy_data 342 NULL, // destroy_data
334 "origin_url", form.origin.spec().c_str(), 343 "origin_url", form.origin.spec().c_str(),
(...skipping 454 matching lines...) Expand 10 before | Expand all | Expand 10 after
789 } 798 }
790 return ok; 799 return ok;
791 } 800 }
792 801
793 std::string NativeBackendGnome::GetProfileSpecificAppString() const { 802 std::string NativeBackendGnome::GetProfileSpecificAppString() const {
794 // Originally, the application string was always just "chrome" and used only 803 // Originally, the application string was always just "chrome" and used only
795 // so that we had *something* to search for since GNOME Keyring won't search 804 // so that we had *something* to search for since GNOME Keyring won't search
796 // for nothing. Now we use it to distinguish passwords for different profiles. 805 // for nothing. Now we use it to distinguish passwords for different profiles.
797 return base::StringPrintf("%s-%d", kGnomeKeyringAppString, profile_id_); 806 return base::StringPrintf("%s-%d", kGnomeKeyringAppString, profile_id_);
798 } 807 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698