custom_home_pages_table_model.h revision 3345a6884c488ff3a535c2c9acdd33d74b37e311
1c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Copyright (c) 2010 The Chromium Authors. All rights reserved.
2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be
3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file.
4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
5c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifndef CHROME_BROWSER_CUSTOM_HOME_PAGES_TABLE_MODEL_H_
6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define CHROME_BROWSER_CUSTOM_HOME_PAGES_TABLE_MODEL_H_
73345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#pragma once
8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include <string>
10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include <vector>
11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
12c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "app/table_model.h"
13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/history/history.h"
14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/favicon_service.h"
15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
163345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickclass GURL;
17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass Profile;
183345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickclass SkBitmap;
19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass TableModelObserver;
20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// CustomHomePagesTableModel is the model for the TableView showing the list
22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// of pages the user wants opened on startup.
23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass CustomHomePagesTableModel : public TableModel {
25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public:
26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  explicit CustomHomePagesTableModel(Profile* profile);
273345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  virtual ~CustomHomePagesTableModel();
28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Sets the set of urls that this model contains.
30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void SetURLs(const std::vector<GURL>& urls);
31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Adds an entry at the specified index.
33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void Add(int index, const GURL& url);
34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Removes the entry at the specified index.
36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void Remove(int index);
37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Clears any entries and fills the list with pages currently opened in the
39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // browser.
40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void SetToCurrentlyOpenPages();
41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Returns the set of urls this model contains.
43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  std::vector<GURL> GetURLs();
44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // TableModel overrides:
46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual int RowCount();
47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual std::wstring GetText(int row, int column_id);
48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual SkBitmap GetIcon(int row);
49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual std::wstring GetTooltip(int row);
50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void SetObserver(TableModelObserver* observer);
51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private:
53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Each item in the model is represented as an Entry. Entry stores the URL,
54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // title, and favicon of the page.
553345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  struct Entry;
56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Loads the title and favicon for the specified entry.
58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void LoadTitleAndFavIcon(Entry* entry);
59c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Callback from history service. Updates the title of the Entry whose
61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // |title_handle| matches |handle| and notifies the observer of the change.
62c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void OnGotTitle(HistoryService::Handle handle,
63c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                  bool found_url,
64c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                  const history::URLRow* row,
65c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                  history::VisitVector* visits);
66c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
67c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Callback from history service. Updates the icon of the Entry whose
68c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // |fav_icon_handle| matches |handle| and notifies the observer of the change.
69c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void OnGotFavIcon(FaviconService::Handle handle,
70c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                    bool know_fav_icon,
71c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                    scoped_refptr<RefCountedMemory> image_data,
72c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                    bool is_expired,
73c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                    GURL icon_url);
74c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
75c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Returns the entry whose |member| matches |handle| and sets |entry_index| to
76c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // the index of the entry.
77c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  Entry* GetEntryByLoadHandle(CancelableRequestProvider::Handle Entry::* member,
78c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                              CancelableRequestProvider::Handle handle,
79c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                              int* entry_index);
80c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
81c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Returns the entry whose |fav_icon_handle| matches |handle| and sets
82c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // |entry_index| to the index of the entry.
83c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  Entry* GetEntryByFavIconHandle(FaviconService::Handle handle,
84c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                 int* entry_index);
85c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
86c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Returns the URL for a particular row, formatted for display to the user.
87c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  std::wstring FormattedURL(int row) const;
88c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
89c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Set of entries we're showing.
90c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  std::vector<Entry> entries_;
91c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
92c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Default icon to show when one can't be found for the URL.
933345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  SkBitmap* default_favicon_;
94c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
95c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Profile used to load titles and icons.
96c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  Profile* profile_;
97c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
98c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  TableModelObserver* observer_;
99c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
100c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Used in loading titles and favicons.
101c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  CancelableRequestConsumer query_consumer_;
102c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
103c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  DISALLOW_COPY_AND_ASSIGN(CustomHomePagesTableModel);
104c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch};
105c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
106c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // CHROME_BROWSER_CUSTOM_HOME_PAGES_TABLE_MODEL_H_
107