blob: 577345868344dc5dfc688eadd78900af062cb032 [file] [log] [blame]
Avi Drissman4a8573c2022-09-09 19:35:541// Copyright 2019 The Chromium Authors
Himanshu Jaju115ec0b2019-10-30 11:59:392// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "chrome/browser/sharing/sharing_utils.h"
6
Alex Chau2badb802019-11-15 13:47:037#include "base/test/scoped_feature_list.h"
Alex Chau328eeb932020-04-22 11:06:358#include "chrome/browser/sharing/fake_device_info.h"
Alex Chau2badb802019-11-15 13:47:039#include "chrome/browser/sharing/features.h"
Alex Chau328eeb932020-04-22 11:06:3510#include "chrome/browser/sharing/proto/sharing_message.pb.h"
11#include "chrome/browser/sharing/sharing_constants.h"
Victor Hugo Vianna Silvae92e3002021-07-26 14:38:5012#include "components/sync/protocol/device_info_specifics.pb.h"
13#include "components/sync/protocol/sync_enums.pb.h"
Victor Hugo Vianna Silvae5009002022-08-31 13:36:3914#include "components/sync/test/test_sync_service.h"
Himanshu Jaju115ec0b2019-10-30 11:59:3915#include "components/sync_device_info/device_info.h"
16#include "testing/gtest/include/gtest/gtest.h"
17
18namespace {
Alex Chau2badb802019-11-15 13:47:0319
Alex Chau328eeb932020-04-22 11:06:3520const char kDeviceGuid[] = "test_guid";
21const char kDeviceName[] = "test_name";
22const char kVapidFCMToken[] = "test_vapid_fcm_token";
23const char kVapidP256dh[] = "test_vapid_p256_dh";
24const char kVapidAuthSecret[] = "test_vapid_auth_secret";
25const char kSenderIdFCMToken[] = "test_sender_id_fcm_token";
26const char kSenderIdP256dh[] = "test_sender_id_p256_dh";
27const char kSenderIdAuthSecret[] = "test_sender_id_auth_secret";
28
Alex Chau2badb802019-11-15 13:47:0329class SharingUtilsTest : public testing::Test {
30 public:
31 SharingUtilsTest() = default;
32
33 protected:
34 base::test::ScopedFeatureList scoped_feature_list_;
35 syncer::TestSyncService test_sync_service_;
36};
37
Himanshu Jaju115ec0b2019-10-30 11:59:3938} // namespace
39
Naomi Musgraved9fc0bf2020-04-22 18:46:2640TEST_F(SharingUtilsTest, SyncEnabled_FullySynced) {
41 // Disable transport mode required features.
Alex Chau2badb802019-11-15 13:47:0342 scoped_feature_list_.InitWithFeatures(
Naomi Musgraved9fc0bf2020-04-22 18:46:2643 /*enabled_features=*/{},
44 /*disabled_features=*/{kSharingSendViaSync});
Alex Chau2badb802019-11-15 13:47:0345 test_sync_service_.SetTransportState(
46 syncer::SyncService::TransportState::ACTIVE);
Naomi Musgraved9fc0bf2020-04-22 18:46:2647 // PREFERENCES is actively synced.
Jood Hajeer6fef74c9f2022-10-12 12:41:0948 test_sync_service_.GetUserSettings()->SetSelectedTypes(
49 /*sync_everything=*/false,
50 /*types=*/syncer::UserSelectableTypeSet(
51 syncer::UserSelectableType::kPreferences));
Alex Chau2badb802019-11-15 13:47:0352
53 EXPECT_TRUE(IsSyncEnabledForSharing(&test_sync_service_));
54 EXPECT_FALSE(IsSyncDisabledForSharing(&test_sync_service_));
55}
56
Naomi Musgraved9fc0bf2020-04-22 18:46:2657TEST_F(SharingUtilsTest, SyncDisabled_FullySynced_MissingDataTypes) {
Alex Chau2badb802019-11-15 13:47:0358 // Disable transport mode required features.
59 scoped_feature_list_.InitWithFeatures(
60 /*enabled_features=*/{},
Naomi Musgraved9fc0bf2020-04-22 18:46:2661 /*disabled_features=*/{kSharingSendViaSync});
Alex Chau2badb802019-11-15 13:47:0362 test_sync_service_.SetTransportState(
63 syncer::SyncService::TransportState::ACTIVE);
Naomi Musgraved9fc0bf2020-04-22 18:46:2664 // Missing PREFERENCES.
Jood Hajeer6fef74c9f2022-10-12 12:41:0965 test_sync_service_.GetUserSettings()->SetSelectedTypes(
66 /*sync_everything=*/false,
67 /*types=*/syncer::UserSelectableTypeSet());
Naomi Musgraved9fc0bf2020-04-22 18:46:2668
69 EXPECT_FALSE(IsSyncEnabledForSharing(&test_sync_service_));
70 EXPECT_TRUE(IsSyncDisabledForSharing(&test_sync_service_));
71}
72
73TEST_F(SharingUtilsTest, SyncEnabled_SigninOnly) {
74 // Enable transport mode required features.
75 scoped_feature_list_.InitWithFeatures(
76 /*enabled_features=*/{kSharingSendViaSync},
77 /*disabled_features=*/{});
78 test_sync_service_.SetTransportState(
79 syncer::SyncService::TransportState::ACTIVE);
80 // SHARING_MESSAGE is actively synced.
Alex Chau2badb802019-11-15 13:47:0381 EXPECT_TRUE(IsSyncEnabledForSharing(&test_sync_service_));
82 EXPECT_FALSE(IsSyncDisabledForSharing(&test_sync_service_));
83}
84
85TEST_F(SharingUtilsTest, SyncDisabled_SigninOnly_MissingDataTypes) {
86 // Enable transport mode required features.
87 scoped_feature_list_.InitWithFeatures(
Naomi Musgraved9fc0bf2020-04-22 18:46:2688 /*enabled_features=*/{kSharingSendViaSync},
Alex Chau2badb802019-11-15 13:47:0389 /*disabled_features=*/{});
90 test_sync_service_.SetTransportState(
91 syncer::SyncService::TransportState::ACTIVE);
Naomi Musgraved9fc0bf2020-04-22 18:46:2692 // Missing SHARING_MESSAGE.
Jood Hajeer6fef74c9f2022-10-12 12:41:0993 test_sync_service_.GetUserSettings()->SetSelectedTypes(
94 /*sync_everything=*/false,
95 /*types=*/syncer::UserSelectableTypeSet());
96 test_sync_service_.SetFailedDataTypes({syncer::SHARING_MESSAGE});
Alex Chau2badb802019-11-15 13:47:0397
98 EXPECT_FALSE(IsSyncEnabledForSharing(&test_sync_service_));
99 EXPECT_TRUE(IsSyncDisabledForSharing(&test_sync_service_));
100}
101
102TEST_F(SharingUtilsTest, SyncDisabled_Disabled) {
103 test_sync_service_.SetTransportState(
104 syncer::SyncService::TransportState::DISABLED);
Jood Hajeer6fef74c9f2022-10-12 12:41:09105 test_sync_service_.GetUserSettings()->SetSelectedTypes(
106 /*sync_everything=*/false,
107 /*types=*/syncer::UserSelectableTypeSet(
108 syncer::UserSelectableType::kPreferences));
Alex Chau2badb802019-11-15 13:47:03109
110 EXPECT_FALSE(IsSyncEnabledForSharing(&test_sync_service_));
111 EXPECT_TRUE(IsSyncDisabledForSharing(&test_sync_service_));
112}
113
114TEST_F(SharingUtilsTest, SyncDisabled_Configuring) {
115 test_sync_service_.SetTransportState(
116 syncer::SyncService::TransportState::CONFIGURING);
Jood Hajeer6fef74c9f2022-10-12 12:41:09117 test_sync_service_.GetUserSettings()->SetSelectedTypes(
118 /*sync_everything=*/false,
119 /*types=*/syncer::UserSelectableTypeSet(
120 syncer::UserSelectableType::kPreferences));
Alex Chau2badb802019-11-15 13:47:03121
122 EXPECT_FALSE(IsSyncEnabledForSharing(&test_sync_service_));
123 EXPECT_FALSE(IsSyncDisabledForSharing(&test_sync_service_));
124}
Alex Chau328eeb932020-04-22 11:06:35125
126TEST_F(SharingUtilsTest, GetFCMChannel) {
127 std::unique_ptr<syncer::DeviceInfo> device_info = CreateFakeDeviceInfo(
128 kDeviceGuid, kDeviceName,
129 syncer::DeviceInfo::SharingInfo(
130 {kVapidFCMToken, kVapidP256dh, kVapidAuthSecret},
131 {kSenderIdFCMToken, kSenderIdP256dh, kSenderIdAuthSecret},
132 std::set<sync_pb::SharingSpecificFields::EnabledFeatures>()));
133
134 auto fcm_channel = GetFCMChannel(*device_info);
135
136 ASSERT_TRUE(fcm_channel);
137 EXPECT_EQ(fcm_channel->vapid_fcm_token(), kVapidFCMToken);
138 EXPECT_EQ(fcm_channel->vapid_p256dh(), kVapidP256dh);
139 EXPECT_EQ(fcm_channel->vapid_auth_secret(), kVapidAuthSecret);
140 EXPECT_EQ(fcm_channel->sender_id_fcm_token(), kSenderIdFCMToken);
141 EXPECT_EQ(fcm_channel->sender_id_p256dh(), kSenderIdP256dh);
142 EXPECT_EQ(fcm_channel->sender_id_auth_secret(), kSenderIdAuthSecret);
143}
144
145TEST_F(SharingUtilsTest, GetDevicePlatform) {
146 EXPECT_EQ(GetDevicePlatform(*CreateFakeDeviceInfo(
Anton Bikineev46bbb972021-05-15 17:53:53147 kDeviceGuid, kDeviceName, /*sharing_info=*/absl::nullopt,
Jood Hajeer1c515ea2022-09-27 12:05:45148 sync_pb::SyncEnums_DeviceType_TYPE_CROS,
149 syncer::DeviceInfo::OsType::kChromeOsAsh,
150 syncer::DeviceInfo::FormFactor::kDesktop)),
Alex Chau328eeb932020-04-22 11:06:35151 SharingDevicePlatform::kChromeOS);
152
153 EXPECT_EQ(GetDevicePlatform(*CreateFakeDeviceInfo(
Anton Bikineev46bbb972021-05-15 17:53:53154 kDeviceGuid, kDeviceName, /*sharing_info=*/absl::nullopt,
Jood Hajeer1c515ea2022-09-27 12:05:45155 sync_pb::SyncEnums_DeviceType_TYPE_LINUX,
156 syncer::DeviceInfo::OsType::kLinux,
157 syncer::DeviceInfo::FormFactor::kDesktop)),
Alex Chau328eeb932020-04-22 11:06:35158 SharingDevicePlatform::kLinux);
159
160 EXPECT_EQ(GetDevicePlatform(*CreateFakeDeviceInfo(
Anton Bikineev46bbb972021-05-15 17:53:53161 kDeviceGuid, kDeviceName, /*sharing_info=*/absl::nullopt,
Jood Hajeer1c515ea2022-09-27 12:05:45162 sync_pb::SyncEnums_DeviceType_TYPE_MAC,
163 syncer::DeviceInfo::OsType::kMac,
164 syncer::DeviceInfo::FormFactor::kDesktop)),
Alex Chau328eeb932020-04-22 11:06:35165 SharingDevicePlatform::kMac);
166
167 EXPECT_EQ(GetDevicePlatform(*CreateFakeDeviceInfo(
Anton Bikineev46bbb972021-05-15 17:53:53168 kDeviceGuid, kDeviceName, /*sharing_info=*/absl::nullopt,
Jood Hajeer1c515ea2022-09-27 12:05:45169 sync_pb::SyncEnums_DeviceType_TYPE_WIN,
170 syncer::DeviceInfo::OsType::kWindows,
171 syncer::DeviceInfo::FormFactor::kDesktop)),
Alex Chau328eeb932020-04-22 11:06:35172 SharingDevicePlatform::kWindows);
173
Alex Chau328eeb932020-04-22 11:06:35174 EXPECT_EQ(
175 GetDevicePlatform(*CreateFakeDeviceInfo(
Anton Bikineev46bbb972021-05-15 17:53:53176 kDeviceGuid, kDeviceName, /*sharing_info=*/absl::nullopt,
Jood Hajeer1c515ea2022-09-27 12:05:45177 sync_pb::SyncEnums_DeviceType_TYPE_PHONE,
178 syncer::DeviceInfo::OsType::kIOS,
179 syncer::DeviceInfo::FormFactor::kPhone, "Apple Inc.", "iPhone 50")),
Richard Knoll5b608be2020-07-10 08:39:40180 SharingDevicePlatform::kIOS);
181 EXPECT_EQ(
182 GetDevicePlatform(*CreateFakeDeviceInfo(
Anton Bikineev46bbb972021-05-15 17:53:53