File: app_list_service_views.cc

package info (click to toggle)
chromium-browser 41.0.2272.118-1
  • links: PTS, VCS
  • area: main
  • in suites: jessie-kfreebsd
  • size: 2,189,132 kB
  • sloc: cpp: 9,691,462; ansic: 3,341,451; python: 712,689; asm: 518,779; xml: 208,926; java: 169,820; sh: 119,353; perl: 68,907; makefile: 28,311; yacc: 13,305; objc: 11,385; tcl: 3,186; cs: 2,225; sql: 2,217; lex: 2,215; lisp: 1,349; pascal: 1,256; awk: 407; ruby: 155; sed: 53; php: 14; exp: 11
file content (114 lines) | stat: -rw-r--r-- 3,586 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "chrome/browser/ui/app_list/app_list_service_views.h"

#include "chrome/browser/apps/scoped_keep_alive.h"
#include "chrome/browser/ui/app_list/app_list_controller_delegate.h"
#include "ui/app_list/app_list_switches.h"
#include "ui/app_list/views/app_list_main_view.h"
#include "ui/app_list/views/app_list_view.h"
#include "ui/app_list/views/contents_view.h"

AppListServiceViews::AppListServiceViews(
    scoped_ptr<AppListControllerDelegate> controller_delegate)
    : shower_(this),
      can_dismiss_(true),
      controller_delegate_(controller_delegate.Pass()) {
}

AppListServiceViews::~AppListServiceViews() {}

void AppListServiceViews::OnViewBeingDestroyed() {
  can_dismiss_ = true;
  shower_.HandleViewBeingDestroyed();
}

void AppListServiceViews::Init(Profile* initial_profile) {
  PerformStartupChecks(initial_profile);
}

void AppListServiceViews::ShowForProfile(Profile* requested_profile) {
  ShowForProfileInternal(requested_profile,
                         app_list::AppListModel::INVALID_STATE);
}

void AppListServiceViews::ShowForAppInstall(Profile* profile,
                                            const std::string& extension_id,
                                            bool start_discovery_tracking) {
  if (app_list::switches::IsExperimentalAppListEnabled())
    ShowForProfileInternal(profile, app_list::AppListModel::STATE_APPS);

  AppListServiceImpl::ShowForAppInstall(profile, extension_id,
                                        start_discovery_tracking);
}

void AppListServiceViews::ShowForCustomLauncherPage(Profile* profile) {
  ShowForProfileInternal(profile,
                         app_list::AppListModel::STATE_CUSTOM_LAUNCHER_PAGE);
}

void AppListServiceViews::DismissAppList() {
  if (!can_dismiss_)
    return;

  shower_.DismissAppList();
}

bool AppListServiceViews::IsAppListVisible() const {
  return shower_.IsAppListVisible();
}

gfx::NativeWindow AppListServiceViews::GetAppListWindow() {
  return shower_.GetWindow();
}

Profile* AppListServiceViews::GetCurrentAppListProfile() {
  return shower_.profile();
}

AppListControllerDelegate* AppListServiceViews::GetControllerDelegate() {
  return controller_delegate_.get();
}

void AppListServiceViews::CreateForProfile(Profile* requested_profile) {
  DCHECK(requested_profile);
  InvalidatePendingProfileLoads();
  shower_.CreateViewForProfile(requested_profile);
  SetProfilePath(shower_.profile()->GetPath());
}

void AppListServiceViews::DestroyAppList() {
  if (!shower_.HasView())
    return;

  // Use CloseNow(). This can't be asynchronous because the profile will be
  // deleted once this function returns.
  shower_.app_list()->GetWidget()->CloseNow();
  DCHECK(!shower_.HasView());
}

AppListViewDelegate* AppListServiceViews::GetViewDelegateForCreate() {
  return GetViewDelegate(shower_.profile());
}

void AppListServiceViews::ShowForProfileInternal(
    Profile* profile,
    app_list::AppListModel::State state) {
  DCHECK(profile);

  ScopedKeepAlive keep_alive;

  CreateForProfile(profile);

  if (state != app_list::AppListModel::INVALID_STATE) {
    app_list::ContentsView* contents_view =
        shower_.app_list()->app_list_main_view()->contents_view();
    contents_view->SetActivePage(contents_view->GetPageIndexForState(state),
                                 shower_.IsAppListVisible()  /* animate */);
  }

  shower_.ShowForCurrentProfile();
  RecordAppListLaunch();
}