14e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 24e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 34e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// found in the LICENSE file. 44e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 54e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#ifndef CHROME_BROWSER_UI_APP_LIST_START_PAGE_SERVICE_H_ 64e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#define CHROME_BROWSER_UI_APP_LIST_START_PAGE_SERVICE_H_ 74e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 84e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include <vector> 94e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 104e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "base/basictypes.h" 114e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "base/memory/ref_counted.h" 124e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "base/memory/scoped_ptr.h" 13f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/observer_list.h" 14f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/strings/string16.h" 15a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "components/keyed_service/core/keyed_service.h" 164e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "content/public/browser/web_contents.h" 17a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "ui/app_list/speech_ui_model_observer.h" 184e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 194e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)namespace extensions { 204e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)class Extension; 214e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 224e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 234e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)class Profile; 244e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 254e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)namespace app_list { 264e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 274e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)class RecommendedApps; 28f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class StartPageObserver; 294e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 304e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// StartPageService collects data to be displayed in app list's start page 314e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// and hosts the start page contents. 32a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)class StartPageService : public KeyedService { 334e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) public: 344e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) typedef std::vector<scoped_refptr<const extensions::Extension> > 354e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ExtensionList; 364e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // Gets the instance for the given profile. 374e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) static StartPageService* Get(Profile* profile); 384e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 39f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void AddObserver(StartPageObserver* observer); 40f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void RemoveObserver(StartPageObserver* observer); 41f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 42c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch void AppListShown(); 43c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch void AppListHidden(); 44f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void ToggleSpeechRecognition(); 45f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 46c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // Returns true if the hotword is enabled in the app-launcher. 47c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch bool HotwordEnabled(); 48c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // They return essentially the same web contents but might return NULL when 505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // some flag disables the feature. 515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) content::WebContents* GetStartPageContents(); 525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) content::WebContents* GetSpeechRecognitionContents(); 535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 544e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) RecommendedApps* recommended_apps() { return recommended_apps_.get(); } 55f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Profile* profile() { return profile_; } 565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) SpeechRecognitionState state() { return state_; } 57a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) void OnSpeechResult(const base::string16& query, bool is_final); 58a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) void OnSpeechSoundLevelChanged(int16 level); 59a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) void OnSpeechRecognitionStateChanged(SpeechRecognitionState new_state); 604e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 614e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) private: 625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) friend class StartPageServiceFactory; 634e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 64f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // ProfileDestroyObserver to shutdown the service on exiting. WebContents 65f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // depends on the profile and needs to be closed before the profile and its 664e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // keyed service shutdown. 67f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) class ProfileDestroyObserver; 68f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 69f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // The WebContentsDelegate implementation for the start page. This allows 70f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // getUserMedia() request from the web contents. 71f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) class StartPageWebContentsDelegate; 724e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 734e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) explicit StartPageService(Profile* profile); 744e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) virtual ~StartPageService(); 754e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 76c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch void LoadContents(); 77c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch void UnloadContents(); 78c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 79a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // KeyedService overrides: 804e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) virtual void Shutdown() OVERRIDE; 814e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 824e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) Profile* profile_; 834e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) scoped_ptr<content::WebContents> contents_; 84f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) scoped_ptr<StartPageWebContentsDelegate> contents_delegate_; 85f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) scoped_ptr<ProfileDestroyObserver> profile_destroy_observer_; 864e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) scoped_ptr<RecommendedApps> recommended_apps_; 875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) SpeechRecognitionState state_; 88f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ObserverList<StartPageObserver> observers_; 895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) bool speech_button_toggled_manually_; 905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) bool speech_result_obtained_; 914e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 924e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(StartPageService); 934e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}; 944e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 954e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} // namespace app_list 964e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 974e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#endif // CHROME_BROWSER_UI_APP_LIST_START_PAGE_SERVICE_H_ 98