1116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Copyright 2014 The Chromium Authors. All rights reserved.
2116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Use of this source code is governed by a BSD-style license that can be
3116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// found in the LICENSE file.
4116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
55f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#ifndef COMPONENTS_PAIRING_HOST_PAIRING_CONTROLLER_H_
65f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#define COMPONENTS_PAIRING_HOST_PAIRING_CONTROLLER_H_
7116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
8116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include <string>
9116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
10116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "base/macros.h"
11116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)namespace pairing_chromeos {
13116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)class HostPairingController {
15116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch public:
16116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  enum Stage {
17116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    STAGE_NONE,
181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    STAGE_INITIALIZATION_ERROR,
19116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    STAGE_WAITING_FOR_CONTROLLER,
20116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    STAGE_WAITING_FOR_CODE_CONFIRMATION,
21116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    STAGE_UPDATING,
22116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    STAGE_WAITING_FOR_CONTROLLER_AFTER_UPDATE,
23116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    STAGE_WAITING_FOR_CREDENTIALS,
24116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    STAGE_ENROLLING,
25116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    STAGE_ENROLLMENT_ERROR,
26116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    STAGE_PAIRING_DONE,
27116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    STAGE_FINISHED
28116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  };
29116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  enum UpdateStatus {
311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    UPDATE_STATUS_UNKNOWN,
321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    UPDATE_STATUS_UPDATING,
331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    UPDATE_STATUS_REBOOTING,
341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    UPDATE_STATUS_UPDATED,
35116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  };
36116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
37116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  class Observer {
38116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch   public:
39116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    Observer();
40116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    virtual ~Observer();
41116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
42116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    // Called when pairing has moved on from one stage to another.
43116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    virtual void PairingStageChanged(Stage new_stage) = 0;
44116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    // Called when the controller has sent a configuration to apply.
461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    virtual void ConfigureHost(bool accepted_eula,
471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                               const std::string& lang,
481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                               const std::string& timezone,
491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                               bool send_reports,
501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                               const std::string& keyboard_layout) = 0;
511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    // Called when the controller has provided an |auth_token| for enrollment.
531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    virtual void EnrollHost(const std::string& auth_token) = 0;
54116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
55116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch   private:
56116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    DISALLOW_COPY_AND_ASSIGN(Observer);
57116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  };
58116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
59116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  HostPairingController();
60116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual ~HostPairingController();
61116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
62116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // Returns current stage of pairing process.
63116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual Stage GetCurrentStage() = 0;
64116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
65116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // Starts pairing process. Can be called only on |STAGE_NONE| stage.
66116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual void StartPairing() = 0;
67116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
68116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // Returns device name.
69116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual std::string GetDeviceName() = 0;
70116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
71116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // Returns 6-digit confirmation code. Can be called only on
72116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // |STAGE_WAITING_FOR_CODE_CONFIRMATION| stage.
73116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual std::string GetConfirmationCode() = 0;
74116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
75116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // Returns an enrollment domain name. Can be called on stage
76116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // |STAGE_ENROLLMENT| and later.
77116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual std::string GetEnrollmentDomain() = 0;
78116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Notify that the update status has changed.
801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Can be called on stage |STAGE_UPDATING|.
811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual void OnUpdateStatusChanged(UpdateStatus update_status) = 0;
821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Called when enrollment has completed.
841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual void SetEnrollmentComplete(bool success) = 0;
851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual void AddObserver(Observer* observer) = 0;
871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual void RemoveObserver(Observer* observer) = 0;
881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
89116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch private:
90116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  DISALLOW_COPY_AND_ASSIGN(HostPairingController);
91116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch};
92116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}  // namespace pairing_chromeos
94116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif  // COMPONENTS_PAIRING_HOST_PAIRING_CONTROLLER_H_
96