Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(311)

Side by Side Diff: chrome/browser/ui/app_list/start_page_service.cc

Issue 631913004: Open the launcher when hotword is triggered in always-on mode. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@hotword-google-com-ntp
Patch Set: Fix android build Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/ui/app_list/start_page_service.h" 5 #include "chrome/browser/ui/app_list/start_page_service.h"
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "base/bind.h"
9 #include "base/command_line.h" 10 #include "base/command_line.h"
10 #include "base/memory/singleton.h" 11 #include "base/memory/singleton.h"
11 #include "base/metrics/user_metrics.h" 12 #include "base/metrics/user_metrics.h"
12 #include "base/prefs/pref_service.h" 13 #include "base/prefs/pref_service.h"
13 #include "chrome/browser/chrome_notification_types.h" 14 #include "chrome/browser/chrome_notification_types.h"
14 #include "chrome/browser/media/media_stream_infobar_delegate.h" 15 #include "chrome/browser/media/media_stream_infobar_delegate.h"
15 #include "chrome/browser/profiles/profile.h" 16 #include "chrome/browser/profiles/profile.h"
16 #include "chrome/browser/search/hotword_service.h" 17 #include "chrome/browser/search/hotword_service.h"
17 #include "chrome/browser/search/hotword_service_factory.h" 18 #include "chrome/browser/search/hotword_service_factory.h"
18 #include "chrome/browser/ui/app_list/recommended_apps.h" 19 #include "chrome/browser/ui/app_list/recommended_apps.h"
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
104 StartPageService* StartPageService::Get(Profile* profile) { 105 StartPageService* StartPageService::Get(Profile* profile) {
105 return StartPageServiceFactory::GetForProfile(profile); 106 return StartPageServiceFactory::GetForProfile(profile);
106 } 107 }
107 108
108 StartPageService::StartPageService(Profile* profile) 109 StartPageService::StartPageService(Profile* profile)
109 : profile_(profile), 110 : profile_(profile),
110 profile_destroy_observer_(new ProfileDestroyObserver(this)), 111 profile_destroy_observer_(new ProfileDestroyObserver(this)),
111 recommended_apps_(new RecommendedApps(profile)), 112 recommended_apps_(new RecommendedApps(profile)),
112 state_(app_list::SPEECH_RECOGNITION_OFF), 113 state_(app_list::SPEECH_RECOGNITION_OFF),
113 speech_button_toggled_manually_(false), 114 speech_button_toggled_manually_(false),
114 speech_result_obtained_(false) { 115 speech_result_obtained_(false),
116 webui_finished_loading_(false) {
115 // If experimental hotwording is enabled, then we're always "ready". 117 // If experimental hotwording is enabled, then we're always "ready".
116 // Transitioning into the "hotword recognizing" state is handled by the 118 // Transitioning into the "hotword recognizing" state is handled by the
117 // hotword extension. 119 // hotword extension.
118 if (HotwordService::IsExperimentalHotwordingEnabled()) 120 if (HotwordService::IsExperimentalHotwordingEnabled())
119 state_ = app_list::SPEECH_RECOGNITION_READY; 121 state_ = app_list::SPEECH_RECOGNITION_READY;
120 122
121 if (app_list::switches::IsExperimentalAppListEnabled()) 123 if (app_list::switches::IsExperimentalAppListEnabled())
122 LoadContents(); 124 LoadContents();
123 } 125 }
124 126
(...skipping 22 matching lines...) Expand all
147 } 149 }
148 150
149 void StartPageService::AppListHidden() { 151 void StartPageService::AppListHidden() {
150 contents_->GetWebUI()->CallJavascriptFunction( 152 contents_->GetWebUI()->CallJavascriptFunction(
151 "appList.startPage.onAppListHidden"); 153 "appList.startPage.onAppListHidden");
152 if (!app_list::switches::IsExperimentalAppListEnabled()) 154 if (!app_list::switches::IsExperimentalAppListEnabled())
153 UnloadContents(); 155 UnloadContents();
154 } 156 }
155 157
156 void StartPageService::ToggleSpeechRecognition() { 158 void StartPageService::ToggleSpeechRecognition() {
159 DCHECK(contents_);
157 speech_button_toggled_manually_ = true; 160 speech_button_toggled_manually_ = true;
158 contents_->GetWebUI()->CallJavascriptFunction( 161 if (webui_finished_loading_) {
159 "appList.startPage.toggleSpeechRecognition"); 162 contents_->GetWebUI()->CallJavascriptFunction(
163 "appList.startPage.toggleSpeechRecognition");
164 } else {
165 pending_webui_callbacks_.push_back(
166 base::Bind(&StartPageService::ToggleSpeechRecognition,
167 base::Unretained(this)));
168 }
160 } 169 }
161 170
162 bool StartPageService::HotwordEnabled() { 171 bool StartPageService::HotwordEnabled() {
163 if (HotwordService::IsExperimentalHotwordingEnabled()) { 172 if (HotwordService::IsExperimentalHotwordingEnabled()) {
164 return HotwordServiceFactory::IsServiceAvailable(profile_) && 173 return HotwordServiceFactory::IsServiceAvailable(profile_) &&
165 profile_->GetPrefs()->GetBoolean(prefs::kHotwordSearchEnabled); 174 profile_->GetPrefs()->GetBoolean(prefs::kHotwordSearchEnabled);
166 } 175 }
167 #if defined(OS_CHROMEOS) 176 #if defined(OS_CHROMEOS)
168 return HotwordServiceFactory::IsServiceAvailable(profile_) && 177 return HotwordServiceFactory::IsServiceAvailable(profile_) &&
169 profile_->GetPrefs()->GetBoolean(prefs::kHotwordSearchEnabled); 178 profile_->GetPrefs()->GetBoolean(prefs::kHotwordSearchEnabled);
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
221 state_ = new_state; 230 state_ = new_state;
222 FOR_EACH_OBSERVER(StartPageObserver, 231 FOR_EACH_OBSERVER(StartPageObserver,
223 observers_, 232 observers_,
224 OnSpeechRecognitionStateChanged(new_state)); 233 OnSpeechRecognitionStateChanged(new_state));
225 } 234 }
226 235
227 void StartPageService::Shutdown() { 236 void StartPageService::Shutdown() {
228 UnloadContents(); 237 UnloadContents();
229 } 238 }
230 239
240 void StartPageService::WebUILoaded() {
241 // There's a race condition between the WebUI loading, and calling its JS
242 // functions. Specifically, calling LoadContents() doesn't mean that the page
243 // has loaded, but several code paths make this assumption. This function
244 // allows us to defer calling JS functions until after the page has finished
245 // loading.
246 webui_finished_loading_ = true;
247 for (const auto& cb : pending_webui_callbacks_)
248 cb.Run();
249 pending_webui_callbacks_.clear();
250 }
251
231 void StartPageService::LoadContents() { 252 void StartPageService::LoadContents() {
232 contents_.reset(content::WebContents::Create( 253 contents_.reset(content::WebContents::Create(
233 content::WebContents::CreateParams(profile_))); 254 content::WebContents::CreateParams(profile_)));
234 contents_delegate_.reset(new StartPageWebContentsDelegate()); 255 contents_delegate_.reset(new StartPageWebContentsDelegate());
235 contents_->SetDelegate(contents_delegate_.get()); 256 contents_->SetDelegate(contents_delegate_.get());
236 257
237 GURL url(chrome::kChromeUIAppListStartPageURL); 258 GURL url(chrome::kChromeUIAppListStartPageURL);
238 CommandLine* command_line = CommandLine::ForCurrentProcess(); 259 CommandLine* command_line = CommandLine::ForCurrentProcess();
239 if (command_line->HasSwitch(::switches::kAppListStartPageURL)) { 260 if (command_line->HasSwitch(::switches::kAppListStartPageURL)) {
240 url = GURL( 261 url = GURL(
241 command_line->GetSwitchValueASCII(::switches::kAppListStartPageURL)); 262 command_line->GetSwitchValueASCII(::switches::kAppListStartPageURL));
242 } 263 }
243 264
244 contents_->GetController().LoadURL( 265 contents_->GetController().LoadURL(
245 url, 266 url,
246 content::Referrer(), 267 content::Referrer(),
247 ui::PAGE_TRANSITION_AUTO_TOPLEVEL, 268 ui::PAGE_TRANSITION_AUTO_TOPLEVEL,
248 std::string()); 269 std::string());
249 } 270 }
250 271
251 void StartPageService::UnloadContents() { 272 void StartPageService::UnloadContents() {
252 contents_.reset(); 273 contents_.reset();
274 webui_finished_loading_ = false;
253 } 275 }
254 276
255 } // namespace app_list 277 } // namespace app_list
OLDNEW
« no previous file with comments | « chrome/browser/ui/app_list/start_page_service.h ('k') | chrome/browser/ui/webui/app_list/start_page_handler.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698