• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2011 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/chromeos/customization_document.h"
6 
7 #include "base/time.h"
8 #include "chrome/browser/chromeos/mock_system_access.h"
9 #include "testing/gtest/include/gtest/gtest.h"
10 
11 namespace {
12 
13 const char kGoodStartupManifest[] =
14     "{"
15     "  \"version\": \"1.0\","
16     "  \"initial_locale\" : \"en-US\","
17     "  \"initial_timezone\" : \"US/Pacific\","
18     "  \"keyboard_layout\" : \"xkb:us::eng\","
19     "  \"registration_url\" : \"http://www.google.com\","
20     "  \"setup_content\" : {"
21     "    \"en-US\" : {"
22     "      \"help_page\" : \"file:///opt/oem/help/en-US/help.html\","
23     "      \"eula_page\" : \"file:///opt/oem/eula/en-US/eula.html\","
24     "    },"
25     "    \"ru-RU\" : {"
26     "      \"help_page\" : \"file:///opt/oem/help/ru-RU/help.html\","
27     "      \"eula_page\" : \"file:///opt/oem/eula/ru-RU/eula.html\","
28     "    },"
29     "    \"default\" : {"
30     "      \"help_page\" : \"file:///opt/oem/help/en/help.html\","
31     "      \"eula_page\" : \"file:///opt/oem/eula/en/eula.html\","
32     "    },"
33     "  },"
34     "  \"hwid_map\" : ["
35     "    {"
36     "      \"hwid_mask\": \"ZGA*34\","
37     "      \"initial_locale\" : \"ja\","
38     "      \"initial_timezone\" : \"Asia/Tokyo\","
39     "      \"keyboard_layout\" : \"mozc-jp\","
40     "    },"
41     "    {"
42     "      \"hwid_mask\": \"Mario 1?3*\","
43     "      \"initial_locale\" : \"ru-RU\","
44     "      \"initial_timezone\" : \"Europe/Moscow\","
45     "      \"keyboard_layout\" : \"xkb:ru::rus\","
46     "    },"
47     "  ],"
48     "}";
49 
50 const char kBadManifest[] = "{\"version\": \"1\"}";
51 
52 const char kGoodServicesManifest[] =
53     "{"
54     "  \"version\": \"1.0\","
55     "  \"app_content\" : {"
56     "    \"en-US\" : {"
57     "      \"initial_start_page\": \"http://mario/promo\","
58     "      \"support_page\": \"http://mario/us\","
59     "    },"
60     "    \"ru-RU\" : {"
61     "      \"initial_start_page\": \"http://mario/ru/promo\","
62     "      \"support_page\": \"http://mario/ru\","
63     "    },"
64     "    \"default\" : {"
65     "      \"initial_start_page\": \"http://mario/global/promo\","
66     "      \"support_page\": \"http://mario/global\","
67     "    },"
68     "  },"
69     "  \"carrier_deals\" : {"
70     "    \"Carrier (country)\" : {"
71     "      \"deal_locale\" : \"en-US\","
72     "      \"top_up_url\" : \"http://www.carrier.com/\","
73     "      \"notification_count\" : 1,\n"
74     "      \"expire_date\" : \"31/12/12 0:00\","
75     "      \"localized_content\" : {"
76     "        \"en-US\" : {"
77     "          \"notification_text\" : \"3G connectivity : Carrier.\","
78     "        },"
79     "        \"default\" : {"
80     "          \"notification_text\" : \"default_text.\","
81     "        },"
82     "      },"
83     "    },"
84     "  },"
85     "}";
86 
87 const char kOldDealServicesManifest[] =
88     "{"
89     "  \"version\": \"1.0\","
90     "  \"carrier_deals\" : {"
91     "    \"Carrier (country)\" : {"
92     "      \"deal_locale\" : \"en-US\","
93     "      \"top_up_url\" : \"http://www.carrier.com/\","
94     "      \"notification_count\" : 1,"
95     "      \"expire_date\" : \"01/01/01 0:00\","
96     "      \"localized_content\" : {"
97     "        \"en-US\" : {"
98     "          \"notification_text\" : \"en-US text.\","
99     "        },"
100     "        \"default\" : {"
101     "          \"notification_text\" : \"default_text.\","
102     "        },"
103     "      },"
104     "    },"
105     "  },"
106     "}";
107 
108 }  // anonymous namespace
109 
110 namespace chromeos {
111 
112 using ::testing::_;
113 using ::testing::DoAll;
114 using ::testing::NotNull;
115 using ::testing::Return;
116 using ::testing::SetArgumentPointee;
117 
TEST(StartupCustomizationDocumentTest,Basic)118 TEST(StartupCustomizationDocumentTest, Basic) {
119   MockSystemAccess mock_system_access;
120   EXPECT_CALL(mock_system_access, GetMachineStatistic(_, NotNull()))
121       .WillRepeatedly(Return(false));
122   EXPECT_CALL(mock_system_access,
123       GetMachineStatistic(std::string("hwid"), NotNull()))
124           .WillOnce(DoAll(SetArgumentPointee<1>(std::string("Mario 12345")),
125                           Return(true)));
126   StartupCustomizationDocument customization(&mock_system_access,
127                                              kGoodStartupManifest);
128   EXPECT_EQ("ru-RU", customization.initial_locale());
129   EXPECT_EQ("Europe/Moscow", customization.initial_timezone());
130   EXPECT_EQ("xkb:ru::rus", customization.keyboard_layout());
131   EXPECT_EQ("http://www.google.com", customization.registration_url());
132 
133   EXPECT_EQ("file:///opt/oem/help/en-US/help.html",
134             customization.GetHelpPage("en-US"));
135   EXPECT_EQ("file:///opt/oem/help/ru-RU/help.html",
136             customization.GetHelpPage("ru-RU"));
137   EXPECT_EQ("file:///opt/oem/help/en/help.html",
138             customization.GetHelpPage("ja"));
139 
140   EXPECT_EQ("file:///opt/oem/eula/en-US/eula.html",
141             customization.GetEULAPage("en-US"));
142   EXPECT_EQ("file:///opt/oem/eula/ru-RU/eula.html",
143             customization.GetEULAPage("ru-RU"));
144   EXPECT_EQ("file:///opt/oem/eula/en/eula.html",
145             customization.GetEULAPage("ja"));
146 }
147 
TEST(StartupCustomizationDocumentTest,VPD)148 TEST(StartupCustomizationDocumentTest, VPD) {
149   MockSystemAccess mock_system_access;
150   EXPECT_CALL(mock_system_access,
151       GetMachineStatistic(std::string("hwid"), NotNull()))
152           .WillOnce(DoAll(SetArgumentPointee<1>(std::string("Mario 12345")),
153                           Return(true)));
154   EXPECT_CALL(mock_system_access,
155       GetMachineStatistic(std::string("initial_locale"), NotNull()))
156           .WillOnce(DoAll(SetArgumentPointee<1>(std::string("ja")),
157                           Return(true)));
158   EXPECT_CALL(mock_system_access,
159       GetMachineStatistic(std::string("initial_timezone"), NotNull()))
160           .WillOnce(DoAll(SetArgumentPointee<1>(std::string("Asia/Tokyo")),
161                           Return(true)));
162   EXPECT_CALL(mock_system_access,
163       GetMachineStatistic(std::string("keyboard_layout"), NotNull()))
164           .WillOnce(DoAll(SetArgumentPointee<1>(std::string("mozc-jp")),
165                           Return(true)));
166   StartupCustomizationDocument customization(&mock_system_access,
167                                              kGoodStartupManifest);
168   EXPECT_TRUE(customization.IsReady());
169   EXPECT_EQ("ja", customization.initial_locale());
170   EXPECT_EQ("Asia/Tokyo", customization.initial_timezone());
171   EXPECT_EQ("mozc-jp", customization.keyboard_layout());
172 }
173 
TEST(StartupCustomizationDocumentTest,BadManifest)174 TEST(StartupCustomizationDocumentTest, BadManifest) {
175   MockSystemAccess mock_system_access;
176   StartupCustomizationDocument customization(&mock_system_access, kBadManifest);
177   EXPECT_FALSE(customization.IsReady());
178 }
179 
TEST(ServicesCustomizationDocumentTest,Basic)180 TEST(ServicesCustomizationDocumentTest, Basic) {
181   ServicesCustomizationDocument customization(kGoodServicesManifest, "en-US");
182   EXPECT_TRUE(customization.IsReady());
183 
184   EXPECT_EQ("http://mario/promo",
185             customization.GetInitialStartPage("en-US"));
186   EXPECT_EQ("http://mario/ru/promo",
187             customization.GetInitialStartPage("ru-RU"));
188   EXPECT_EQ("http://mario/global/promo",
189             customization.GetInitialStartPage("ja"));
190 
191   EXPECT_EQ("http://mario/us", customization.GetSupportPage("en-US"));
192   EXPECT_EQ("http://mario/ru", customization.GetSupportPage("ru-RU"));
193   EXPECT_EQ("http://mario/global", customization.GetSupportPage("ja"));
194 
195   const ServicesCustomizationDocument::CarrierDeal* deal;
196   deal = customization.GetCarrierDeal("Carrier (country)", true);
197   EXPECT_TRUE(deal != NULL);
198   EXPECT_EQ("en-US", deal->deal_locale);
199   EXPECT_EQ("http://www.carrier.com/", deal->top_up_url);
200   EXPECT_EQ(1, deal->notification_count);
201   EXPECT_EQ("3G connectivity : Carrier.",
202             deal->GetLocalizedString("en-US", "notification_text"));
203   EXPECT_EQ("default_text.",
204             deal->GetLocalizedString("en", "notification_text"));
205 
206   base::Time reference_time;
207   base::Time::FromString(L"31/12/12 0:00", &reference_time);
208   EXPECT_EQ(reference_time, deal->expire_date);
209 }
210 
TEST(ServicesCustomizationDocumentTest,OldDeal)211 TEST(ServicesCustomizationDocumentTest, OldDeal) {
212   ServicesCustomizationDocument customization(kOldDealServicesManifest,
213                                               "en-US");
214   EXPECT_TRUE(customization.IsReady());
215 
216   const ServicesCustomizationDocument::CarrierDeal* deal;
217   // TODO(nkostylev): Pass fixed time instead of relying on Time::Now().
218   deal = customization.GetCarrierDeal("Carrier (country)", true);
219   EXPECT_TRUE(deal == NULL);
220 }
221 
TEST(ServicesCustomizationDocumentTest,DealOtherLocale)222 TEST(ServicesCustomizationDocumentTest, DealOtherLocale) {
223   ServicesCustomizationDocument customization(kGoodServicesManifest,
224                                               "en-GB");
225   EXPECT_TRUE(customization.IsReady());
226 
227   const ServicesCustomizationDocument::CarrierDeal* deal;
228   deal = customization.GetCarrierDeal("Carrier (country)", true);
229   EXPECT_TRUE(deal == NULL);
230 }
231 
TEST(ServicesCustomizationDocumentTest,BadManifest)232 TEST(ServicesCustomizationDocumentTest, BadManifest) {
233   ServicesCustomizationDocument customization(kBadManifest, "en-US");
234   EXPECT_FALSE(customization.IsReady());
235 }
236 
TEST(ServicesCustomizationDocumentTest,NoDealRestrictions)237 TEST(ServicesCustomizationDocumentTest, NoDealRestrictions) {
238   ServicesCustomizationDocument customization_oth_locale(kGoodServicesManifest,
239                                                          "en-GB");
240   EXPECT_TRUE(customization_oth_locale.IsReady());
241   const ServicesCustomizationDocument::CarrierDeal* deal;
242   deal = customization_oth_locale.GetCarrierDeal("Carrier (country)", false);
243   EXPECT_TRUE(deal != NULL);
244 
245   ServicesCustomizationDocument customization_old_deal(kOldDealServicesManifest,
246                                                        "en-US");
247   EXPECT_TRUE(customization_old_deal.IsReady());
248   deal = customization_old_deal.GetCarrierDeal("Carrier (country)", false);
249   EXPECT_TRUE(deal != NULL);
250 }
251 
252 }  // namespace chromeos
253