Commit 049a0c92 authored by Esmael El-Moslimany's avatar Esmael El-Moslimany Committed by Commit Bot

WebUI NTP: start adding tests for NewTabPageHandler

Bug: 1073280
Change-Id: Ib0a2b3fdeec525c18ad7de78eafbd276977bbe29
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2238670
Commit-Queue: Esmael Elmoslimany <aee@chromium.org>
Reviewed-by: default avatarTibor Goldschwendt <tiborg@chromium.org>
Cr-Commit-Position: refs/heads/master@{#779163}
parent 4030e95f
......@@ -68,7 +68,7 @@ class InstantService : public KeyedService,
bool IsInstantProcess(int process_id) const;
// Adds/Removes InstantService observers.
void AddObserver(InstantServiceObserver* observer);
virtual void AddObserver(InstantServiceObserver* observer);
void RemoveObserver(InstantServiceObserver* observer);
// Register prefs associated with the NTP.
......@@ -127,7 +127,7 @@ class InstantService : public KeyedService,
bool ToggleShortcutsVisibility(bool do_notify);
// Invoked to update theme information for the NTP.
void UpdateNtpTheme();
virtual void UpdateNtpTheme();
// Invoked when a background pref update is received via sync, triggering
// an update of theme info.
......
......@@ -32,7 +32,6 @@
#include "chrome/browser/search/chrome_colors/chrome_colors_factory.h"
#include "chrome/browser/search/chrome_colors/chrome_colors_service.h"
#include "chrome/browser/search/instant_service.h"
#include "chrome/browser/search/instant_service_factory.h"
#include "chrome/browser/search/one_google_bar/one_google_bar_service_factory.h"
#include "chrome/browser/search_engines/template_url_service_factory.h"
#include "chrome/browser/search_provider_logos/logo_service_factory.h"
......@@ -242,11 +241,13 @@ NewTabPageHandler::NewTabPageHandler(
pending_page_handler,
mojo::PendingRemote<new_tab_page::mojom::Page> pending_page,
Profile* profile,
InstantService* instant_service,
content::WebContents* web_contents,
NTPUserDataLogger* logger,
const base::Time& ntp_navigation_start_time)
: chrome_colors_service_(
chrome_colors::ChromeColorsFactory::GetForProfile(profile)),
instant_service_(InstantServiceFactory::GetForProfile(profile)),
instant_service_(instant_service),
ntp_background_service_(
NtpBackgroundServiceFactory::GetForProfile(profile)),
logo_service_(LogoServiceFactory::GetForProfile(profile)),
......@@ -263,7 +264,7 @@ NewTabPageHandler::NewTabPageHandler(
BitmapFetcherServiceFactory::GetForBrowserContext(profile)),
web_contents_(web_contents),
ntp_navigation_start_time_(ntp_navigation_start_time),
logger_(NTPUserDataLogger::GetOrCreateFromWebContents(web_contents)),
logger_(logger),
page_{std::move(pending_page)},
receiver_{this, std::move(pending_page_handler)} {
CHECK(instant_service_);
......
......@@ -60,7 +60,9 @@ class NewTabPageHandler : public new_tab_page::mojom::PageHandler,
pending_page_handler,
mojo::PendingRemote<new_tab_page::mojom::Page> pending_page,
Profile* profile,
InstantService* instant_service,
content::WebContents* web_contents,
NTPUserDataLogger* logger,
const base::Time& ntp_navigation_start_time);
~NewTabPageHandler() override;
......
// 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/new_tab_page/new_tab_page_handler.h"
#include "chrome/browser/search/instant_service.h"
#include "chrome/browser/ui/search/ntp_user_data_logger.h"
#include "chrome/browser/ui/webui/new_tab_page/new_tab_page.mojom.h"
#include "chrome/common/search/omnibox.mojom.h"
#include "chrome/test/base/testing_profile.h"
#include "content/public/test/browser_task_environment.h"
#include "content/public/test/test_web_contents_factory.h"
#include "mojo/public/cpp/bindings/pending_receiver.h"
#include "mojo/public/cpp/bindings/pending_remote.h"
#include "mojo/public/cpp/bindings/receiver.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "url/gurl.h"
namespace {
class MockInstantService : public InstantService {
public:
explicit MockInstantService(Profile* profile) : InstantService(profile) {}
~MockInstantService() override = default;
MOCK_METHOD1(AddObserver, void(InstantServiceObserver*));
MOCK_METHOD0(UpdateNtpTheme, void());
};
class MockNTPUserDataLogger : public NTPUserDataLogger {
public:
MockNTPUserDataLogger() : NTPUserDataLogger(nullptr) {}
~MockNTPUserDataLogger() override = default;
};
class MockPage : public new_tab_page::mojom::Page {
public:
MockPage() = default;
~MockPage() override = default;
mojo::PendingRemote<new_tab_page::mojom::Page> BindAndGetRemote() {
DCHECK(!receiver_.is_bound());
return receiver_.BindNewPipeAndPassRemote();
}
MOCK_METHOD1(SetMostVisitedInfo,
void(new_tab_page::mojom::MostVisitedInfoPtr));
MOCK_METHOD1(SetTheme, void(new_tab_page::mojom::ThemePtr));
MOCK_METHOD1(SetFakeboxFocused, void(bool));
MOCK_METHOD1(SetFakeboxVisible, void(bool));
MOCK_METHOD1(AutocompleteResultChanged,
void(search::mojom::AutocompleteResultPtr));
MOCK_METHOD3(AutocompleteMatchImageAvailable,
void(uint32_t, const GURL&, const std::string&));
mojo::Receiver<new_tab_page::mojom::Page> receiver_{this};
};
} // namespace
class NewTabPageHandlerTest : public testing::Test {
public:
NewTabPageHandlerTest()
: mock_instant_service_(&profile_),
web_contents_(factory_.CreateWebContents(&profile_)) {}
~NewTabPageHandlerTest() override = default;
void SetUp() override {
EXPECT_CALL(mock_instant_service_, AddObserver)
.WillOnce(DoAll(testing::SaveArg<0>(&instant_service_observer_)));
EXPECT_CALL(mock_instant_service_, UpdateNtpTheme());
handler_ = std::make_unique<NewTabPageHandler>(
mojo::PendingReceiver<new_tab_page::mojom::PageHandler>(),
mock_page_.BindAndGetRemote(), &profile_, &mock_instant_service_,
web_contents_, &logger_, base::Time::Now());
EXPECT_EQ(handler_.get(), instant_service_observer_);
}
void TearDown() override { testing::Test::TearDown(); }
protected:
testing::NiceMock<MockPage> mock_page_;
// NOTE: The initialization order of these members matters.
content::BrowserTaskEnvironment task_environment_;
TestingProfile profile_;
MockInstantService mock_instant_service_;
content::TestWebContentsFactory factory_;
content::WebContents* web_contents_; // Weak. Owned by factory_.
MockNTPUserDataLogger logger_;
std::unique_ptr<NewTabPageHandler> handler_;
InstantServiceObserver* instant_service_observer_;
};
TEST_F(NewTabPageHandlerTest, SetMostVisitedInfo) {
EXPECT_CALL(mock_page_, SetMostVisitedInfo(testing::_));
InstantMostVisitedInfo info;
instant_service_observer_->MostVisitedInfoChanged(info);
}
TEST_F(NewTabPageHandlerTest, SetTheme) {
EXPECT_CALL(mock_page_, SetTheme(testing::_));
NtpTheme theme;
instant_service_observer_->NtpThemeChanged(theme);
}
......@@ -12,6 +12,7 @@
#include "chrome/browser/search/instant_service_factory.h"
#include "chrome/browser/search/ntp_features.h"
#include "chrome/browser/search_engines/template_url_service_factory.h"
#include "chrome/browser/ui/search/ntp_user_data_logger.h"
#include "chrome/browser/ui/search/omnibox_mojo_utils.h"
#include "chrome/browser/ui/webui/favicon_source.h"
#include "chrome/browser/ui/webui/new_tab_page/new_tab_page_handler.h"
......@@ -279,7 +280,9 @@ void NewTabPageUI::CreatePageHandler(
DCHECK(pending_page.is_valid());
page_handler_ = std::make_unique<NewTabPageHandler>(
std::move(pending_page_handler), std::move(pending_page), profile_,
web_contents_, navigation_start_time_);
instant_service_, web_contents_,
NTPUserDataLogger::GetOrCreateFromWebContents(web_contents_),
navigation_start_time_);
}
void NewTabPageUI::NtpThemeChanged(const NtpTheme& theme) {
......
......@@ -4227,6 +4227,7 @@ test("unit_tests") {
"../browser/ui/webui/history/browsing_history_handler_unittest.cc",
"../browser/ui/webui/managed_ui_handler_unittest.cc",
"../browser/ui/webui/management_ui_handler_unittest.cc",
"../browser/ui/webui/new_tab_page/new_tab_page_handler_unittest.cc",
"../browser/ui/webui/settings/downloads_handler_unittest.cc",
"../browser/ui/webui/settings/hats_handler_unittest.cc",
"../browser/ui/webui/settings/metrics_reporting_handler_unittest.cc",
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment