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