1// Copyright 2014 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "chrome/browser/ui/app_list/app_list_service_views.h"
6
7#include "chrome/browser/apps/scoped_keep_alive.h"
8#include "chrome/browser/ui/app_list/app_list_controller_delegate.h"
9#include "ui/app_list/views/app_list_view.h"
10
11AppListServiceViews::AppListServiceViews(
12    scoped_ptr<AppListControllerDelegate> controller_delegate)
13    : shower_(this),
14      can_dismiss_(true),
15      controller_delegate_(controller_delegate.Pass()) {
16}
17
18AppListServiceViews::~AppListServiceViews() {}
19
20void AppListServiceViews::OnViewBeingDestroyed() {
21  can_dismiss_ = true;
22  shower_.HandleViewBeingDestroyed();
23}
24
25void AppListServiceViews::Init(Profile* initial_profile) {
26  PerformStartupChecks(initial_profile);
27}
28
29void AppListServiceViews::CreateForProfile(Profile* requested_profile) {
30  shower_.CreateViewForProfile(requested_profile);
31}
32
33void AppListServiceViews::ShowForProfile(Profile* requested_profile) {
34  DCHECK(requested_profile);
35
36  ScopedKeepAlive keep_alive;
37
38  InvalidatePendingProfileLoads();
39  SetProfilePath(requested_profile->GetPath());
40  shower_.ShowForProfile(requested_profile);
41  RecordAppListLaunch();
42}
43
44void AppListServiceViews::DismissAppList() {
45  if (!can_dismiss_)
46    return;
47
48  shower_.DismissAppList();
49}
50
51bool AppListServiceViews::IsAppListVisible() const {
52  return shower_.IsAppListVisible();
53}
54
55gfx::NativeWindow AppListServiceViews::GetAppListWindow() {
56  return shower_.GetWindow();
57}
58
59Profile* AppListServiceViews::GetCurrentAppListProfile() {
60  return shower_.profile();
61}
62
63AppListControllerDelegate* AppListServiceViews::GetControllerDelegate() {
64  return controller_delegate_.get();
65}
66
67void AppListServiceViews::DestroyAppList() {
68  if (!shower_.HasView())
69    return;
70
71  // Use CloseNow(). This can't be asynchronous because the profile will be
72  // deleted once this function returns.
73  shower_.app_list()->GetWidget()->CloseNow();
74  DCHECK(!shower_.HasView());
75}
76
77AppListViewDelegate* AppListServiceViews::GetViewDelegateForCreate() {
78  return GetViewDelegate(shower_.profile());
79}
80