• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2010 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_CUSTOM_HOME_PAGES_TABLE_MODEL_H_
6 #define CHROME_BROWSER_CUSTOM_HOME_PAGES_TABLE_MODEL_H_
7 #pragma once
8 
9 #include <string>
10 #include <vector>
11 
12 #include "base/compiler_specific.h"
13 #include "chrome/browser/history/history.h"
14 #include "chrome/browser/favicon_service.h"
15 #include "ui/base/models/table_model.h"
16 
17 class GURL;
18 class Profile;
19 class SkBitmap;
20 
21 namespace ui {
22 class TableModelObserver;
23 }
24 
25 // CustomHomePagesTableModel is the model for the TableView showing the list
26 // of pages the user wants opened on startup.
27 
28 class CustomHomePagesTableModel : public ui::TableModel {
29  public:
30   explicit CustomHomePagesTableModel(Profile* profile);
31   virtual ~CustomHomePagesTableModel();
32 
33   // Sets the set of urls that this model contains.
34   void SetURLs(const std::vector<GURL>& urls);
35 
36   // Adds an entry at the specified index.
37   void Add(int index, const GURL& url);
38 
39   // Removes the entry at the specified index.
40   void Remove(int index);
41 
42   // Clears any entries and fills the list with pages currently opened in the
43   // browser.
44   void SetToCurrentlyOpenPages();
45 
46   // Returns the set of urls this model contains.
47   std::vector<GURL> GetURLs();
48 
49   // TableModel overrides:
50   virtual int RowCount() OVERRIDE;
51   virtual string16 GetText(int row, int column_id) OVERRIDE;
52   virtual SkBitmap GetIcon(int row) OVERRIDE;
53   virtual string16 GetTooltip(int row) OVERRIDE;
54   virtual void SetObserver(ui::TableModelObserver* observer) OVERRIDE;
55 
56  private:
57   // Each item in the model is represented as an Entry. Entry stores the URL,
58   // title, and favicon of the page.
59   struct Entry;
60 
61   // Loads the title and favicon for the specified entry.
62   void LoadTitleAndFavicon(Entry* entry);
63 
64   // Callback from history service. Updates the title of the Entry whose
65   // |title_handle| matches |handle| and notifies the observer of the change.
66   void OnGotTitle(HistoryService::Handle handle,
67                   bool found_url,
68                   const history::URLRow* row,
69                   history::VisitVector* visits);
70 
71   // Callback from history service. Updates the icon of the Entry whose
72   // |favicon_handle| matches |handle| and notifies the observer of the change.
73   void OnGotFavicon(FaviconService::Handle handle,
74                     history::FaviconData favicon);
75 
76   // Returns the entry whose |member| matches |handle| and sets |entry_index| to
77   // the index of the entry.
78   Entry* GetEntryByLoadHandle(CancelableRequestProvider::Handle Entry::* member,
79                               CancelableRequestProvider::Handle handle,
80                               int* entry_index);
81 
82   // Returns the URL for a particular row, formatted for display to the user.
83   string16 FormattedURL(int row) const;
84 
85   // Set of entries we're showing.
86   std::vector<Entry> entries_;
87 
88   // Default icon to show when one can't be found for the URL.
89   SkBitmap* default_favicon_;
90 
91   // Profile used to load titles and icons.
92   Profile* profile_;
93 
94   ui::TableModelObserver* observer_;
95 
96   // Used in loading titles and favicons.
97   CancelableRequestConsumer query_consumer_;
98 
99   DISALLOW_COPY_AND_ASSIGN(CustomHomePagesTableModel);
100 };
101 
102 #endif  // CHROME_BROWSER_CUSTOM_HOME_PAGES_TABLE_MODEL_H_
103