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 "chrome/browser/history/history_service.h"
     13 #include "ui/base/models/table_model.h"
     14 
     15 class GURL;
     16 class Profile;
     17 
     18 namespace ui {
     19 class TableModelObserver;
     20 }
     21 
     22 // CustomHomePagesTableModel is the model for the TableView showing the list
     23 // of pages the user wants opened on startup.
     24 
     25 class CustomHomePagesTableModel : public ui::TableModel {
     26  public:
     27   explicit CustomHomePagesTableModel(Profile* profile);
     28   virtual ~CustomHomePagesTableModel();
     29 
     30   // Sets the set of urls that this model contains.
     31   void SetURLs(const std::vector<GURL>& urls);
     32 
     33   // Collect all entries indexed by |index_list|, and moves them to be right
     34   // before the element addressed by |insert_before|. Used by Drag&Drop.
     35   // Expects |index_list| to be ordered ascending.
     36   void MoveURLs(int insert_before, const std::vector<int>& index_list);
     37 
     38   // Adds an entry at the specified index.
     39   void Add(int index, const GURL& url);
     40 
     41   // Removes the entry at the specified index.
     42   void Remove(int index);
     43 
     44   // Clears any entries and fills the list with pages currently opened in the
     45   // browser.
     46   void SetToCurrentlyOpenPages();
     47 
     48   // Returns the set of urls this model contains.
     49   std::vector<GURL> GetURLs();
     50 
     51   // TableModel overrides:
     52   virtual int RowCount() OVERRIDE;
     53   virtual base::string16 GetText(int row, int column_id) OVERRIDE;
     54   virtual base::string16 GetTooltip(int row) OVERRIDE;
     55   virtual void SetObserver(ui::TableModelObserver* observer) OVERRIDE;
     56 
     57  private:
     58   // Each item in the model is represented as an Entry. Entry stores the URL
     59   // and title of the page.
     60   struct Entry;
     61 
     62   // Loads the title for the specified entry.
     63   void LoadTitle(Entry* entry);
     64 
     65   // Callback from history service. Updates the title of the Entry whose
     66   // |title_handle| matches |handle| and notifies the observer of the change.
     67   void OnGotTitle(HistoryService::Handle handle,
     68                   bool found_url,
     69                   const history::URLRow* row,
     70                   history::VisitVector* visits);
     71 
     72   // Returns the entry whose |member| matches |handle| and sets |entry_index| to
     73   // the index of the entry.
     74   Entry* GetEntryByLoadHandle(CancelableRequestProvider::Handle Entry::* member,
     75                               CancelableRequestProvider::Handle handle,
     76                               int* entry_index);
     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   CancelableRequestConsumer history_query_consumer_;
     91 
     92   DISALLOW_COPY_AND_ASSIGN(CustomHomePagesTableModel);
     93 };
     94 
     95 #endif  // CHROME_BROWSER_CUSTOM_HOME_PAGES_TABLE_MODEL_H_
     96