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