Index: chrome/browser/password_manager/native_backend_kwallet_x.cc |
diff --git a/chrome/browser/password_manager/native_backend_kwallet_x.cc b/chrome/browser/password_manager/native_backend_kwallet_x.cc |
index 50b84b52a44fe3b19367249477199a7cb12bb4d9..37c18cbc7ce88f1b2219e64fc5e2e1d720d98565 100644 |
--- a/chrome/browser/password_manager/native_backend_kwallet_x.cc |
+++ b/chrome/browser/password_manager/native_backend_kwallet_x.cc |
@@ -39,8 +39,12 @@ const int kPickleVersion = 7; |
const char kKWalletFolder[] = "Chrome Form Data"; |
// DBus service, path, and interface names for klauncher and kwalletd. |
+const char kKWalletDName[] = "kwalletd"; |
+const char kKWalletD5Name[] = "kwalletd5"; |
const char kKWalletServiceName[] = "org.kde.kwalletd"; |
+const char kKWallet5ServiceName[] = "org.kde.kwalletd5"; |
const char kKWalletPath[] = "/modules/kwalletd"; |
+const char kKWallet5Path[] = "/modules/kwalletd5"; |
const char kKWalletInterface[] = "org.kde.KWallet"; |
const char kKLauncherServiceName[] = "org.kde.klauncher"; |
const char kKLauncherPath[] = "/KLauncher"; |
@@ -268,11 +272,22 @@ void UMALogDeserializationStatus(bool success) { |
} // namespace |
-NativeBackendKWallet::NativeBackendKWallet(LocalProfileId id) |
+NativeBackendKWallet::NativeBackendKWallet( |
+ LocalProfileId id, base::nix::DesktopEnvironment desktop_env) |
: profile_id_(id), |
kwallet_proxy_(nullptr), |
app_name_(l10n_util::GetStringUTF8(IDS_PRODUCT_NAME)) { |
folder_name_ = GetProfileSpecificFolderName(); |
+ |
+ if (desktop_env == base::nix::DESKTOP_ENVIRONMENT_KDE5) { |
+ dbus_service_name_ = kKWallet5ServiceName; |
+ dbus_path_ = kKWallet5Path; |
+ kwalletd_name_ = kKWalletD5Name; |
+ } else { |
+ dbus_service_name_ = kKWalletServiceName; |
+ dbus_path_ = kKWalletPath; |
+ kwalletd_name_ = kKWalletDName; |
+ } |
} |
NativeBackendKWallet::~NativeBackendKWallet() { |
@@ -329,8 +344,8 @@ void NativeBackendKWallet::InitOnDBThread(scoped_refptr<dbus::Bus> optional_bus, |
session_bus_ = new dbus::Bus(options); |
} |
kwallet_proxy_ = |
- session_bus_->GetObjectProxy(kKWalletServiceName, |
- dbus::ObjectPath(kKWalletPath)); |
+ session_bus_->GetObjectProxy(dbus_service_name_, |
+ dbus::ObjectPath(dbus_path_)); |
// kwalletd may not be running. If we get a temporary failure initializing it, |
// try to start it and then try again. (Note the short-circuit evaluation.) |
const InitResult result = InitWallet(); |
@@ -352,7 +367,7 @@ bool NativeBackendKWallet::StartKWalletd() { |
"start_service_by_desktop_name"); |
dbus::MessageWriter builder(&method_call); |
std::vector<std::string> empty; |
- builder.AppendString("kwalletd"); // serviceName |
+ builder.AppendString(kwalletd_name_); // serviceName |
builder.AppendArrayOfStrings(empty); // urls |
builder.AppendArrayOfStrings(empty); // envs |
builder.AppendString(std::string()); // startup_id |
@@ -361,7 +376,7 @@ bool NativeBackendKWallet::StartKWalletd() { |
klauncher->CallMethodAndBlock( |
&method_call, dbus::ObjectProxy::TIMEOUT_USE_DEFAULT)); |
if (!response.get()) { |
- LOG(ERROR) << "Error contacting klauncher to start kwalletd"; |
+ LOG(ERROR) << "Error contacting klauncher to start " << kwalletd_name_; |
return false; |
} |
dbus::MessageReader reader(response.get()); |
@@ -371,13 +386,13 @@ bool NativeBackendKWallet::StartKWalletd() { |
int32_t pid = -1; |
if (!reader.PopInt32(&ret) || !reader.PopString(&dbus_name) || |
!reader.PopString(&error) || !reader.PopInt32(&pid)) { |
- LOG(ERROR) << "Error reading response from klauncher to start kwalletd: " |
- << response->ToString(); |
+ LOG(ERROR) << "Error reading response from klauncher to start " |
+ << kwalletd_name_ << ": " << response->ToString(); |
return false; |
} |
if (!error.empty() || ret) { |
- LOG(ERROR) << "Error launching kwalletd: error '" << error << "' " |
- << " (code " << ret << ")"; |
+ LOG(ERROR) << "Error launching " << kwalletd_name_ << ": error '" << error |
+ << "' (code " << ret << ")"; |
return false; |
} |
@@ -393,19 +408,19 @@ NativeBackendKWallet::InitResult NativeBackendKWallet::InitWallet() { |
kwallet_proxy_->CallMethodAndBlock( |
&method_call, dbus::ObjectProxy::TIMEOUT_USE_DEFAULT)); |
if (!response.get()) { |
- LOG(ERROR) << "Error contacting kwalletd (isEnabled)"; |
+ LOG(ERROR) << "Error contacting " << kwalletd_name_ << " (isEnabled)"; |
return TEMPORARY_FAIL; |
} |
dbus::MessageReader reader(response.get()); |
bool enabled = false; |
if (!reader.PopBool(&enabled)) { |
- LOG(ERROR) << "Error reading response from kwalletd (isEnabled): " |
- << response->ToString(); |
+ LOG(ERROR) << "Error reading response from " << kwalletd_name_ |
+ << " (isEnabled): " << response->ToString(); |
return PERMANENT_FAIL; |
} |
// Not enabled? Don't use KWallet. But also don't warn here. |
if (!enabled) { |
- VLOG(1) << "kwalletd reports that KWallet is not enabled."; |
+ VLOG(1) << kwalletd_name_ << " reports that KWallet is not enabled."; |
return PERMANENT_FAIL; |
} |
} |
@@ -417,13 +432,13 @@ NativeBackendKWallet::InitResult NativeBackendKWallet::InitWallet() { |
kwallet_proxy_->CallMethodAndBlock( |
&method_call, dbus::ObjectProxy::TIMEOUT_USE_DEFAULT)); |
if (!response.get()) { |
- LOG(ERROR) << "Error contacting kwalletd (networkWallet)"; |
+ LOG(ERROR) << "Error contacting " << kwalletd_name_ << " (networkWallet)"; |
return TEMPORARY_FAIL; |
} |
dbus::MessageReader reader(response.get()); |
if (!reader.PopString(&wallet_name_)) { |
- LOG(ERROR) << "Error reading response from kwalletd (networkWallet): " |
- << response->ToString(); |
+ LOG(ERROR) << "Error reading response from " << kwalletd_name_ |
+ << " (networkWallet): " << response->ToString(); |
return PERMANENT_FAIL; |
} |
} |
@@ -582,14 +597,14 @@ bool NativeBackendKWallet::GetLoginsList( |
kwallet_proxy_->CallMethodAndBlock( |
&method_call, dbus::ObjectProxy::TIMEOUT_USE_DEFAULT)); |
if (!response.get()) { |
- LOG(ERROR) << "Error contacting kwalletd (hasEntry)"; |
+ LOG(ERROR) << "Error contacting " << kwalletd_name_ << " (hasEntry)"; |
return false; |
} |
dbus::MessageReader reader(response.get()); |
bool has_entry = false; |
if (!reader.PopBool(&has_entry)) { |
- LOG(ERROR) << "Error reading response from kwalletd (hasEntry): " |
- << response->ToString(); |
+ LOG(ERROR) << "Error reading response from " << kwalletd_name_ |
+ << " (hasEntry): " << response->ToString(); |
return false; |
} |
if (!has_entry) { |
@@ -609,15 +624,15 @@ bool NativeBackendKWallet::GetLoginsList( |
kwallet_proxy_->CallMethodAndBlock( |
&method_call, dbus::ObjectProxy::TIMEOUT_USE_DEFAULT)); |
if (!response.get()) { |
- LOG(ERROR) << "Error contacting kwalletd (readEntry)"; |
+ LOG(ERROR) << "Error contacting " << kwalletd_name_ << " (readEntry)"; |
return false; |
} |
dbus::MessageReader reader(response.get()); |
const uint8_t* bytes = nullptr; |
size_t length = 0; |
if (!reader.PopArrayOfBytes(&bytes, &length)) { |
- LOG(ERROR) << "Error reading response from kwalletd (readEntry): " |
- << response->ToString(); |
+ LOG(ERROR) << "Error reading response from " << kwalletd_name_ |
+ << " (readEntry): " << response->ToString(); |
return false; |
} |
if (!bytes) |
@@ -699,13 +714,13 @@ bool NativeBackendKWallet::GetAllLogins( |
kwallet_proxy_->CallMethodAndBlock( |
&method_call, dbus::ObjectProxy::TIMEOUT_USE_DEFAULT)); |
if (!response.get()) { |
- LOG(ERROR) << "Error contacting kwalletd (entryList)"; |
+ LOG(ERROR) << "Error contacting " << kwalletd_name_ << " (entryList)"; |
return false; |
} |
dbus::MessageReader reader(response.get()); |
if (!reader.PopArrayOfStrings(&realm_list)) { |
- LOG(ERROR) << "Error reading response from kwalletd (entryList): " |
- << response->ToString(); |
+ LOG(ERROR) << "Error reading response from " << kwalletd_name_ |
+ << "(entryList): " << response->ToString(); |
return false; |
} |
} |
@@ -722,15 +737,15 @@ bool NativeBackendKWallet::GetAllLogins( |
kwallet_proxy_->CallMethodAndBlock( |
&method_call, dbus::ObjectProxy::TIMEOUT_USE_DEFAULT)); |
if (!response.get()) { |
- LOG(ERROR) << "Error contacting kwalletd (readEntry)"; |
+ LOG(ERROR) << "Error contacting " << kwalletd_name_ << "(readEntry)"; |
return false; |
} |
dbus::MessageReader reader(response.get()); |
const uint8_t* bytes = nullptr; |
size_t length = 0; |
if (!reader.PopArrayOfBytes(&bytes, &length)) { |
- LOG(ERROR) << "Error reading response from kwalletd (readEntry): " |
- << response->ToString(); |
+ LOG(ERROR) << "Error reading response from " << kwalletd_name_ |
+ << " (readEntry): " << response->ToString(); |
return false; |
} |
if (!bytes || !CheckSerializedValue(bytes, length, signon_realm)) |
@@ -759,14 +774,14 @@ bool NativeBackendKWallet::SetLoginsList( |
kwallet_proxy_->CallMethodAndBlock( |
&method_call, dbus::ObjectProxy::TIMEOUT_USE_DEFAULT)); |
if (!response.get()) { |
- LOG(ERROR) << "Error contacting kwalletd (removeEntry)"; |
+ LOG(ERROR) << "Error contacting " << kwalletd_name_ << " (removeEntry)"; |
return kInvalidKWalletHandle; |
} |
dbus::MessageReader reader(response.get()); |
int ret = 0; |
if (!reader.PopInt32(&ret)) { |
- LOG(ERROR) << "Error reading response from kwalletd (removeEntry): " |
- << response->ToString(); |
+ LOG(ERROR) << "Error reading response from " << kwalletd_name_ |
+ << " (removeEntry): " << response->ToString(); |
return false; |
} |
if (ret != 0) |
@@ -789,14 +804,14 @@ bool NativeBackendKWallet::SetLoginsList( |
kwallet_proxy_->CallMethodAndBlock( |
&method_call, dbus::ObjectProxy::TIMEOUT_USE_DEFAULT)); |
if (!response.get()) { |
- LOG(ERROR) << "Error contacting kwalletd (writeEntry)"; |
+ LOG(ERROR) << "Error contacting " << kwalletd_name_ << " (writeEntry)"; |
return kInvalidKWalletHandle; |
} |
dbus::MessageReader reader(response.get()); |
int ret = 0; |
if (!reader.PopInt32(&ret)) { |
- LOG(ERROR) << "Error reading response from kwalletd (writeEntry): " |
- << response->ToString(); |
+ LOG(ERROR) << "Error reading response from " << kwalletd_name_ |
+ << " (writeEntry): " << response->ToString(); |
return false; |
} |
if (ret != 0) |
@@ -826,21 +841,21 @@ bool NativeBackendKWallet::RemoveLoginsBetween( |
scoped_ptr<dbus::Response> response(kwallet_proxy_->CallMethodAndBlock( |
&method_call, dbus::ObjectProxy::TIMEOUT_USE_DEFAULT)); |
if (!response.get()) { |
- LOG(ERROR) << "Error contacting kwalletd (entryList)"; |
+ LOG(ERROR) << "Error contacting " << kwalletd_name_ << " (entryList)"; |
return false; |
} |
dbus::MessageReader reader(response.get()); |
dbus::MessageReader array(response.get()); |
if (!reader.PopArray(&array)) { |
- LOG(ERROR) << "Error reading response from kwalletd (entryList): " |
- << response->ToString(); |
+ LOG(ERROR) << "Error reading response from " << kwalletd_name_ |
+ << " (entryList): " << response->ToString(); |
return false; |
} |
while (array.HasMoreData()) { |
std::string realm; |
if (!array.PopString(&realm)) { |
- LOG(ERROR) << "Error reading response from kwalletd (entryList): " |
- << response->ToString(); |
+ LOG(ERROR) << "Error reading response from " << kwalletd_name_ |
+ << " (entryList): " << response->ToString(); |
return false; |
} |
realm_list.push_back(realm); |
@@ -859,15 +874,15 @@ bool NativeBackendKWallet::RemoveLoginsBetween( |
scoped_ptr<dbus::Response> response(kwallet_proxy_->CallMethodAndBlock( |
&method_call, dbus::ObjectProxy::TIMEOUT_USE_DEFAULT)); |
if (!response.get()) { |
- LOG(ERROR) << "Error contacting kwalletd (readEntry)"; |
+ LOG(ERROR) << "Error contacting " << kwalletd_name_ << " (readEntry)"; |
continue; |
} |
dbus::MessageReader reader(response.get()); |
const uint8_t* bytes = nullptr; |
size_t length = 0; |
if (!reader.PopArrayOfBytes(&bytes, &length)) { |
- LOG(ERROR) << "Error reading response from kwalletd (readEntry): " |
- << response->ToString(); |
+ LOG(ERROR) << "Error reading response from " << kwalletd_name_ |
+ << " (readEntry): " << response->ToString(); |
continue; |
} |
if (!bytes || !CheckSerializedValue(bytes, length, signon_realm)) |
@@ -957,13 +972,13 @@ int NativeBackendKWallet::WalletHandle() { |
kwallet_proxy_->CallMethodAndBlock( |
&method_call, dbus::ObjectProxy::TIMEOUT_USE_DEFAULT)); |
if (!response.get()) { |
- LOG(ERROR) << "Error contacting kwalletd (open)"; |
+ LOG(ERROR) << "Error contacting " << kwalletd_name_ << " (open)"; |
return kInvalidKWalletHandle; |
} |
dbus::MessageReader reader(response.get()); |
if (!reader.PopInt32(&handle)) { |
- LOG(ERROR) << "Error reading response from kwalletd (open): " |
- << response->ToString(); |
+ LOG(ERROR) << "Error reading response from " << kwalletd_name_ |
+ << " (open): " << response->ToString(); |
return kInvalidKWalletHandle; |
} |
if (handle == kInvalidKWalletHandle) { |
@@ -984,13 +999,13 @@ int NativeBackendKWallet::WalletHandle() { |
kwallet_proxy_->CallMethodAndBlock( |
&method_call, dbus::ObjectProxy::TIMEOUT_USE_DEFAULT)); |
if (!response.get()) { |
- LOG(ERROR) << "Error contacting kwalletd (hasFolder)"; |
+ LOG(ERROR) << "Error contacting " << kwalletd_name_ << " (hasFolder)"; |
return kInvalidKWalletHandle; |
} |
dbus::MessageReader reader(response.get()); |
if (!reader.PopBool(&has_folder)) { |
- LOG(ERROR) << "Error reading response from kwalletd (hasFolder): " |
- << response->ToString(); |
+ LOG(ERROR) << "Error reading response from " << kwalletd_name_ |
+ << " (hasFolder): " << response->ToString(); |
return kInvalidKWalletHandle; |
} |
} |
@@ -1006,14 +1021,15 @@ int NativeBackendKWallet::WalletHandle() { |
kwallet_proxy_->CallMethodAndBlock( |
&method_call, dbus::ObjectProxy::TIMEOUT_USE_DEFAULT)); |
if (!response.get()) { |
- LOG(ERROR) << "Error contacting kwalletd (createFolder)"; |
+ LOG(ERROR) << "Error contacting << " << kwalletd_name_ |
+ << " (createFolder)"; |
return kInvalidKWalletHandle; |
} |
dbus::MessageReader reader(response.get()); |
bool success = false; |
if (!reader.PopBool(&success)) { |
- LOG(ERROR) << "Error reading response from kwalletd (createFolder): " |
- << response->ToString(); |
+ LOG(ERROR) << "Error reading response from " << kwalletd_name_ |
+ << " (createFolder): " << response->ToString(); |
return kInvalidKWalletHandle; |
} |
if (!success) { |