Home | History | Annotate | Download | only in browser
      1 // Copyright (c) 2012 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 
      8 #include <string>
      9 #include <vector>
     10 
     11 #include "base/compiler_specific.h"
     12 #include "base/task/cancelable_task_tracker.h"
     13 #include "components/history/core/browser/history_types.h"
     14 #include "ui/base/models/table_model.h"
     15 
     16 class GURL;
     17 class Profile;
     18 class HistoryService;
     19 
     20 namespace history {
     21 class URLRow;
     22 }
     23 
     24 namespace ui {
     25 class TableModelObserver;
     26 }
     27 
     28 // CustomHomePagesTableModel is the model for the TableView showing the list
     29 // of pages the user wants opened on startup.
     30 
     31 class CustomHomePagesTableModel : public ui::TableModel {
     32  public:
     33   explicit CustomHomePagesTableModel(Profile* profile);
     34   virtual ~CustomHomePagesTableModel();
     35 
     36   // Sets the set of urls that this model contains.
     37   void SetURLs(const std::vector<GURL>& urls);
     38 
     39   // Collect all entries indexed by |index_list|, and moves them to be right
     40   // before the element addressed by |insert_before|. Used by Drag&Drop.
     41   // Expects |index_list| to be ordered ascending.
     42   void MoveURLs(int insert_before, const std::vector<int>& index_list);
     43 
     44   // Adds an entry at the specified index.
     45   void Add(int index, const GURL& url);
     46 
     47   // Removes the entry at the specified index.
     48   void Remove(int index);
     49 
     50   // Clears any entries and fills the list with pages currently opened in the
     51   // browser.
     52   void SetToCurrentlyOpenPages();
     53 
     54   // Returns the set of urls this model contains.
     55   std::vector<GURL> GetURLs();
     56 
     57   // TableModel overrides:
     58   virtual int RowCount() OVERRIDE;
     59   virtual base::string16 GetText(int row, int column_id) OVERRIDE;
     60   virtual base::string16 GetTooltip(int row) OVERRIDE;
     61   virtual void SetObserver(ui::TableModelObserver* observer) OVERRIDE;
     62 
     63  private:
     64   // Each item in the model is represented as an Entry. Entry stores the URL
     65   // and title of the page.
     66   struct Entry;
     67 
     68   // Loads the title for the specified entry.
     69   void LoadTitle(Entry* entry);
     70 
     71   // Callback from history service. Updates the title of the Entry whose
     72   // |url| matches |entry_url| and notifies the observer of the change.
     73   void OnGotTitle(const GURL& entry_url,
     74                   bool found_url,
     75                   const history::URLRow& row,
     76                   const history::VisitVector& visits);
     77 
     78   // Returns the URL for a particular row, formatted for display to the user.
     79   base::string16 FormattedURL(int row) const;
     80 
     81   // Set of entries we're showing.
     82   std::vector<Entry> entries_;
     83 
     84   // Profile used to load titles.
     85   Profile* profile_;
     86 
     87   ui::TableModelObserver* observer_;
     88 
     89   // Used in loading titles.
     90   base::CancelableTaskTracker task_tracker_;
     91 
     92   DISALLOW_COPY_AND_ASSIGN(CustomHomePagesTableModel);
     93 };
     94 
     95 #endif  // CHROME_BROWSER_CUSTOM_HOME_PAGES_TABLE_MODEL_H_
     96