reset_screen_handler.cc revision 5821806d5e7f356e8fa4b058a389a808ea183019
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#include "chrome/browser/ui/webui/chromeos/login/reset_screen_handler.h"
6
7#include <string>
8
9#include "base/bind.h"
10#include "base/command_line.h"
11#include "base/values.h"
12#include "chrome/browser/browser_process.h"
13#include "chrome/browser/prefs/pref_service.h"
14#include "chrome/common/chrome_switches.h"
15#include "chrome/common/pref_names.h"
16#include "chromeos/dbus/dbus_thread_manager.h"
17#include "chromeos/dbus/power_manager_client.h"
18#include "chromeos/dbus/session_manager_client.h"
19#include "grit/browser_resources.h"
20#include "grit/chromium_strings.h"
21#include "grit/generated_resources.h"
22#include "ui/base/l10n/l10n_util.h"
23
24namespace {
25
26// Reset screen id.
27const char kResetScreen[] = "reset";
28
29}  // namespace
30
31namespace chromeos {
32
33ResetScreenHandler::ResetScreenHandler()
34    : delegate_(NULL), show_on_init_(false) {
35}
36
37ResetScreenHandler::~ResetScreenHandler() {
38  if (delegate_)
39    delegate_->OnActorDestroyed(this);
40}
41
42void ResetScreenHandler::PrepareToShow() {
43}
44
45void ResetScreenHandler::Show() {
46  if (!page_is_ready()) {
47    show_on_init_ = true;
48    return;
49  }
50  ShowScreen(kResetScreen, NULL);
51}
52
53void ResetScreenHandler::Hide() {
54}
55
56void ResetScreenHandler::SetDelegate(Delegate* delegate) {
57  delegate_ = delegate;
58  if (page_is_ready())
59    Initialize();
60}
61
62void ResetScreenHandler::GetLocalizedStrings(
63    base::DictionaryValue* localized_strings) {
64  localized_strings->SetString(
65      "resetScreenTitle", l10n_util::GetStringUTF16(IDS_RESET_SCREEN_TITLE));
66  localized_strings->SetString(
67      "resetWarningText",
68      l10n_util::GetStringFUTF16(
69          IDS_RESET_SCREEN_WARNING_MSG,
70          l10n_util::GetStringUTF16(IDS_SHORT_PRODUCT_NAME)));
71  localized_strings->SetString(
72      "cancelButton", l10n_util::GetStringUTF16(IDS_CANCEL));
73  if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kFirstBoot)) {
74    localized_strings->SetString(
75        "resetWarningDetails",
76        l10n_util::GetStringUTF16(IDS_RESET_SCREEN_WARNING_DETAILS));
77    localized_strings->SetString(
78        "resetButton", l10n_util::GetStringUTF16(IDS_RESET_SCREEN_RESET));
79  } else {
80    localized_strings->SetString(
81        "resetWarningDetails",
82        l10n_util::GetStringFUTF16(
83            IDS_OPTIONS_FACTORY_RESET_WARNING,
84            l10n_util::GetStringUTF16(IDS_SHORT_PRODUCT_NAME)));
85    localized_strings->SetString(
86        "resetButton", l10n_util::GetStringUTF16(IDS_RELAUNCH_BUTTON));
87  }
88}
89
90void ResetScreenHandler::Initialize() {
91  if (!page_is_ready() || !delegate_)
92    return;
93
94  if (show_on_init_) {
95    Show();
96    show_on_init_ = false;
97  }
98}
99
100void ResetScreenHandler::RegisterMessages() {
101  web_ui()->RegisterMessageCallback("resetOnCancel",
102      base::Bind(&ResetScreenHandler::HandleOnCancel, base::Unretained(this)));
103  web_ui()->RegisterMessageCallback("resetOnReset",
104      base::Bind(&ResetScreenHandler::HandleOnReset, base::Unretained(this)));
105}
106
107void ResetScreenHandler::HandleOnCancel(const base::ListValue* args) {
108  if (delegate_)
109    delegate_->OnExit();
110}
111
112void ResetScreenHandler::HandleOnReset(const base::ListValue* args) {
113  if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kFirstBoot)) {
114    chromeos::DBusThreadManager::Get()->GetSessionManagerClient()->
115        StartDeviceWipe();
116  } else {
117    PrefService* prefs = g_browser_process->local_state();
118    prefs->SetBoolean(prefs::kFactoryResetRequested, true);
119    prefs->CommitPendingWrite();
120
121    chromeos::DBusThreadManager::Get()->GetPowerManagerClient()->
122        RequestRestart();
123  }
124}
125
126}  // namespace chromeos
127