• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2012 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 #ifndef CHROME_BROWSER_CHROMEOS_LOGIN_ENROLLMENT_ENROLLMENT_SCREEN_H_
6 #define CHROME_BROWSER_CHROMEOS_LOGIN_ENROLLMENT_ENROLLMENT_SCREEN_H_
7 
8 #include <string>
9 
10 #include "base/basictypes.h"
11 #include "base/compiler_specific.h"
12 #include "base/gtest_prod_util.h"
13 #include "base/memory/scoped_ptr.h"
14 #include "base/memory/weak_ptr.h"
15 #include "chrome/browser/chromeos/login/enrollment/enrollment_screen_actor.h"
16 #include "chrome/browser/chromeos/login/screens/wizard_screen.h"
17 #include "components/pairing/host_pairing_controller.h"
18 #include "components/policy/core/common/cloud/cloud_policy_constants.h"
19 #include "components/policy/core/common/cloud/enterprise_metrics.h"
20 
21 namespace base {
22 class ElapsedTimer;
23 }
24 
25 namespace pairing_chromeos {
26 class ControllerPairingController;
27 }
28 
29 namespace chromeos {
30 
31 class ScreenManager;
32 class ScreenObserver;
33 
34 // The screen implementation that links the enterprise enrollment UI into the
35 // OOBE wizard.
36 class EnrollmentScreen
37     : public WizardScreen,
38       public pairing_chromeos::HostPairingController::Observer,
39       public EnrollmentScreenActor::Controller {
40  public:
41   typedef pairing_chromeos::HostPairingController::Stage Stage;
42 
43   EnrollmentScreen(ScreenObserver* observer,
44                    EnrollmentScreenActor* actor);
45   virtual ~EnrollmentScreen();
46 
47   static EnrollmentScreen* Get(ScreenManager* manager);
48 
49   // Setup how this screen will handle enrollment.
50   //   |auth_token| is an optional OAuth token to attempt to enroll with.
51   //   |shark_controller| is an interface that is used to communicate with a
52   //     remora device for remote enrollment.
53   //   |remora_controller| is an interface that is used to communicate with a
54   //     shark device for remote enrollment.
55   void SetParameters(
56       EnrollmentScreenActor::EnrollmentMode enrollment_mode,
57       const std::string& management_domain,
58       const std::string& enrollment_user,
59       const std::string& auth_token,
60       pairing_chromeos::ControllerPairingController* shark_controller,
61       pairing_chromeos::HostPairingController* remora_controller);
62 
63   // WizardScreen implementation:
64   virtual void PrepareToShow() OVERRIDE;
65   virtual void Show() OVERRIDE;
66   virtual void Hide() OVERRIDE;
67   virtual std::string GetName() const OVERRIDE;
68 
69   // pairing_chromeos::HostPairingController::Observer:
70   virtual void PairingStageChanged(Stage new_stage) OVERRIDE;
71   virtual void ConfigureHost(bool accepted_eula,
72                              const std::string& lang,
73                              const std::string& timezone,
74                              bool send_reports,
75                              const std::string& keyboard_layout) OVERRIDE;
76   virtual void EnrollHost(const std::string& auth_token) OVERRIDE;
77 
78   // EnrollmentScreenActor::Controller implementation:
79   virtual void OnLoginDone(const std::string& user) OVERRIDE;
80   virtual void OnAuthError(const GoogleServiceAuthError& error) OVERRIDE;
81   virtual void OnOAuthTokenAvailable(const std::string& oauth_token) OVERRIDE;
82   virtual void OnRetry() OVERRIDE;
83   virtual void OnCancel() OVERRIDE;
84   virtual void OnConfirmationClosed() OVERRIDE;
85 
86   // Used for testing.
GetActor()87   EnrollmentScreenActor* GetActor() {
88     return actor_;
89   }
90 
91  private:
92   FRIEND_TEST_ALL_PREFIXES(EnrollmentScreenTest, TestSuccess);
93 
94   // Starts the Lockbox storage process.
95   void WriteInstallAttributesData();
96 
97   // Kicks off the policy infrastructure to register with the service.
98   void RegisterForDevicePolicy(const std::string& token);
99 
100   // Sends an enrollment access token to a remote device.
101   void SendEnrollmentAuthToken(const std::string& token);
102 
103   // Handles enrollment completion. Logs a UMA sample and requests the actor to
104   // show the specified enrollment status.
105   void ReportEnrollmentStatus(policy::EnrollmentStatus status);
106 
107   // Shows successful enrollment status after all enrollment related file
108   // operations are completed.
109   void ShowEnrollmentStatusOnSuccess(const policy::EnrollmentStatus& status);
110 
111   // Logs an UMA event in the kMetricEnrollment or the kMetricEnrollmentRecovery
112   // histogram, depending on |enrollment_mode_|.
113   void UMA(policy::MetricEnrollment sample);
114 
115   // Logs an UMA event in the kMetricEnrollment or the kMetricEnrollmentRecovery
116   // histogram, depending on |enrollment_mode_|.  If auto-enrollment is on,
117   // |sample| is ignored and a kMetricEnrollmentAutoFailed sample is logged
118   // instead.
119   void UMAFailure(policy::MetricEnrollment sample);
120 
121   // Shows the signin screen. Used as a callback to run after auth reset.
122   void ShowSigninScreen();
123 
124   // Convenience helper to check for auto enrollment mode.
is_auto_enrollment()125   bool is_auto_enrollment() const {
126     return enrollment_mode_ == EnrollmentScreenActor::ENROLLMENT_MODE_AUTO;
127   }
128 
129   pairing_chromeos::ControllerPairingController* shark_controller_;
130   pairing_chromeos::HostPairingController* remora_controller_;
131   EnrollmentScreenActor* actor_;
132   EnrollmentScreenActor::EnrollmentMode enrollment_mode_;
133   bool enrollment_failed_once_;
134   bool remora_token_sent_;
135   std::string user_;
136   std::string auth_token_;
137   int lockbox_init_duration_;
138   scoped_ptr<base::ElapsedTimer> elapsed_timer_;
139   base::WeakPtrFactory<EnrollmentScreen> weak_ptr_factory_;
140 
141   DISALLOW_COPY_AND_ASSIGN(EnrollmentScreen);
142 };
143 
144 }  // namespace chromeos
145 
146 #endif  // CHROME_BROWSER_CHROMEOS_LOGIN_ENROLLMENT_ENROLLMENT_SCREEN_H_
147