// Copyright 2023 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/android/quick_delete/quick_delete_bridge.h"
#include "base/memory/raw_ptr.h"
#include "base/test/test_mock_time_task_runner.h"
#include "base/time/time_override.h"
#include "chrome/browser/history/history_service_factory.h"
#include "chrome/test/base/testing_profile.h"
#include "components/browsing_data/core/browsing_data_utils.h"
#include "components/history/core/browser/history_service.h"
#include "content/public/test/browser_task_environment.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
using ::testing::_;
namespace history {
class MockHistoryService : public history::HistoryService {
public:
MockHistoryService() = default;
MOCK_METHOD(void,
GetUniqueDomainsVisited,
(const base::Time begin_time,
const base::Time end_time,
GetUniqueDomainsVisitedCallback callback,
base::CancelableTaskTracker* tracker),
(override));
};
} // namespace history
std::unique_ptr<KeyedService> buildHistoryServiceMock(
content::BrowserContext* context) {
return std::make_unique<::testing::NiceMock<history::MockHistoryService>>();
}
class QuickDeleteBridgeTest : public testing::Test {
public:
QuickDeleteBridgeTest() : env_(base::android::AttachCurrentThread()) {}
~QuickDeleteBridgeTest() override = default;
void SetUp() override {
mock_history_service_ = static_cast<history::MockHistoryService*>(
HistoryServiceFactory::GetInstance()->SetTestingFactoryAndUse(
&profile_, base::BindRepeating(&buildHistoryServiceMock)));
bridge_ = std::make_unique<QuickDeleteBridge>(&profile_);
}
QuickDeleteBridge* bridge() { return bridge_.get(); }
JNIEnv* env() { return env_; }
history::MockHistoryService* history_service() {
return mock_history_service_;
}
static base::Time OverrideTimeNow() { return override_time_now_; }
static void SetOverrideTimeNow(base::Time override_now) {
override_time_now_ = override_now;
}
private:
content::BrowserTaskEnvironment task_environment_;
raw_ptr<JNIEnv> env_;
raw_ptr<history::MockHistoryService> mock_history_service_;
std::unique_ptr<QuickDeleteBridge> bridge_;
TestingProfile profile_;
static base::Time override_time_now_;
};
base::Time QuickDeleteBridgeTest::override_time_now_;
TEST_F(QuickDeleteBridgeTest, GetLastVisitedDomainAndUniqueDomainCount) {
SetOverrideTimeNow(base::Time::Now());
base::subtle::ScopedTimeClockOverrides time_override(
&QuickDeleteBridgeTest::OverrideTimeNow,
/*time_ticks_override=*/nullptr,
/*thread_ticks_override=*/nullptr);
const base::Time expected_begin_time = OverrideTimeNow() - base::Minutes(15);
const base::Time expected_end_time = base::Time::Max();
EXPECT_CALL(
*history_service(),
GetUniqueDomainsVisited(expected_begin_time, expected_end_time, _, _))
.Times(1);
bridge()->GetLastVisitedDomainAndUniqueDomainCount(
env(), static_cast<jint>(browsing_data::TimePeriod::LAST_15_MINUTES),
JavaParamRef<jobject>(nullptr));
}