start_page_handler.cc revision 5d1f7b1de12d16ceb2c938c56701a3e8bfa558f7
19720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// Copyright 2013 The Chromium Authors. All rights reserved. 29720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// Use of this source code is governed by a BSD-style license that can be 39720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// found in the LICENSE file. 49720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 59720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#include "chrome/browser/ui/webui/app_list/start_page_handler.h" 69720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 79720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#include <string> 89720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 99720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#include "base/bind.h" 109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#include "base/memory/scoped_ptr.h" 119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#include "base/prefs/pref_service.h" 129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#include "base/sys_info.h" 139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#include "base/values.h" 149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#include "chrome/browser/extensions/extension_service.h" 159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#include "chrome/browser/profiles/profile.h" 169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#include "chrome/browser/search/hotword_service.h" 179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#include "chrome/browser/ui/app_list/app_list_controller_delegate.h" 189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#include "chrome/browser/ui/app_list/app_list_service.h" 199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#include "chrome/browser/ui/app_list/recommended_apps.h" 209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#include "chrome/browser/ui/app_list/start_page_service.h" 219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#include "chrome/browser/ui/host_desktop.h" 229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#include "chrome/browser/ui/webui/extensions/extension_icon_source.h" 239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#include "chrome/common/extensions/extension_icon_set.h" 249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#include "chrome/common/pref_names.h" 259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#include "content/public/browser/web_contents_view.h" 269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#include "content/public/browser/web_ui.h" 279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#include "extensions/browser/extension_system.h" 289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#include "extensions/common/extension.h" 299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#include "ui/app_list/app_list_switches.h" 309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#include "ui/app_list/speech_ui_model_observer.h" 319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#include "ui/events/event_constants.h" 329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocknamespace app_list { 349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocknamespace { 369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockscoped_ptr<base::DictionaryValue> CreateAppInfo( 389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const extensions::Extension* app) { 399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue); 409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block dict->SetString("appId", app->id()); 419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block dict->SetString("textTitle", app->short_name()); 429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block dict->SetString("title", app->name()); 439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const bool grayscale = false; 459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block bool icon_exists = true; 469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block GURL icon_url = extensions::ExtensionIconSource::GetIconURL( 479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block app, 489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block extension_misc::EXTENSION_ICON_MEDIUM, 499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block ExtensionIconSet::MATCH_BIGGER, 509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block grayscale, 519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block &icon_exists); 529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block dict->SetString("iconUrl", icon_url.spec()); 539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return dict.Pass(); 559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} // namespace 589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve BlockStartPageHandler::StartPageHandler() : recommended_apps_(NULL) {} 609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve BlockStartPageHandler::~StartPageHandler() { 629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block if (recommended_apps_) 639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block recommended_apps_->RemoveObserver(this); 649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockvoid StartPageHandler::RegisterMessages() { 679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block web_ui()->RegisterMessageCallback( 689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block "initialize", 699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block base::Bind(&StartPageHandler::HandleInitialize, base::Unretained(this))); 709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block web_ui()->RegisterMessageCallback( 719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block "launchApp", 729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block base::Bind(&StartPageHandler::HandleLaunchApp, base::Unretained(this))); 739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block web_ui()->RegisterMessageCallback( 749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block "speechResult", 759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block base::Bind(&StartPageHandler::HandleSpeechResult, 769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block base::Unretained(this))); 779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block web_ui()->RegisterMessageCallback( 789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block "speechSoundLevel", 799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block base::Bind(&StartPageHandler::HandleSpeechSoundLevel, 809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block base::Unretained(this))); 819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block web_ui()->RegisterMessageCallback( 829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block "setSpeechRecognitionState", 839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block base::Bind(&StartPageHandler::HandleSpeechRecognition, 849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block base::Unretained(this))); 859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockvoid StartPageHandler::OnRecommendedAppsChanged() { 889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block SendRecommendedApps(); 899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockvoid StartPageHandler::SendRecommendedApps() { 929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const RecommendedApps::Apps& recommends = recommended_apps_->apps(); 939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block base::ListValue recommended_list; 959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block for (size_t i = 0; i < recommends.size(); ++i) { 969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block recommended_list.Append(CreateAppInfo(recommends[i].get()).release()); 979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block web_ui()->CallJavascriptFunction("appList.startPage.setRecommendedApps", 1009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block recommended_list); 1019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 1029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined(OS_CHROMEOS) 1049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockbool StartPageHandler::HotwordEnabled() { 1059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block Profile* profile = Profile::FromWebUI(web_ui()); 1069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return HotwordService::DoesHotwordSupportLanguage(profile) && 1079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block profile->GetPrefs()->GetBoolean(prefs::kHotwordAppListEnabled); 1089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 1099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockvoid StartPageHandler::OnHotwordEnabledChanged() { 1119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block web_ui()->CallJavascriptFunction( 1129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block "appList.startPage.setHotwordEnabled", 1139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block base::FundamentalValue(HotwordEnabled())); 1149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 1159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockvoid StartPageHandler::SynchronizeHotwordEnabled() { 1179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block Profile* profile = Profile::FromWebUI(web_ui()); 1189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block PrefService* pref_service = profile->GetPrefs(); 1199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const PrefService::Preference* pref = 1209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block pref_service->FindPreference(prefs::kHotwordSearchEnabled); 1219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block if (!pref || pref->IsDefaultValue()) 1229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return; 1239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block bool search_enabled = false; 1259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block if (!pref->GetValue()->GetAsBoolean(&search_enabled)) 1269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return; 1279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block if (pref_service->GetBoolean(prefs::kHotwordAppListEnabled) != search_enabled) 1299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block pref_service->SetBoolean(prefs::kHotwordAppListEnabled, search_enabled); 1309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 1319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 1329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockvoid StartPageHandler::HandleInitialize(const base::ListValue* args) { 1349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block Profile* profile = Profile::FromWebUI(web_ui()); 1359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block StartPageService* service = StartPageService::Get(profile); 1369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block if (!service) 1379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return; 1389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block recommended_apps_ = service->recommended_apps(); 1409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block recommended_apps_->AddObserver(this); 1419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block SendRecommendedApps(); 1439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined(OS_CHROMEOS) 1459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block if (app_list::switches::IsVoiceSearchEnabled() && 1469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block HotwordService::DoesHotwordSupportLanguage(profile) && 1479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block base::SysInfo::IsRunningOnChromeOS()) { 1489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block SynchronizeHotwordEnabled(); 1499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block OnHotwordEnabledChanged(); 1509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block pref_change_registrar_.Init(profile->GetPrefs()); 1519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block pref_change_registrar_.Add( 1529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block prefs::kHotwordSearchEnabled, 1539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block base::Bind(&StartPageHandler::SynchronizeHotwordEnabled, 1549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block base::Unretained(this))); 1559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block pref_change_registrar_.Add( 1569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block prefs::kHotwordAppListEnabled, 1579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block base::Bind(&StartPageHandler::OnHotwordEnabledChanged, 1589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block base::Unretained(this))); 1599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 1609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 1619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 1629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockvoid StartPageHandler::HandleLaunchApp(const base::ListValue* args) { 1649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block std::string app_id; 1659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block CHECK(args->GetString(0, &app_id)); 1669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block Profile* profile = Profile::FromWebUI(web_ui()); 1689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block ExtensionService* service = 1699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block extensions::ExtensionSystem::Get(profile)->extension_service(); 1709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const extensions::Extension* app = service->GetInstalledExtension(app_id); 1719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block if (!app) { 1729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block NOTREACHED(); 1739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return; 1749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 1759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block AppListControllerDelegate* controller = AppListService::Get( 1779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block chrome::GetHostDesktopTypeForNativeView( 1789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block web_ui()->GetWebContents()->GetView()->GetNativeView())) 1799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block ->GetControllerDelegate(); 1809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block controller->ActivateApp(profile, 1819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block app, 1829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block AppListControllerDelegate::LAUNCH_FROM_APP_LIST, 1839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block ui::EF_NONE); 1849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 1859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockvoid StartPageHandler::HandleSpeechResult(const base::ListValue* args) { 1879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block base::string16 query; 1889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block bool is_final = false; 1899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block CHECK(args->GetString(0, &query)); 1909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block CHECK(args->GetBoolean(1, &is_final)); 1919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block StartPageService::Get(Profile::FromWebUI(web_ui()))->OnSpeechResult( 193e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott query, is_final); 194e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 195e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 196e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid StartPageHandler::HandleSpeechSoundLevel(const base::ListValue* args) { 1979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block double level; 1989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block CHECK(args->GetDouble(0, &level)); 1999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block StartPageService* service = 2019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block StartPageService::Get(Profile::FromWebUI(web_ui())); 2029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block if (service) 2039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block service->OnSpeechSoundLevelChanged(static_cast<int16>(level)); 2049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 2059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockvoid StartPageHandler::HandleSpeechRecognition(const base::ListValue* args) { 2079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block std::string state_string; 2089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block CHECK(args->GetString(0, &state_string)); 2099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 210ee3d0ea50df7a77e11a83ad627d492b105e39207Elliott Hughes SpeechRecognitionState new_state = SPEECH_RECOGNITION_OFF; 211ee3d0ea50df7a77e11a83ad627d492b105e39207Elliott Hughes if (state_string == "READY") 2129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block new_state = SPEECH_RECOGNITION_READY; 2139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block else if (state_string == "HOTWORD_RECOGNIZING") 2149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block new_state = SPEECH_RECOGNITION_HOTWORD_LISTENING; 2159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block else if (state_string == "RECOGNIZING") 2169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block new_state = SPEECH_RECOGNITION_RECOGNIZING; 2179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block else if (state_string == "IN_SPEECH") 2189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block new_state = SPEECH_RECOGNITION_IN_SPEECH; 2199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block else if (state_string == "STOPPING") 2209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block new_state = SPEECH_RECOGNITION_STOPPING; 2219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block StartPageService* service = 2239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block StartPageService::Get(Profile::FromWebUI(web_ui())); 2249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block if (service) 2259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block service->OnSpeechRecognitionStateChanged(new_state); 226ee3d0ea50df7a77e11a83ad627d492b105e39207Elliott Hughes} 227ee3d0ea50df7a77e11a83ad627d492b105e39207Elliott Hughes 228ee3d0ea50df7a77e11a83ad627d492b105e39207Elliott Hughes} // namespace app_list 229ee3d0ea50df7a77e11a83ad627d492b105e39207Elliott Hughes