summaryrefslogtreecommitdiffstats
path: root/chrome/browser/custom_home_pages_table_model.h
diff options
context:
space:
mode:
authormattm@chromium.org <mattm@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-05-12 00:19:05 +0000
committermattm@chromium.org <mattm@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-05-12 00:19:05 +0000
commit7fff7901c3813f7847e0c46f5eff8a427e3ba6b3 (patch)
tree6139867a31596478126841cc056547b8a1b8968f /chrome/browser/custom_home_pages_table_model.h
parentd1a79af22766b274e904c997f05813b9bf7ef28d (diff)
downloadchromium_src-7fff7901c3813f7847e0c46f5eff8a427e3ba6b3.zip
chromium_src-7fff7901c3813f7847e0c46f5eff8a427e3ba6b3.tar.gz
chromium_src-7fff7901c3813f7847e0c46f5eff8a427e3ba6b3.tar.bz2
Split CustomHomePagesTableModel into its own file so it can be shared with the Gtk UI.
BUG=43802 TEST=manual Review URL: http://codereview.chromium.org/2061003 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@46993 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/custom_home_pages_table_model.h')
-rw-r--r--chrome/browser/custom_home_pages_table_model.h120
1 files changed, 120 insertions, 0 deletions
diff --git a/chrome/browser/custom_home_pages_table_model.h b/chrome/browser/custom_home_pages_table_model.h
new file mode 100644
index 0000000..dd2e1aa
--- /dev/null
+++ b/chrome/browser/custom_home_pages_table_model.h
@@ -0,0 +1,120 @@
+// Copyright (c) 2010 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.
+
+#ifndef CHROME_BROWSER_CUSTOM_HOME_PAGES_TABLE_MODEL_H_
+#define CHROME_BROWSER_CUSTOM_HOME_PAGES_TABLE_MODEL_H_
+
+#include <string>
+#include <vector>
+
+#include "app/table_model.h"
+#include "chrome/browser/history/history.h"
+#include "chrome/browser/favicon_service.h"
+#include "googleurl/src/gurl.h"
+#include "third_party/skia/include/core/SkBitmap.h"
+
+class Profile;
+class TableModelObserver;
+
+// CustomHomePagesTableModel is the model for the TableView showing the list
+// of pages the user wants opened on startup.
+
+class CustomHomePagesTableModel : public TableModel {
+ public:
+ explicit CustomHomePagesTableModel(Profile* profile);
+ virtual ~CustomHomePagesTableModel() {}
+
+ // Sets the set of urls that this model contains.
+ void SetURLs(const std::vector<GURL>& urls);
+
+ // Adds an entry at the specified index.
+ void Add(int index, const GURL& url);
+
+ // Removes the entry at the specified index.
+ void Remove(int index);
+
+ // Returns the set of urls this model contains.
+ std::vector<GURL> GetURLs();
+
+ // TableModel overrides:
+ virtual int RowCount();
+ virtual std::wstring GetText(int row, int column_id);
+ virtual SkBitmap GetIcon(int row);
+ virtual std::wstring GetTooltip(int row);
+ virtual void SetObserver(TableModelObserver* observer);
+
+ private:
+ // Each item in the model is represented as an Entry. Entry stores the URL,
+ // title, and favicon of the page.
+ struct Entry {
+ Entry() : title_handle(0), fav_icon_handle(0) {}
+
+ // URL of the page.
+ GURL url;
+
+ // Page title. If this is empty, we'll display the URL as the entry.
+ std::wstring title;
+
+ // Icon for the page.
+ SkBitmap icon;
+
+ // If non-zero, indicates we're loading the title for the page.
+ HistoryService::Handle title_handle;
+
+ // If non-zero, indicates we're loading the favicon for the page.
+ FaviconService::Handle fav_icon_handle;
+ };
+
+ static void InitClass();
+
+ // Loads the title and favicon for the specified entry.
+ void LoadTitleAndFavIcon(Entry* entry);
+
+ // Callback from history service. Updates the title of the Entry whose
+ // |title_handle| matches |handle| and notifies the observer of the change.
+ void OnGotTitle(HistoryService::Handle handle,
+ bool found_url,
+ const history::URLRow* row,
+ history::VisitVector* visits);
+
+ // Callback from history service. Updates the icon of the Entry whose
+ // |fav_icon_handle| matches |handle| and notifies the observer of the change.
+ void OnGotFavIcon(FaviconService::Handle handle,
+ bool know_fav_icon,
+ scoped_refptr<RefCountedMemory> image_data,
+ bool is_expired,
+ GURL icon_url);
+
+ // Returns the entry whose |member| matches |handle| and sets |entry_index| to
+ // the index of the entry.
+ Entry* GetEntryByLoadHandle(CancelableRequestProvider::Handle Entry::* member,
+ CancelableRequestProvider::Handle handle,
+ int* entry_index);
+
+ // Returns the entry whose |fav_icon_handle| matches |handle| and sets
+ // |entry_index| to the index of the entry.
+ Entry* GetEntryByFavIconHandle(FaviconService::Handle handle,
+ int* entry_index);
+
+ // Returns the URL for a particular row, formatted for display to the user.
+ std::wstring FormattedURL(int row) const;
+
+ // Set of entries we're showing.
+ std::vector<Entry> entries_;
+
+ // Default icon to show when one can't be found for the URL.
+ static SkBitmap default_favicon_;
+
+ // Profile used to load titles and icons.
+ Profile* profile_;
+
+ TableModelObserver* observer_;
+
+ // Used in loading titles and favicons.
+ CancelableRequestConsumer query_consumer_;
+
+ DISALLOW_COPY_AND_ASSIGN(CustomHomePagesTableModel);
+};
+
+#endif // CHROME_BROWSER_CUSTOM_HOME_PAGES_TABLE_MODEL_H_