• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2010 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_PAGE_INFO_MODEL_H_
6 #define CHROME_BROWSER_PAGE_INFO_MODEL_H_
7 #pragma once
8 
9 #include <vector>
10 
11 #include "base/string16.h"
12 #include "chrome/browser/history/history.h"
13 #include "content/browser/cancelable_request.h"
14 #include "content/browser/tab_contents/navigation_entry.h"
15 #include "googleurl/src/gurl.h"
16 #include "ui/gfx/image.h"
17 
18 class PrefService;
19 class Profile;
20 
21 // The model that provides the information that should be displayed in the page
22 // info dialog/bubble.
23 class PageInfoModel {
24  public:
25   class PageInfoModelObserver {
26    public:
~PageInfoModelObserver()27     virtual ~PageInfoModelObserver() {}
28 
29     virtual void ModelChanged() = 0;
30   };
31 
32   enum SectionInfoType {
33     SECTION_INFO_IDENTITY = 0,
34     SECTION_INFO_CONNECTION,
35     SECTION_INFO_FIRST_VISIT,
36   };
37 
38   // NOTE: ICON_STATE_OK ... ICON_STATE_ERROR must be listed in increasing
39   // order of severity.  Code may depend on this order.
40   enum SectionStateIcon {
41     // No icon.
42     ICON_NONE = -1,
43     // State is OK.
44     ICON_STATE_OK,
45     // For example, if state is OK but contains mixed content.
46     ICON_STATE_WARNING_MINOR,
47     // For example, if content was served over HTTP.
48     ICON_STATE_WARNING_MAJOR,
49     // For example, unverified identity over HTTPS.
50     ICON_STATE_ERROR,
51     // An information icon.
52     ICON_STATE_INFO
53   };
54 
55   struct SectionInfo {
SectionInfoSectionInfo56     SectionInfo(SectionStateIcon icon_id,
57                 const string16& headline,
58                 const string16& description,
59                 SectionInfoType type)
60         : icon_id(icon_id),
61           headline(headline),
62           description(description),
63           type(type) {
64     }
65 
66     // The overall state of the connection (error, warning, ok).
67     SectionStateIcon icon_id;
68 
69     // A single line describing the section, optional.
70     string16 headline;
71 
72     // The full description of what this section is.
73     string16 description;
74 
75     // The type of SectionInfo we are dealing with, for example: Identity,
76     // Connection, First Visit.
77     SectionInfoType type;
78   };
79 
80   PageInfoModel(Profile* profile,
81                 const GURL& url,
82                 const NavigationEntry::SSLStatus& ssl,
83                 bool show_history,
84                 PageInfoModelObserver* observer);
85   ~PageInfoModel();
86 
87   int GetSectionCount();
88   SectionInfo GetSectionInfo(int index);
89 
90   // Returns the native image type for an icon with the given id.
91   gfx::Image* GetIconImage(SectionStateIcon icon_id);
92 
93   // Callback from history service with number of visits to url.
94   void OnGotVisitCountToHost(HistoryService::Handle handle,
95                              bool found_visits,
96                              int count,
97                              base::Time first_visit);
98 
99  protected:
100   // Testing constructor. DO NOT USE.
101   PageInfoModel();
102 
103   // Shared initialization for default and testing constructor.
104   void Init();
105 
106   PageInfoModelObserver* observer_;
107 
108   std::vector<SectionInfo> sections_;
109 
110   // All possible icons that go next to the text descriptions to indicate state.
111   std::vector<gfx::Image*> icons_;
112 
113   // Used to request number of visits.
114   CancelableRequestConsumer request_consumer_;
115 
116  private:
117   DISALLOW_COPY_AND_ASSIGN(PageInfoModel);
118 };
119 
120 #endif  // CHROME_BROWSER_PAGE_INFO_MODEL_H_
121