start_page_service.h revision f2477e01787aa58f445919b809d89e252beef54f
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" 154e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "components/browser_context_keyed_service/browser_context_keyed_service.h" 164e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "content/public/browser/web_contents.h" 174e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 184e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)namespace extensions { 194e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)class Extension; 204e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 214e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 224e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)class Profile; 234e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 244e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)namespace app_list { 254e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 264e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)class RecommendedApps; 27f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class StartPageObserver; 284e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 294e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// StartPageService collects data to be displayed in app list's start page 304e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// and hosts the start page contents. 314e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)class StartPageService : public BrowserContextKeyedService { 324e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) public: 334e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) typedef std::vector<scoped_refptr<const extensions::Extension> > 344e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ExtensionList; 354e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // Gets the instance for the given profile. 364e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) static StartPageService* Get(Profile* profile); 374e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 38f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void AddObserver(StartPageObserver* observer); 39f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void RemoveObserver(StartPageObserver* observer); 40f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 41f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void ToggleSpeechRecognition(); 42f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 434e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) content::WebContents* contents() { return contents_.get(); } 444e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) RecommendedApps* recommended_apps() { return recommended_apps_.get(); } 45f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Profile* profile() { return profile_; } 46f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void OnSearch(const base::string16& query); 47f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void OnSpeechRecognitionStateChanged(bool recognizing); 484e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 494e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) private: 504e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // A BrowserContextKeyedServiceFactory for this service. 514e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) class Factory; 524e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 53f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // ProfileDestroyObserver to shutdown the service on exiting. WebContents 54f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // depends on the profile and needs to be closed before the profile and its 554e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // keyed service shutdown. 56f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) class ProfileDestroyObserver; 57f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 58f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // The WebContentsDelegate implementation for the start page. This allows 59f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // getUserMedia() request from the web contents. 60f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) class StartPageWebContentsDelegate; 614e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 624e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) explicit StartPageService(Profile* profile); 634e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) virtual ~StartPageService(); 644e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 654e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // BrowserContextKeyedService overrides: 664e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) virtual void Shutdown() OVERRIDE; 674e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 684e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) Profile* profile_; 694e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) scoped_ptr<content::WebContents> contents_; 70f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) scoped_ptr<StartPageWebContentsDelegate> contents_delegate_; 71f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) scoped_ptr<ProfileDestroyObserver> profile_destroy_observer_; 724e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) scoped_ptr<RecommendedApps> recommended_apps_; 73f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ObserverList<StartPageObserver> observers_; 744e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 754e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(StartPageService); 764e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}; 774e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 784e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} // namespace app_list 794e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 804e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#endif // CHROME_BROWSER_UI_APP_LIST_START_PAGE_SERVICE_H_ 81