158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// found in the LICENSE file.
458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "chrome/browser/ui/webui/chromeos/first_run/first_run_handler.h"
658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "base/bind.h"
858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "base/values.h"
958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "content/public/browser/web_ui.h"
1058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
1158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)namespace chromeos {
1258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
1358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)FirstRunHandler::FirstRunHandler()
145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    : is_initialized_(false),
155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      is_finalizing_(false) {
1658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}
1758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
1858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)bool FirstRunHandler::IsInitialized() {
1958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  return is_initialized_;
2058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}
2158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
22f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void FirstRunHandler::SetBackgroundVisible(bool visible) {
23f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  web_ui()->CallJavascriptFunction("cr.FirstRun.setBackgroundVisible",
24f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                   base::FundamentalValue(visible));
25f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
26f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
27f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void FirstRunHandler::AddRectangularHole(int x, int y, int width, int height) {
28f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  web_ui()->CallJavascriptFunction("cr.FirstRun.addRectangularHole",
2958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)                                   base::FundamentalValue(x),
3058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)                                   base::FundamentalValue(y),
3158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)                                   base::FundamentalValue(width),
3258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)                                   base::FundamentalValue(height));
3358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}
3458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
35f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void FirstRunHandler::AddRoundHole(int x, int y, float radius) {
36f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  web_ui()->CallJavascriptFunction("cr.FirstRun.addRoundHole",
37f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                   base::FundamentalValue(x),
38f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                   base::FundamentalValue(y),
39f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                   base::FundamentalValue(radius));
40f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
41f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
4258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)void FirstRunHandler::RemoveBackgroundHoles() {
4358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  web_ui()->CallJavascriptFunction("cr.FirstRun.removeHoles");
4458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}
4558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
46f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void FirstRunHandler::ShowStepPositioned(const std::string& name,
47f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                         const StepPosition& position) {
4858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  web_ui()->CallJavascriptFunction("cr.FirstRun.showStep",
4958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)                                   base::StringValue(name),
5058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)                                   *position.AsValue());
5158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}
5258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
53f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void FirstRunHandler::ShowStepPointingTo(const std::string& name,
54f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                         int x,
55f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                         int y,
56f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                         int offset) {
57f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  scoped_ptr<base::Value> null(base::Value::CreateNullValue());
58f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  base::ListValue point_with_offset;
59f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  point_with_offset.AppendInteger(x);
60f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  point_with_offset.AppendInteger(y);
61f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  point_with_offset.AppendInteger(offset);
62f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  web_ui()->CallJavascriptFunction("cr.FirstRun.showStep",
63f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                   base::StringValue(name),
64f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                   *null,
65f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                   point_with_offset);
66f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
67f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void FirstRunHandler::HideCurrentStep() {
695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  web_ui()->CallJavascriptFunction("cr.FirstRun.hideCurrentStep");
705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void FirstRunHandler::Finalize() {
735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  is_finalizing_ = true;
745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  web_ui()->CallJavascriptFunction("cr.FirstRun.finalize");
755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)bool FirstRunHandler::IsFinalizing() {
785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return is_finalizing_;
795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
8158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)void FirstRunHandler::RegisterMessages() {
8258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  web_ui()->RegisterMessageCallback("initialized",
8358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)      base::Bind(&FirstRunHandler::HandleInitialized, base::Unretained(this)));
8458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  web_ui()->RegisterMessageCallback("nextButtonClicked",
8558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)      base::Bind(&FirstRunHandler::HandleNextButtonClicked,
8658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)                 base::Unretained(this)));
87f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  web_ui()->RegisterMessageCallback("helpButtonClicked",
88f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      base::Bind(&FirstRunHandler::HandleHelpButtonClicked,
89f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                 base::Unretained(this)));
905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  web_ui()->RegisterMessageCallback("stepShown",
915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      base::Bind(&FirstRunHandler::HandleStepShown,
925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                 base::Unretained(this)));
935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  web_ui()->RegisterMessageCallback("stepHidden",
945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      base::Bind(&FirstRunHandler::HandleStepHidden,
955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                 base::Unretained(this)));
965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  web_ui()->RegisterMessageCallback("finalized",
975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      base::Bind(&FirstRunHandler::HandleFinalized,
98f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                 base::Unretained(this)));
9958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}
10058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
10158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)void FirstRunHandler::HandleInitialized(const base::ListValue* args) {
10258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  is_initialized_ = true;
10358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  if (delegate())
10458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    delegate()->OnActorInitialized();
10558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}
10658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
10758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)void FirstRunHandler::HandleNextButtonClicked(const base::ListValue* args) {
10858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  std::string step_name;
10958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  CHECK(args->GetString(0, &step_name));
11058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  if (delegate())
11158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    delegate()->OnNextButtonClicked(step_name);
11258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}
11358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
114f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void FirstRunHandler::HandleHelpButtonClicked(const base::ListValue* args) {
115f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  if (delegate())
116f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    delegate()->OnHelpButtonClicked();
117f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
118f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
1195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void FirstRunHandler::HandleStepShown(const base::ListValue* args) {
1205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  std::string step_name;
1215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  CHECK(args->GetString(0, &step_name));
122f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  if (delegate())
1235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    delegate()->OnStepShown(step_name);
124f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
125f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
1265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void FirstRunHandler::HandleStepHidden(const base::ListValue* args) {
1275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  std::string step_name;
1285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  CHECK(args->GetString(0, &step_name));
1295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  if (delegate())
1305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    delegate()->OnStepHidden(step_name);
1315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
13258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
1335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void FirstRunHandler::HandleFinalized(const base::ListValue* args) {
1345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  is_finalizing_ = false;
1355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  if (delegate())
1365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    delegate()->OnActorFinalized();
1375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
1385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}  // namespace chromeos
140