first_run_ui.cc revision cedac228d2dd51db4b79ea1e72c7f249408ee061
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