1 // Copyright 2020 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 "chromeos/components/phonehub/browser_tabs_model_controller.h"
6
7 #include "chromeos/components/phonehub/fake_browser_tabs_model_provider.h"
8 #include "chromeos/components/phonehub/mutable_phone_model.h"
9 #include "chromeos/components/phonehub/phone_model_test_util.h"
10 #include "chromeos/services/multidevice_setup/public/cpp/fake_multidevice_setup_client.h"
11 #include "testing/gtest/include/gtest/gtest.h"
12
13 namespace chromeos {
14 namespace phonehub {
15
16 using multidevice_setup::mojom::Feature;
17 using multidevice_setup::mojom::FeatureState;
18
19 class BrowserTabsModelControllerTest : public testing::Test {
20 protected:
21 BrowserTabsModelControllerTest() = default;
22 ~BrowserTabsModelControllerTest() override = default;
23
24 BrowserTabsModelControllerTest(const BrowserTabsModelControllerTest&) =
25 delete;
26 BrowserTabsModelControllerTest& operator=(
27 const BrowserTabsModelControllerTest&) = delete;
28
29 // testing::Test:
SetUp()30 void SetUp() override {
31 phone_model_ = std::make_unique<MutablePhoneModel>();
32 controller_ = std::make_unique<BrowserTabsModelController>(
33 &fake_multidevice_setup_client_, &fake_browser_tabs_model_provider_,
34 phone_model_.get());
35 }
36
DisableTaskContinuation()37 void DisableTaskContinuation() {
38 fake_multidevice_setup_client_.SetFeatureState(
39 Feature::kPhoneHubTaskContinuation, FeatureState::kDisabledByUser);
40 }
41
EnableTaskContinuation()42 void EnableTaskContinuation() {
43 fake_multidevice_setup_client_.SetFeatureState(
44 Feature::kPhoneHubTaskContinuation, FeatureState::kEnabledByUser);
45 }
46
NotifyBrowserTabsUpdated(bool is_sync_enabled,const std::vector<BrowserTabsModel::BrowserTabMetadata> & browser_tabs_metadata)47 void NotifyBrowserTabsUpdated(
48 bool is_sync_enabled,
49 const std::vector<BrowserTabsModel::BrowserTabMetadata>&
50 browser_tabs_metadata) {
51 fake_browser_tabs_model_provider_.NotifyBrowserTabsUpdated(
52 is_sync_enabled, browser_tabs_metadata);
53 }
54
phone_model()55 MutablePhoneModel* phone_model() { return phone_model_.get(); }
56
57 private:
58 std::unique_ptr<BrowserTabsModelController> controller_;
59
60 std::unique_ptr<MutablePhoneModel> phone_model_;
61 multidevice_setup::FakeMultiDeviceSetupClient fake_multidevice_setup_client_;
62 FakeBrowserTabsModelProvider fake_browser_tabs_model_provider_;
63 };
64
TEST_F(BrowserTabsModelControllerTest,MutablePhoneModelProperlySet)65 TEST_F(BrowserTabsModelControllerTest, MutablePhoneModelProperlySet) {
66 // Test that the MutablePhoneModel is not updated when task continuation
67 // disabled.
68 DisableTaskContinuation();
69 std::vector<BrowserTabsModel::BrowserTabMetadata> metadata;
70 metadata.push_back(CreateFakeBrowserTabMetadata());
71 NotifyBrowserTabsUpdated(true, metadata);
72 EXPECT_FALSE(phone_model()->browser_tabs_model());
73
74 // Test that the MutablePhoneModel is updated when task continuation enabled.
75 EnableTaskContinuation();
76 EXPECT_TRUE(phone_model()->browser_tabs_model()->is_tab_sync_enabled());
77 EXPECT_EQ(phone_model()->browser_tabs_model()->most_recent_tabs().size(), 1U);
78 }
79
80 } // namespace phonehub
81 } // namespace chromeos
82