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_ui.h"
658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
75d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "ash/shell.h"
85d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/command_line.h"
9cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "chrome/browser/chromeos/login/users/user_manager.h"
1058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "chrome/browser/profiles/profile.h"
1158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "chrome/browser/ui/webui/chromeos/first_run/first_run_handler.h"
1258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "chrome/common/url_constants.h"
135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chromeos/chromeos_switches.h"
1458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "content/public/browser/web_ui.h"
1558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "content/public/browser/web_ui_data_source.h"
1658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "grit/browser_resources.h"
17effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "grit/chromium_strings.h"
18f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "grit/generated_resources.h"
19f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "ui/base/l10n/l10n_util.h"
204e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "ui/base/webui/web_ui_util.h"
2158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
2258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)namespace {
2358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
2458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)const char kFirstRunJSPath[] = "first_run.js";
255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)const char kShelfAlignmentBottom[] = "bottom";
265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)const char kShelfAlignmentLeft[] = "left";
275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)const char kShelfAlignmentRight[] = "right";
2858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
29f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void SetLocalizedStrings(base::DictionaryValue* localized_strings) {
30f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  localized_strings->SetString(
31f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      "appListHeader",
32f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      l10n_util::GetStringUTF16(IDS_FIRST_RUN_APP_LIST_STEP_HEADER));
33f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  localized_strings->SetString(
34f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      "appListText1",
35f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      l10n_util::GetStringUTF16(IDS_FIRST_RUN_APP_LIST_STEP_TEXT_1));
36f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  localized_strings->SetString(
37f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      "appListText2",
38f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      l10n_util::GetStringUTF16(IDS_FIRST_RUN_APP_LIST_STEP_TEXT_2));
39f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  localized_strings->SetString(
40f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      "trayHeader", l10n_util::GetStringUTF16(IDS_FIRST_RUN_TRAY_STEP_HEADER));
41f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  localized_strings->SetString(
42f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      "trayText", l10n_util::GetStringUTF16(IDS_FIRST_RUN_TRAY_STEP_TEXT));
43f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  localized_strings->SetString(
44f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      "helpHeader", l10n_util::GetStringUTF16(IDS_FIRST_RUN_HELP_STEP_HEADER));
45effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  base::string16 product_name =
46effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      l10n_util::GetStringUTF16(IDS_SHORT_PRODUCT_NAME);
47f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  localized_strings->SetString(
48effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      "helpText1", l10n_util::GetStringFUTF16(IDS_FIRST_RUN_HELP_STEP_TEXT_1,
49effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                                              product_name));
50f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  localized_strings->SetString(
51f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      "helpText2", l10n_util::GetStringUTF16(IDS_FIRST_RUN_HELP_STEP_TEXT_2));
52f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  localized_strings->SetString(
53f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      "helpKeepExploringButton",
54f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      l10n_util::GetStringUTF16(IDS_FIRST_RUN_HELP_STEP_KEEP_EXPLORING_BUTTON));
55f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  localized_strings->SetString(
56f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      "helpFinishButton",
57f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      l10n_util::GetStringUTF16(IDS_FIRST_RUN_HELP_STEP_FINISH_BUTTON));
58f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  localized_strings->SetString(
59f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      "nextButton", l10n_util::GetStringUTF16(IDS_FIRST_RUN_NEXT_BUTTON));
605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  localized_strings->SetBoolean(
615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      "transitionsEnabled",
625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      CommandLine::ForCurrentProcess()->HasSwitch(
635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)          chromeos::switches::kEnableFirstRunUITransitions));
645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  std::string shelf_alignment;
655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  ash::Shell* shell = ash::Shell::GetInstance();
665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  switch (shell->GetShelfAlignment(shell->GetPrimaryRootWindow())) {
675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    case ash::SHELF_ALIGNMENT_BOTTOM:
685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      shelf_alignment = kShelfAlignmentBottom;
695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      break;
705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    case ash::SHELF_ALIGNMENT_LEFT:
715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      shelf_alignment = kShelfAlignmentLeft;
725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      break;
735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    case ash::SHELF_ALIGNMENT_RIGHT:
745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      shelf_alignment = kShelfAlignmentRight;
755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      break;
765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    default:
775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      NOTREACHED() << "Unsupported shelf alignment";
785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  }
795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  localized_strings->SetString("shelfAlignment", shelf_alignment);
80f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
81f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
8258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)content::WebUIDataSource* CreateDataSource() {
8358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  content::WebUIDataSource* source =
8458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)      content::WebUIDataSource::Create(chrome::kChromeUIFirstRunHost);
8558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  source->SetUseJsonJSFormatV2();
8658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  source->SetJsonPath("strings.js");
8758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  source->SetDefaultResource(IDR_FIRST_RUN_HTML);
8858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  source->AddResourcePath(kFirstRunJSPath, IDR_FIRST_RUN_JS);
894e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  base::DictionaryValue localized_strings;
904e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  webui::SetFontAndTextDirection(&localized_strings);
91f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  SetLocalizedStrings(&localized_strings);
924e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  source->AddLocalizedStrings(localized_strings);
9358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  return source;
9458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}
9558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
9658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}  // anonymous namespace
9758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
9858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)namespace chromeos {
9958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
10058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)FirstRunUI::FirstRunUI(content::WebUI* web_ui)
10158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    : WebUIController(web_ui),
10258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)      actor_(NULL) {
10358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  FirstRunHandler* handler = new FirstRunHandler();
10458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  actor_ = handler;
10558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  web_ui->AddMessageHandler(handler);
10658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  content::WebUIDataSource::Add(Profile::FromWebUI(web_ui), CreateDataSource());
10758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}
10858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
10958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}  // namespace chromeos
11058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
111