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

Unified Diff: chrome/browser/password_manager/native_backend_libsecret.cc

Issue 1929573002: Changed location of LibsecretLoader (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Moved omitted implementation and also moved LibsecretAttributesBuilder Created 4 years, 8 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/password_manager/native_backend_libsecret.cc
diff --git a/chrome/browser/password_manager/native_backend_libsecret.cc b/chrome/browser/password_manager/native_backend_libsecret.cc
index 21581c0c02ce431d548e9edc483965a489e98795..5604ac47ac0cc4f92a6b8e5bfb308d356b060918 100644
--- a/chrome/browser/password_manager/native_backend_libsecret.cc
+++ b/chrome/browser/password_manager/native_backend_libsecret.cc
@@ -4,7 +4,6 @@
#include "chrome/browser/password_manager/native_backend_libsecret.h"
-#include <dlfcn.h>
#include <stddef.h>
#include <stdint.h>
@@ -14,6 +13,8 @@
#include <utility>
#include <vector>
+#include <libsecret/secret.h>
+
#include "base/logging.h"
#include "base/metrics/histogram.h"
#include "base/strings/string_number_conversions.h"
@@ -32,68 +33,6 @@ const char kEmptyString[] = "";
const int kMaxPossibleTimeTValue = std::numeric_limits<int>::max();
} // namespace
-typeof(&::secret_password_store_sync)
- LibsecretLoader::secret_password_store_sync;
-typeof(&::secret_service_search_sync)
- LibsecretLoader::secret_service_search_sync;
-typeof(&::secret_password_clear_sync)
- LibsecretLoader::secret_password_clear_sync;
-typeof(&::secret_item_get_secret) LibsecretLoader::secret_item_get_secret;
-typeof(&::secret_value_get_text) LibsecretLoader::secret_value_get_text;
-typeof(&::secret_item_get_attributes)
- LibsecretLoader::secret_item_get_attributes;
-typeof(&::secret_item_load_secret_sync)
- LibsecretLoader::secret_item_load_secret_sync;
-typeof(&::secret_value_unref) LibsecretLoader::secret_value_unref;
-
-bool LibsecretLoader::libsecret_loaded = false;
-
-const LibsecretLoader::FunctionInfo LibsecretLoader::functions[] = {
- {"secret_password_store_sync",
- reinterpret_cast<void**>(&secret_password_store_sync)},
- {"secret_service_search_sync",
- reinterpret_cast<void**>(&secret_service_search_sync)},
- {"secret_password_clear_sync",
- reinterpret_cast<void**>(&secret_password_clear_sync)},
- {"secret_item_get_secret",
- reinterpret_cast<void**>(&secret_item_get_secret)},
- {"secret_value_get_text", reinterpret_cast<void**>(&secret_value_get_text)},
- {"secret_item_get_attributes",
- reinterpret_cast<void**>(&secret_item_get_attributes)},
- {"secret_item_load_secret_sync",
- reinterpret_cast<void**>(&secret_item_load_secret_sync)},
- {"secret_value_unref", reinterpret_cast<void**>(&secret_value_unref)},
- {nullptr, nullptr}};
-
-bool LibsecretLoader::LoadLibsecret() {
- if (libsecret_loaded)
- return true;
-
- void* handle = dlopen("libsecret-1.so.0", RTLD_NOW | RTLD_GLOBAL);
- if (!handle) {
- // We wanted to use libsecret, but we couldn't load it. Warn, because
- // either the user asked for this, or we autodetected it incorrectly. (Or
- // the system has broken libraries, which is also good to warn about.)
- LOG(WARNING) << "Could not load libsecret-1.so.0: " << dlerror();
- return false;
- }
-
- for (size_t i = 0; functions[i].name; ++i) {
- dlerror();
- *functions[i].pointer = dlsym(handle, functions[i].name);
- const char* error = dlerror();
- if (error) {
- VLOG(1) << "Unable to load symbol " << functions[i].name << ": " << error;
- dlclose(handle);
- return false;
- }
- }
-
- libsecret_loaded = true;
- // We leak the library handle. That's OK: this function is called only once.
- return true;
-}
-
namespace {
const char kLibsecretAppString[] = "chrome";
@@ -215,48 +154,6 @@ std::unique_ptr<PasswordForm> FormOutOfAttributes(GHashTable* attrs) {
return form;
}
-class LibsecretAttributesBuilder {
- public:
- LibsecretAttributesBuilder();
- ~LibsecretAttributesBuilder();
- void Append(const std::string& name, const std::string& value);
- void Append(const std::string& name, int64_t value);
- // GHashTable, its keys and values returned from Get() are destroyed in
- // |LibsecretAttributesBuilder| desctructor.
- GHashTable* Get() { return attrs_; }
-
- private:
- // |name_values_| is a storage for strings referenced in |attrs_|.
- std::list<std::string> name_values_;
- GHashTable* attrs_;
-};
-
-LibsecretAttributesBuilder::LibsecretAttributesBuilder() {
- attrs_ = g_hash_table_new_full(g_str_hash, g_str_equal,
- nullptr, // no deleter for keys
- nullptr); // no deleter for values
-}
-
-LibsecretAttributesBuilder::~LibsecretAttributesBuilder() {
- g_hash_table_destroy(attrs_);
-}
-
-void LibsecretAttributesBuilder::Append(const std::string& name,
- const std::string& value) {
- name_values_.push_back(name);
- gpointer name_str =
- static_cast<gpointer>(const_cast<char*>(name_values_.back().c_str()));
- name_values_.push_back(value);
- gpointer value_str =
- static_cast<gpointer>(const_cast<char*>(name_values_.back().c_str()));
- g_hash_table_insert(attrs_, name_str, value_str);
-}
-
-void LibsecretAttributesBuilder::Append(const std::string& name,
- int64_t value) {
- Append(name, base::Int64ToString(value));
-}
-
// Generates a profile-specific app string based on profile_id_.
std::string GetProfileSpecificAppString(LocalProfileId id) {
// Originally, the application string was always just "chrome" and used only
@@ -267,30 +164,6 @@ std::string GetProfileSpecificAppString(LocalProfileId id) {
} // namespace
-bool LibsecretLoader::LibsecretIsAvailable() {
- if (!libsecret_loaded)
- return false;
- // A dummy query is made to check for availability, because libsecret doesn't
- // have a dedicated availability function. For performance reasons, the query
- // is meant to return an empty result.
- LibsecretAttributesBuilder attrs;
- attrs.Append("application", "chrome-string_to_get_empty_result");
-
- GError* error = nullptr;
- GList* found = secret_service_search_sync(nullptr, // default secret service
- &kLibsecretSchema, attrs.Get(),
- SECRET_SEARCH_ALL,
- nullptr, // no cancellable ojbect
- &error);
- bool success = (error == nullptr);
- if (error)
- g_error_free(error);
- if (found)
- g_list_free(found);
-
- return success;
-}
-
NativeBackendLibsecret::NativeBackendLibsecret(LocalProfileId id)
: app_string_(GetProfileSpecificAppString(id)) {
}

Powered by Google App Engine
This is Rietveld 408576698