• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2014 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 "ash/shell.h"
6 #include "ash/system/date/date_default_view.h"
7 #include "ash/system/date/date_view.h"
8 #include "ash/system/user/login_status.h"
9 #include "base/command_line.h"
10 #include "base/message_loop/message_loop.h"
11 #include "chrome/browser/chromeos/policy/device_policy_cros_browser_test.h"
12 #include "chrome/browser/chromeos/policy/proto/chrome_device_policy.pb.h"
13 #include "chrome/browser/chromeos/settings/cros_settings.h"
14 #include "chrome/browser/ui/ash/system_tray_delegate_chromeos.h"
15 #include "chromeos/chromeos_switches.h"
16 #include "testing/gtest/include/gtest/gtest.h"
17 
18 namespace em = enterprise_management;
19 
20 namespace chromeos {
21 
22 class SystemUse24HourClockPolicyTest
23     : public policy::DevicePolicyCrosBrowserTest {
24  public:
SystemUse24HourClockPolicyTest()25   SystemUse24HourClockPolicyTest() {
26   }
27 
SetUpCommandLine(CommandLine * command_line)28   virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE {
29     command_line->AppendSwitch(switches::kLoginManager);
30     command_line->AppendSwitch(chromeos::switches::kForceLoginManagerInTests);
31   }
32 
SetUpInProcessBrowserTestFixture()33   virtual void SetUpInProcessBrowserTestFixture() OVERRIDE {
34     InstallOwnerKey();
35     MarkAsEnterpriseOwned();
36     DevicePolicyCrosBrowserTest::SetUpInProcessBrowserTestFixture();
37   }
38 
39  protected:
RefreshPolicyAndWaitDeviceSettingsUpdated()40   void RefreshPolicyAndWaitDeviceSettingsUpdated() {
41     scoped_ptr<CrosSettings::ObserverSubscription> observer =
42         CrosSettings::Get()->AddSettingsObserver(
43             kSystemUse24HourClock,
44             base::MessageLoop::current()->QuitWhenIdleClosure());
45 
46     RefreshDevicePolicy();
47     base::MessageLoop::current()->Run();
48   }
49 
GetSystemTrayDelegateShouldUse24HourClock()50   static bool GetSystemTrayDelegateShouldUse24HourClock() {
51     chromeos::SystemTrayDelegateChromeOS* tray_delegate =
52         static_cast<chromeos::SystemTrayDelegateChromeOS*>(
53             ash::Shell::GetInstance()->system_tray_delegate());
54     return tray_delegate->GetShouldUse24HourClockForTesting();
55   }
56 
TestGetPrimarySystemTrayTimeHourType()57   static base::HourClockType TestGetPrimarySystemTrayTimeHourType() {
58     const ash::TrayDate* tray_date = ash::Shell::GetInstance()
59                                          ->GetPrimarySystemTray()
60                                          ->GetTrayDateForTesting();
61     const ash::tray::TimeView* time_tray = tray_date->GetTimeTrayForTesting();
62 
63     return time_tray->GetHourTypeForTesting();
64   }
65 
TestPrimarySystemTrayHasDateDefaultView()66   static bool TestPrimarySystemTrayHasDateDefaultView() {
67     const ash::TrayDate* tray_date = ash::Shell::GetInstance()
68                                          ->GetPrimarySystemTray()
69                                          ->GetTrayDateForTesting();
70     const ash::DateDefaultView* date_default_view =
71         tray_date->GetDefaultViewForTesting();
72     return (date_default_view != NULL);
73   }
74 
TestPrimarySystemTrayCreateDefaultView()75   static void TestPrimarySystemTrayCreateDefaultView() {
76     ash::TrayDate* tray_date = ash::Shell::GetInstance()
77                                    ->GetPrimarySystemTray()
78                                    ->GetTrayDateForTesting();
79     tray_date->CreateDefaultViewForTesting(ash::user::LOGGED_IN_NONE);
80   }
81 
TestGetPrimarySystemTrayDateHourType()82   static base::HourClockType TestGetPrimarySystemTrayDateHourType() {
83     const ash::TrayDate* tray_date = ash::Shell::GetInstance()
84                                          ->GetPrimarySystemTray()
85                                          ->GetTrayDateForTesting();
86     const ash::DateDefaultView* date_default_view =
87         tray_date->GetDefaultViewForTesting();
88 
89     return date_default_view->GetDateView()->GetHourTypeForTesting();
90   }
91 
92  private:
93   DISALLOW_COPY_AND_ASSIGN(SystemUse24HourClockPolicyTest);
94 };
95 
IN_PROC_BROWSER_TEST_F(SystemUse24HourClockPolicyTest,CheckUnset)96 IN_PROC_BROWSER_TEST_F(SystemUse24HourClockPolicyTest, CheckUnset) {
97   bool system_use_24hour_clock;
98   EXPECT_FALSE(CrosSettings::Get()->GetBoolean(kSystemUse24HourClock,
99                                                &system_use_24hour_clock));
100 
101   EXPECT_FALSE(GetSystemTrayDelegateShouldUse24HourClock());
102   EXPECT_EQ(base::k12HourClock, TestGetPrimarySystemTrayTimeHourType());
103   EXPECT_FALSE(TestPrimarySystemTrayHasDateDefaultView());
104 
105   TestPrimarySystemTrayCreateDefaultView();
106   EXPECT_EQ(base::k12HourClock, TestGetPrimarySystemTrayDateHourType());
107 }
108 
IN_PROC_BROWSER_TEST_F(SystemUse24HourClockPolicyTest,CheckTrue)109 IN_PROC_BROWSER_TEST_F(SystemUse24HourClockPolicyTest, CheckTrue) {
110   bool system_use_24hour_clock = true;
111   EXPECT_FALSE(CrosSettings::Get()->GetBoolean(kSystemUse24HourClock,
112                                                &system_use_24hour_clock));
113   EXPECT_FALSE(TestPrimarySystemTrayHasDateDefaultView());
114 
115   EXPECT_FALSE(GetSystemTrayDelegateShouldUse24HourClock());
116   EXPECT_EQ(base::k12HourClock, TestGetPrimarySystemTrayTimeHourType());
117   TestPrimarySystemTrayCreateDefaultView();
118   EXPECT_EQ(base::k12HourClock, TestGetPrimarySystemTrayDateHourType());
119 
120   em::ChromeDeviceSettingsProto& proto(device_policy()->payload());
121   proto.mutable_use_24hour_clock()->set_use_24hour_clock(true);
122   RefreshPolicyAndWaitDeviceSettingsUpdated();
123 
124   system_use_24hour_clock = false;
125   EXPECT_TRUE(CrosSettings::Get()->GetBoolean(kSystemUse24HourClock,
126                                               &system_use_24hour_clock));
127   EXPECT_TRUE(system_use_24hour_clock);
128   EXPECT_TRUE(GetSystemTrayDelegateShouldUse24HourClock());
129   EXPECT_EQ(base::k24HourClock, TestGetPrimarySystemTrayTimeHourType());
130 
131   EXPECT_TRUE(TestPrimarySystemTrayHasDateDefaultView());
132   EXPECT_EQ(base::k24HourClock, TestGetPrimarySystemTrayDateHourType());
133 }
134 
IN_PROC_BROWSER_TEST_F(SystemUse24HourClockPolicyTest,CheckFalse)135 IN_PROC_BROWSER_TEST_F(SystemUse24HourClockPolicyTest, CheckFalse) {
136   bool system_use_24hour_clock = true;
137   EXPECT_FALSE(CrosSettings::Get()->GetBoolean(kSystemUse24HourClock,
138                                                &system_use_24hour_clock));
139   EXPECT_FALSE(TestPrimarySystemTrayHasDateDefaultView());
140 
141   EXPECT_FALSE(GetSystemTrayDelegateShouldUse24HourClock());
142   EXPECT_EQ(base::k12HourClock, TestGetPrimarySystemTrayTimeHourType());
143   TestPrimarySystemTrayCreateDefaultView();
144   EXPECT_EQ(base::k12HourClock, TestGetPrimarySystemTrayDateHourType());
145 
146   em::ChromeDeviceSettingsProto& proto(device_policy()->payload());
147   proto.mutable_use_24hour_clock()->set_use_24hour_clock(false);
148   RefreshPolicyAndWaitDeviceSettingsUpdated();
149 
150   system_use_24hour_clock = true;
151   EXPECT_TRUE(CrosSettings::Get()->GetBoolean(kSystemUse24HourClock,
152                                               &system_use_24hour_clock));
153   EXPECT_FALSE(system_use_24hour_clock);
154   EXPECT_FALSE(GetSystemTrayDelegateShouldUse24HourClock());
155   EXPECT_EQ(base::k12HourClock, TestGetPrimarySystemTrayTimeHourType());
156   EXPECT_TRUE(TestPrimarySystemTrayHasDateDefaultView());
157   EXPECT_EQ(base::k12HourClock, TestGetPrimarySystemTrayDateHourType());
158 }
159 
160 }  // namespace chromeos
161