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.
5 #ifndef CHROME_BROWSER_CHROMEOS_LOGIN_ENROLLMENT_AUTO_ENROLLMENT_CHECK_SCREEN_H_
6 #define CHROME_BROWSER_CHROMEOS_LOGIN_ENROLLMENT_AUTO_ENROLLMENT_CHECK_SCREEN_H_
8 #include "base/compiler_specific.h"
9 #include "base/macros.h"
10 #include "base/memory/scoped_ptr.h"
11 #include "chrome/browser/chromeos/login/enrollment/auto_enrollment_check_screen_actor.h"
12 #include "chrome/browser/chromeos/login/enrollment/auto_enrollment_controller.h"
13 #include "chrome/browser/chromeos/login/screens/error_screen.h"
14 #include "chromeos/network/portal_detector/network_portal_detector.h"
21 // Handles the control flow after OOBE auto-update completes to wait for the
22 // enterprise auto-enrollment check that happens as part of OOBE. This includes
23 // keeping track of current auto-enrollment state and displaying and updating
24 // the error screen upon failures. Similar to a screen controller, but it
25 // doesn't actually drive a dedicated screen.
26 class AutoEnrollmentCheckScreen
27 : public AutoEnrollmentCheckScreenActor::Delegate,
29 public NetworkPortalDetector::Observer {
31 AutoEnrollmentCheckScreen(
32 ScreenObserver* observer,
33 AutoEnrollmentCheckScreenActor* actor);
34 virtual ~AutoEnrollmentCheckScreen();
36 static AutoEnrollmentCheckScreen* Get(ScreenManager* manager);
38 // Hands over OOBE control to this AutoEnrollmentCheckStep. It'll return the
39 // flow back to the caller via the |screen_observer_|'s OnExit function.
42 void set_auto_enrollment_controller(
43 AutoEnrollmentController* auto_enrollment_controller) {
44 auto_enrollment_controller_ = auto_enrollment_controller;
47 // WizardScreen implementation:
48 virtual void PrepareToShow() OVERRIDE;
49 virtual void Show() OVERRIDE;
50 virtual void Hide() OVERRIDE;
51 virtual std::string GetName() const OVERRIDE;
53 // AutoEnrollmentCheckScreenActor::Delegate implementation:
54 virtual void OnExit() OVERRIDE;
55 virtual void OnActorDestroyed(AutoEnrollmentCheckScreenActor* actor) OVERRIDE;
57 // NetworkPortalDetector::Observer implementation:
58 virtual void OnPortalDetectionCompleted(
59 const NetworkState* network,
60 const NetworkPortalDetector::CaptivePortalState& state) OVERRIDE;
63 // Handles update notifications regarding the auto-enrollment check.
64 void OnAutoEnrollmentCheckProgressed(policy::AutoEnrollmentState state);
66 // Handles a state update, updating the UI and saving the state.
68 NetworkPortalDetector::CaptivePortalStatus new_captive_portal_status,
69 policy::AutoEnrollmentState new_auto_enrollment_state);
71 // Configures the UI to reflect |new_captive_portal_status|. Returns true if
72 // and only if a UI change has been made.
73 bool UpdateCaptivePortalStatus(
74 NetworkPortalDetector::CaptivePortalStatus new_captive_portal_status);
76 // Configures the UI to reflect |auto_enrollment_state|. Returns true if and
77 // only if a UI change has been made.
78 bool UpdateAutoEnrollmentState(
79 policy::AutoEnrollmentState auto_enrollment_state);
81 // Configures the error screen.
82 void ShowErrorScreen(ErrorScreen::ErrorState error_state);
84 // Signals completion. No further code should run after a call to this
85 // function as the owner might destroy |this| in response.
86 void SignalCompletion();
88 // Checks if the enrollment status check is needed. It can be disabled either
89 // by command line flags, build configuration or might have finished already.
92 AutoEnrollmentCheckScreenActor* actor_;
93 AutoEnrollmentController* auto_enrollment_controller_;
95 scoped_ptr<AutoEnrollmentController::ProgressCallbackList::Subscription>
96 auto_enrollment_progress_subscription_;
98 NetworkPortalDetector::CaptivePortalStatus captive_portal_status_;
99 policy::AutoEnrollmentState auto_enrollment_state_;
101 DISALLOW_COPY_AND_ASSIGN(AutoEnrollmentCheckScreen);
104 } // namespace chromeos
106 #endif // CHROME_BROWSER_CHROMEOS_LOGIN_ENROLLMENT_AUTO_ENROLLMENT_CHECK_SCREEN_H_