start_page_service.h revision 4e180b6a0b4720a9b8e9e959a882386f690f08ff
175a0cfdaa6edd47c9917172fa57701b5d22e83efrouslan@chromium.org// Copyright 2013 The Chromium Authors. All rights reserved.
275a0cfdaa6edd47c9917172fa57701b5d22e83efrouslan@chromium.org// Use of this source code is governed by a BSD-style license that can be
375a0cfdaa6edd47c9917172fa57701b5d22e83efrouslan@chromium.org// found in the LICENSE file.
475a0cfdaa6edd47c9917172fa57701b5d22e83efrouslan@chromium.org
575a0cfdaa6edd47c9917172fa57701b5d22e83efrouslan@chromium.org#ifndef CHROME_BROWSER_UI_APP_LIST_START_PAGE_SERVICE_H_
675a0cfdaa6edd47c9917172fa57701b5d22e83efrouslan@chromium.org#define CHROME_BROWSER_UI_APP_LIST_START_PAGE_SERVICE_H_
775a0cfdaa6edd47c9917172fa57701b5d22e83efrouslan@chromium.org
875a0cfdaa6edd47c9917172fa57701b5d22e83efrouslan@chromium.org#include <vector>
975a0cfdaa6edd47c9917172fa57701b5d22e83efrouslan@chromium.org
1075a0cfdaa6edd47c9917172fa57701b5d22e83efrouslan@chromium.org#include "base/basictypes.h"
1175a0cfdaa6edd47c9917172fa57701b5d22e83efrouslan@chromium.org#include "base/memory/ref_counted.h"
1275a0cfdaa6edd47c9917172fa57701b5d22e83efrouslan@chromium.org#include "base/memory/scoped_ptr.h"
1375a0cfdaa6edd47c9917172fa57701b5d22e83efrouslan@chromium.org#include "components/browser_context_keyed_service/browser_context_keyed_service.h"
1475a0cfdaa6edd47c9917172fa57701b5d22e83efrouslan@chromium.org#include "content/public/browser/web_contents.h"
1575a0cfdaa6edd47c9917172fa57701b5d22e83efrouslan@chromium.org
1675a0cfdaa6edd47c9917172fa57701b5d22e83efrouslan@chromium.orgnamespace extensions {
176c42355ce8c105bbadf57deb999c777b5c49df59roubert@google.comclass Extension;
186c42355ce8c105bbadf57deb999c777b5c49df59roubert@google.com}
1975a0cfdaa6edd47c9917172fa57701b5d22e83efrouslan@chromium.org
2075a0cfdaa6edd47c9917172fa57701b5d22e83efrouslan@chromium.orgclass Profile;
2175a0cfdaa6edd47c9917172fa57701b5d22e83efrouslan@chromium.org
2275a0cfdaa6edd47c9917172fa57701b5d22e83efrouslan@chromium.orgnamespace app_list {
2375a0cfdaa6edd47c9917172fa57701b5d22e83efrouslan@chromium.org
2475a0cfdaa6edd47c9917172fa57701b5d22e83efrouslan@chromium.orgclass RecommendedApps;
2575a0cfdaa6edd47c9917172fa57701b5d22e83efrouslan@chromium.org
2675a0cfdaa6edd47c9917172fa57701b5d22e83efrouslan@chromium.org// StartPageService collects data to be displayed in app list's start page
2775a0cfdaa6edd47c9917172fa57701b5d22e83efrouslan@chromium.org// and hosts the start page contents.
2875a0cfdaa6edd47c9917172fa57701b5d22e83efrouslan@chromium.orgclass StartPageService : public BrowserContextKeyedService {
2975a0cfdaa6edd47c9917172fa57701b5d22e83efrouslan@chromium.org public:
3090e624a56973856b6b81112fc1cd815a4224aa96roubert@google.com  typedef std::vector<scoped_refptr<const extensions::Extension> >
3190e624a56973856b6b81112fc1cd815a4224aa96roubert@google.com      ExtensionList;
3290e624a56973856b6b81112fc1cd815a4224aa96roubert@google.com  // Gets the instance for the given profile.
3390e624a56973856b6b81112fc1cd815a4224aa96roubert@google.com  static StartPageService* Get(Profile* profile);
3490e624a56973856b6b81112fc1cd815a4224aa96roubert@google.com
3590e624a56973856b6b81112fc1cd815a4224aa96roubert@google.com  content::WebContents* contents() { return contents_.get(); }
3675a0cfdaa6edd47c9917172fa57701b5d22e83efrouslan@chromium.org  RecommendedApps* recommended_apps() { return recommended_apps_.get(); }
3775a0cfdaa6edd47c9917172fa57701b5d22e83efrouslan@chromium.org
3875a0cfdaa6edd47c9917172fa57701b5d22e83efrouslan@chromium.org private:
3975a0cfdaa6edd47c9917172fa57701b5d22e83efrouslan@chromium.org  // A BrowserContextKeyedServiceFactory for this service.
4075a0cfdaa6edd47c9917172fa57701b5d22e83efrouslan@chromium.org  class Factory;
4175a0cfdaa6edd47c9917172fa57701b5d22e83efrouslan@chromium.org
4290e624a56973856b6b81112fc1cd815a4224aa96roubert@google.com  // ExitObserver to shutdown the service on exiting. WebContents depends
4375a0cfdaa6edd47c9917172fa57701b5d22e83efrouslan@chromium.org  // on the profile and needs to be closed before the profile and its
4475a0cfdaa6edd47c9917172fa57701b5d22e83efrouslan@chromium.org  // keyed service shutdown.
4575a0cfdaa6edd47c9917172fa57701b5d22e83efrouslan@chromium.org  class ExitObserver;
4675a0cfdaa6edd47c9917172fa57701b5d22e83efrouslan@chromium.org
476c42355ce8c105bbadf57deb999c777b5c49df59roubert@google.com  explicit StartPageService(Profile* profile);
4875a0cfdaa6edd47c9917172fa57701b5d22e83efrouslan@chromium.org  virtual ~StartPageService();
496c42355ce8c105bbadf57deb999c777b5c49df59roubert@google.com
506c42355ce8c105bbadf57deb999c777b5c49df59roubert@google.com  // BrowserContextKeyedService overrides:
516c42355ce8c105bbadf57deb999c777b5c49df59roubert@google.com  virtual void Shutdown() OVERRIDE;
5275a0cfdaa6edd47c9917172fa57701b5d22e83efrouslan@chromium.org
5375a0cfdaa6edd47c9917172fa57701b5d22e83efrouslan@chromium.org  Profile* profile_;
5475a0cfdaa6edd47c9917172fa57701b5d22e83efrouslan@chromium.org  scoped_ptr<content::WebContents> contents_;
5575a0cfdaa6edd47c9917172fa57701b5d22e83efrouslan@chromium.org  scoped_ptr<ExitObserver> exit_observer_;
5675a0cfdaa6edd47c9917172fa57701b5d22e83efrouslan@chromium.org  scoped_ptr<RecommendedApps> recommended_apps_;
5775a0cfdaa6edd47c9917172fa57701b5d22e83efrouslan@chromium.org
5875a0cfdaa6edd47c9917172fa57701b5d22e83efrouslan@chromium.org  DISALLOW_COPY_AND_ASSIGN(StartPageService);
5975a0cfdaa6edd47c9917172fa57701b5d22e83efrouslan@chromium.org};
6075a0cfdaa6edd47c9917172fa57701b5d22e83efrouslan@chromium.org
6175a0cfdaa6edd47c9917172fa57701b5d22e83efrouslan@chromium.org}  // namespace app_list
6290e624a56973856b6b81112fc1cd815a4224aa96roubert@google.com
6390e624a56973856b6b81112fc1cd815a4224aa96roubert@google.com#endif  // CHROME_BROWSER_UI_APP_LIST_START_PAGE_SERVICE_H_
6490e624a56973856b6b81112fc1cd815a4224aa96roubert@google.com