| // Copyright 2020 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| #include "chrome/browser/ui/webui/settings/about_handler.h" |
| |
| #include "chrome/test/base/testing_browser_process.h" |
| #include "chrome/test/base/testing_profile.h" |
| #include "chromeos/dbus/dbus_thread_manager.h" |
| #include "chromeos/dbus/fake_update_engine_client.h" |
| #include "content/public/test/browser_task_environment.h" |
| #include "content/public/test/test_web_ui.h" |
| #include "testing/gtest/include/gtest/gtest.h" |
| |
| namespace chromeos { |
| namespace settings { |
| |
| namespace { |
| |
| class TestAboutHandler : public ::settings::AboutHandler { |
| public: |
| explicit TestAboutHandler(Profile* profile) : AboutHandler(profile) {} |
| ~TestAboutHandler() override = default; |
| |
| // Make public for testing. |
| using AboutHandler::set_web_ui; |
| }; |
| |
| class AboutHandlerTest : public testing::Test { |
| public: |
| AboutHandlerTest() = default; |
| ~AboutHandlerTest() override = default; |
| AboutHandlerTest(const AboutHandlerTest&) = delete; |
| AboutHandlerTest& operator=(const AboutHandlerTest&) = delete; |
| |
| void SetUp() override { |
| fake_update_engine_client_ = new FakeUpdateEngineClient(); |
| DBusThreadManager::GetSetterForTesting()->SetUpdateEngineClient( |
| base::WrapUnique<UpdateEngineClient>(fake_update_engine_client_)); |
| DBusThreadManager::Initialize(); |
| |
| handler_ = std::make_unique<TestAboutHandler>(&profile_); |
| handler_->set_web_ui(&web_ui_); |
| handler_->RegisterMessages(); |
| handler_->AllowJavascriptForTesting(); |
| } |
| |
| void TearDown() override { |
| handler_.reset(); |
| TestingBrowserProcess::GetGlobal()->SetLocalState(nullptr); |
| } |
| |
| const content::TestWebUI::CallData& CallDataAtIndex(size_t index) { |
| return *web_ui_.call_data()[index]; |
| } |
| |
| std::string CallGetEndOfLifeInfoAndReturnString(bool has_eol_passed) { |
| size_t call_data_count_before_call = web_ui_.call_data().size(); |
| |
| base::ListValue args; |
| args.AppendString("handlerFunctionName"); |
| web_ui_.HandleReceivedMessage("getEndOfLifeInfo", &args); |
| task_environment_.RunUntilIdle(); |
| |
| EXPECT_EQ(call_data_count_before_call + 1u, web_ui_.call_data().size()); |
| |
| const content::TestWebUI::CallData& call_data = |
| CallDataAtIndex(call_data_count_before_call); |
| EXPECT_EQ("cr.webUIResponse", call_data.function_name()); |
| EXPECT_EQ("handlerFunctionName", call_data.arg1()->GetString()); |
| EXPECT_EQ(has_eol_passed, |
| call_data.arg3()->FindKey("hasEndOfLife")->GetBool()); |
| return call_data.arg3()->FindKey("aboutPageEndOfLifeMessage")->GetString(); |
| } |
| |
| protected: |
| content::BrowserTaskEnvironment task_environment_; |
| TestingProfile profile_; |
| content::TestWebUI web_ui_; |
| std::unique_ptr<TestAboutHandler> handler_; |
| FakeUpdateEngineClient* fake_update_engine_client_; |
| }; |
| |
| // Deterministic fail on CHROMEOS, crbug.com/1122584. |
| #if defined(OS_CHROMEOS) |
| #define MAYBE_EndOfLifeMessageInAboutDetailsSubpage \ |
| DISABLED_EndOfLifeMessageInAboutDetailsSubpage |
| #else |
| #define MAYBE_EndOfLifeMessageInAboutDetailsSubpage \ |
| EndOfLifeMessageInAboutDetailsSubpage |
| #endif |
| TEST_F(AboutHandlerTest, MAYBE_EndOfLifeMessageInAboutDetailsSubpage) { |
| const base::Time eol_passed_date = |
| base::Time::Now() - base::TimeDelta::FromDays(1000); |
| fake_update_engine_client_->set_eol_date(eol_passed_date); |
| EXPECT_EQ( |
| "This device stopped getting automatic software and security " |
| "updates in November 2017. <a target=\"_blank\" href=\"https:" |
| "//www.google.com/chromebook/older/\">Learn more</a>", |
| CallGetEndOfLifeInfoAndReturnString(true /*=has_eol_passed*/)); |
| |
| const base::Time eol_future_date = |
| base::Time::Now() + base::TimeDelta::FromDays(1000); |
| fake_update_engine_client_->set_eol_date(eol_future_date); |
| EXPECT_EQ( |
| "This device will get automatic software and security updates " |
| "until May 2023. <a target=\"_blank\" href=\"http://support.google" |
| ".com/chrome/a?p=auto-update-policy\">Learn more</a>", |
| CallGetEndOfLifeInfoAndReturnString(false /*=has_eol_passed*/)); |
| |
| const base::Time null_time = base::Time(); |
| fake_update_engine_client_->set_eol_date(null_time); |
| EXPECT_EQ("", CallGetEndOfLifeInfoAndReturnString(false /*=has_eol_passed*/)); |
| } |
| |
| } // namespace |
| |
| } // namespace settings |
| } // namespace chromeos |