Index: chrome/browser/password_manager/native_backend_gnome_x.cc |
diff --git a/chrome/browser/password_manager/native_backend_gnome_x.cc b/chrome/browser/password_manager/native_backend_gnome_x.cc |
index 6226858f726aa232451b866e1921ffb1d0aa45fe..9d262852c9d313ec3d30146d18beff006cdd946b 100644 |
--- a/chrome/browser/password_manager/native_backend_gnome_x.cc |
+++ b/chrome/browser/password_manager/native_backend_gnome_x.cc |
@@ -42,20 +42,47 @@ namespace { |
const int kMaxPossibleTimeTValue = std::numeric_limits<int>::max(); |
} |
-#define GNOME_KEYRING_DEFINE_POINTER(name) \ |
- typeof(&::gnome_keyring_##name) GnomeKeyringLoader::gnome_keyring_##name; |
-GNOME_KEYRING_FOR_EACH_FUNC(GNOME_KEYRING_DEFINE_POINTER) |
-#undef GNOME_KEYRING_DEFINE_POINTER |
+decltype(&::gnome_keyring_is_available) |
+ GnomeKeyringLoader::gnome_keyring_is_available_ptr; |
+decltype(&::gnome_keyring_store_password) |
+ GnomeKeyringLoader::gnome_keyring_store_password_ptr; |
+decltype(&::gnome_keyring_delete_password) |
+ GnomeKeyringLoader::gnome_keyring_delete_password_ptr; |
+decltype(&::gnome_keyring_find_items) |
+ GnomeKeyringLoader::gnome_keyring_find_items_ptr; |
+decltype(&::gnome_keyring_result_to_message) |
+ GnomeKeyringLoader::gnome_keyring_result_to_message_ptr; |
+decltype(&::gnome_keyring_attribute_list_free) |
+ GnomeKeyringLoader::gnome_keyring_attribute_list_free_ptr; |
+decltype(&::gnome_keyring_attribute_list_new) |
+ GnomeKeyringLoader::gnome_keyring_attribute_list_new_ptr; |
+decltype(&::gnome_keyring_attribute_list_append_string) |
+ GnomeKeyringLoader::gnome_keyring_attribute_list_append_string_ptr; |
+decltype(&::gnome_keyring_attribute_list_append_uint32) |
+ GnomeKeyringLoader::gnome_keyring_attribute_list_append_uint32_ptr; |
bool GnomeKeyringLoader::keyring_loaded = false; |
-#define GNOME_KEYRING_FUNCTION_INFO(name) \ |
- {"gnome_keyring_"#name, reinterpret_cast<void**>(&gnome_keyring_##name)}, |
const GnomeKeyringLoader::FunctionInfo GnomeKeyringLoader::functions[] = { |
- GNOME_KEYRING_FOR_EACH_FUNC(GNOME_KEYRING_FUNCTION_INFO) |
- {nullptr, nullptr} |
-}; |
-#undef GNOME_KEYRING_FUNCTION_INFO |
+ {"gnome_keyring_is_available", |
+ reinterpret_cast<void**>(&gnome_keyring_is_available_ptr)}, |
+ {"gnome_keyring_store_password", |
+ reinterpret_cast<void**>(&gnome_keyring_store_password_ptr)}, |
+ {"gnome_keyring_delete_password", |
+ reinterpret_cast<void**>(&gnome_keyring_delete_password_ptr)}, |
+ {"gnome_keyring_find_items", |
+ reinterpret_cast<void**>(&gnome_keyring_find_items_ptr)}, |
+ {"gnome_keyring_result_to_message", |
+ reinterpret_cast<void**>(&gnome_keyring_result_to_message_ptr)}, |
+ {"gnome_keyring_attribute_list_free", |
+ reinterpret_cast<void**>(&gnome_keyring_attribute_list_free_ptr)}, |
+ {"gnome_keyring_attribute_list_new", |
+ reinterpret_cast<void**>(&gnome_keyring_attribute_list_new_ptr)}, |
+ {"gnome_keyring_attribute_list_append_string", |
+ reinterpret_cast<void**>(&gnome_keyring_attribute_list_append_string_ptr)}, |
+ {"gnome_keyring_attribute_list_append_uint32", |
+ reinterpret_cast<void**>( |
+ &gnome_keyring_attribute_list_append_uint32_ptr)}}; |
/* Load the library and initialize the function pointers. */ |
bool GnomeKeyringLoader::LoadGnomeKeyring() { |
@@ -71,7 +98,7 @@ bool GnomeKeyringLoader::LoadGnomeKeyring() { |
return false; |
} |
- for (size_t i = 0; functions[i].name; ++i) { |
+ for (size_t i = 0; i < arraysize(functions); ++i) { |
dlerror(); |
*functions[i].pointer = dlsym(handle, functions[i].name); |
const char* error = dlerror(); |
@@ -289,7 +316,7 @@ class GKRMethod : public GnomeKeyringLoader { |
private: |
struct GnomeKeyringAttributeListFreeDeleter { |
inline void operator()(void* list) const { |
- gnome_keyring_attribute_list_free( |
+ gnome_keyring_attribute_list_free_ptr( |
static_cast<GnomeKeyringAttributeList*>(list)); |
} |
}; |
@@ -342,7 +369,7 @@ void GKRMethod::AddLogin(const PasswordForm& form, const char* app_string) { |
std::string form_data; |
SerializeFormDataToBase64String(form.form_data, &form_data); |
// clang-format off |
- gnome_keyring_store_password( |
+ gnome_keyring_store_password_ptr( |
&kGnomeSchema, |
nullptr, // Default keyring. |
form.origin.spec().c_str(), // Display name. |
@@ -383,27 +410,26 @@ void GKRMethod::LoginSearch(const PasswordForm& form, |
DCHECK_CURRENTLY_ON(BrowserThread::UI); |
lookup_form_.reset(nullptr); |
// Search GNOME Keyring for matching passwords to update. |
- ScopedAttributeList attrs(gnome_keyring_attribute_list_new()); |
+ ScopedAttributeList attrs(gnome_keyring_attribute_list_new_ptr()); |
AppendString(&attrs, "origin_url", form.origin.spec()); |
AppendString(&attrs, "username_element", UTF16ToUTF8(form.username_element)); |
AppendString(&attrs, "username_value", UTF16ToUTF8(form.username_value)); |
AppendString(&attrs, "password_element", UTF16ToUTF8(form.password_element)); |
AppendString(&attrs, "signon_realm", form.signon_realm); |
AppendString(&attrs, "application", app_string); |
- gnome_keyring_find_items(GNOME_KEYRING_ITEM_GENERIC_SECRET, |
- attrs.get(), |
- OnOperationGetList, |
- /*data=*/this, |
- /*destroy_data=*/nullptr); |
+ gnome_keyring_find_items_ptr(GNOME_KEYRING_ITEM_GENERIC_SECRET, attrs.get(), |
+ OnOperationGetList, |
+ /*data=*/this, |
+ /*destroy_data=*/nullptr); |
} |
void GKRMethod::RemoveLogin(const PasswordForm& form, const char* app_string) { |
DCHECK_CURRENTLY_ON(BrowserThread::UI); |
// We find forms using the same fields as LoginDatabase::RemoveLogin(). |
- gnome_keyring_delete_password( |
+ gnome_keyring_delete_password_ptr( |
&kGnomeSchema, |
OnOperationDone, |
- this, // data |
+ this, // data |
nullptr, // destroy_data |
"origin_url", form.origin.spec().c_str(), |
"username_element", UTF16ToUTF8(form.username_element).c_str(), |
@@ -419,7 +445,7 @@ void GKRMethod::GetLogins(const PasswordStore::FormDigest& form, |
DCHECK_CURRENTLY_ON(BrowserThread::UI); |
lookup_form_.reset(new PasswordStore::FormDigest(form)); |
// Search GNOME Keyring for matching passwords. |
- ScopedAttributeList attrs(gnome_keyring_attribute_list_new()); |
+ ScopedAttributeList attrs(gnome_keyring_attribute_list_new_ptr()); |
if (!password_manager::ShouldPSLDomainMatchingApply( |
password_manager::GetRegistryControlledDomain( |
GURL(form.signon_realm))) && |
@@ -428,11 +454,10 @@ void GKRMethod::GetLogins(const PasswordStore::FormDigest& form, |
AppendString(&attrs, "signon_realm", form.signon_realm); |
} |
AppendString(&attrs, "application", app_string); |
- gnome_keyring_find_items(GNOME_KEYRING_ITEM_GENERIC_SECRET, |
- attrs.get(), |
- OnOperationGetList, |
- /*data=*/this, |
- /*destroy_data=*/nullptr); |
+ gnome_keyring_find_items_ptr(GNOME_KEYRING_ITEM_GENERIC_SECRET, attrs.get(), |
+ OnOperationGetList, |
+ /*data=*/this, |
+ /*destroy_data=*/nullptr); |
} |
void GKRMethod::GetLoginsList(uint32_t blacklisted_by_user, |
@@ -440,14 +465,13 @@ void GKRMethod::GetLoginsList(uint32_t blacklisted_by_user, |
DCHECK_CURRENTLY_ON(BrowserThread::UI); |
lookup_form_.reset(nullptr); |
// Search GNOME Keyring for matching passwords. |
- ScopedAttributeList attrs(gnome_keyring_attribute_list_new()); |
+ ScopedAttributeList attrs(gnome_keyring_attribute_list_new_ptr()); |
AppendUint32(&attrs, "blacklisted_by_user", blacklisted_by_user); |
AppendString(&attrs, "application", app_string); |
- gnome_keyring_find_items(GNOME_KEYRING_ITEM_GENERIC_SECRET, |
- attrs.get(), |
- OnOperationGetList, |
- /*data=*/this, |
- /*destroy_data=*/nullptr); |
+ gnome_keyring_find_items_ptr(GNOME_KEYRING_ITEM_GENERIC_SECRET, attrs.get(), |
+ OnOperationGetList, |
+ /*data=*/this, |
+ /*destroy_data=*/nullptr); |
} |
void GKRMethod::GetAllLogins(const char* app_string) { |
@@ -455,13 +479,12 @@ void GKRMethod::GetAllLogins(const char* app_string) { |
lookup_form_.reset(nullptr); |
// We need to search for something, otherwise we get no results - so |
// we search for the fixed application string. |
- ScopedAttributeList attrs(gnome_keyring_attribute_list_new()); |
+ ScopedAttributeList attrs(gnome_keyring_attribute_list_new_ptr()); |
AppendString(&attrs, "application", app_string); |
- gnome_keyring_find_items(GNOME_KEYRING_ITEM_GENERIC_SECRET, |
- attrs.get(), |
- OnOperationGetList, |
- /*data=*/this, |
- /*destroy_data=*/nullptr); |
+ gnome_keyring_find_items_ptr(GNOME_KEYRING_ITEM_GENERIC_SECRET, attrs.get(), |
+ OnOperationGetList, |
+ /*data=*/this, |
+ /*destroy_data=*/nullptr); |
} |
GnomeKeyringResult GKRMethod::WaitResult() { |
@@ -481,7 +504,7 @@ GnomeKeyringResult GKRMethod::WaitResult(ScopedVector<PasswordForm>* forms) { |
void GKRMethod::AppendString(GKRMethod::ScopedAttributeList* list, |
const char* name, |
const char* value) { |
- gnome_keyring_attribute_list_append_string(list->get(), name, value); |
+ gnome_keyring_attribute_list_append_string_ptr(list->get(), name, value); |
} |
// static |
@@ -495,7 +518,7 @@ void GKRMethod::AppendString(GKRMethod::ScopedAttributeList* list, |
void GKRMethod::AppendUint32(GKRMethod::ScopedAttributeList* list, |
const char* name, |
guint32 value) { |
- gnome_keyring_attribute_list_append_uint32(list->get(), name, value); |
+ gnome_keyring_attribute_list_append_uint32_ptr(list->get(), name, value); |
} |
// static |
@@ -537,7 +560,7 @@ NativeBackendGnome::~NativeBackendGnome() { |
} |
bool NativeBackendGnome::Init() { |
- return LoadGnomeKeyring() && gnome_keyring_is_available(); |
+ return LoadGnomeKeyring() && gnome_keyring_is_available_ptr(); |
} |
bool NativeBackendGnome::RawAddLogin(const PasswordForm& form) { |
@@ -550,7 +573,7 @@ bool NativeBackendGnome::RawAddLogin(const PasswordForm& form) { |
GnomeKeyringResult result = method.WaitResult(); |
if (result != GNOME_KEYRING_RESULT_OK) { |
LOG(ERROR) << "Keyring save failed: " |
- << gnome_keyring_result_to_message(result); |
+ << gnome_keyring_result_to_message_ptr(result); |
return false; |
} |
return true; |
@@ -574,7 +597,7 @@ password_manager::PasswordStoreChangeList NativeBackendGnome::AddLogin( |
if (result != GNOME_KEYRING_RESULT_OK && |
result != GNOME_KEYRING_RESULT_NO_MATCH) { |
LOG(ERROR) << "Keyring find failed: " |
- << gnome_keyring_result_to_message(result); |
+ << gnome_keyring_result_to_message_ptr(result); |
return password_manager::PasswordStoreChangeList(); |
} |
password_manager::PasswordStoreChangeList changes; |
@@ -620,7 +643,7 @@ bool NativeBackendGnome::UpdateLogin( |
return true; |
if (result != GNOME_KEYRING_RESULT_OK) { |
LOG(ERROR) << "Keyring find failed: " |
- << gnome_keyring_result_to_message(result); |
+ << gnome_keyring_result_to_message_ptr(result); |
return false; |
} |
if (forms.size() == 1 && *forms.front() == form) |
@@ -660,7 +683,7 @@ bool NativeBackendGnome::RemoveLogin( |
if (result != GNOME_KEYRING_RESULT_OK) { |
LOG(ERROR) << "Keyring delete failed: " |
- << gnome_keyring_result_to_message(result); |
+ << gnome_keyring_result_to_message_ptr(result); |
return false; |
} |
changes->push_back(password_manager::PasswordStoreChange( |
@@ -714,7 +737,7 @@ bool NativeBackendGnome::GetLogins(const PasswordStore::FormDigest& form, |
return true; |
if (result != GNOME_KEYRING_RESULT_OK) { |
LOG(ERROR) << "Keyring find failed: " |
- << gnome_keyring_result_to_message(result); |
+ << gnome_keyring_result_to_message_ptr(result); |
return false; |
} |
return true; |
@@ -745,7 +768,7 @@ bool NativeBackendGnome::GetLoginsList(bool autofillable, |
return true; |
if (result != GNOME_KEYRING_RESULT_OK) { |
LOG(ERROR) << "Keyring find failed: " |
- << gnome_keyring_result_to_message(result); |
+ << gnome_keyring_result_to_message_ptr(result); |
return false; |
} |
@@ -779,7 +802,7 @@ bool NativeBackendGnome::GetAllLogins(ScopedVector<PasswordForm>* forms) { |
return true; |
if (result != GNOME_KEYRING_RESULT_OK) { |
LOG(ERROR) << "Keyring find failed: " |
- << gnome_keyring_result_to_message(result); |
+ << gnome_keyring_result_to_message_ptr(result); |
return false; |
} |
return true; |