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 123f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen#include "base/compiler_specific.h" 13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/history/history.h" 14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/favicon_service.h" 1572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "ui/base/models/table_model.h" 16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 173345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickclass GURL; 18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass Profile; 193345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickclass SkBitmap; 2072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 2172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsennamespace ui { 22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass TableModelObserver; 2372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} 24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// CustomHomePagesTableModel is the model for the TableView showing the list 26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// of pages the user wants opened on startup. 27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 2872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenclass CustomHomePagesTableModel : public ui::TableModel { 29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch explicit CustomHomePagesTableModel(Profile* profile); 313345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick virtual ~CustomHomePagesTableModel(); 32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Sets the set of urls that this model contains. 34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void SetURLs(const std::vector<GURL>& urls); 35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Adds an entry at the specified index. 37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void Add(int index, const GURL& url); 38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Removes the entry at the specified index. 40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void Remove(int index); 41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Clears any entries and fills the list with pages currently opened in the 43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // browser. 44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void SetToCurrentlyOpenPages(); 45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Returns the set of urls this model contains. 47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::vector<GURL> GetURLs(); 48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // TableModel overrides: 503f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen virtual int RowCount() OVERRIDE; 513f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen virtual string16 GetText(int row, int column_id) OVERRIDE; 523f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen virtual SkBitmap GetIcon(int row) OVERRIDE; 533f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen virtual string16 GetTooltip(int row) OVERRIDE; 5472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual void SetObserver(ui::TableModelObserver* observer) OVERRIDE; 55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private: 57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Each item in the model is represented as an Entry. Entry stores the URL, 58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // title, and favicon of the page. 593345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick struct Entry; 60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Loads the title and favicon for the specified entry. 62ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen void LoadTitleAndFavicon(Entry* entry); 63c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 64c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Callback from history service. Updates the title of the Entry whose 65c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // |title_handle| matches |handle| and notifies the observer of the change. 66c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void OnGotTitle(HistoryService::Handle handle, 67c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool found_url, 68c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const history::URLRow* row, 69c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch history::VisitVector* visits); 70c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 71c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Callback from history service. Updates the icon of the Entry whose 72ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // |favicon_handle| matches |handle| and notifies the observer of the change. 73ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen void OnGotFavicon(FaviconService::Handle handle, 74ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen history::FaviconData favicon); 75c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 76c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Returns the entry whose |member| matches |handle| and sets |entry_index| to 77c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // the index of the entry. 78c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch Entry* GetEntryByLoadHandle(CancelableRequestProvider::Handle Entry::* member, 79c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch CancelableRequestProvider::Handle handle, 80c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int* entry_index); 81c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 82c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Returns the URL for a particular row, formatted for display to the user. 833f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen string16 FormattedURL(int row) const; 84c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 85c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Set of entries we're showing. 86c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::vector<Entry> entries_; 87c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 88c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Default icon to show when one can't be found for the URL. 893345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick SkBitmap* default_favicon_; 90c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 91c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Profile used to load titles and icons. 92c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch Profile* profile_; 93c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 9472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ui::TableModelObserver* observer_; 95c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 96c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Used in loading titles and favicons. 97c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch CancelableRequestConsumer query_consumer_; 98c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 99c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DISALLOW_COPY_AND_ASSIGN(CustomHomePagesTableModel); 100c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 101c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 102c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif // CHROME_BROWSER_CUSTOM_HOME_PAGES_TABLE_MODEL_H_ 103