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