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 | 9 |
10 #include <map> | 10 #include <map> |
(...skipping 30 matching lines...) Expand all Loading... |
41 #undef GNOME_KEYRING_DEFINE_POINTER | 41 #undef GNOME_KEYRING_DEFINE_POINTER |
42 | 42 |
43 bool GnomeKeyringLoader::keyring_loaded = false; | 43 bool GnomeKeyringLoader::keyring_loaded = false; |
44 | 44 |
45 #if defined(DLOPEN_GNOME_KEYRING) | 45 #if defined(DLOPEN_GNOME_KEYRING) |
46 | 46 |
47 #define GNOME_KEYRING_FUNCTION_INFO(name) \ | 47 #define GNOME_KEYRING_FUNCTION_INFO(name) \ |
48 {"gnome_keyring_"#name, reinterpret_cast<void**>(&gnome_keyring_##name)}, | 48 {"gnome_keyring_"#name, reinterpret_cast<void**>(&gnome_keyring_##name)}, |
49 const GnomeKeyringLoader::FunctionInfo GnomeKeyringLoader::functions[] = { | 49 const GnomeKeyringLoader::FunctionInfo GnomeKeyringLoader::functions[] = { |
50 GNOME_KEYRING_FOR_EACH_FUNC(GNOME_KEYRING_FUNCTION_INFO) | 50 GNOME_KEYRING_FOR_EACH_FUNC(GNOME_KEYRING_FUNCTION_INFO) |
51 {NULL, NULL} | 51 {nullptr, nullptr} |
52 }; | 52 }; |
53 #undef GNOME_KEYRING_FUNCTION_INFO | 53 #undef GNOME_KEYRING_FUNCTION_INFO |
54 | 54 |
55 /* Load the library and initialize the function pointers. */ | 55 /* Load the library and initialize the function pointers. */ |
56 bool GnomeKeyringLoader::LoadGnomeKeyring() { | 56 bool GnomeKeyringLoader::LoadGnomeKeyring() { |
57 if (keyring_loaded) | 57 if (keyring_loaded) |
58 return true; | 58 return true; |
59 | 59 |
60 void* handle = dlopen("libgnome-keyring.so.0", RTLD_NOW | RTLD_GLOBAL); | 60 void* handle = dlopen("libgnome-keyring.so.0", RTLD_NOW | RTLD_GLOBAL); |
61 if (!handle) { | 61 if (!handle) { |
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
168 // |lookup_form| is used to filter out results -- only credentials with signon | 168 // |lookup_form| is used to filter out results -- only credentials with signon |
169 // realms passing the PSL matching against |lookup_form->signon_realm| will be | 169 // realms passing the PSL matching against |lookup_form->signon_realm| will be |
170 // kept. PSL matched results get their signon_realm, origin, and action | 170 // kept. PSL matched results get their signon_realm, origin, and action |
171 // rewritten to those of |lookup_form_|, with the original signon_realm saved | 171 // rewritten to those of |lookup_form_|, with the original signon_realm saved |
172 // into the result's original_signon_realm data member. | 172 // into the result's original_signon_realm data member. |
173 void ConvertFormList(GList* found, | 173 void ConvertFormList(GList* found, |
174 const PasswordForm* lookup_form, | 174 const PasswordForm* lookup_form, |
175 ScopedVector<autofill::PasswordForm>* forms) { | 175 ScopedVector<autofill::PasswordForm>* forms) { |
176 password_manager::PSLDomainMatchMetric psl_domain_match_metric = | 176 password_manager::PSLDomainMatchMetric psl_domain_match_metric = |
177 password_manager::PSL_DOMAIN_MATCH_NONE; | 177 password_manager::PSL_DOMAIN_MATCH_NONE; |
178 for (GList* element = g_list_first(found); element != NULL; | 178 for (GList* element = g_list_first(found); element; |
179 element = g_list_next(element)) { | 179 element = g_list_next(element)) { |
180 GnomeKeyringFound* data = static_cast<GnomeKeyringFound*>(element->data); | 180 GnomeKeyringFound* data = static_cast<GnomeKeyringFound*>(element->data); |
181 GnomeKeyringAttributeList* attrs = data->attributes; | 181 GnomeKeyringAttributeList* attrs = data->attributes; |
182 | 182 |
183 scoped_ptr<PasswordForm> form(FormFromAttributes(attrs)); | 183 scoped_ptr<PasswordForm> form(FormFromAttributes(attrs)); |
184 if (form) { | 184 if (form) { |
185 if (lookup_form && form->signon_realm != lookup_form->signon_realm) { | 185 if (lookup_form && form->signon_realm != lookup_form->signon_realm) { |
186 // This is not an exact match, we try PSL matching. | 186 // This is not an exact match, we try PSL matching. |
187 if (lookup_form->scheme != PasswordForm::SCHEME_HTML || | 187 if (lookup_form->scheme != PasswordForm::SCHEME_HTML || |
188 form->scheme != PasswordForm::SCHEME_HTML || | 188 form->scheme != PasswordForm::SCHEME_HTML || |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
242 { "type", GNOME_KEYRING_ATTRIBUTE_TYPE_UINT32 }, | 242 { "type", GNOME_KEYRING_ATTRIBUTE_TYPE_UINT32 }, |
243 { "times_used", GNOME_KEYRING_ATTRIBUTE_TYPE_UINT32 }, | 243 { "times_used", GNOME_KEYRING_ATTRIBUTE_TYPE_UINT32 }, |
244 { "date_synced", GNOME_KEYRING_ATTRIBUTE_TYPE_STRING }, | 244 { "date_synced", GNOME_KEYRING_ATTRIBUTE_TYPE_STRING }, |
245 { "display_name", GNOME_KEYRING_ATTRIBUTE_TYPE_STRING }, | 245 { "display_name", GNOME_KEYRING_ATTRIBUTE_TYPE_STRING }, |
246 { "avatar_url", GNOME_KEYRING_ATTRIBUTE_TYPE_STRING }, | 246 { "avatar_url", GNOME_KEYRING_ATTRIBUTE_TYPE_STRING }, |
247 { "federation_url", GNOME_KEYRING_ATTRIBUTE_TYPE_STRING }, | 247 { "federation_url", GNOME_KEYRING_ATTRIBUTE_TYPE_STRING }, |
248 { "skip_zero_click", GNOME_KEYRING_ATTRIBUTE_TYPE_UINT32 }, | 248 { "skip_zero_click", GNOME_KEYRING_ATTRIBUTE_TYPE_UINT32 }, |
249 { "generation_upload_status", GNOME_KEYRING_ATTRIBUTE_TYPE_UINT32 }, | 249 { "generation_upload_status", GNOME_KEYRING_ATTRIBUTE_TYPE_UINT32 }, |
250 // This field is always "chrome" so that we can search for it. | 250 // This field is always "chrome" so that we can search for it. |
251 { "application", GNOME_KEYRING_ATTRIBUTE_TYPE_STRING }, | 251 { "application", GNOME_KEYRING_ATTRIBUTE_TYPE_STRING }, |
252 { NULL } | 252 { nullptr } |
253 } | 253 } |
254 }; | 254 }; |
255 | 255 |
256 // Sadly, PasswordStore goes to great lengths to switch from the originally | 256 // Sadly, PasswordStore goes to great lengths to switch from the originally |
257 // calling thread to the DB thread, and to provide an asynchronous API to | 257 // calling thread to the DB thread, and to provide an asynchronous API to |
258 // callers while using a synchronous (virtual) API provided by subclasses like | 258 // callers while using a synchronous (virtual) API provided by subclasses like |
259 // PasswordStoreX -- but GNOME Keyring really wants to be on the GLib main | 259 // PasswordStoreX -- but GNOME Keyring really wants to be on the GLib main |
260 // thread, which is the UI thread to us. So we end up having to switch threads | 260 // thread, which is the UI thread to us. So we end up having to switch threads |
261 // again, possibly back to the very same thread (in case the UI thread is the | 261 // again, possibly back to the very same thread (in case the UI thread is the |
262 // caller, e.g. in the password management UI), and *block* the DB thread | 262 // caller, e.g. in the password management UI), and *block* the DB thread |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
334 void GKRMethod::AddLogin(const PasswordForm& form, const char* app_string) { | 334 void GKRMethod::AddLogin(const PasswordForm& form, const char* app_string) { |
335 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 335 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
336 int64 date_created = form.date_created.ToInternalValue(); | 336 int64 date_created = form.date_created.ToInternalValue(); |
337 // If we are asked to save a password with 0 date, use the current time. | 337 // If we are asked to save a password with 0 date, use the current time. |
338 // We don't want to actually save passwords as though on January 1, 1601. | 338 // We don't want to actually save passwords as though on January 1, 1601. |
339 if (!date_created) | 339 if (!date_created) |
340 date_created = base::Time::Now().ToInternalValue(); | 340 date_created = base::Time::Now().ToInternalValue(); |
341 int64 date_synced = form.date_synced.ToInternalValue(); | 341 int64 date_synced = form.date_synced.ToInternalValue(); |
342 gnome_keyring_store_password( | 342 gnome_keyring_store_password( |
343 &kGnomeSchema, | 343 &kGnomeSchema, |
344 NULL, // Default keyring. | 344 nullptr, // Default keyring. |
345 form.origin.spec().c_str(), // Display name. | 345 form.origin.spec().c_str(), // Display name. |
346 UTF16ToUTF8(form.password_value).c_str(), | 346 UTF16ToUTF8(form.password_value).c_str(), |
347 OnOperationDone, | 347 OnOperationDone, |
348 this, // data | 348 this, // data |
349 NULL, // destroy_data | 349 nullptr, // destroy_data |
350 "origin_url", form.origin.spec().c_str(), | 350 "origin_url", form.origin.spec().c_str(), |
351 "action_url", form.action.spec().c_str(), | 351 "action_url", form.action.spec().c_str(), |
352 "username_element", UTF16ToUTF8(form.username_element).c_str(), | 352 "username_element", UTF16ToUTF8(form.username_element).c_str(), |
353 "username_value", UTF16ToUTF8(form.username_value).c_str(), | 353 "username_value", UTF16ToUTF8(form.username_value).c_str(), |
354 "password_element", UTF16ToUTF8(form.password_element).c_str(), | 354 "password_element", UTF16ToUTF8(form.password_element).c_str(), |
355 "submit_element", UTF16ToUTF8(form.submit_element).c_str(), | 355 "submit_element", UTF16ToUTF8(form.submit_element).c_str(), |
356 "signon_realm", form.signon_realm.c_str(), | 356 "signon_realm", form.signon_realm.c_str(), |
357 "ssl_valid", form.ssl_valid, | 357 "ssl_valid", form.ssl_valid, |
358 "preferred", form.preferred, | 358 "preferred", form.preferred, |
359 "date_created", base::Int64ToString(date_created).c_str(), | 359 "date_created", base::Int64ToString(date_created).c_str(), |
360 "blacklisted_by_user", form.blacklisted_by_user, | 360 "blacklisted_by_user", form.blacklisted_by_user, |
361 "type", form.type, | 361 "type", form.type, |
362 "times_used", form.times_used, | 362 "times_used", form.times_used, |
363 "scheme", form.scheme, | 363 "scheme", form.scheme, |
364 "date_synced", base::Int64ToString(date_synced).c_str(), | 364 "date_synced", base::Int64ToString(date_synced).c_str(), |
365 "display_name", UTF16ToUTF8(form.display_name).c_str(), | 365 "display_name", UTF16ToUTF8(form.display_name).c_str(), |
366 "avatar_url", form.avatar_url.spec().c_str(), | 366 "avatar_url", form.avatar_url.spec().c_str(), |
367 "federation_url", form.federation_url.spec().c_str(), | 367 "federation_url", form.federation_url.spec().c_str(), |
368 "skip_zero_click", form.skip_zero_click, | 368 "skip_zero_click", form.skip_zero_click, |
369 "generation_upload_status", form.generation_upload_status, | 369 "generation_upload_status", form.generation_upload_status, |
370 "application", app_string, | 370 "application", app_string, |
371 NULL); | 371 nullptr); |
372 } | 372 } |
373 | 373 |
374 void GKRMethod::AddLoginSearch(const PasswordForm& form, | 374 void GKRMethod::AddLoginSearch(const PasswordForm& form, |
375 const char* app_string) { | 375 const char* app_string) { |
376 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 376 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
377 lookup_form_.reset(NULL); | 377 lookup_form_.reset(nullptr); |
378 // Search GNOME Keyring for matching passwords to update. | 378 // Search GNOME Keyring for matching passwords to update. |
379 ScopedAttributeList attrs(gnome_keyring_attribute_list_new()); | 379 ScopedAttributeList attrs(gnome_keyring_attribute_list_new()); |
380 AppendString(&attrs, "origin_url", form.origin.spec()); | 380 AppendString(&attrs, "origin_url", form.origin.spec()); |
381 AppendString(&attrs, "username_element", UTF16ToUTF8(form.username_element)); | 381 AppendString(&attrs, "username_element", UTF16ToUTF8(form.username_element)); |
382 AppendString(&attrs, "username_value", UTF16ToUTF8(form.username_value)); | 382 AppendString(&attrs, "username_value", UTF16ToUTF8(form.username_value)); |
383 AppendString(&attrs, "password_element", UTF16ToUTF8(form.password_element)); | 383 AppendString(&attrs, "password_element", UTF16ToUTF8(form.password_element)); |
384 AppendString(&attrs, "submit_element", UTF16ToUTF8(form.submit_element)); | 384 AppendString(&attrs, "submit_element", UTF16ToUTF8(form.submit_element)); |
385 AppendString(&attrs, "signon_realm", form.signon_realm); | 385 AppendString(&attrs, "signon_realm", form.signon_realm); |
386 AppendString(&attrs, "application", app_string); | 386 AppendString(&attrs, "application", app_string); |
387 gnome_keyring_find_items(GNOME_KEYRING_ITEM_GENERIC_SECRET, | 387 gnome_keyring_find_items(GNOME_KEYRING_ITEM_GENERIC_SECRET, |
388 attrs.get(), | 388 attrs.get(), |
389 OnOperationGetList, | 389 OnOperationGetList, |
390 /*data=*/this, | 390 /*data=*/this, |
391 /*destroy_data=*/NULL); | 391 /*destroy_data=*/nullptr); |
392 } | 392 } |
393 | 393 |
394 void GKRMethod::UpdateLoginSearch(const PasswordForm& form, | 394 void GKRMethod::UpdateLoginSearch(const PasswordForm& form, |
395 const char* app_string) { | 395 const char* app_string) { |
396 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 396 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
397 lookup_form_.reset(NULL); | 397 lookup_form_.reset(nullptr); |
398 // Search GNOME Keyring for matching passwords to update. | 398 // Search GNOME Keyring for matching passwords to update. |
399 ScopedAttributeList attrs(gnome_keyring_attribute_list_new()); | 399 ScopedAttributeList attrs(gnome_keyring_attribute_list_new()); |
400 AppendString(&attrs, "origin_url", form.origin.spec()); | 400 AppendString(&attrs, "origin_url", form.origin.spec()); |
401 AppendString(&attrs, "username_element", UTF16ToUTF8(form.username_element)); | 401 AppendString(&attrs, "username_element", UTF16ToUTF8(form.username_element)); |
402 AppendString(&attrs, "username_value", UTF16ToUTF8(form.username_value)); | 402 AppendString(&attrs, "username_value", UTF16ToUTF8(form.username_value)); |
403 AppendString(&attrs, "password_element", UTF16ToUTF8(form.password_element)); | 403 AppendString(&attrs, "password_element", UTF16ToUTF8(form.password_element)); |
404 AppendString(&attrs, "signon_realm", form.signon_realm); | 404 AppendString(&attrs, "signon_realm", form.signon_realm); |
405 AppendString(&attrs, "application", app_string); | 405 AppendString(&attrs, "application", app_string); |
406 gnome_keyring_find_items(GNOME_KEYRING_ITEM_GENERIC_SECRET, | 406 gnome_keyring_find_items(GNOME_KEYRING_ITEM_GENERIC_SECRET, |
407 attrs.get(), | 407 attrs.get(), |
408 OnOperationGetList, | 408 OnOperationGetList, |
409 /*data=*/this, | 409 /*data=*/this, |
410 /*destroy_data=*/NULL); | 410 /*destroy_data=*/nullptr); |
411 } | 411 } |
412 | 412 |
413 void GKRMethod::RemoveLogin(const PasswordForm& form, const char* app_string) { | 413 void GKRMethod::RemoveLogin(const PasswordForm& form, const char* app_string) { |
414 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 414 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
415 // We find forms using the same fields as LoginDatabase::RemoveLogin(). | 415 // We find forms using the same fields as LoginDatabase::RemoveLogin(). |
416 gnome_keyring_delete_password( | 416 gnome_keyring_delete_password( |
417 &kGnomeSchema, | 417 &kGnomeSchema, |
418 OnOperationDone, | 418 OnOperationDone, |
419 this, // data | 419 this, // data |
420 NULL, // destroy_data | 420 nullptr, // destroy_data |
421 "origin_url", form.origin.spec().c_str(), | 421 "origin_url", form.origin.spec().c_str(), |
422 "username_element", UTF16ToUTF8(form.username_element).c_str(), | 422 "username_element", UTF16ToUTF8(form.username_element).c_str(), |
423 "username_value", UTF16ToUTF8(form.username_value).c_str(), | 423 "username_value", UTF16ToUTF8(form.username_value).c_str(), |
424 "password_element", UTF16ToUTF8(form.password_element).c_str(), | 424 "password_element", UTF16ToUTF8(form.password_element).c_str(), |
425 "submit_element", UTF16ToUTF8(form.submit_element).c_str(), | 425 "submit_element", UTF16ToUTF8(form.submit_element).c_str(), |
426 "signon_realm", form.signon_realm.c_str(), | 426 "signon_realm", form.signon_realm.c_str(), |
427 "application", app_string, | 427 "application", app_string, |
428 NULL); | 428 nullptr); |
429 } | 429 } |
430 | 430 |
431 void GKRMethod::GetLogins(const PasswordForm& form, const char* app_string) { | 431 void GKRMethod::GetLogins(const PasswordForm& form, const char* app_string) { |
432 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 432 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
433 lookup_form_.reset(new PasswordForm(form)); | 433 lookup_form_.reset(new PasswordForm(form)); |
434 // Search GNOME Keyring for matching passwords. | 434 // Search GNOME Keyring for matching passwords. |
435 ScopedAttributeList attrs(gnome_keyring_attribute_list_new()); | 435 ScopedAttributeList attrs(gnome_keyring_attribute_list_new()); |
436 if (!password_manager::ShouldPSLDomainMatchingApply( | 436 if (!password_manager::ShouldPSLDomainMatchingApply( |
437 password_manager::GetRegistryControlledDomain( | 437 password_manager::GetRegistryControlledDomain( |
438 GURL(form.signon_realm)))) { | 438 GURL(form.signon_realm)))) { |
439 AppendString(&attrs, "signon_realm", form.signon_realm); | 439 AppendString(&attrs, "signon_realm", form.signon_realm); |
440 } | 440 } |
441 AppendString(&attrs, "application", app_string); | 441 AppendString(&attrs, "application", app_string); |
442 gnome_keyring_find_items(GNOME_KEYRING_ITEM_GENERIC_SECRET, | 442 gnome_keyring_find_items(GNOME_KEYRING_ITEM_GENERIC_SECRET, |
443 attrs.get(), | 443 attrs.get(), |
444 OnOperationGetList, | 444 OnOperationGetList, |
445 /*data=*/this, | 445 /*data=*/this, |
446 /*destroy_data=*/NULL); | 446 /*destroy_data=*/nullptr); |
447 } | 447 } |
448 | 448 |
449 void GKRMethod::GetLoginsList(uint32_t blacklisted_by_user, | 449 void GKRMethod::GetLoginsList(uint32_t blacklisted_by_user, |
450 const char* app_string) { | 450 const char* app_string) { |
451 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 451 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
452 lookup_form_.reset(NULL); | 452 lookup_form_.reset(nullptr); |
453 // Search GNOME Keyring for matching passwords. | 453 // Search GNOME Keyring for matching passwords. |
454 ScopedAttributeList attrs(gnome_keyring_attribute_list_new()); | 454 ScopedAttributeList attrs(gnome_keyring_attribute_list_new()); |
455 AppendUint32(&attrs, "blacklisted_by_user", blacklisted_by_user); | 455 AppendUint32(&attrs, "blacklisted_by_user", blacklisted_by_user); |
456 AppendString(&attrs, "application", app_string); | 456 AppendString(&attrs, "application", app_string); |
457 gnome_keyring_find_items(GNOME_KEYRING_ITEM_GENERIC_SECRET, | 457 gnome_keyring_find_items(GNOME_KEYRING_ITEM_GENERIC_SECRET, |
458 attrs.get(), | 458 attrs.get(), |
459 OnOperationGetList, | 459 OnOperationGetList, |
460 /*data=*/this, | 460 /*data=*/this, |
461 /*destroy_data=*/NULL); | 461 /*destroy_data=*/nullptr); |
462 } | 462 } |
463 | 463 |
464 void GKRMethod::GetAllLogins(const char* app_string) { | 464 void GKRMethod::GetAllLogins(const char* app_string) { |
465 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 465 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
466 lookup_form_.reset(NULL); | 466 lookup_form_.reset(nullptr); |
467 // We need to search for something, otherwise we get no results - so | 467 // We need to search for something, otherwise we get no results - so |
468 // we search for the fixed application string. | 468 // we search for the fixed application string. |
469 ScopedAttributeList attrs(gnome_keyring_attribute_list_new()); | 469 ScopedAttributeList attrs(gnome_keyring_attribute_list_new()); |
470 AppendString(&attrs, "application", app_string); | 470 AppendString(&attrs, "application", app_string); |
471 gnome_keyring_find_items(GNOME_KEYRING_ITEM_GENERIC_SECRET, | 471 gnome_keyring_find_items(GNOME_KEYRING_ITEM_GENERIC_SECRET, |
472 attrs.get(), | 472 attrs.get(), |
473 OnOperationGetList, | 473 OnOperationGetList, |
474 /*data=*/this, | 474 /*data=*/this, |
475 /*destroy_data=*/NULL); | 475 /*destroy_data=*/nullptr); |
476 } | 476 } |
477 | 477 |
478 GnomeKeyringResult GKRMethod::WaitResult() { | 478 GnomeKeyringResult GKRMethod::WaitResult() { |
479 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::DB)); | 479 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::DB)); |
480 event_.Wait(); | 480 event_.Wait(); |
481 return result_; | 481 return result_; |
482 } | 482 } |
483 | 483 |
484 GnomeKeyringResult GKRMethod::WaitResult( | 484 GnomeKeyringResult GKRMethod::WaitResult( |
485 ScopedVector<autofill::PasswordForm>* forms) { | 485 ScopedVector<autofill::PasswordForm>* forms) { |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
525 } | 525 } |
526 | 526 |
527 // static | 527 // static |
528 void GKRMethod::OnOperationGetList(GnomeKeyringResult result, GList* list, | 528 void GKRMethod::OnOperationGetList(GnomeKeyringResult result, GList* list, |
529 gpointer data) { | 529 gpointer data) { |
530 GKRMethod* method = static_cast<GKRMethod*>(data); | 530 GKRMethod* method = static_cast<GKRMethod*>(data); |
531 method->result_ = result; | 531 method->result_ = result; |
532 method->forms_.clear(); | 532 method->forms_.clear(); |
533 // |list| will be freed after this callback returns, so convert it now. | 533 // |list| will be freed after this callback returns, so convert it now. |
534 ConvertFormList(list, method->lookup_form_.get(), &method->forms_); | 534 ConvertFormList(list, method->lookup_form_.get(), &method->forms_); |
535 method->lookup_form_.reset(NULL); | 535 method->lookup_form_.reset(); |
536 method->event_.Signal(); | 536 method->event_.Signal(); |
537 } | 537 } |
538 | 538 |
539 } // namespace | 539 } // namespace |
540 | 540 |
541 NativeBackendGnome::NativeBackendGnome(LocalProfileId id) | 541 NativeBackendGnome::NativeBackendGnome(LocalProfileId id) |
542 : profile_id_(id) { | 542 : profile_id_(id) { |
543 app_string_ = GetProfileSpecificAppString(); | 543 app_string_ = GetProfileSpecificAppString(); |
544 } | 544 } |
545 | 545 |
(...skipping 260 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
806 } | 806 } |
807 return ok; | 807 return ok; |
808 } | 808 } |
809 | 809 |
810 std::string NativeBackendGnome::GetProfileSpecificAppString() const { | 810 std::string NativeBackendGnome::GetProfileSpecificAppString() const { |
811 // Originally, the application string was always just "chrome" and used only | 811 // Originally, the application string was always just "chrome" and used only |
812 // so that we had *something* to search for since GNOME Keyring won't search | 812 // so that we had *something* to search for since GNOME Keyring won't search |
813 // for nothing. Now we use it to distinguish passwords for different profiles. | 813 // for nothing. Now we use it to distinguish passwords for different profiles. |
814 return base::StringPrintf("%s-%d", kGnomeKeyringAppString, profile_id_); | 814 return base::StringPrintf("%s-%d", kGnomeKeyringAppString, profile_id_); |
815 } | 815 } |
OLD | NEW |