| OLD | NEW |
| 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 <algorithm> | 5 #include <algorithm> |
| 6 #include <map> | 6 #include <map> |
| 7 #include <set> | 7 #include <set> |
| 8 #include <string> | 8 #include <string> |
| 9 #include <vector> | 9 #include <vector> |
| 10 | 10 |
| (...skipping 19 matching lines...) Expand all Loading... |
| 30 #include "testing/gmock/include/gmock/gmock.h" | 30 #include "testing/gmock/include/gmock/gmock.h" |
| 31 #include "testing/gtest/include/gtest/gtest.h" | 31 #include "testing/gtest/include/gtest/gtest.h" |
| 32 | 32 |
| 33 using autofill::PasswordForm; | 33 using autofill::PasswordForm; |
| 34 using base::UTF8ToUTF16; | 34 using base::UTF8ToUTF16; |
| 35 using content::BrowserThread; | 35 using content::BrowserThread; |
| 36 using password_manager::PasswordStoreChange; | 36 using password_manager::PasswordStoreChange; |
| 37 using password_manager::PasswordStoreChangeList; | 37 using password_manager::PasswordStoreChangeList; |
| 38 using testing::_; | 38 using testing::_; |
| 39 using testing::Invoke; | 39 using testing::Invoke; |
| 40 using testing::TestWithParam; |
| 41 using testing::Values; |
| 40 using testing::Return; | 42 using testing::Return; |
| 41 | 43 |
| 42 namespace { | 44 namespace { |
| 43 | 45 |
| 44 // This class implements a very simple version of KWallet in memory. | 46 // This class implements a very simple version of KWallet in memory. |
| 45 // We only provide the parts we actually use; the real version has more. | 47 // We only provide the parts we actually use; the real version has more. |
| 46 class TestKWallet { | 48 class TestKWallet { |
| 47 public: | 49 public: |
| 48 typedef std::basic_string<uint8_t> Blob; // std::string is binary-safe. | 50 typedef std::basic_string<uint8_t> Blob; // std::string is binary-safe. |
| 49 | 51 |
| (...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 137 | 139 |
| 138 } // anonymous namespace | 140 } // anonymous namespace |
| 139 | 141 |
| 140 // Obscure magic: we need to declare storage for this constant because we use it | 142 // Obscure magic: we need to declare storage for this constant because we use it |
| 141 // in ways that require its address in this test, but not in the actual code. | 143 // in ways that require its address in this test, but not in the actual code. |
| 142 const int NativeBackendKWallet::kInvalidKWalletHandle; | 144 const int NativeBackendKWallet::kInvalidKWalletHandle; |
| 143 | 145 |
| 144 // Subclass NativeBackendKWallet to promote some members to public for testing. | 146 // Subclass NativeBackendKWallet to promote some members to public for testing. |
| 145 class NativeBackendKWalletStub : public NativeBackendKWallet { | 147 class NativeBackendKWalletStub : public NativeBackendKWallet { |
| 146 public: | 148 public: |
| 147 explicit NativeBackendKWalletStub(LocalProfileId id) | 149 NativeBackendKWalletStub(LocalProfileId id, |
| 148 : NativeBackendKWallet(id) { | 150 base::nix::DesktopEnvironment desktop_env) |
| 151 : NativeBackendKWallet(id, desktop_env) { |
| 149 } | 152 } |
| 150 using NativeBackendKWallet::InitWithBus; | 153 using NativeBackendKWallet::InitWithBus; |
| 151 using NativeBackendKWallet::kInvalidKWalletHandle; | 154 using NativeBackendKWallet::kInvalidKWalletHandle; |
| 152 using NativeBackendKWallet::DeserializeValue; | 155 using NativeBackendKWallet::DeserializeValue; |
| 153 }; | 156 }; |
| 154 | 157 |
| 155 // Provide some test forms to avoid having to set them up in each test. | 158 // Provide some test forms to avoid having to set them up in each test. |
| 156 class NativeBackendKWalletTestBase : public testing::Test { | 159 class NativeBackendKWalletTestBase : |
| 160 public testing::TestWithParam<base::nix::DesktopEnvironment> { |
| 157 protected: | 161 protected: |
| 158 NativeBackendKWalletTestBase() { | 162 NativeBackendKWalletTestBase() { |
| 159 old_form_google_.origin = GURL("http://www.google.com/"); | 163 old_form_google_.origin = GURL("http://www.google.com/"); |
| 160 old_form_google_.action = GURL("http://www.google.com/login"); | 164 old_form_google_.action = GURL("http://www.google.com/login"); |
| 161 old_form_google_.username_element = UTF8ToUTF16("user"); | 165 old_form_google_.username_element = UTF8ToUTF16("user"); |
| 162 old_form_google_.username_value = UTF8ToUTF16("joeschmoe"); | 166 old_form_google_.username_value = UTF8ToUTF16("joeschmoe"); |
| 163 old_form_google_.password_element = UTF8ToUTF16("pass"); | 167 old_form_google_.password_element = UTF8ToUTF16("pass"); |
| 164 old_form_google_.password_value = UTF8ToUTF16("seekrit"); | 168 old_form_google_.password_value = UTF8ToUTF16("seekrit"); |
| 165 old_form_google_.submit_element = UTF8ToUTF16("submit"); | 169 old_form_google_.submit_element = UTF8ToUTF16("submit"); |
| 166 old_form_google_.signon_realm = "Google"; | 170 old_form_google_.signon_realm = "Google"; |
| (...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 254 EXPECT_TRUE(result); | 258 EXPECT_TRUE(result); |
| 255 CheckPasswordChanges(*expected, *actual); | 259 CheckPasswordChanges(*expected, *actual); |
| 256 } | 260 } |
| 257 | 261 |
| 258 class NativeBackendKWalletTest : public NativeBackendKWalletTestBase { | 262 class NativeBackendKWalletTest : public NativeBackendKWalletTestBase { |
| 259 protected: | 263 protected: |
| 260 NativeBackendKWalletTest() | 264 NativeBackendKWalletTest() |
| 261 : ui_thread_(BrowserThread::UI, &message_loop_), | 265 : ui_thread_(BrowserThread::UI, &message_loop_), |
| 262 db_thread_(BrowserThread::DB), klauncher_ret_(0), | 266 db_thread_(BrowserThread::DB), klauncher_ret_(0), |
| 263 klauncher_contacted_(false), kwallet_runnable_(true), | 267 klauncher_contacted_(false), kwallet_runnable_(true), |
| 264 kwallet_running_(true), kwallet_enabled_(true) { | 268 kwallet_running_(true), kwallet_enabled_(true), |
| 269 desktop_env_(GetParam()) { |
| 265 } | 270 } |
| 266 | 271 |
| 267 void SetUp() override; | 272 void SetUp() override; |
| 268 void TearDown() override; | 273 void TearDown() override; |
| 269 | 274 |
| 270 // Let the DB thread run to completion of all current tasks. | 275 // Let the DB thread run to completion of all current tasks. |
| 271 void RunDBThread() { | 276 void RunDBThread() { |
| 272 base::WaitableEvent event(false, false); | 277 base::WaitableEvent event(false, false); |
| 273 BrowserThread::PostTask(BrowserThread::DB, FROM_HERE, | 278 BrowserThread::PostTask(BrowserThread::DB, FROM_HERE, |
| 274 base::Bind(ThreadDone, &event)); | 279 base::Bind(ThreadDone, &event)); |
| (...skipping 30 matching lines...) Expand all Loading... |
| 305 scoped_refptr<dbus::MockObjectProxy> mock_kwallet_proxy_; | 310 scoped_refptr<dbus::MockObjectProxy> mock_kwallet_proxy_; |
| 306 | 311 |
| 307 int klauncher_ret_; | 312 int klauncher_ret_; |
| 308 std::string klauncher_error_; | 313 std::string klauncher_error_; |
| 309 bool klauncher_contacted_; | 314 bool klauncher_contacted_; |
| 310 | 315 |
| 311 bool kwallet_runnable_; | 316 bool kwallet_runnable_; |
| 312 bool kwallet_running_; | 317 bool kwallet_running_; |
| 313 bool kwallet_enabled_; | 318 bool kwallet_enabled_; |
| 314 | 319 |
| 320 // Used for switching between kwalletd and kwalletd5 |
| 321 base::nix::DesktopEnvironment desktop_env_; |
| 322 |
| 315 TestKWallet wallet_; | 323 TestKWallet wallet_; |
| 316 | 324 |
| 317 // For all method names contained in |failing_methods_|, the mocked KWallet | 325 // For all method names contained in |failing_methods_|, the mocked KWallet |
| 318 // will return a null response. | 326 // will return a null response. |
| 319 std::set<std::string> failing_methods_; | 327 std::set<std::string> failing_methods_; |
| 320 | 328 |
| 321 private: | 329 private: |
| 322 dbus::Response* KLauncherMethodCall( | 330 dbus::Response* KLauncherMethodCall( |
| 323 dbus::MethodCall* method_call, testing::Unused); | 331 dbus::MethodCall* method_call, testing::Unused); |
| 324 | 332 |
| 325 dbus::Response* KWalletMethodCall( | 333 dbus::Response* KWalletMethodCall( |
| 326 dbus::MethodCall* method_call, testing::Unused); | 334 dbus::MethodCall* method_call, testing::Unused); |
| 327 }; | 335 }; |
| 328 | 336 |
| 329 void NativeBackendKWalletTest::SetUp() { | 337 void NativeBackendKWalletTest::SetUp() { |
| 330 ASSERT_TRUE(db_thread_.Start()); | 338 ASSERT_TRUE(db_thread_.Start()); |
| 331 | 339 |
| 332 dbus::Bus::Options options; | 340 dbus::Bus::Options options; |
| 333 options.bus_type = dbus::Bus::SESSION; | 341 options.bus_type = dbus::Bus::SESSION; |
| 334 mock_session_bus_ = new dbus::MockBus(options); | 342 mock_session_bus_ = new dbus::MockBus(options); |
| 335 | 343 |
| 336 mock_klauncher_proxy_ = | 344 mock_klauncher_proxy_ = |
| 337 new dbus::MockObjectProxy(mock_session_bus_.get(), | 345 new dbus::MockObjectProxy(mock_session_bus_.get(), |
| 338 "org.kde.klauncher", | 346 "org.kde.klauncher", |
| 339 dbus::ObjectPath("/KLauncher")); | 347 dbus::ObjectPath("/KLauncher")); |
| 340 EXPECT_CALL(*mock_klauncher_proxy_.get(), MockCallMethodAndBlock(_, _)) | 348 EXPECT_CALL(*mock_klauncher_proxy_.get(), MockCallMethodAndBlock(_, _)) |
| 341 .WillRepeatedly( | 349 .WillRepeatedly( |
| 342 Invoke(this, &NativeBackendKWalletTest::KLauncherMethodCall)); | 350 Invoke(this, &NativeBackendKWalletTest::KLauncherMethodCall)); |
| 343 | 351 |
| 344 mock_kwallet_proxy_ = | 352 if (desktop_env_ == base::nix::DESKTOP_ENVIRONMENT_KDE5) { |
| 345 new dbus::MockObjectProxy(mock_session_bus_.get(), | 353 mock_kwallet_proxy_ = |
| 346 "org.kde.kwalletd", | 354 new dbus::MockObjectProxy(mock_session_bus_.get(), |
| 347 dbus::ObjectPath("/modules/kwalletd")); | 355 "org.kde.kwalletd5", |
| 356 dbus::ObjectPath("/modules/kwalletd5")); |
| 357 } else { |
| 358 mock_kwallet_proxy_ = |
| 359 new dbus::MockObjectProxy(mock_session_bus_.get(), |
| 360 "org.kde.kwalletd", |
| 361 dbus::ObjectPath("/modules/kwalletd")); |
| 362 } |
| 348 EXPECT_CALL(*mock_kwallet_proxy_.get(), MockCallMethodAndBlock(_, _)) | 363 EXPECT_CALL(*mock_kwallet_proxy_.get(), MockCallMethodAndBlock(_, _)) |
| 349 .WillRepeatedly( | 364 .WillRepeatedly( |
| 350 Invoke(this, &NativeBackendKWalletTest::KWalletMethodCall)); | 365 Invoke(this, &NativeBackendKWalletTest::KWalletMethodCall)); |
| 351 | 366 |
| 352 EXPECT_CALL( | 367 EXPECT_CALL( |
| 353 *mock_session_bus_.get(), | 368 *mock_session_bus_.get(), |
| 354 GetObjectProxy("org.kde.klauncher", dbus::ObjectPath("/KLauncher"))) | 369 GetObjectProxy("org.kde.klauncher", dbus::ObjectPath("/KLauncher"))) |
| 355 .WillRepeatedly(Return(mock_klauncher_proxy_.get())); | 370 .WillRepeatedly(Return(mock_klauncher_proxy_.get())); |
| 356 EXPECT_CALL( | 371 if (desktop_env_ == base::nix::DESKTOP_ENVIRONMENT_KDE5) { |
| 357 *mock_session_bus_.get(), | 372 EXPECT_CALL( |
| 358 GetObjectProxy("org.kde.kwalletd", dbus::ObjectPath("/modules/kwalletd"))) | 373 *mock_session_bus_.get(), |
| 359 .WillRepeatedly(Return(mock_kwallet_proxy_.get())); | 374 GetObjectProxy("org.kde.kwalletd5", |
| 375 dbus::ObjectPath("/modules/kwalletd5"))) |
| 376 .WillRepeatedly(Return(mock_kwallet_proxy_.get())); |
| 377 } else { |
| 378 EXPECT_CALL( |
| 379 *mock_session_bus_.get(), |
| 380 GetObjectProxy("org.kde.kwalletd", |
| 381 dbus::ObjectPath("/modules/kwalletd"))) |
| 382 .WillRepeatedly(Return(mock_kwallet_proxy_.get())); |
| 383 } |
| 360 | 384 |
| 361 EXPECT_CALL(*mock_session_bus_.get(), ShutdownAndBlock()).WillOnce(Return()) | 385 EXPECT_CALL(*mock_session_bus_.get(), ShutdownAndBlock()).WillOnce(Return()) |
| 362 .WillRepeatedly(Return()); | 386 .WillRepeatedly(Return()); |
| 363 } | 387 } |
| 364 | 388 |
| 365 void NativeBackendKWalletTest::TearDown() { | 389 void NativeBackendKWalletTest::TearDown() { |
| 366 base::ThreadTaskRunnerHandle::Get()->PostTask( | 390 base::ThreadTaskRunnerHandle::Get()->PostTask( |
| 367 FROM_HERE, base::MessageLoop::QuitClosure()); | 391 FROM_HERE, base::MessageLoop::QuitClosure()); |
| 368 base::MessageLoop::current()->Run(); | 392 base::MessageLoop::current()->Run(); |
| 369 db_thread_.Stop(); | 393 db_thread_.Stop(); |
| 370 } | 394 } |
| 371 | 395 |
| 372 void NativeBackendKWalletTest::TestRemoveLoginsBetween( | 396 void NativeBackendKWalletTest::TestRemoveLoginsBetween( |
| 373 RemoveBetweenMethod date_to_test) { | 397 RemoveBetweenMethod date_to_test) { |
| 374 NativeBackendKWalletStub backend(42); | 398 NativeBackendKWalletStub backend(42, desktop_env_); |
| 375 EXPECT_TRUE(backend.InitWithBus(mock_session_bus_)); | 399 EXPECT_TRUE(backend.InitWithBus(mock_session_bus_)); |
| 376 | 400 |
| 377 form_google_.date_synced = base::Time(); | 401 form_google_.date_synced = base::Time(); |
| 378 form_isc_.date_synced = base::Time(); | 402 form_isc_.date_synced = base::Time(); |
| 379 form_google_.date_created = base::Time(); | 403 form_google_.date_created = base::Time(); |
| 380 form_isc_.date_created = base::Time(); | 404 form_isc_.date_created = base::Time(); |
| 381 base::Time now = base::Time::Now(); | 405 base::Time now = base::Time::Now(); |
| 382 base::Time next_day = now + base::TimeDelta::FromDays(1); | 406 base::Time next_day = now + base::TimeDelta::FromDays(1); |
| 383 if (date_to_test == CREATED) { | 407 if (date_to_test == CREATED) { |
| 384 form_google_.date_created = now; | 408 form_google_.date_created = now; |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 452 std::vector<std::string> envs; | 476 std::vector<std::string> envs; |
| 453 std::string startup_id; | 477 std::string startup_id; |
| 454 bool blind = false; | 478 bool blind = false; |
| 455 | 479 |
| 456 EXPECT_TRUE(reader.PopString(&service_name)); | 480 EXPECT_TRUE(reader.PopString(&service_name)); |
| 457 EXPECT_TRUE(reader.PopArrayOfStrings(&urls)); | 481 EXPECT_TRUE(reader.PopArrayOfStrings(&urls)); |
| 458 EXPECT_TRUE(reader.PopArrayOfStrings(&envs)); | 482 EXPECT_TRUE(reader.PopArrayOfStrings(&envs)); |
| 459 EXPECT_TRUE(reader.PopString(&startup_id)); | 483 EXPECT_TRUE(reader.PopString(&startup_id)); |
| 460 EXPECT_TRUE(reader.PopBool(&blind)); | 484 EXPECT_TRUE(reader.PopBool(&blind)); |
| 461 | 485 |
| 462 EXPECT_EQ("kwalletd", service_name); | 486 if (desktop_env_ == base::nix::DESKTOP_ENVIRONMENT_KDE5) |
| 487 EXPECT_EQ("kwalletd5", service_name); |
| 488 else |
| 489 EXPECT_EQ("kwalletd", service_name); |
| 463 EXPECT_TRUE(urls.empty()); | 490 EXPECT_TRUE(urls.empty()); |
| 464 EXPECT_TRUE(envs.empty()); | 491 EXPECT_TRUE(envs.empty()); |
| 465 EXPECT_TRUE(startup_id.empty()); | 492 EXPECT_TRUE(startup_id.empty()); |
| 466 EXPECT_FALSE(blind); | 493 EXPECT_FALSE(blind); |
| 467 | 494 |
| 468 if (kwallet_runnable_) | 495 if (kwallet_runnable_) |
| 469 kwallet_running_ = true; | 496 kwallet_running_ = true; |
| 470 | 497 |
| 471 scoped_ptr<dbus::Response> response(dbus::Response::CreateEmpty()); | 498 scoped_ptr<dbus::Response> response(dbus::Response::CreateEmpty()); |
| 472 dbus::MessageWriter writer(response.get()); | 499 dbus::MessageWriter writer(response.get()); |
| (...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 612 value.size()); | 639 value.size()); |
| 613 ScopedVector<autofill::PasswordForm> forms = | 640 ScopedVector<autofill::PasswordForm> forms = |
| 614 NativeBackendKWalletStub::DeserializeValue(entries[i], pickle); | 641 NativeBackendKWalletStub::DeserializeValue(entries[i], pickle); |
| 615 const std::vector<const PasswordForm*>& expect = sorted_expected[i].second; | 642 const std::vector<const PasswordForm*>& expect = sorted_expected[i].second; |
| 616 EXPECT_EQ(expect.size(), forms.size()); | 643 EXPECT_EQ(expect.size(), forms.size()); |
| 617 for (size_t j = 0; j < forms.size() && j < expect.size(); ++j) | 644 for (size_t j = 0; j < forms.size() && j < expect.size(); ++j) |
| 618 CheckPasswordForm(*expect[j], *forms[j], true); | 645 CheckPasswordForm(*expect[j], *forms[j], true); |
| 619 } | 646 } |
| 620 } | 647 } |
| 621 | 648 |
| 622 TEST_F(NativeBackendKWalletTest, NotEnabled) { | 649 TEST_P(NativeBackendKWalletTest, NotEnabled) { |
| 623 NativeBackendKWalletStub kwallet(42); | 650 NativeBackendKWalletStub kwallet(42, desktop_env_); |
| 624 kwallet_enabled_ = false; | 651 kwallet_enabled_ = false; |
| 625 EXPECT_FALSE(kwallet.InitWithBus(mock_session_bus_)); | 652 EXPECT_FALSE(kwallet.InitWithBus(mock_session_bus_)); |
| 626 EXPECT_FALSE(klauncher_contacted_); | 653 EXPECT_FALSE(klauncher_contacted_); |
| 627 } | 654 } |
| 628 | 655 |
| 629 TEST_F(NativeBackendKWalletTest, NotRunnable) { | 656 TEST_P(NativeBackendKWalletTest, NotRunnable) { |
| 630 NativeBackendKWalletStub kwallet(42); | 657 NativeBackendKWalletStub kwallet(42, desktop_env_); |
| 631 kwallet_runnable_ = false; | 658 kwallet_runnable_ = false; |
| 632 kwallet_running_ = false; | 659 kwallet_running_ = false; |
| 633 EXPECT_FALSE(kwallet.InitWithBus(mock_session_bus_)); | 660 EXPECT_FALSE(kwallet.InitWithBus(mock_session_bus_)); |
| 634 EXPECT_TRUE(klauncher_contacted_); | 661 EXPECT_TRUE(klauncher_contacted_); |
| 635 } | 662 } |
| 636 | 663 |
| 637 TEST_F(NativeBackendKWalletTest, NotRunningOrEnabled) { | 664 TEST_P(NativeBackendKWalletTest, NotRunningOrEnabled) { |
| 638 NativeBackendKWalletStub kwallet(42); | 665 NativeBackendKWalletStub kwallet(42, desktop_env_); |
| 639 kwallet_running_ = false; | 666 kwallet_running_ = false; |
| 640 kwallet_enabled_ = false; | 667 kwallet_enabled_ = false; |
| 641 EXPECT_FALSE(kwallet.InitWithBus(mock_session_bus_)); | 668 EXPECT_FALSE(kwallet.InitWithBus(mock_session_bus_)); |
| 642 EXPECT_TRUE(klauncher_contacted_); | 669 EXPECT_TRUE(klauncher_contacted_); |
| 643 } | 670 } |
| 644 | 671 |
| 645 TEST_F(NativeBackendKWalletTest, NotRunning) { | 672 TEST_P(NativeBackendKWalletTest, NotRunning) { |
| 646 NativeBackendKWalletStub kwallet(42); | 673 NativeBackendKWalletStub kwallet(42, desktop_env_); |
| 647 kwallet_running_ = false; | 674 kwallet_running_ = false; |
| 648 EXPECT_TRUE(kwallet.InitWithBus(mock_session_bus_)); | 675 EXPECT_TRUE(kwallet.InitWithBus(mock_session_bus_)); |
| 649 EXPECT_TRUE(klauncher_contacted_); | 676 EXPECT_TRUE(klauncher_contacted_); |
| 650 } | 677 } |
| 651 | 678 |
| 652 TEST_F(NativeBackendKWalletTest, BasicStartup) { | 679 TEST_P(NativeBackendKWalletTest, BasicStartup) { |
| 653 NativeBackendKWalletStub kwallet(42); | 680 NativeBackendKWalletStub kwallet(42, desktop_env_); |
| 654 EXPECT_TRUE(kwallet.InitWithBus(mock_session_bus_)); | 681 EXPECT_TRUE(kwallet.InitWithBus(mock_session_bus_)); |
| 655 EXPECT_FALSE(klauncher_contacted_); | 682 EXPECT_FALSE(klauncher_contacted_); |
| 656 } | 683 } |
| 657 | 684 |
| 658 TEST_F(NativeBackendKWalletTest, BasicAddLogin) { | 685 TEST_P(NativeBackendKWalletTest, BasicAddLogin) { |
| 659 NativeBackendKWalletStub backend(42); | 686 NativeBackendKWalletStub backend(42, desktop_env_); |
| 660 EXPECT_TRUE(backend.InitWithBus(mock_session_bus_)); | 687 EXPECT_TRUE(backend.InitWithBus(mock_session_bus_)); |
| 661 | 688 |
| 662 BrowserThread::PostTaskAndReplyWithResult( | 689 BrowserThread::PostTaskAndReplyWithResult( |
| 663 BrowserThread::DB, FROM_HERE, | 690 BrowserThread::DB, FROM_HERE, |
| 664 base::Bind(&NativeBackendKWalletStub::AddLogin, | 691 base::Bind(&NativeBackendKWalletStub::AddLogin, |
| 665 base::Unretained(&backend), form_google_), | 692 base::Unretained(&backend), form_google_), |
| 666 base::Bind(&CheckPasswordChanges, | 693 base::Bind(&CheckPasswordChanges, |
| 667 PasswordStoreChangeList(1, PasswordStoreChange( | 694 PasswordStoreChangeList(1, PasswordStoreChange( |
| 668 PasswordStoreChange::ADD, form_google_)))); | 695 PasswordStoreChange::ADD, form_google_)))); |
| 669 | 696 |
| 670 RunDBThread(); | 697 RunDBThread(); |
| 671 | 698 |
| 672 EXPECT_FALSE(wallet_.hasFolder("Chrome Form Data")); | 699 EXPECT_FALSE(wallet_.hasFolder("Chrome Form Data")); |
| 673 | 700 |
| 674 std::vector<const PasswordForm*> forms; | 701 std::vector<const PasswordForm*> forms; |
| 675 forms.push_back(&form_google_); | 702 forms.push_back(&form_google_); |
| 676 ExpectationArray expected; | 703 ExpectationArray expected; |
| 677 expected.push_back(make_pair(std::string(form_google_.signon_realm), forms)); | 704 expected.push_back(make_pair(std::string(form_google_.signon_realm), forms)); |
| 678 CheckPasswordForms("Chrome Form Data (42)", expected); | 705 CheckPasswordForms("Chrome Form Data (42)", expected); |
| 679 } | 706 } |
| 680 | 707 |
| 681 TEST_F(NativeBackendKWalletTest, BasicUpdateLogin) { | 708 TEST_P(NativeBackendKWalletTest, BasicUpdateLogin) { |
| 682 NativeBackendKWalletStub backend(42); | 709 NativeBackendKWalletStub backend(42, desktop_env_); |
| 683 EXPECT_TRUE(backend.InitWithBus(mock_session_bus_)); | 710 EXPECT_TRUE(backend.InitWithBus(mock_session_bus_)); |
| 684 | 711 |
| 685 BrowserThread::PostTask( | 712 BrowserThread::PostTask( |
| 686 BrowserThread::DB, FROM_HERE, | 713 BrowserThread::DB, FROM_HERE, |
| 687 base::Bind(base::IgnoreResult(&NativeBackendKWalletStub::AddLogin), | 714 base::Bind(base::IgnoreResult(&NativeBackendKWalletStub::AddLogin), |
| 688 base::Unretained(&backend), form_google_)); | 715 base::Unretained(&backend), form_google_)); |
| 689 | 716 |
| 690 RunDBThread(); | 717 RunDBThread(); |
| 691 | 718 |
| 692 PasswordForm new_form_google(form_google_); | 719 PasswordForm new_form_google(form_google_); |
| (...skipping 17 matching lines...) Expand all Loading... |
| 710 EXPECT_EQ(PasswordStoreChange::UPDATE, changes.front().type()); | 737 EXPECT_EQ(PasswordStoreChange::UPDATE, changes.front().type()); |
| 711 EXPECT_EQ(new_form_google, changes.front().form()); | 738 EXPECT_EQ(new_form_google, changes.front().form()); |
| 712 | 739 |
| 713 std::vector<const PasswordForm*> forms; | 740 std::vector<const PasswordForm*> forms; |
| 714 forms.push_back(&new_form_google); | 741 forms.push_back(&new_form_google); |
| 715 ExpectationArray expected; | 742 ExpectationArray expected; |
| 716 expected.push_back(make_pair(std::string(form_google_.signon_realm), forms)); | 743 expected.push_back(make_pair(std::string(form_google_.signon_realm), forms)); |
| 717 CheckPasswordForms("Chrome Form Data (42)", expected); | 744 CheckPasswordForms("Chrome Form Data (42)", expected); |
| 718 } | 745 } |
| 719 | 746 |
| 720 TEST_F(NativeBackendKWalletTest, BasicListLogins) { | 747 TEST_P(NativeBackendKWalletTest, BasicListLogins) { |
| 721 NativeBackendKWalletStub backend(42); | 748 NativeBackendKWalletStub backend(42, desktop_env_); |
| 722 EXPECT_TRUE(backend.InitWithBus(mock_session_bus_)); | 749 EXPECT_TRUE(backend.InitWithBus(mock_session_bus_)); |
| 723 | 750 |
| 724 BrowserThread::PostTask( | 751 BrowserThread::PostTask( |
| 725 BrowserThread::DB, FROM_HERE, | 752 BrowserThread::DB, FROM_HERE, |
| 726 base::Bind(base::IgnoreResult(&NativeBackendKWalletStub::AddLogin), | 753 base::Bind(base::IgnoreResult(&NativeBackendKWalletStub::AddLogin), |
| 727 base::Unretained(&backend), form_google_)); | 754 base::Unretained(&backend), form_google_)); |
| 728 | 755 |
| 729 ScopedVector<autofill::PasswordForm> form_list; | 756 ScopedVector<autofill::PasswordForm> form_list; |
| 730 BrowserThread::PostTaskAndReplyWithResult( | 757 BrowserThread::PostTaskAndReplyWithResult( |
| 731 BrowserThread::DB, FROM_HERE, | 758 BrowserThread::DB, FROM_HERE, |
| 732 base::Bind(&NativeBackendKWalletStub::GetAutofillableLogins, | 759 base::Bind(&NativeBackendKWalletStub::GetAutofillableLogins, |
| 733 base::Unretained(&backend), &form_list), | 760 base::Unretained(&backend), &form_list), |
| 734 base::Bind(&CheckTrue)); | 761 base::Bind(&CheckTrue)); |
| 735 | 762 |
| 736 RunDBThread(); | 763 RunDBThread(); |
| 737 | 764 |
| 738 // Quick check that we got something back. | 765 // Quick check that we got something back. |
| 739 EXPECT_EQ(1u, form_list.size()); | 766 EXPECT_EQ(1u, form_list.size()); |
| 740 | 767 |
| 741 EXPECT_FALSE(wallet_.hasFolder("Chrome Form Data")); | 768 EXPECT_FALSE(wallet_.hasFolder("Chrome Form Data")); |
| 742 | 769 |
| 743 std::vector<const PasswordForm*> forms; | 770 std::vector<const PasswordForm*> forms; |
| 744 forms.push_back(&form_google_); | 771 forms.push_back(&form_google_); |
| 745 ExpectationArray expected; | 772 ExpectationArray expected; |
| 746 expected.push_back(make_pair(std::string(form_google_.signon_realm), forms)); | 773 expected.push_back(make_pair(std::string(form_google_.signon_realm), forms)); |
| 747 CheckPasswordForms("Chrome Form Data (42)", expected); | 774 CheckPasswordForms("Chrome Form Data (42)", expected); |
| 748 } | 775 } |
| 749 | 776 |
| 750 TEST_F(NativeBackendKWalletTest, BasicRemoveLogin) { | 777 TEST_P(NativeBackendKWalletTest, BasicRemoveLogin) { |
| 751 NativeBackendKWalletStub backend(42); | 778 NativeBackendKWalletStub backend(42, desktop_env_); |
| 752 EXPECT_TRUE(backend.InitWithBus(mock_session_bus_)); | 779 EXPECT_TRUE(backend.InitWithBus(mock_session_bus_)); |
| 753 | 780 |
| 754 BrowserThread::PostTask( | 781 BrowserThread::PostTask( |
| 755 BrowserThread::DB, FROM_HERE, | 782 BrowserThread::DB, FROM_HERE, |
| 756 base::Bind(base::IgnoreResult(&NativeBackendKWalletStub::AddLogin), | 783 base::Bind(base::IgnoreResult(&NativeBackendKWalletStub::AddLogin), |
| 757 base::Unretained(&backend), form_google_)); | 784 base::Unretained(&backend), form_google_)); |
| 758 | 785 |
| 759 RunDBThread(); | 786 RunDBThread(); |
| 760 | 787 |
| 761 EXPECT_FALSE(wallet_.hasFolder("Chrome Form Data")); | 788 EXPECT_FALSE(wallet_.hasFolder("Chrome Form Data")); |
| (...skipping 12 matching lines...) Expand all Loading... |
| 774 base::Bind(&NativeBackendKWalletStub::RemoveLogin, | 801 base::Bind(&NativeBackendKWalletStub::RemoveLogin, |
| 775 base::Unretained(&backend), form_google_, &changes), | 802 base::Unretained(&backend), form_google_, &changes), |
| 776 base::Bind(&CheckPasswordChangesWithResult, &expected_changes, &changes)); | 803 base::Bind(&CheckPasswordChangesWithResult, &expected_changes, &changes)); |
| 777 | 804 |
| 778 RunDBThread(); | 805 RunDBThread(); |
| 779 | 806 |
| 780 expected.clear(); | 807 expected.clear(); |
| 781 CheckPasswordForms("Chrome Form Data (42)", expected); | 808 CheckPasswordForms("Chrome Form Data (42)", expected); |
| 782 } | 809 } |
| 783 | 810 |
| 784 TEST_F(NativeBackendKWalletTest, UpdateNonexistentLogin) { | 811 TEST_P(NativeBackendKWalletTest, UpdateNonexistentLogin) { |
| 785 NativeBackendKWalletStub backend(42); | 812 NativeBackendKWalletStub backend(42, desktop_env_); |
| 786 EXPECT_TRUE(backend.InitWithBus(mock_session_bus_)); | 813 EXPECT_TRUE(backend.InitWithBus(mock_session_bus_)); |
| 787 | 814 |
| 788 // First add an unrelated login. | 815 // First add an unrelated login. |
| 789 BrowserThread::PostTask( | 816 BrowserThread::PostTask( |
| 790 BrowserThread::DB, FROM_HERE, | 817 BrowserThread::DB, FROM_HERE, |
| 791 base::Bind(base::IgnoreResult(&NativeBackendKWalletStub::AddLogin), | 818 base::Bind(base::IgnoreResult(&NativeBackendKWalletStub::AddLogin), |
| 792 base::Unretained(&backend), form_google_)); | 819 base::Unretained(&backend), form_google_)); |
| 793 | 820 |
| 794 RunDBThread(); | 821 RunDBThread(); |
| 795 | 822 |
| (...skipping 13 matching lines...) Expand all Loading... |
| 809 &changes), | 836 &changes), |
| 810 base::Bind(&CheckPasswordChangesWithResult, | 837 base::Bind(&CheckPasswordChangesWithResult, |
| 811 base::Owned(new PasswordStoreChangeList), &changes)); | 838 base::Owned(new PasswordStoreChangeList), &changes)); |
| 812 | 839 |
| 813 RunDBThread(); | 840 RunDBThread(); |
| 814 | 841 |
| 815 EXPECT_EQ(PasswordStoreChangeList(), changes); | 842 EXPECT_EQ(PasswordStoreChangeList(), changes); |
| 816 CheckPasswordForms("Chrome Form Data (42)", expected); | 843 CheckPasswordForms("Chrome Form Data (42)", expected); |
| 817 } | 844 } |
| 818 | 845 |
| 819 TEST_F(NativeBackendKWalletTest, RemoveNonexistentLogin) { | 846 TEST_P(NativeBackendKWalletTest, RemoveNonexistentLogin) { |
| 820 NativeBackendKWalletStub backend(42); | 847 NativeBackendKWalletStub backend(42, desktop_env_); |
| 821 EXPECT_TRUE(backend.InitWithBus(mock_session_bus_)); | 848 EXPECT_TRUE(backend.InitWithBus(mock_session_bus_)); |
| 822 | 849 |
| 823 // First add an unrelated login. | 850 // First add an unrelated login. |
| 824 BrowserThread::PostTask( | 851 BrowserThread::PostTask( |
| 825 BrowserThread::DB, FROM_HERE, | 852 BrowserThread::DB, FROM_HERE, |
| 826 base::Bind(base::IgnoreResult(&NativeBackendKWalletStub::AddLogin), | 853 base::Bind(base::IgnoreResult(&NativeBackendKWalletStub::AddLogin), |
| 827 base::Unretained(&backend), form_google_)); | 854 base::Unretained(&backend), form_google_)); |
| 828 | 855 |
| 829 RunDBThread(); | 856 RunDBThread(); |
| 830 | 857 |
| (...skipping 23 matching lines...) Expand all Loading... |
| 854 base::Bind(&CheckTrue)); | 881 base::Bind(&CheckTrue)); |
| 855 | 882 |
| 856 RunDBThread(); | 883 RunDBThread(); |
| 857 | 884 |
| 858 // Quick check that we got something back. | 885 // Quick check that we got something back. |
| 859 EXPECT_EQ(1u, form_list.size()); | 886 EXPECT_EQ(1u, form_list.size()); |
| 860 | 887 |
| 861 CheckPasswordForms("Chrome Form Data (42)", expected); | 888 CheckPasswordForms("Chrome Form Data (42)", expected); |
| 862 } | 889 } |
| 863 | 890 |
| 864 TEST_F(NativeBackendKWalletTest, AddDuplicateLogin) { | 891 TEST_P(NativeBackendKWalletTest, AddDuplicateLogin) { |
| 865 NativeBackendKWalletStub backend(42); | 892 NativeBackendKWalletStub backend(42, desktop_env_); |
| 866 EXPECT_TRUE(backend.InitWithBus(mock_session_bus_)); | 893 EXPECT_TRUE(backend.InitWithBus(mock_session_bus_)); |
| 867 | 894 |
| 868 PasswordStoreChangeList changes; | 895 PasswordStoreChangeList changes; |
| 869 changes.push_back(PasswordStoreChange(PasswordStoreChange::ADD, | 896 changes.push_back(PasswordStoreChange(PasswordStoreChange::ADD, |
| 870 form_google_)); | 897 form_google_)); |
| 871 BrowserThread::PostTaskAndReplyWithResult( | 898 BrowserThread::PostTaskAndReplyWithResult( |
| 872 BrowserThread::DB, FROM_HERE, | 899 BrowserThread::DB, FROM_HERE, |
| 873 base::Bind(&NativeBackendKWalletStub::AddLogin, | 900 base::Bind(&NativeBackendKWalletStub::AddLogin, |
| 874 base::Unretained(&backend), form_google_), | 901 base::Unretained(&backend), form_google_), |
| 875 base::Bind(&NativeBackendKWalletTest::CheckPasswordChanges, | 902 base::Bind(&NativeBackendKWalletTest::CheckPasswordChanges, |
| (...skipping 18 matching lines...) Expand all Loading... |
| 894 | 921 |
| 895 EXPECT_FALSE(wallet_.hasFolder("Chrome Form Data")); | 922 EXPECT_FALSE(wallet_.hasFolder("Chrome Form Data")); |
| 896 | 923 |
| 897 std::vector<const PasswordForm*> forms; | 924 std::vector<const PasswordForm*> forms; |
| 898 forms.push_back(&form_google_); | 925 forms.push_back(&form_google_); |
| 899 ExpectationArray expected; | 926 ExpectationArray expected; |
| 900 expected.push_back(make_pair(std::string(form_google_.signon_realm), forms)); | 927 expected.push_back(make_pair(std::string(form_google_.signon_realm), forms)); |
| 901 CheckPasswordForms("Chrome Form Data (42)", expected); | 928 CheckPasswordForms("Chrome Form Data (42)", expected); |
| 902 } | 929 } |
| 903 | 930 |
| 904 TEST_F(NativeBackendKWalletTest, AndroidCredentials) { | 931 TEST_P(NativeBackendKWalletTest, AndroidCredentials) { |
| 905 NativeBackendKWalletStub backend(42); | 932 NativeBackendKWalletStub backend(42, desktop_env_); |
| 906 EXPECT_TRUE(backend.InitWithBus(mock_session_bus_)); | 933 EXPECT_TRUE(backend.InitWithBus(mock_session_bus_)); |
| 907 | 934 |
| 908 PasswordForm observed_android_form; | 935 PasswordForm observed_android_form; |
| 909 observed_android_form.scheme = PasswordForm::SCHEME_HTML; | 936 observed_android_form.scheme = PasswordForm::SCHEME_HTML; |
| 910 observed_android_form.signon_realm = | 937 observed_android_form.signon_realm = |
| 911 "android://7x7IDboo8u9YKraUsbmVkuf1-@net.rateflix.app/"; | 938 "android://7x7IDboo8u9YKraUsbmVkuf1-@net.rateflix.app/"; |
| 912 PasswordForm saved_android_form = observed_android_form; | 939 PasswordForm saved_android_form = observed_android_form; |
| 913 saved_android_form.username_value = base::UTF8ToUTF16("randomusername"); | 940 saved_android_form.username_value = base::UTF8ToUTF16("randomusername"); |
| 914 saved_android_form.password_value = base::UTF8ToUTF16("password"); | 941 saved_android_form.password_value = base::UTF8ToUTF16("password"); |
| 915 | 942 |
| (...skipping 17 matching lines...) Expand all Loading... |
| 933 EXPECT_EQ(1u, form_list.size()); | 960 EXPECT_EQ(1u, form_list.size()); |
| 934 | 961 |
| 935 std::vector<const PasswordForm*> forms; | 962 std::vector<const PasswordForm*> forms; |
| 936 forms.push_back(&saved_android_form); | 963 forms.push_back(&saved_android_form); |
| 937 ExpectationArray expected; | 964 ExpectationArray expected; |
| 938 expected.push_back( | 965 expected.push_back( |
| 939 make_pair(std::string(saved_android_form.signon_realm), forms)); | 966 make_pair(std::string(saved_android_form.signon_realm), forms)); |
| 940 CheckPasswordForms("Chrome Form Data (42)", expected); | 967 CheckPasswordForms("Chrome Form Data (42)", expected); |
| 941 } | 968 } |
| 942 | 969 |
| 943 TEST_F(NativeBackendKWalletTest, RemoveLoginsCreatedBetween) { | 970 TEST_P(NativeBackendKWalletTest, RemoveLoginsCreatedBetween) { |
| 944 TestRemoveLoginsBetween(CREATED); | 971 TestRemoveLoginsBetween(CREATED); |
| 945 } | 972 } |
| 946 | 973 |
| 947 TEST_F(NativeBackendKWalletTest, RemoveLoginsSyncedBetween) { | 974 TEST_P(NativeBackendKWalletTest, RemoveLoginsSyncedBetween) { |
| 948 TestRemoveLoginsBetween(SYNCED); | 975 TestRemoveLoginsBetween(SYNCED); |
| 949 } | 976 } |
| 950 | 977 |
| 951 TEST_F(NativeBackendKWalletTest, ReadDuplicateForms) { | 978 TEST_P(NativeBackendKWalletTest, ReadDuplicateForms) { |
| 952 NativeBackendKWalletStub backend(42); | 979 NativeBackendKWalletStub backend(42, desktop_env_); |
| 953 EXPECT_TRUE(backend.InitWithBus(mock_session_bus_)); | 980 EXPECT_TRUE(backend.InitWithBus(mock_session_bus_)); |
| 954 | 981 |
| 955 // Add 2 slightly different password forms. | 982 // Add 2 slightly different password forms. |
| 956 const char unique_string[] = "unique_unique_string"; | 983 const char unique_string[] = "unique_unique_string"; |
| 957 const char unique_string_replacement[] = "uniKue_unique_string"; | 984 const char unique_string_replacement[] = "uniKue_unique_string"; |
| 958 form_google_.origin = | 985 form_google_.origin = |
| 959 GURL(std::string("http://www.google.com/") + unique_string); | 986 GURL(std::string("http://www.google.com/") + unique_string); |
| 960 BrowserThread::PostTask( | 987 BrowserThread::PostTask( |
| 961 BrowserThread::DB, FROM_HERE, | 988 BrowserThread::DB, FROM_HERE, |
| 962 base::Bind(base::IgnoreResult(&NativeBackendKWalletStub::AddLogin), | 989 base::Bind(base::IgnoreResult(&NativeBackendKWalletStub::AddLogin), |
| (...skipping 30 matching lines...) Expand all Loading... |
| 993 EXPECT_EQ(1u, form_list.size()); | 1020 EXPECT_EQ(1u, form_list.size()); |
| 994 EXPECT_EQ(form_google_, *form_list[0]); | 1021 EXPECT_EQ(form_google_, *form_list[0]); |
| 995 | 1022 |
| 996 std::vector<const PasswordForm*> forms; | 1023 std::vector<const PasswordForm*> forms; |
| 997 forms.push_back(&form_google_); | 1024 forms.push_back(&form_google_); |
| 998 ExpectationArray expected; | 1025 ExpectationArray expected; |
| 999 expected.push_back(make_pair(std::string(form_google_.signon_realm), forms)); | 1026 expected.push_back(make_pair(std::string(form_google_.signon_realm), forms)); |
| 1000 CheckPasswordForms("Chrome Form Data (42)", expected); | 1027 CheckPasswordForms("Chrome Form Data (42)", expected); |
| 1001 } | 1028 } |
| 1002 | 1029 |
| 1030 // Check that if KWallet fails to respond, the backend propagates the error. |
| 1031 TEST_P(NativeBackendKWalletTest, GetAllLoginsErrorHandling) { |
| 1032 NativeBackendKWalletStub backend(42, desktop_env_); |
| 1033 EXPECT_TRUE(backend.InitWithBus(mock_session_bus_)); |
| 1034 // Make KWallet fail on calling readEntry. |
| 1035 failing_methods_.insert("readEntry"); |
| 1036 |
| 1037 // Store some non-blacklisted logins to be potentially returned. |
| 1038 BrowserThread::PostTaskAndReplyWithResult( |
| 1039 BrowserThread::DB, FROM_HERE, |
| 1040 base::Bind(&NativeBackendKWalletStub::AddLogin, |
| 1041 base::Unretained(&backend), form_google_), |
| 1042 base::Bind(&CheckPasswordChanges, |
| 1043 PasswordStoreChangeList(1, PasswordStoreChange( |
| 1044 PasswordStoreChange::ADD, form_google_)))); |
| 1045 |
| 1046 // Verify that nothing is in fact returned, because KWallet fails to respond. |
| 1047 ScopedVector<autofill::PasswordForm> form_list; |
| 1048 BrowserThread::PostTask(BrowserThread::DB, FROM_HERE, |
| 1049 base::Bind(&CheckGetAutofillableLoginsFails, |
| 1050 base::Unretained(&backend), &form_list)); |
| 1051 RunDBThread(); |
| 1052 EXPECT_EQ(0u, form_list.size()); |
| 1053 } |
| 1054 |
| 1055 INSTANTIATE_TEST_CASE_P(, |
| 1056 NativeBackendKWalletTest, |
| 1057 ::testing::Values(base::nix::DESKTOP_ENVIRONMENT_KDE4, |
| 1058 base::nix::DESKTOP_ENVIRONMENT_KDE5)); |
| 1059 |
| 1003 // TODO(mdm): add more basic tests here at some point. | 1060 // TODO(mdm): add more basic tests here at some point. |
| 1004 // (For example tests for storing >1 password per realm pickle.) | 1061 // (For example tests for storing >1 password per realm pickle.) |
| 1005 | 1062 |
| 1006 class NativeBackendKWalletPickleTest : public NativeBackendKWalletTestBase { | 1063 class NativeBackendKWalletPickleTest : public NativeBackendKWalletTestBase { |
| 1007 protected: | 1064 protected: |
| 1008 // Based on |form|, fills |pickle| with data conforming to | 1065 // Based on |form|, fills |pickle| with data conforming to |
| 1009 // |effective_version|, but marking the pickle version as |stored_version|. In | 1066 // |effective_version|, but marking the pickle version as |stored_version|. In |
| 1010 // most cases the two versions should be the same. | 1067 // most cases the two versions should be the same. |
| 1011 void CreateVersion1PlusPickle(const PasswordForm& form, | 1068 void CreateVersion1PlusPickle(const PasswordForm& form, |
| 1012 base::Pickle* pickle, | 1069 base::Pickle* pickle, |
| (...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1189 PasswordForm form = old_form_google_; | 1246 PasswordForm form = old_form_google_; |
| 1190 form.scheme = scheme; | 1247 form.scheme = scheme; |
| 1191 CreateVersion0Pickle(size_32, form, &pickle); | 1248 CreateVersion0Pickle(size_32, form, &pickle); |
| 1192 ScopedVector<autofill::PasswordForm> form_list = | 1249 ScopedVector<autofill::PasswordForm> form_list = |
| 1193 NativeBackendKWalletStub::DeserializeValue(form.signon_realm, pickle); | 1250 NativeBackendKWalletStub::DeserializeValue(form.signon_realm, pickle); |
| 1194 EXPECT_EQ(1u, form_list.size()); | 1251 EXPECT_EQ(1u, form_list.size()); |
| 1195 if (form_list.size() > 0) | 1252 if (form_list.size() > 0) |
| 1196 CheckPasswordForm(form, *form_list[0], false); | 1253 CheckPasswordForm(form, *form_list[0], false); |
| 1197 } | 1254 } |
| 1198 | 1255 |
| 1199 // Check that if KWallet fails to respond, the backend propagates the error. | |
| 1200 TEST_F(NativeBackendKWalletTest, GetAllLoginsErrorHandling) { | |
| 1201 NativeBackendKWalletStub backend(42); | |
| 1202 EXPECT_TRUE(backend.InitWithBus(mock_session_bus_)); | |
| 1203 // Make KWallet fail on calling readEntry. | |
| 1204 failing_methods_.insert("readEntry"); | |
| 1205 | |
| 1206 // Store some non-blacklisted logins to be potentially returned. | |
| 1207 BrowserThread::PostTaskAndReplyWithResult( | |
| 1208 BrowserThread::DB, FROM_HERE, | |
| 1209 base::Bind(&NativeBackendKWalletStub::AddLogin, | |
| 1210 base::Unretained(&backend), form_google_), | |
| 1211 base::Bind(&CheckPasswordChanges, | |
| 1212 PasswordStoreChangeList(1, PasswordStoreChange( | |
| 1213 PasswordStoreChange::ADD, form_google_)))); | |
| 1214 | |
| 1215 // Verify that nothing is in fact returned, because KWallet fails to respond. | |
| 1216 ScopedVector<autofill::PasswordForm> form_list; | |
| 1217 BrowserThread::PostTask(BrowserThread::DB, FROM_HERE, | |
| 1218 base::Bind(&CheckGetAutofillableLoginsFails, | |
| 1219 base::Unretained(&backend), &form_list)); | |
| 1220 RunDBThread(); | |
| 1221 EXPECT_EQ(0u, form_list.size()); | |
| 1222 } | |
| 1223 | |
| 1224 // We try both SCHEME_HTML and SCHEME_BASIC since the scheme is stored right | 1256 // We try both SCHEME_HTML and SCHEME_BASIC since the scheme is stored right |
| 1225 // after the size in the pickle, so it's what gets read as part of the count | 1257 // after the size in the pickle, so it's what gets read as part of the count |
| 1226 // when reading 32-bit pickles on 64-bit systems. SCHEME_HTML is 0 (so we'll | 1258 // when reading 32-bit pickles on 64-bit systems. SCHEME_HTML is 0 (so we'll |
| 1227 // detect errors later) while SCHEME_BASIC is 1 (so we'll detect it then). We | 1259 // detect errors later) while SCHEME_BASIC is 1 (so we'll detect it then). We |
| 1228 // try both 32-bit and 64-bit pickles since only one will be the "other" size | 1260 // try both 32-bit and 64-bit pickles since only one will be the "other" size |
| 1229 // for whatever architecture we're running on, but we want to make sure we can | 1261 // for whatever architecture we're running on, but we want to make sure we can |
| 1230 // read all combinations in any event. | 1262 // read all combinations in any event. |
| 1231 | 1263 |
| 1232 TEST_F(NativeBackendKWalletPickleTest, ReadsOld32BitHTMLPickles) { | 1264 TEST_F(NativeBackendKWalletPickleTest, ReadsOld32BitHTMLPickles) { |
| 1233 CheckVersion0Pickle(true, PasswordForm::SCHEME_HTML); | 1265 CheckVersion0Pickle(true, PasswordForm::SCHEME_HTML); |
| (...skipping 24 matching lines...) Expand all Loading... |
| 1258 } | 1290 } |
| 1259 | 1291 |
| 1260 TEST_F(NativeBackendKWalletPickleTest, CheckVersion5Pickle) { | 1292 TEST_F(NativeBackendKWalletPickleTest, CheckVersion5Pickle) { |
| 1261 CheckVersion5Pickle(); | 1293 CheckVersion5Pickle(); |
| 1262 } | 1294 } |
| 1263 | 1295 |
| 1264 TEST_F(NativeBackendKWalletPickleTest, CheckVersion6Pickle) { | 1296 TEST_F(NativeBackendKWalletPickleTest, CheckVersion6Pickle) { |
| 1265 CheckVersion6Pickle(false); | 1297 CheckVersion6Pickle(false); |
| 1266 CheckVersion6Pickle(true); | 1298 CheckVersion6Pickle(true); |
| 1267 } | 1299 } |
| OLD | NEW |