Index: chrome/browser/password_manager/native_backend_kwallet_x_unittest.cc |
diff --git a/chrome/browser/password_manager/native_backend_kwallet_x_unittest.cc b/chrome/browser/password_manager/native_backend_kwallet_x_unittest.cc |
index fffc53363f9b30c1871185278274d2f46eee03ef..7186cdebb46265aa29349cfd4df0282ca95e6bf3 100644 |
--- a/chrome/browser/password_manager/native_backend_kwallet_x_unittest.cc |
+++ b/chrome/browser/password_manager/native_backend_kwallet_x_unittest.cc |
@@ -37,6 +37,8 @@ using password_manager::PasswordStoreChange; |
using password_manager::PasswordStoreChangeList; |
using testing::_; |
using testing::Invoke; |
+using testing::TestWithParam; |
+using testing::Values; |
using testing::Return; |
namespace { |
@@ -144,8 +146,9 @@ const int NativeBackendKWallet::kInvalidKWalletHandle; |
// Subclass NativeBackendKWallet to promote some members to public for testing. |
class NativeBackendKWalletStub : public NativeBackendKWallet { |
public: |
- explicit NativeBackendKWalletStub(LocalProfileId id) |
- : NativeBackendKWallet(id) { |
+ NativeBackendKWalletStub(LocalProfileId id, |
+ base::nix::DesktopEnvironment desktop_env) |
+ : NativeBackendKWallet(id, desktop_env) { |
} |
using NativeBackendKWallet::InitWithBus; |
using NativeBackendKWallet::kInvalidKWalletHandle; |
@@ -153,7 +156,8 @@ class NativeBackendKWalletStub : public NativeBackendKWallet { |
}; |
// Provide some test forms to avoid having to set them up in each test. |
-class NativeBackendKWalletTestBase : public testing::Test { |
+class NativeBackendKWalletTestBase : |
+ public testing::TestWithParam<base::nix::DesktopEnvironment> { |
protected: |
NativeBackendKWalletTestBase() { |
old_form_google_.origin = GURL("http://www.google.com/"); |
@@ -261,7 +265,8 @@ class NativeBackendKWalletTest : public NativeBackendKWalletTestBase { |
: ui_thread_(BrowserThread::UI, &message_loop_), |
db_thread_(BrowserThread::DB), klauncher_ret_(0), |
klauncher_contacted_(false), kwallet_runnable_(true), |
- kwallet_running_(true), kwallet_enabled_(true) { |
+ kwallet_running_(true), kwallet_enabled_(true), |
+ desktop_env_(GetParam()) { |
} |
void SetUp() override; |
@@ -312,6 +317,9 @@ class NativeBackendKWalletTest : public NativeBackendKWalletTestBase { |
bool kwallet_running_; |
bool kwallet_enabled_; |
+ // Used for switching between kwalletd and kwalletd5 |
+ base::nix::DesktopEnvironment desktop_env_; |
+ |
TestKWallet wallet_; |
// For all method names contained in |failing_methods_|, the mocked KWallet |
@@ -341,10 +349,17 @@ void NativeBackendKWalletTest::SetUp() { |
.WillRepeatedly( |
Invoke(this, &NativeBackendKWalletTest::KLauncherMethodCall)); |
- mock_kwallet_proxy_ = |
- new dbus::MockObjectProxy(mock_session_bus_.get(), |
- "org.kde.kwalletd", |
- dbus::ObjectPath("/modules/kwalletd")); |
+ if (desktop_env_ == base::nix::DESKTOP_ENVIRONMENT_KDE5) { |
+ mock_kwallet_proxy_ = |
+ new dbus::MockObjectProxy(mock_session_bus_.get(), |
+ "org.kde.kwalletd5", |
+ dbus::ObjectPath("/modules/kwalletd5")); |
+ } else { |
+ mock_kwallet_proxy_ = |
+ new dbus::MockObjectProxy(mock_session_bus_.get(), |
+ "org.kde.kwalletd", |
+ dbus::ObjectPath("/modules/kwalletd")); |
+ } |
EXPECT_CALL(*mock_kwallet_proxy_.get(), MockCallMethodAndBlock(_, _)) |
.WillRepeatedly( |
Invoke(this, &NativeBackendKWalletTest::KWalletMethodCall)); |
@@ -353,10 +368,19 @@ void NativeBackendKWalletTest::SetUp() { |
*mock_session_bus_.get(), |
GetObjectProxy("org.kde.klauncher", dbus::ObjectPath("/KLauncher"))) |
.WillRepeatedly(Return(mock_klauncher_proxy_.get())); |
- EXPECT_CALL( |
- *mock_session_bus_.get(), |
- GetObjectProxy("org.kde.kwalletd", dbus::ObjectPath("/modules/kwalletd"))) |
- .WillRepeatedly(Return(mock_kwallet_proxy_.get())); |
+ if (desktop_env_ == base::nix::DESKTOP_ENVIRONMENT_KDE5) { |
+ EXPECT_CALL( |
+ *mock_session_bus_.get(), |
+ GetObjectProxy("org.kde.kwalletd5", |
+ dbus::ObjectPath("/modules/kwalletd5"))) |
+ .WillRepeatedly(Return(mock_kwallet_proxy_.get())); |
+ } else { |
+ EXPECT_CALL( |
+ *mock_session_bus_.get(), |
+ GetObjectProxy("org.kde.kwalletd", |
+ dbus::ObjectPath("/modules/kwalletd"))) |
+ .WillRepeatedly(Return(mock_kwallet_proxy_.get())); |
+ } |
EXPECT_CALL(*mock_session_bus_.get(), ShutdownAndBlock()).WillOnce(Return()) |
.WillRepeatedly(Return()); |
@@ -371,7 +395,7 @@ void NativeBackendKWalletTest::TearDown() { |
void NativeBackendKWalletTest::TestRemoveLoginsBetween( |
RemoveBetweenMethod date_to_test) { |
- NativeBackendKWalletStub backend(42); |
+ NativeBackendKWalletStub backend(42, desktop_env_); |
EXPECT_TRUE(backend.InitWithBus(mock_session_bus_)); |
form_google_.date_synced = base::Time(); |
@@ -459,7 +483,10 @@ dbus::Response* NativeBackendKWalletTest::KLauncherMethodCall( |
EXPECT_TRUE(reader.PopString(&startup_id)); |
EXPECT_TRUE(reader.PopBool(&blind)); |
- EXPECT_EQ("kwalletd", service_name); |
+ if (desktop_env_ == base::nix::DESKTOP_ENVIRONMENT_KDE5) |
+ EXPECT_EQ("kwalletd5", service_name); |
+ else |
+ EXPECT_EQ("kwalletd", service_name); |
EXPECT_TRUE(urls.empty()); |
EXPECT_TRUE(envs.empty()); |
EXPECT_TRUE(startup_id.empty()); |
@@ -619,44 +646,44 @@ void NativeBackendKWalletTest::CheckPasswordForms( |
} |
} |
-TEST_F(NativeBackendKWalletTest, NotEnabled) { |
- NativeBackendKWalletStub kwallet(42); |
+TEST_P(NativeBackendKWalletTest, NotEnabled) { |
+ NativeBackendKWalletStub kwallet(42, desktop_env_); |
kwallet_enabled_ = false; |
EXPECT_FALSE(kwallet.InitWithBus(mock_session_bus_)); |
EXPECT_FALSE(klauncher_contacted_); |
} |
-TEST_F(NativeBackendKWalletTest, NotRunnable) { |
- NativeBackendKWalletStub kwallet(42); |
+TEST_P(NativeBackendKWalletTest, NotRunnable) { |
+ NativeBackendKWalletStub kwallet(42, desktop_env_); |
kwallet_runnable_ = false; |
kwallet_running_ = false; |
EXPECT_FALSE(kwallet.InitWithBus(mock_session_bus_)); |
EXPECT_TRUE(klauncher_contacted_); |
} |
-TEST_F(NativeBackendKWalletTest, NotRunningOrEnabled) { |
- NativeBackendKWalletStub kwallet(42); |
+TEST_P(NativeBackendKWalletTest, NotRunningOrEnabled) { |
+ NativeBackendKWalletStub kwallet(42, desktop_env_); |
kwallet_running_ = false; |
kwallet_enabled_ = false; |
EXPECT_FALSE(kwallet.InitWithBus(mock_session_bus_)); |
EXPECT_TRUE(klauncher_contacted_); |
} |
-TEST_F(NativeBackendKWalletTest, NotRunning) { |
- NativeBackendKWalletStub kwallet(42); |
+TEST_P(NativeBackendKWalletTest, NotRunning) { |
+ NativeBackendKWalletStub kwallet(42, desktop_env_); |
kwallet_running_ = false; |
EXPECT_TRUE(kwallet.InitWithBus(mock_session_bus_)); |
EXPECT_TRUE(klauncher_contacted_); |
} |
-TEST_F(NativeBackendKWalletTest, BasicStartup) { |
- NativeBackendKWalletStub kwallet(42); |
+TEST_P(NativeBackendKWalletTest, BasicStartup) { |
+ NativeBackendKWalletStub kwallet(42, desktop_env_); |
EXPECT_TRUE(kwallet.InitWithBus(mock_session_bus_)); |
EXPECT_FALSE(klauncher_contacted_); |
} |
-TEST_F(NativeBackendKWalletTest, BasicAddLogin) { |
- NativeBackendKWalletStub backend(42); |
+TEST_P(NativeBackendKWalletTest, BasicAddLogin) { |
+ NativeBackendKWalletStub backend(42, desktop_env_); |
EXPECT_TRUE(backend.InitWithBus(mock_session_bus_)); |
BrowserThread::PostTaskAndReplyWithResult( |
@@ -678,8 +705,8 @@ TEST_F(NativeBackendKWalletTest, BasicAddLogin) { |
CheckPasswordForms("Chrome Form Data (42)", expected); |
} |
-TEST_F(NativeBackendKWalletTest, BasicUpdateLogin) { |
- NativeBackendKWalletStub backend(42); |
+TEST_P(NativeBackendKWalletTest, BasicUpdateLogin) { |
+ NativeBackendKWalletStub backend(42, desktop_env_); |
EXPECT_TRUE(backend.InitWithBus(mock_session_bus_)); |
BrowserThread::PostTask( |
@@ -717,8 +744,8 @@ TEST_F(NativeBackendKWalletTest, BasicUpdateLogin) { |
CheckPasswordForms("Chrome Form Data (42)", expected); |
} |
-TEST_F(NativeBackendKWalletTest, BasicListLogins) { |
- NativeBackendKWalletStub backend(42); |
+TEST_P(NativeBackendKWalletTest, BasicListLogins) { |
+ NativeBackendKWalletStub backend(42, desktop_env_); |
EXPECT_TRUE(backend.InitWithBus(mock_session_bus_)); |
BrowserThread::PostTask( |
@@ -747,8 +774,8 @@ TEST_F(NativeBackendKWalletTest, BasicListLogins) { |
CheckPasswordForms("Chrome Form Data (42)", expected); |
} |
-TEST_F(NativeBackendKWalletTest, BasicRemoveLogin) { |
- NativeBackendKWalletStub backend(42); |
+TEST_P(NativeBackendKWalletTest, BasicRemoveLogin) { |
+ NativeBackendKWalletStub backend(42, desktop_env_); |
EXPECT_TRUE(backend.InitWithBus(mock_session_bus_)); |
BrowserThread::PostTask( |
@@ -781,8 +808,8 @@ TEST_F(NativeBackendKWalletTest, BasicRemoveLogin) { |
CheckPasswordForms("Chrome Form Data (42)", expected); |
} |
-TEST_F(NativeBackendKWalletTest, UpdateNonexistentLogin) { |
- NativeBackendKWalletStub backend(42); |
+TEST_P(NativeBackendKWalletTest, UpdateNonexistentLogin) { |
+ NativeBackendKWalletStub backend(42, desktop_env_); |
EXPECT_TRUE(backend.InitWithBus(mock_session_bus_)); |
// First add an unrelated login. |
@@ -816,8 +843,8 @@ TEST_F(NativeBackendKWalletTest, UpdateNonexistentLogin) { |
CheckPasswordForms("Chrome Form Data (42)", expected); |
} |
-TEST_F(NativeBackendKWalletTest, RemoveNonexistentLogin) { |
- NativeBackendKWalletStub backend(42); |
+TEST_P(NativeBackendKWalletTest, RemoveNonexistentLogin) { |
+ NativeBackendKWalletStub backend(42, desktop_env_); |
EXPECT_TRUE(backend.InitWithBus(mock_session_bus_)); |
// First add an unrelated login. |
@@ -861,8 +888,8 @@ TEST_F(NativeBackendKWalletTest, RemoveNonexistentLogin) { |
CheckPasswordForms("Chrome Form Data (42)", expected); |
} |
-TEST_F(NativeBackendKWalletTest, AddDuplicateLogin) { |
- NativeBackendKWalletStub backend(42); |
+TEST_P(NativeBackendKWalletTest, AddDuplicateLogin) { |
+ NativeBackendKWalletStub backend(42, desktop_env_); |
EXPECT_TRUE(backend.InitWithBus(mock_session_bus_)); |
PasswordStoreChangeList changes; |
@@ -901,8 +928,8 @@ TEST_F(NativeBackendKWalletTest, AddDuplicateLogin) { |
CheckPasswordForms("Chrome Form Data (42)", expected); |
} |
-TEST_F(NativeBackendKWalletTest, AndroidCredentials) { |
- NativeBackendKWalletStub backend(42); |
+TEST_P(NativeBackendKWalletTest, AndroidCredentials) { |
+ NativeBackendKWalletStub backend(42, desktop_env_); |
EXPECT_TRUE(backend.InitWithBus(mock_session_bus_)); |
PasswordForm observed_android_form; |
@@ -940,16 +967,16 @@ TEST_F(NativeBackendKWalletTest, AndroidCredentials) { |
CheckPasswordForms("Chrome Form Data (42)", expected); |
} |
-TEST_F(NativeBackendKWalletTest, RemoveLoginsCreatedBetween) { |
+TEST_P(NativeBackendKWalletTest, RemoveLoginsCreatedBetween) { |
TestRemoveLoginsBetween(CREATED); |
} |
-TEST_F(NativeBackendKWalletTest, RemoveLoginsSyncedBetween) { |
+TEST_P(NativeBackendKWalletTest, RemoveLoginsSyncedBetween) { |
TestRemoveLoginsBetween(SYNCED); |
} |
-TEST_F(NativeBackendKWalletTest, ReadDuplicateForms) { |
- NativeBackendKWalletStub backend(42); |
+TEST_P(NativeBackendKWalletTest, ReadDuplicateForms) { |
+ NativeBackendKWalletStub backend(42, desktop_env_); |
EXPECT_TRUE(backend.InitWithBus(mock_session_bus_)); |
// Add 2 slightly different password forms. |
@@ -1000,6 +1027,36 @@ TEST_F(NativeBackendKWalletTest, ReadDuplicateForms) { |
CheckPasswordForms("Chrome Form Data (42)", expected); |
} |
+// Check that if KWallet fails to respond, the backend propagates the error. |
+TEST_P(NativeBackendKWalletTest, GetAllLoginsErrorHandling) { |
+ NativeBackendKWalletStub backend(42, desktop_env_); |
+ EXPECT_TRUE(backend.InitWithBus(mock_session_bus_)); |
+ // Make KWallet fail on calling readEntry. |
+ failing_methods_.insert("readEntry"); |
+ |
+ // Store some non-blacklisted logins to be potentially returned. |
+ BrowserThread::PostTaskAndReplyWithResult( |
+ BrowserThread::DB, FROM_HERE, |
+ base::Bind(&NativeBackendKWalletStub::AddLogin, |
+ base::Unretained(&backend), form_google_), |
+ base::Bind(&CheckPasswordChanges, |
+ PasswordStoreChangeList(1, PasswordStoreChange( |
+ PasswordStoreChange::ADD, form_google_)))); |
+ |
+ // Verify that nothing is in fact returned, because KWallet fails to respond. |
+ ScopedVector<autofill::PasswordForm> form_list; |
+ BrowserThread::PostTask(BrowserThread::DB, FROM_HERE, |
+ base::Bind(&CheckGetAutofillableLoginsFails, |
+ base::Unretained(&backend), &form_list)); |
+ RunDBThread(); |
+ EXPECT_EQ(0u, form_list.size()); |
+} |
+ |
+INSTANTIATE_TEST_CASE_P(, |
+ NativeBackendKWalletTest, |
+ ::testing::Values(base::nix::DESKTOP_ENVIRONMENT_KDE4, |
+ base::nix::DESKTOP_ENVIRONMENT_KDE5)); |
+ |
// TODO(mdm): add more basic tests here at some point. |
// (For example tests for storing >1 password per realm pickle.) |
@@ -1196,31 +1253,6 @@ void NativeBackendKWalletPickleTest::CheckVersion0Pickle( |
CheckPasswordForm(form, *form_list[0], false); |
} |
-// Check that if KWallet fails to respond, the backend propagates the error. |
-TEST_F(NativeBackendKWalletTest, GetAllLoginsErrorHandling) { |
- NativeBackendKWalletStub backend(42); |
- EXPECT_TRUE(backend.InitWithBus(mock_session_bus_)); |
- // Make KWallet fail on calling readEntry. |
- failing_methods_.insert("readEntry"); |
- |
- // Store some non-blacklisted logins to be potentially returned. |
- BrowserThread::PostTaskAndReplyWithResult( |
- BrowserThread::DB, FROM_HERE, |
- base::Bind(&NativeBackendKWalletStub::AddLogin, |
- base::Unretained(&backend), form_google_), |
- base::Bind(&CheckPasswordChanges, |
- PasswordStoreChangeList(1, PasswordStoreChange( |
- PasswordStoreChange::ADD, form_google_)))); |
- |
- // Verify that nothing is in fact returned, because KWallet fails to respond. |
- ScopedVector<autofill::PasswordForm> form_list; |
- BrowserThread::PostTask(BrowserThread::DB, FROM_HERE, |
- base::Bind(&CheckGetAutofillableLoginsFails, |
- base::Unretained(&backend), &form_list)); |
- RunDBThread(); |
- EXPECT_EQ(0u, form_list.size()); |
-} |
- |
// We try both SCHEME_HTML and SCHEME_BASIC since the scheme is stored right |
// after the size in the pickle, so it's what gets read as part of the count |
// when reading 32-bit pickles on 64-bit systems. SCHEME_HTML is 0 (so we'll |