Commit 87902394 authored by Yue Zhang's avatar Yue Zhang Committed by Chromium LUCI CQ

[ChromeCart] Support module dismiss/restore in cart service

The dismiss status is recorded in profile prefs.

Bug: 1157892
Change-Id: I3fe60ffa5bd1ed99a9973e18fc6df1812b7517d4
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2597902
Commit-Queue: Yue Zhang <yuezhanggg@chromium.org>
Reviewed-by: default avatarDavid Roger <droger@chromium.org>
Reviewed-by: default avatarWei-Yin Chen (陳威尹) <wychen@chromium.org>
Cr-Commit-Position: refs/heads/master@{#839203}
parent 8737b36a
......@@ -3,6 +3,25 @@
// found in the LICENSE file.
#include "chrome/browser/cart/cart_service.h"
#include "chrome/common/pref_names.h"
#include "components/prefs/pref_service.h"
#include "components/search/ntp_features.h"
CartService::CartService(Profile* profile) {}
CartService::CartService(Profile* profile) : profile_(profile) {}
CartService::~CartService() = default;
void CartService::RegisterProfilePrefs(PrefRegistrySimple* registry) {
registry->RegisterBooleanPref(prefs::kCartModuleDismissed, false);
}
void CartService::Dismiss() {
profile_->GetPrefs()->SetBoolean(prefs::kCartModuleDismissed, true);
}
void CartService::Restore() {
profile_->GetPrefs()->SetBoolean(prefs::kCartModuleDismissed, false);
}
bool CartService::IsDismissed() {
return profile_->GetPrefs()->GetBoolean(prefs::kCartModuleDismissed);
}
......@@ -8,6 +8,7 @@
#include "chrome/browser/cart/cart_service_factory.h"
#include "chrome/browser/profiles/profile.h"
#include "components/keyed_service/core/keyed_service.h"
#include "components/prefs/pref_registry_simple.h"
// Service to maintain and read/write data for chrome cart module.
class CartService : public KeyedService {
......@@ -16,12 +17,21 @@ class CartService : public KeyedService {
CartService& operator=(const CartService&) = delete;
~CartService() override;
static void RegisterProfilePrefs(PrefRegistrySimple* registry);
// Gets called when cart module is dismissed.
void Dismiss();
// Gets called when the dismiss of cart module is restored.
void Restore();
// Returns the current dismiss status of cart module.
bool IsDismissed();
private:
friend class CartServiceFactory;
// Use |CartServiceFactory::GetForProfile(...)| to get an instance of this
// service.
explicit CartService(Profile* profile);
Profile* profile_;
base::WeakPtrFactory<CartService> weak_ptr_factory_{this};
};
......
// 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/cart/cart_service.h"
#include "chrome/browser/cart/cart_service_factory.h"
#include "chrome/test/base/testing_profile.h"
#include "content/public/test/browser_task_environment.h"
#include "testing/gtest/include/gtest/gtest.h"
class CartServiceTest : public testing::Test {
public:
CartServiceTest()
: task_environment_(content::BrowserTaskEnvironment::IO_MAINLOOP) {}
void SetUp() override {
testing::Test::SetUp();
service_ = CartServiceFactory::GetForProfile(&profile_);
}
void TearDown() override {}
protected:
// Required to run tests from UI thread.
content::BrowserTaskEnvironment task_environment_;
TestingProfile profile_;
CartService* service_;
};
// Verifies the dismiss status is flipped by dismiss and restore.
TEST_F(CartServiceTest, TestDismissStatusChange) {
ASSERT_FALSE(service_->IsDismissed());
service_->Dismiss();
ASSERT_TRUE(service_->IsDismissed());
service_->Restore();
ASSERT_FALSE(service_->IsDismissed());
}
......@@ -226,6 +226,7 @@
#include "components/query_tiles/tile_service_prefs.h"
#else // defined(OS_ANDROID)
#include "chrome/browser/accessibility/caption_controller.h"
#include "chrome/browser/cart/cart_service.h"
#include "chrome/browser/enterprise/reporting/prefs.h"
#include "chrome/browser/gcm/gcm_product_util.h"
#include "chrome/browser/intranet_redirect_detector.h"
......@@ -1005,6 +1006,7 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry,
StartupBrowserCreator::RegisterProfilePrefs(registry);
TaskModuleService::RegisterProfilePrefs(registry);
UnifiedAutoplayConfig::RegisterProfilePrefs(registry);
CartService::RegisterProfilePrefs(registry);
#endif // defined(OS_ANDROID)
#if BUILDFLAG(IS_CHROMEOS_ASH)
......
......@@ -3149,4 +3149,8 @@ const char kSecurityTokenSessionNotificationScheduledDomain[] =
"security_token_session_notification_scheduled";
#endif // BUILDFLAG(IS_CHROMEOS_ASH)
#if !defined(OS_ANDROID)
// Boolean pref indicating whether user has dismissed the cart module on NTP.
const char kCartModuleDismissed[] = "cart_module_dismissed";
#endif
} // namespace prefs
......@@ -1102,6 +1102,10 @@ extern const char kSecurityTokenSessionNotificationDisplayed[];
extern const char kSecurityTokenSessionNotificationScheduledDomain[];
#endif
#if !defined(OS_ANDROID)
extern const char kCartModuleDismissed[];
#endif
} // namespace prefs
#endif // CHROME_COMMON_PREF_NAMES_H_
......@@ -4759,6 +4759,7 @@ test("unit_tests") {
"../browser/feedback/system_logs/log_sources/crash_ids_source_unittest.cc",
# NTP is in native code on Android.
"../browser/cart/cart_service_unittest.cc",
"../browser/search/ntp_features_unittest.cc",
"../browser/search/task_module/task_module_service_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