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