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