1// Copyright 2013 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/ui/webui/chromeos/login/kiosk_enable_screen_handler.h"
6
7#include <string>
8
9#include "chrome/browser/browser_process.h"
10#include "chrome/browser/chrome_notification_types.h"
11#include "chrome/common/chrome_switches.h"
12#include "chrome/grit/generated_resources.h"
13#include "content/public/browser/notification_details.h"
14#include "content/public/browser/notification_service.h"
15
16namespace {
17
18const char kJsScreenPath[] = "login.KioskEnableScreen";
19
20// Reset screen id.
21const char kKioskEnableScreen[] = "kiosk-enable";
22
23}  // namespace
24
25namespace chromeos {
26
27KioskEnableScreenHandler::KioskEnableScreenHandler()
28    : BaseScreenHandler(kJsScreenPath),
29      delegate_(NULL),
30      show_on_init_(false),
31      is_configurable_(false),
32      weak_ptr_factory_(this) {
33}
34
35KioskEnableScreenHandler::~KioskEnableScreenHandler() {
36  if (delegate_)
37    delegate_->OnActorDestroyed(this);
38}
39
40void KioskEnableScreenHandler::Show() {
41  if (!page_is_ready()) {
42    show_on_init_ = true;
43    return;
44  }
45
46  KioskAppManager::Get()->GetConsumerKioskAutoLaunchStatus(
47      base::Bind(
48          &KioskEnableScreenHandler::OnGetConsumerKioskAutoLaunchStatus,
49          weak_ptr_factory_.GetWeakPtr()));
50}
51
52void KioskEnableScreenHandler::OnGetConsumerKioskAutoLaunchStatus(
53    KioskAppManager::ConsumerKioskAutoLaunchStatus status) {
54  is_configurable_ =
55      (status == KioskAppManager::CONSUMER_KIOSK_AUTO_LAUNCH_CONFIGURABLE);
56  if (!is_configurable_) {
57    LOG(WARNING) << "Consumer kiosk auto launch feature is not configurable!";
58    return;
59  }
60
61  ShowScreen(kKioskEnableScreen, NULL);
62
63  content::NotificationService::current()->Notify(
64      chrome::NOTIFICATION_KIOSK_ENABLE_WARNING_VISIBLE,
65      content::NotificationService::AllSources(),
66      content::NotificationService::NoDetails());
67}
68
69void KioskEnableScreenHandler::SetDelegate(Delegate* delegate) {
70  delegate_ = delegate;
71  if (page_is_ready())
72    Initialize();
73}
74
75void KioskEnableScreenHandler::DeclareLocalizedValues(
76    LocalizedValuesBuilder* builder) {
77  builder->Add("kioskEnableTitle", IDS_KIOSK_ENABLE_SCREEN_WARNING);
78  builder->Add("kioskEnableWarningText",
79               IDS_KIOSK_ENABLE_SCREEN_WARNING);
80  builder->Add("kioskEnableWarningDetails",
81               IDS_KIOSK_ENABLE_SCREEN_WARNING_DETAILS);
82  builder->Add("kioskEnableButton", IDS_KIOSK_ENABLE_SCREEN_ENABLE_BUTTON);
83  builder->Add("kioskCancelButton", IDS_CANCEL);
84  builder->Add("kioskOKButton", IDS_OK);
85  builder->Add("kioskEnableSuccessMsg", IDS_KIOSK_ENABLE_SCREEN_SUCCESS);
86  builder->Add("kioskEnableErrorMsg", IDS_KIOSK_ENABLE_SCREEN_ERROR);
87}
88
89void KioskEnableScreenHandler::Initialize() {
90  if (!page_is_ready() || !delegate_)
91    return;
92
93  if (show_on_init_) {
94    Show();
95    show_on_init_ = false;
96  }
97}
98
99void KioskEnableScreenHandler::RegisterMessages() {
100  AddCallback("kioskOnClose", &KioskEnableScreenHandler::HandleOnClose);
101  AddCallback("kioskOnEnable", &KioskEnableScreenHandler::HandleOnEnable);
102}
103
104void KioskEnableScreenHandler::HandleOnClose() {
105  if (delegate_)
106    delegate_->OnExit();
107
108  content::NotificationService::current()->Notify(
109      chrome::NOTIFICATION_KIOSK_ENABLE_WARNING_COMPLETED,
110      content::NotificationService::AllSources(),
111      content::NotificationService::NoDetails());
112}
113
114void KioskEnableScreenHandler::HandleOnEnable() {
115  if (!is_configurable_) {
116    NOTREACHED();
117    if (delegate_)
118      delegate_->OnExit();
119
120    content::NotificationService::current()->Notify(
121        chrome::NOTIFICATION_KIOSK_ENABLE_WARNING_COMPLETED,
122        content::NotificationService::AllSources(),
123        content::NotificationService::NoDetails());
124    return;
125  }
126
127  KioskAppManager::Get()->EnableConsumerKioskAutoLaunch(
128      base::Bind(&KioskEnableScreenHandler::OnEnableConsumerKioskAutoLaunch,
129                 weak_ptr_factory_.GetWeakPtr()));
130}
131
132void KioskEnableScreenHandler::OnEnableConsumerKioskAutoLaunch(
133    bool success) {
134  if (!success)
135    LOG(WARNING) << "Consumer kiosk mode can't be enabled!";
136
137  CallJS("onCompleted", success);
138  if (success) {
139    content::NotificationService::current()->Notify(
140        chrome::NOTIFICATION_KIOSK_ENABLED,
141        content::NotificationService::AllSources(),
142        content::NotificationService::NoDetails());
143  }
144}
145
146}  // namespace chromeos
147