Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / chromeos / login / screens / host_pairing_screen.cc
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 "chrome/browser/chromeos/login/screens/host_pairing_screen.h"
6
7 #include "base/command_line.h"
8 #include "chrome/browser/chromeos/login/wizard_controller.h"
9 #include "components/pairing/host_pairing_controller.h"
10
11 namespace chromeos {
12
13 using namespace host_pairing;
14 using namespace pairing_chromeos;
15
16 HostPairingScreen::HostPairingScreen(
17     ScreenObserver* observer,
18     HostPairingScreenActor* actor,
19     pairing_chromeos::HostPairingController* controller)
20     : WizardScreen(observer),
21       actor_(actor),
22       controller_(controller),
23       current_stage_(HostPairingController::STAGE_NONE) {
24   actor_->SetDelegate(this);
25   controller_->AddObserver(this);
26 }
27
28 HostPairingScreen::~HostPairingScreen() {
29   if (actor_)
30     actor_->SetDelegate(NULL);
31   controller_->RemoveObserver(this);
32 }
33
34 void HostPairingScreen::CommitContextChanges() {
35   if (!context_.HasChanges())
36     return;
37   base::DictionaryValue diff;
38   context_.GetChangesAndReset(&diff);
39   if (actor_)
40     actor_->OnContextChanged(diff);
41 }
42
43 void HostPairingScreen::PrepareToShow() {
44 }
45
46 void HostPairingScreen::Show() {
47   if (actor_)
48     actor_->Show();
49   PairingStageChanged(controller_->GetCurrentStage());
50 }
51
52 void HostPairingScreen::Hide() {
53   if (actor_)
54     actor_->Hide();
55 }
56
57 std::string HostPairingScreen::GetName() const {
58   return WizardController::kHostPairingScreenName;
59 }
60
61 void HostPairingScreen::PairingStageChanged(Stage new_stage) {
62   std::string desired_page;
63   switch (new_stage) {
64     case HostPairingController::STAGE_NONE:
65     case HostPairingController::STAGE_INITIALIZATION_ERROR: {
66       break;
67     }
68     case HostPairingController::STAGE_WAITING_FOR_CONTROLLER:
69     case HostPairingController::STAGE_WAITING_FOR_CONTROLLER_AFTER_UPDATE: {
70       desired_page = kPageWelcome;
71       break;
72     }
73     case HostPairingController::STAGE_WAITING_FOR_CODE_CONFIRMATION: {
74       desired_page = kPageCodeConfirmation;
75       context_.SetString(kContextKeyConfirmationCode,
76                          controller_->GetConfirmationCode());
77       break;
78     }
79     case HostPairingController::STAGE_UPDATING: {
80       desired_page = kPageUpdate;
81       context_.SetDouble(kContextKeyUpdateProgress, 0.0);
82       break;
83     }
84     case HostPairingController::STAGE_WAITING_FOR_CREDENTIALS: {
85       desired_page = kPageEnrollmentIntroduction;
86       break;
87     }
88     case HostPairingController::STAGE_ENROLLING: {
89       desired_page = kPageEnrollment;
90       context_.SetString(kContextKeyEnrollmentDomain,
91                          controller_->GetEnrollmentDomain());
92       break;
93     }
94     case HostPairingController::STAGE_ENROLLMENT_ERROR: {
95       desired_page = kPageEnrollmentError;
96       break;
97     }
98     case HostPairingController::STAGE_PAIRING_DONE: {
99       desired_page = kPagePairingDone;
100       break;
101     }
102     case HostPairingController::STAGE_FINISHED: {
103       // This page is closed in EnrollHost.
104       break;
105     }
106   }
107   current_stage_ = new_stage;
108   context_.SetString(kContextKeyDeviceName, controller_->GetDeviceName());
109   context_.SetString(kContextKeyPage, desired_page);
110   CommitContextChanges();
111 }
112
113 void HostPairingScreen::ConfigureHost(bool accepted_eula,
114                                       const std::string& lang,
115                                       const std::string& timezone,
116                                       bool send_reports,
117                                       const std::string& keyboard_layout) {
118   // TODO(zork): Get configuration from UI and send to Host.
119   // (http://crbug.com/405744)
120 }
121
122 void HostPairingScreen::EnrollHost(const std::string& auth_token) {
123   controller_->RemoveObserver(this);
124   WizardController::default_controller()->OnEnrollmentAuthTokenReceived(
125       auth_token);
126 }
127
128 void HostPairingScreen::OnActorDestroyed(HostPairingScreenActor* actor) {
129   if (actor_ == actor)
130     actor_ = NULL;
131 }
132
133 }  // namespace chromeos