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_POSSIBLE_URL_MODEL_H_
6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define CHROME_BROWSER_POSSIBLE_URL_MODEL_H_
73345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#pragma once
8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
93345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include <map>
10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include <string>
11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include <vector>
12c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
133f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen#include "base/compiler_specific.h"
14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/history/history.h"
1572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "ui/base/models/table_model.h"
163345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
173345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickclass SkBitmap;
18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch////////////////////////////////////////////////////////////////////////////////
20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch//
21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// A table model to represent the list of URLs that the user might want to
22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// bookmark.
23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch//
24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch////////////////////////////////////////////////////////////////////////////////
25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
2672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenclass PossibleURLModel : public ui::TableModel {
27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public:
28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  PossibleURLModel();
293345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  virtual ~PossibleURLModel();
30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void Reload(Profile *profile);
32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void OnHistoryQueryComplete(HistoryService::Handle h,
34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                              history::QueryResults* result);
35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  const GURL& GetURL(int row);
37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  const std::wstring& GetTitle(int row);
38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
39ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  virtual void OnFaviconAvailable(FaviconService::Handle h,
40ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen                                  history::FaviconData favicon);
41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
423f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen  // TableModel overrides
433f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen  virtual int RowCount() OVERRIDE;
443f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen  virtual string16 GetText(int row, int col_id) OVERRIDE;
453f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen  virtual SkBitmap GetIcon(int row) OVERRIDE;
463f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen  virtual int CompareValues(int row1, int row2, int column_id) OVERRIDE;
4772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  virtual void SetObserver(ui::TableModelObserver* observer) OVERRIDE;
48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private:
50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // The current profile.
51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  Profile* profile_;
52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Our observer.
5472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  ui::TableModelObserver* observer_;
55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Our consumer for favicon requests.
57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  CancelableRequestConsumerT<size_t, NULL> consumer_;
58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
59c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // The results we're showing.
603345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  struct Result;
61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  std::vector<Result> results_;
62c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
63c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Map Result::index -> Favicon.
64ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  typedef std::map<size_t, SkBitmap> FaviconMap;
65ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  FaviconMap favicon_map_;
66c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
67c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  DISALLOW_COPY_AND_ASSIGN(PossibleURLModel);
68c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch};
69c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
70c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // CHROME_BROWSER_POSSIBLE_URL_MODEL_H_
71