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

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

Issue 2216313002: Move GnomeKeyringLoader to components/os_crypt (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: removed guard Created 4 years, 4 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
« no previous file with comments | « chrome/browser/password_manager/native_backend_gnome_x.h ('k') | chrome/test/BUILD.gn » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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>
8 #include <gnome-keyring.h>
9 #include <stddef.h>
10 #include <stdint.h>
11
12 #include <limits> 7 #include <limits>
13 #include <map> 8 #include <map>
14 #include <memory> 9 #include <memory>
15 #include <string> 10 #include <string>
16 #include <utility> 11 #include <utility>
17 #include <vector> 12 #include <vector>
18 13
19 #include "base/logging.h" 14 #include "base/logging.h"
20 #include "base/metrics/histogram.h" 15 #include "base/metrics/histogram.h"
21 #include "base/strings/string_number_conversions.h" 16 #include "base/strings/string_number_conversions.h"
(...skipping 13 matching lines...) Expand all
35 using base::UTF8ToUTF16; 30 using base::UTF8ToUTF16;
36 using base::UTF16ToUTF8; 31 using base::UTF16ToUTF8;
37 using content::BrowserThread; 32 using content::BrowserThread;
38 using namespace password_manager::metrics_util; 33 using namespace password_manager::metrics_util;
39 using password_manager::PasswordStore; 34 using password_manager::PasswordStore;
40 35
41 namespace { 36 namespace {
42 const int kMaxPossibleTimeTValue = std::numeric_limits<int>::max(); 37 const int kMaxPossibleTimeTValue = std::numeric_limits<int>::max();
43 } 38 }
44 39
45 decltype(&::gnome_keyring_is_available)
46 GnomeKeyringLoader::gnome_keyring_is_available_ptr;
47 decltype(&::gnome_keyring_store_password)
48 GnomeKeyringLoader::gnome_keyring_store_password_ptr;
49 decltype(&::gnome_keyring_delete_password)
50 GnomeKeyringLoader::gnome_keyring_delete_password_ptr;
51 decltype(&::gnome_keyring_find_items)
52 GnomeKeyringLoader::gnome_keyring_find_items_ptr;
53 decltype(&::gnome_keyring_result_to_message)
54 GnomeKeyringLoader::gnome_keyring_result_to_message_ptr;
55 decltype(&::gnome_keyring_attribute_list_free)
56 GnomeKeyringLoader::gnome_keyring_attribute_list_free_ptr;
57 decltype(&::gnome_keyring_attribute_list_new)
58 GnomeKeyringLoader::gnome_keyring_attribute_list_new_ptr;
59 decltype(&::gnome_keyring_attribute_list_append_string)
60 GnomeKeyringLoader::gnome_keyring_attribute_list_append_string_ptr;
61 decltype(&::gnome_keyring_attribute_list_append_uint32)
62 GnomeKeyringLoader::gnome_keyring_attribute_list_append_uint32_ptr;
63
64 bool GnomeKeyringLoader::keyring_loaded = false;
65
66 const GnomeKeyringLoader::FunctionInfo GnomeKeyringLoader::functions[] = {
67 {"gnome_keyring_is_available",
68 reinterpret_cast<void**>(&gnome_keyring_is_available_ptr)},
69 {"gnome_keyring_store_password",
70 reinterpret_cast<void**>(&gnome_keyring_store_password_ptr)},
71 {"gnome_keyring_delete_password",
72 reinterpret_cast<void**>(&gnome_keyring_delete_password_ptr)},
73 {"gnome_keyring_find_items",
74 reinterpret_cast<void**>(&gnome_keyring_find_items_ptr)},
75 {"gnome_keyring_result_to_message",
76 reinterpret_cast<void**>(&gnome_keyring_result_to_message_ptr)},
77 {"gnome_keyring_attribute_list_free",
78 reinterpret_cast<void**>(&gnome_keyring_attribute_list_free_ptr)},
79 {"gnome_keyring_attribute_list_new",
80 reinterpret_cast<void**>(&gnome_keyring_attribute_list_new_ptr)},
81 {"gnome_keyring_attribute_list_append_string",
82 reinterpret_cast<void**>(&gnome_keyring_attribute_list_append_string_ptr)},
83 {"gnome_keyring_attribute_list_append_uint32",
84 reinterpret_cast<void**>(
85 &gnome_keyring_attribute_list_append_uint32_ptr)}};
86
87 /* Load the library and initialize the function pointers. */
88 bool GnomeKeyringLoader::LoadGnomeKeyring() {
89 if (keyring_loaded)
90 return true;
91
92 void* handle = dlopen("libgnome-keyring.so.0", RTLD_NOW | RTLD_GLOBAL);
93 if (!handle) {
94 // We wanted to use GNOME Keyring, but we couldn't load it. Warn, because
95 // either the user asked for this, or we autodetected it incorrectly. (Or
96 // the system has broken libraries, which is also good to warn about.)
97 LOG(WARNING) << "Could not load libgnome-keyring.so.0: " << dlerror();
98 return false;
99 }
100
101 for (size_t i = 0; i < arraysize(functions); ++i) {
102 dlerror();
103 *functions[i].pointer = dlsym(handle, functions[i].name);
104 const char* error = dlerror();
105 if (error) {
106 LOG(ERROR) << "Unable to load symbol "
107 << functions[i].name << ": " << error;
108 dlclose(handle);
109 return false;
110 }
111 }
112
113 keyring_loaded = true;
114 // We leak the library handle. That's OK: this function is called only once.
115 return true;
116 }
117
118 namespace { 40 namespace {
119 41
120 const char kGnomeKeyringAppString[] = "chrome"; 42 const char kGnomeKeyringAppString[] = "chrome";
121 43
122 // Convert the attributes of a given keyring entry into a new PasswordForm. 44 // Convert the attributes of a given keyring entry into a new PasswordForm.
123 // Note: does *not* get the actual password, as that is not a key attribute! 45 // Note: does *not* get the actual password, as that is not a key attribute!
124 // Returns NULL if the attributes are for the wrong application. 46 // Returns NULL if the attributes are for the wrong application.
125 std::unique_ptr<PasswordForm> FormFromAttributes( 47 std::unique_ptr<PasswordForm> FormFromAttributes(
126 GnomeKeyringAttributeList* attrs) { 48 GnomeKeyringAttributeList* attrs) {
127 // Read the string and int attributes into the appropriate map. 49 // Read the string and int attributes into the appropriate map.
(...skipping 719 matching lines...) Expand 10 before | Expand all | Expand 10 after
847 ScopedVector<PasswordForm> forms; 769 ScopedVector<PasswordForm> forms;
848 if (!GetLoginsBetween(get_begin, get_end, date_to_compare, &forms)) 770 if (!GetLoginsBetween(get_begin, get_end, date_to_compare, &forms))
849 return false; 771 return false;
850 772
851 for (size_t i = 0; i < forms.size(); ++i) { 773 for (size_t i = 0; i < forms.size(); ++i) {
852 if (!RemoveLogin(*forms[i], changes)) 774 if (!RemoveLogin(*forms[i], changes))
853 return false; 775 return false;
854 } 776 }
855 return true; 777 return true;
856 } 778 }
OLDNEW
« no previous file with comments | « chrome/browser/password_manager/native_backend_gnome_x.h ('k') | chrome/test/BUILD.gn » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698