1 // Copyright 2019 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 "chrome/browser/web_applications/web_app.h"
6 
7 #include "chrome/browser/web_applications/components/web_app_constants.h"
8 #include "chrome/browser/web_applications/components/web_app_helpers.h"
9 #include "testing/gtest/include/gtest/gtest.h"
10 
11 namespace web_app {
12 
TEST(WebAppTest,HasAnySources)13 TEST(WebAppTest, HasAnySources) {
14   WebApp app{GenerateAppIdFromURL(GURL("https://example.com"))};
15 
16   EXPECT_FALSE(app.HasAnySources());
17   for (int i = Source::kMinValue; i <= Source::kMaxValue; ++i) {
18     app.AddSource(static_cast<Source::Type>(i));
19     EXPECT_TRUE(app.HasAnySources());
20   }
21 
22   for (int i = Source::kMinValue; i <= Source::kMaxValue; ++i) {
23     EXPECT_TRUE(app.HasAnySources());
24     app.RemoveSource(static_cast<Source::Type>(i));
25   }
26   EXPECT_FALSE(app.HasAnySources());
27 }
28 
TEST(WebAppTest,HasOnlySource)29 TEST(WebAppTest, HasOnlySource) {
30   WebApp app{GenerateAppIdFromURL(GURL("https://example.com"))};
31 
32   for (int i = Source::kMinValue; i <= Source::kMaxValue; ++i) {
33     auto source = static_cast<Source::Type>(i);
34 
35     app.AddSource(source);
36     EXPECT_TRUE(app.HasOnlySource(source));
37 
38     app.RemoveSource(source);
39     EXPECT_FALSE(app.HasOnlySource(source));
40   }
41 
42   app.AddSource(Source::kMinValue);
43   EXPECT_TRUE(app.HasOnlySource(Source::kMinValue));
44 
45   for (int i = Source::kMinValue + 1; i <= Source::kMaxValue; ++i) {
46     auto source = static_cast<Source::Type>(i);
47     app.AddSource(source);
48     EXPECT_FALSE(app.HasOnlySource(source));
49     EXPECT_FALSE(app.HasOnlySource(Source::kMinValue));
50   }
51 
52   for (int i = Source::kMinValue + 1; i <= Source::kMaxValue; ++i) {
53     auto source = static_cast<Source::Type>(i);
54     EXPECT_FALSE(app.HasOnlySource(Source::kMinValue));
55     app.RemoveSource(source);
56     EXPECT_FALSE(app.HasOnlySource(source));
57   }
58 
59   EXPECT_TRUE(app.HasOnlySource(Source::kMinValue));
60   app.RemoveSource(Source::kMinValue);
61   EXPECT_FALSE(app.HasOnlySource(Source::kMinValue));
62   EXPECT_FALSE(app.HasAnySources());
63 }
64 
TEST(WebAppTest,WasInstalledByUser)65 TEST(WebAppTest, WasInstalledByUser) {
66   WebApp app{GenerateAppIdFromURL(GURL("https://example.com"))};
67 
68   app.AddSource(Source::kSync);
69   EXPECT_TRUE(app.WasInstalledByUser());
70 
71   app.AddSource(Source::kWebAppStore);
72   EXPECT_TRUE(app.WasInstalledByUser());
73 
74   app.RemoveSource(Source::kSync);
75   EXPECT_TRUE(app.WasInstalledByUser());
76 
77   app.RemoveSource(Source::kWebAppStore);
78   EXPECT_FALSE(app.WasInstalledByUser());
79 
80   app.AddSource(Source::kDefault);
81   EXPECT_FALSE(app.WasInstalledByUser());
82 
83   app.AddSource(Source::kSystem);
84   EXPECT_FALSE(app.WasInstalledByUser());
85 
86   app.AddSource(Source::kPolicy);
87   EXPECT_FALSE(app.WasInstalledByUser());
88 
89   app.RemoveSource(Source::kDefault);
90   EXPECT_FALSE(app.WasInstalledByUser());
91 
92   app.RemoveSource(Source::kSystem);
93   EXPECT_FALSE(app.WasInstalledByUser());
94 
95   app.RemoveSource(Source::kPolicy);
96   EXPECT_FALSE(app.WasInstalledByUser());
97 }
98 
TEST(WebAppTest,CanUserUninstallExternalApp)99 TEST(WebAppTest, CanUserUninstallExternalApp) {
100   WebApp app{GenerateAppIdFromURL(GURL("https://example.com"))};
101 
102   app.AddSource(Source::kDefault);
103   EXPECT_TRUE(app.IsDefaultApp());
104   EXPECT_TRUE(app.CanUserUninstallExternalApp());
105 
106   app.AddSource(Source::kSync);
107   EXPECT_TRUE(app.CanUserUninstallExternalApp());
108   app.AddSource(Source::kWebAppStore);
109   EXPECT_TRUE(app.CanUserUninstallExternalApp());
110 
111   app.AddSource(Source::kPolicy);
112   EXPECT_FALSE(app.CanUserUninstallExternalApp());
113   app.AddSource(Source::kSystem);
114   EXPECT_FALSE(app.CanUserUninstallExternalApp());
115 
116   app.RemoveSource(Source::kSync);
117   EXPECT_FALSE(app.CanUserUninstallExternalApp());
118   app.RemoveSource(Source::kWebAppStore);
119   EXPECT_FALSE(app.CanUserUninstallExternalApp());
120 
121   app.RemoveSource(Source::kSystem);
122   EXPECT_FALSE(app.CanUserUninstallExternalApp());
123 
124   app.RemoveSource(Source::kPolicy);
125   EXPECT_TRUE(app.CanUserUninstallExternalApp());
126 
127   EXPECT_TRUE(app.IsDefaultApp());
128   app.RemoveSource(Source::kDefault);
129   EXPECT_FALSE(app.IsDefaultApp());
130 }
131 
132 }  // namespace web_app
133