1 // Copyright 2017 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "components/previews/content/previews_user_data.h"
6 
7 #include <stdint.h>
8 
9 #include "base/time/time.h"
10 #include "testing/gtest/include/gtest/gtest.h"
11 
12 namespace previews {
13 
TEST(PreviewsUserDataTest,TestConstructor)14 TEST(PreviewsUserDataTest, TestConstructor) {
15   uint64_t id = 5u;
16   std::unique_ptr<PreviewsUserData> data(new PreviewsUserData(5u));
17   EXPECT_EQ(id, data->page_id());
18 }
19 
TEST(PreviewsUserDataTest,TestSetEligibilityReason)20 TEST(PreviewsUserDataTest, TestSetEligibilityReason) {
21   PreviewsUserData data(1u);
22   EXPECT_EQ(base::nullopt,
23             data.EligibilityReasonForPreview(PreviewsType::DEFER_ALL_SCRIPT));
24 
25   data.SetEligibilityReasonForPreview(
26       PreviewsType::NOSCRIPT, PreviewsEligibilityReason::BLOCKLIST_UNAVAILABLE);
27   data.SetEligibilityReasonForPreview(
28       PreviewsType::NOSCRIPT,
29       PreviewsEligibilityReason::BLOCKLIST_DATA_NOT_LOADED);
30 
31   EXPECT_EQ(base::nullopt,
32             data.EligibilityReasonForPreview(PreviewsType::DEFER_ALL_SCRIPT));
33   EXPECT_EQ(PreviewsEligibilityReason::BLOCKLIST_DATA_NOT_LOADED,
34             data.EligibilityReasonForPreview(PreviewsType::NOSCRIPT));
35 }
36 
TEST(PreviewsUserDataTest,DeepCopy)37 TEST(PreviewsUserDataTest, DeepCopy) {
38   uint64_t id = 4u;
39   std::unique_ptr<PreviewsUserData> data =
40       std::make_unique<PreviewsUserData>(id);
41   EXPECT_EQ(id, data->page_id());
42 
43   EXPECT_EQ(0, data->data_savings_inflation_percent());
44   EXPECT_FALSE(data->cache_control_no_transform_directive());
45   EXPECT_EQ(previews::PreviewsType::NONE, data->CommittedPreviewsType());
46   EXPECT_FALSE(data->block_listed_for_lite_page());
47 
48   data->set_data_savings_inflation_percent(123);
49   data->set_cache_control_no_transform_directive();
50   data->SetCommittedPreviewsType(previews::PreviewsType::NOSCRIPT);
51   data->set_block_listed_for_lite_page(true);
52 
53   PreviewsUserData data_copy(*data);
54   EXPECT_EQ(id, data_copy.page_id());
55   EXPECT_EQ(data->CoinFlipForNavigation(), data_copy.CoinFlipForNavigation());
56   EXPECT_EQ(123, data_copy.data_savings_inflation_percent());
57   EXPECT_TRUE(data_copy.cache_control_no_transform_directive());
58   EXPECT_EQ(previews::PreviewsType::NOSCRIPT,
59             data_copy.CommittedPreviewsType());
60   EXPECT_TRUE(data_copy.block_listed_for_lite_page());
61 }
62 
TEST(PreviewsUserDataTest,TestCoinFlip_HasCommittedPreviewsType)63 TEST(PreviewsUserDataTest, TestCoinFlip_HasCommittedPreviewsType) {
64   uint64_t id = 1u;
65   std::unique_ptr<PreviewsUserData> data =
66       std::make_unique<PreviewsUserData>(id);
67 
68   data->SetCommittedPreviewsTypeForTesting(PreviewsType::NOSCRIPT);
69   data->set_coin_flip_holdback_result(CoinFlipHoldbackResult::kHoldback);
70   EXPECT_FALSE(data->HasCommittedPreviewsType());
71 
72   data->set_coin_flip_holdback_result(CoinFlipHoldbackResult::kAllowed);
73   EXPECT_TRUE(data->HasCommittedPreviewsType());
74 }
75 
TEST(PreviewsUserDataTest,TestCoinFlip_CommittedPreviewsType)76 TEST(PreviewsUserDataTest, TestCoinFlip_CommittedPreviewsType) {
77   uint64_t id = 1u;
78   std::unique_ptr<PreviewsUserData> data =
79       std::make_unique<PreviewsUserData>(id);
80 
81   data->SetCommittedPreviewsTypeForTesting(PreviewsType::NOSCRIPT);
82   data->set_coin_flip_holdback_result(CoinFlipHoldbackResult::kHoldback);
83   EXPECT_EQ(data->CommittedPreviewsType(), PreviewsType::NONE);
84   EXPECT_EQ(data->PreHoldbackCommittedPreviewsType(), PreviewsType::NOSCRIPT);
85 
86   data->set_coin_flip_holdback_result(CoinFlipHoldbackResult::kAllowed);
87   EXPECT_EQ(data->CommittedPreviewsType(), PreviewsType::NOSCRIPT);
88   EXPECT_EQ(data->PreHoldbackCommittedPreviewsType(), PreviewsType::NOSCRIPT);
89 }
90 
TEST(PreviewsUserDataTest,TestCoinFlip_AllowedPreviewsState)91 TEST(PreviewsUserDataTest, TestCoinFlip_AllowedPreviewsState) {
92   uint64_t id = 1u;
93   std::unique_ptr<PreviewsUserData> data =
94       std::make_unique<PreviewsUserData>(id);
95 
96   data->set_allowed_previews_state(blink::PreviewsTypes::NOSCRIPT_ON);
97   data->set_coin_flip_holdback_result(CoinFlipHoldbackResult::kHoldback);
98   EXPECT_EQ(data->AllowedPreviewsState(), blink::PreviewsTypes::PREVIEWS_OFF);
99   EXPECT_EQ(data->PreHoldbackAllowedPreviewsState(),
100             blink::PreviewsTypes::NOSCRIPT_ON);
101 
102   data->set_coin_flip_holdback_result(CoinFlipHoldbackResult::kAllowed);
103   EXPECT_EQ(data->AllowedPreviewsState(), blink::PreviewsTypes::NOSCRIPT_ON);
104   EXPECT_EQ(data->PreHoldbackAllowedPreviewsState(),
105             blink::PreviewsTypes::NOSCRIPT_ON);
106 }
107 
TEST(PreviewsUserDataTest,TestCoinFlip_CommittedPreviewsState)108 TEST(PreviewsUserDataTest, TestCoinFlip_CommittedPreviewsState) {
109   uint64_t id = 1u;
110   std::unique_ptr<PreviewsUserData> data =
111       std::make_unique<PreviewsUserData>(id);
112 
113   data->set_committed_previews_state(blink::PreviewsTypes::NOSCRIPT_ON);
114   data->set_coin_flip_holdback_result(CoinFlipHoldbackResult::kHoldback);
115   EXPECT_EQ(data->CommittedPreviewsState(), blink::PreviewsTypes::PREVIEWS_OFF);
116   EXPECT_EQ(data->PreHoldbackCommittedPreviewsState(),
117             blink::PreviewsTypes::NOSCRIPT_ON);
118 
119   data->set_coin_flip_holdback_result(CoinFlipHoldbackResult::kAllowed);
120   EXPECT_EQ(data->CommittedPreviewsState(), blink::PreviewsTypes::NOSCRIPT_ON);
121   EXPECT_EQ(data->PreHoldbackCommittedPreviewsState(),
122             blink::PreviewsTypes::NOSCRIPT_ON);
123 }
124 
125 }  // namespace previews
126