1// Copyright 2013 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#ifndef CHROME_BROWSER_PROFILES_PROFILE_LIST_DESKTOP_H_
6#define CHROME_BROWSER_PROFILES_PROFILE_LIST_DESKTOP_H_
7
8#include "chrome/browser/profiles/profile_list.h"
9
10#include <vector>
11
12class Browser;
13class ProfileInfoInterface;
14
15// This model represents the profiles added to desktop Chrome (as opposed to
16// Chrome OS). Profiles marked not to appear in the list will be omitted
17// throughout.
18class ProfileListDesktop : public ProfileList {
19 public:
20  explicit ProfileListDesktop(ProfileInfoInterface* profile_cache);
21  virtual ~ProfileListDesktop();
22
23  // ProfileList overrides:
24  virtual size_t GetNumberOfItems() const OVERRIDE;
25  virtual const AvatarMenu::Item& GetItemAt(size_t index) const OVERRIDE;
26  virtual void RebuildMenu() OVERRIDE;
27  // Returns the menu index of the profile at |index| in the ProfileInfoCache.
28  // The profile index must exist, and it may not be marked as omitted from the
29  // menu.
30  virtual size_t MenuIndexFromProfileIndex(size_t index) OVERRIDE;
31  virtual void ActiveProfilePathChanged(base::FilePath& path) OVERRIDE;
32
33 private:
34  void ClearMenu();
35
36  // The cache that provides the profile information. Weak.
37  ProfileInfoInterface* profile_info_;
38
39  // The path of the currently active profile.
40  base::FilePath active_profile_path_;
41
42  // List of built "menu items."
43  std::vector<AvatarMenu::Item*> items_;
44
45  // The number of profiles that were omitted from the list when it was built.
46  size_t omitted_item_count_;
47
48  DISALLOW_COPY_AND_ASSIGN(ProfileListDesktop);
49};
50
51#endif  // CHROME_BROWSER_PROFILES_PROFILE_LIST_DESKTOP_H_
52