| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "chrome/browser/google/google_update_win.h" | 5 #include "chrome/browser/google/google_update_win.h" |
| 6 | 6 |
| 7 #include <windows.h> | 7 #include <windows.h> |
| 8 #include <atlbase.h> | 8 #include <atlbase.h> |
| 9 #include <atlcom.h> | 9 #include <atlcom.h> |
| 10 | 10 |
| (...skipping 545 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 556 program_files_x86_override_.reset( | 556 program_files_x86_override_.reset( |
| 557 new base::ScopedPathOverride(base::DIR_PROGRAM_FILESX86, temp)); | 557 new base::ScopedPathOverride(base::DIR_PROGRAM_FILESX86, temp)); |
| 558 PathService::Get(base::DIR_LOCAL_APP_DATA, &temp); | 558 PathService::Get(base::DIR_LOCAL_APP_DATA, &temp); |
| 559 local_app_data_override_.reset( | 559 local_app_data_override_.reset( |
| 560 new base::ScopedPathOverride(base::DIR_LOCAL_APP_DATA, temp)); | 560 new base::ScopedPathOverride(base::DIR_LOCAL_APP_DATA, temp)); |
| 561 | 561 |
| 562 // Override the registry so that tests can freely push state to it. | 562 // Override the registry so that tests can freely push state to it. |
| 563 registry_override_manager_.OverrideRegistry(HKEY_CURRENT_USER); | 563 registry_override_manager_.OverrideRegistry(HKEY_CURRENT_USER); |
| 564 registry_override_manager_.OverrideRegistry(HKEY_LOCAL_MACHINE); | 564 registry_override_manager_.OverrideRegistry(HKEY_LOCAL_MACHINE); |
| 565 | 565 |
| 566 // Chrome is installed as multi-install. | 566 // Chrome is installed. |
| 567 const HKEY root = | 567 const HKEY root = |
| 568 system_level_install_ ? HKEY_LOCAL_MACHINE : HKEY_CURRENT_USER; | 568 system_level_install_ ? HKEY_LOCAL_MACHINE : HKEY_CURRENT_USER; |
| 569 base::win::RegKey key(root, kClients, KEY_WRITE | KEY_WOW64_32KEY); | 569 base::win::RegKey key(root, kClients, KEY_WRITE | KEY_WOW64_32KEY); |
| 570 ASSERT_EQ(ERROR_SUCCESS, | 570 ASSERT_EQ(ERROR_SUCCESS, |
| 571 key.CreateKey(kChromeGuid, KEY_WRITE | KEY_WOW64_32KEY)); | 571 key.CreateKey(kChromeGuid, KEY_WRITE | KEY_WOW64_32KEY)); |
| 572 ASSERT_EQ(ERROR_SUCCESS, | 572 ASSERT_EQ(ERROR_SUCCESS, |
| 573 key.WriteValue( | 573 key.WriteValue( |
| 574 L"pv", base::ASCIIToUTF16(CHROME_VERSION_STRING).c_str())); | 574 L"pv", base::ASCIIToUTF16(CHROME_VERSION_STRING).c_str())); |
| 575 ASSERT_EQ(ERROR_SUCCESS, | 575 ASSERT_EQ(ERROR_SUCCESS, |
| 576 key.Create(root, kClientState, KEY_WRITE | KEY_WOW64_32KEY)); | 576 key.Create(root, kClientState, KEY_WRITE | KEY_WOW64_32KEY)); |
| 577 ASSERT_EQ(ERROR_SUCCESS, | 577 ASSERT_EQ(ERROR_SUCCESS, |
| 578 key.CreateKey(kChromeGuid, KEY_WRITE | KEY_WOW64_32KEY)); | 578 key.CreateKey(kChromeGuid, KEY_WRITE | KEY_WOW64_32KEY)); |
| 579 ASSERT_EQ(ERROR_SUCCESS, | 579 ASSERT_EQ(ERROR_SUCCESS, |
| 580 key.WriteValue(L"UninstallArguments", | 580 key.WriteValue(L"UninstallArguments", L"--uninstall")); |
| 581 L"--uninstall --multi-install --chrome")); | |
| 582 | 581 |
| 583 // Provide an IGoogleUpdate3Web class factory so that this test can provide | 582 // Provide an IGoogleUpdate3Web class factory so that this test can provide |
| 584 // a mocked-out instance. | 583 // a mocked-out instance. |
| 585 SetGoogleUpdateFactoryForTesting( | 584 SetGoogleUpdateFactoryForTesting( |
| 586 base::Bind(&GoogleUpdateFactory::Create, | 585 base::Bind(&GoogleUpdateFactory::Create, |
| 587 base::Unretained(&mock_google_update_factory_))); | 586 base::Unretained(&mock_google_update_factory_))); |
| 588 | 587 |
| 589 // Compute a newer version. | 588 // Compute a newer version. |
| 590 base::Version current_version(CHROME_VERSION_STRING); | 589 base::Version current_version(CHROME_VERSION_STRING); |
| 591 new_version_ = base::StringPrintf(L"%u.%u.%u.%u", | 590 new_version_ = base::StringPrintf(L"%u.%u.%u.%u", |
| 592 current_version.components()[0], | 591 current_version.components()[0], |
| 593 current_version.components()[1], | 592 current_version.components()[1], |
| 594 current_version.components()[2] + 1, | 593 current_version.components()[2] + 1, |
| 595 current_version.components()[3]); | 594 current_version.components()[3]); |
| 596 } | 595 } |
| 597 | 596 |
| 598 // Creates app bundle and app mocks that will be used to simulate Google | 597 // Creates app bundle and app mocks that will be used to simulate Google |
| 599 // Update. | 598 // Update. |
| 600 void MakeGoogleUpdateMocks(CComObject<MockAppBundle>** mock_app_bundle, | 599 void MakeGoogleUpdateMocks(CComObject<MockAppBundle>** mock_app_bundle, |
| 601 CComObject<MockApp>** mock_app) { | 600 CComObject<MockApp>** mock_app) { |
| 602 CComObject<MockGoogleUpdate>* google_update = | 601 CComObject<MockGoogleUpdate>* google_update = |
| 603 mock_google_update_factory_.MakeServerMock(); | 602 mock_google_update_factory_.MakeServerMock(); |
| 604 CComObject<MockAppBundle>* app_bundle = google_update->MakeAppBundle(); | 603 CComObject<MockAppBundle>* app_bundle = google_update->MakeAppBundle(); |
| 605 CComObject<MockApp>* app = app_bundle->MakeApp(kChromeBinariesGuid); | 604 CComObject<MockApp>* app = app_bundle->MakeApp(kChromeGuid); |
| 606 | 605 |
| 607 if (mock_app_bundle) | 606 if (mock_app_bundle) |
| 608 *mock_app_bundle = app_bundle; | 607 *mock_app_bundle = app_bundle; |
| 609 if (mock_app) | 608 if (mock_app) |
| 610 *mock_app = app; | 609 *mock_app = app; |
| 611 } | 610 } |
| 612 | 611 |
| 613 void TearDown() override { | 612 void TearDown() override { |
| 614 // Remove the test's IGoogleUpdate on-demand update class factory. | 613 // Remove the test's IGoogleUpdate on-demand update class factory. |
| 615 SetGoogleUpdateFactoryForTesting(GoogleUpdate3ClassFactory()); | 614 SetGoogleUpdateFactoryForTesting(GoogleUpdate3ClassFactory()); |
| 616 ::testing::TestWithParam<bool>::TearDown(); | 615 ::testing::TestWithParam<bool>::TearDown(); |
| 617 } | 616 } |
| 618 | 617 |
| 619 static const base::char16 kClients[]; | 618 static const base::char16 kClients[]; |
| 620 static const base::char16 kClientState[]; | 619 static const base::char16 kClientState[]; |
| 621 static const base::char16 kChromeGuid[]; | 620 static const base::char16 kChromeGuid[]; |
| 622 static const base::char16 kChromeBinariesGuid[]; | |
| 623 | 621 |
| 624 scoped_refptr<base::TestSimpleTaskRunner> task_runner_; | 622 scoped_refptr<base::TestSimpleTaskRunner> task_runner_; |
| 625 base::ThreadTaskRunnerHandle task_runner_handle_; | 623 base::ThreadTaskRunnerHandle task_runner_handle_; |
| 626 bool system_level_install_; | 624 bool system_level_install_; |
| 627 std::unique_ptr<base::ScopedPathOverride> file_exe_override_; | 625 std::unique_ptr<base::ScopedPathOverride> file_exe_override_; |
| 628 std::unique_ptr<base::ScopedPathOverride> program_files_override_; | 626 std::unique_ptr<base::ScopedPathOverride> program_files_override_; |
| 629 std::unique_ptr<base::ScopedPathOverride> program_files_x86_override_; | 627 std::unique_ptr<base::ScopedPathOverride> program_files_x86_override_; |
| 630 std::unique_ptr<base::ScopedPathOverride> local_app_data_override_; | 628 std::unique_ptr<base::ScopedPathOverride> local_app_data_override_; |
| 631 registry_util::RegistryOverrideManager registry_override_manager_; | 629 registry_util::RegistryOverrideManager registry_override_manager_; |
| 632 | 630 |
| (...skipping 13 matching lines...) Expand all Loading... |
| 646 DISALLOW_COPY_AND_ASSIGN(GoogleUpdateWinTest); | 644 DISALLOW_COPY_AND_ASSIGN(GoogleUpdateWinTest); |
| 647 }; | 645 }; |
| 648 | 646 |
| 649 // static | 647 // static |
| 650 const base::char16 GoogleUpdateWinTest::kClients[] = | 648 const base::char16 GoogleUpdateWinTest::kClients[] = |
| 651 L"Software\\Google\\Update\\Clients"; | 649 L"Software\\Google\\Update\\Clients"; |
| 652 const base::char16 GoogleUpdateWinTest::kClientState[] = | 650 const base::char16 GoogleUpdateWinTest::kClientState[] = |
| 653 L"Software\\Google\\Update\\ClientState"; | 651 L"Software\\Google\\Update\\ClientState"; |
| 654 const base::char16 GoogleUpdateWinTest::kChromeGuid[] = | 652 const base::char16 GoogleUpdateWinTest::kChromeGuid[] = |
| 655 L"{8A69D345-D564-463c-AFF1-A69D9E530F96}"; | 653 L"{8A69D345-D564-463c-AFF1-A69D9E530F96}"; |
| 656 const base::char16 GoogleUpdateWinTest::kChromeBinariesGuid[] = | |
| 657 L"{4DC8B4CA-1BDA-483e-B5FA-D3C12E15B62D}"; | |
| 658 | 654 |
| 659 // Test that an update check fails with the proper error code if Chrome isn't in | 655 // Test that an update check fails with the proper error code if Chrome isn't in |
| 660 // one of the expected install directories. | 656 // one of the expected install directories. |
| 661 TEST_P(GoogleUpdateWinTest, InvalidInstallDirectory) { | 657 TEST_P(GoogleUpdateWinTest, InvalidInstallDirectory) { |
| 662 // Override FILE_EXE so that it looks like the test is running from a | 658 // Override FILE_EXE so that it looks like the test is running from a |
| 663 // non-standard location. | 659 // non-standard location. |
| 664 base::FilePath file_exe; | 660 base::FilePath file_exe; |
| 665 base::FilePath dir_temp; | 661 base::FilePath dir_temp; |
| 666 ASSERT_TRUE(PathService::Get(base::FILE_EXE, &file_exe)); | 662 ASSERT_TRUE(PathService::Get(base::FILE_EXE, &file_exe)); |
| 667 ASSERT_TRUE(PathService::Get(base::DIR_TEMP, &dir_temp)); | 663 ASSERT_TRUE(PathService::Get(base::DIR_TEMP, &dir_temp)); |
| (...skipping 245 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 913 // Test that a retry after a USING_EXTERNAL_UPDATER failure succeeds. | 909 // Test that a retry after a USING_EXTERNAL_UPDATER failure succeeds. |
| 914 TEST_P(GoogleUpdateWinTest, RetryAfterExternalUpdaterError) { | 910 TEST_P(GoogleUpdateWinTest, RetryAfterExternalUpdaterError) { |
| 915 static const HRESULT GOOPDATE_E_APP_USING_EXTERNAL_UPDATER = 0xa043081d; | 911 static const HRESULT GOOPDATE_E_APP_USING_EXTERNAL_UPDATER = 0xa043081d; |
| 916 | 912 |
| 917 CComObject<MockAppBundle>* mock_app_bundle = | 913 CComObject<MockAppBundle>* mock_app_bundle = |
| 918 mock_google_update_factory_.MakeServerMock()->MakeAppBundle(); | 914 mock_google_update_factory_.MakeServerMock()->MakeAppBundle(); |
| 919 | 915 |
| 920 // The first attempt will fail in createInstalledApp indicating that an update | 916 // The first attempt will fail in createInstalledApp indicating that an update |
| 921 // is already in progress. | 917 // is already in progress. |
| 922 Sequence bundle_seq; | 918 Sequence bundle_seq; |
| 923 EXPECT_CALL(*mock_app_bundle, createInstalledApp(StrEq(kChromeBinariesGuid))) | 919 EXPECT_CALL(*mock_app_bundle, createInstalledApp(StrEq(kChromeGuid))) |
| 924 .InSequence(bundle_seq) | 920 .InSequence(bundle_seq) |
| 925 .WillOnce(Return(GOOPDATE_E_APP_USING_EXTERNAL_UPDATER)); | 921 .WillOnce(Return(GOOPDATE_E_APP_USING_EXTERNAL_UPDATER)); |
| 926 | 922 |
| 927 // Expect a retry on the same instance. | 923 // Expect a retry on the same instance. |
| 928 EXPECT_CALL(*mock_app_bundle, createInstalledApp(StrEq(kChromeBinariesGuid))) | 924 EXPECT_CALL(*mock_app_bundle, createInstalledApp(StrEq(kChromeGuid))) |
| 929 .InSequence(bundle_seq) | 925 .InSequence(bundle_seq) |
| 930 .WillOnce(Return(S_OK)); | 926 .WillOnce(Return(S_OK)); |
| 931 | 927 |
| 932 // See MakeApp() for an explanation of this: | 928 // See MakeApp() for an explanation of this: |
| 933 CComObject<MockApp>* mock_app = nullptr; | 929 CComObject<MockApp>* mock_app = nullptr; |
| 934 EXPECT_EQ(S_OK, CComObject<MockApp>::CreateInstance(&mock_app)); | 930 EXPECT_EQ(S_OK, CComObject<MockApp>::CreateInstance(&mock_app)); |
| 935 mock_app->AddRef(); | 931 mock_app->AddRef(); |
| 936 EXPECT_CALL(*mock_app_bundle, get_appWeb(0, _)) | 932 EXPECT_CALL(*mock_app_bundle, get_appWeb(0, _)) |
| 937 .WillOnce(DoAll(SetArgPointee<1>(mock_app), Return(S_OK))); | 933 .WillOnce(DoAll(SetArgPointee<1>(mock_app), Return(S_OK))); |
| 938 | 934 |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1009 BeginUpdateCheck(task_runner_, std::string(), true, 0, | 1005 BeginUpdateCheck(task_runner_, std::string(), true, 0, |
| 1010 mock_update_check_delegate_.AsWeakPtr()); | 1006 mock_update_check_delegate_.AsWeakPtr()); |
| 1011 BeginUpdateCheck(task_runner_, std::string(), true, 0, | 1007 BeginUpdateCheck(task_runner_, std::string(), true, 0, |
| 1012 mock_update_check_delegate_2.AsWeakPtr()); | 1008 mock_update_check_delegate_2.AsWeakPtr()); |
| 1013 task_runner_->RunUntilIdle(); | 1009 task_runner_->RunUntilIdle(); |
| 1014 } | 1010 } |
| 1015 | 1011 |
| 1016 INSTANTIATE_TEST_CASE_P(UserLevel, GoogleUpdateWinTest, Values(false)); | 1012 INSTANTIATE_TEST_CASE_P(UserLevel, GoogleUpdateWinTest, Values(false)); |
| 1017 | 1013 |
| 1018 INSTANTIATE_TEST_CASE_P(SystemLevel, GoogleUpdateWinTest, Values(true)); | 1014 INSTANTIATE_TEST_CASE_P(SystemLevel, GoogleUpdateWinTest, Values(true)); |
| OLD | NEW |