summaryrefslogtreecommitdiffstats
path: root/chrome/browser/page_info_model.cc
diff options
context:
space:
mode:
authorrsesek@chromium.org <rsesek@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-10-02 19:08:44 +0000
committerrsesek@chromium.org <rsesek@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-10-02 19:08:44 +0000
commit7fef9717afc4570883a9207fb8ea70f295685488 (patch)
tree232d97320ae035c7cad778335e6b32c1ce1907db /chrome/browser/page_info_model.cc
parent4c7003dc599960bb569dd586e3065f755879deb4 (diff)
downloadchromium_src-7fef9717afc4570883a9207fb8ea70f295685488.zip
chromium_src-7fef9717afc4570883a9207fb8ea70f295685488.tar.gz
chromium_src-7fef9717afc4570883a9207fb8ea70f295685488.tar.bz2
Refactor the code for loading icons into the PageInfoModel.
This code is basically duplicated twice on each platform. This consolidates all that into PageInfoModel::GetIconImage() and renames the SectionInfo.state to icon_id. BUG=none TEST=Page info windows and bubbles work as they did before across all platforms. Review URL: http://codereview.chromium.org/3560004 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@61308 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/page_info_model.cc')
-rw-r--r--chrome/browser/page_info_model.cc90
1 files changed, 73 insertions, 17 deletions
diff --git a/chrome/browser/page_info_model.cc b/chrome/browser/page_info_model.cc
index 6fc7443..2b2e8da 100644
--- a/chrome/browser/page_info_model.cc
+++ b/chrome/browser/page_info_model.cc
@@ -7,6 +7,7 @@
#include <string>
#include "app/l10n_util.h"
+#include "app/resource_bundle.h"
#include "base/command_line.h"
#include "base/i18n/time_formatting.h"
#include "base/string_number_conversions.h"
@@ -18,18 +19,25 @@
#include "chrome/common/chrome_switches.h"
#include "chrome/common/pref_names.h"
#include "grit/generated_resources.h"
+#include "grit/theme_resources.h"
#include "net/base/cert_status_flags.h"
#include "net/base/ssl_connection_status_flags.h"
#include "net/base/ssl_cipher_suite_names.h"
#include "net/base/x509_certificate.h"
+#if defined(OS_MACOSX)
+#include "base/mac_util.h"
+#endif
+
PageInfoModel::PageInfoModel(Profile* profile,
const GURL& url,
const NavigationEntry::SSLStatus& ssl,
bool show_history,
PageInfoModelObserver* observer)
: observer_(observer) {
- SectionInfoState state = SECTION_STATE_OK;
+ Init();
+
+ SectionStateIcon icon_id = ICON_STATE_OK;
string16 headline;
string16 description;
scoped_refptr<net::X509Certificate> cert;
@@ -74,7 +82,7 @@ PageInfoModel::PageInfoModel(Profile* profile,
} else {
NOTREACHED() << "Need to specify string for this warning";
}
- state = SECTION_STATE_WARNING_MINOR;
+ icon_id = ICON_STATE_WARNING_MINOR;
} else if ((ssl.cert_status() & net::CERT_STATUS_IS_EV) != 0) {
// EV HTTPS page.
DCHECK(!cert->subject().organization_names.empty());
@@ -131,11 +139,11 @@ PageInfoModel::PageInfoModel(Profile* profile,
// HTTP or HTTPS with errors (not warnings).
description.assign(l10n_util::GetStringUTF16(
IDS_PAGE_INFO_SECURITY_TAB_INSECURE_IDENTITY));
- state = ssl.security_style() == SECURITY_STYLE_UNAUTHENTICATED ?
- SECTION_STATE_WARNING_MAJOR : SECTION_STATE_ERROR;
+ icon_id = ssl.security_style() == SECURITY_STYLE_UNAUTHENTICATED ?
+ ICON_STATE_WARNING_MAJOR : ICON_STATE_ERROR;
}
sections_.push_back(SectionInfo(
- state,
+ icon_id,
l10n_util::GetStringUTF16(IDS_PAGE_INFO_SECURITY_TAB_IDENTITY_TITLE),
headline,
description,
@@ -145,20 +153,20 @@ PageInfoModel::PageInfoModel(Profile* profile,
// We consider anything less than 80 bits encryption to be weak encryption.
// TODO(wtc): Bug 1198735: report mixed/unsafe content for unencrypted and
// weakly encrypted connections.
- state = SECTION_STATE_OK;
+ icon_id = ICON_STATE_OK;
headline.clear();
description.clear();
if (ssl.security_bits() < 0) {
// Security strength is unknown. Say nothing.
- state = SECTION_STATE_ERROR;
+ icon_id = ICON_STATE_ERROR;
} else if (ssl.security_bits() == 0) {
- state = ssl.security_style() == SECURITY_STYLE_UNAUTHENTICATED ?
- SECTION_STATE_WARNING_MAJOR : SECTION_STATE_ERROR;
+ icon_id = ssl.security_style() == SECURITY_STYLE_UNAUTHENTICATED ?
+ ICON_STATE_WARNING_MAJOR : ICON_STATE_ERROR;
description.assign(l10n_util::GetStringFUTF16(
IDS_PAGE_INFO_SECURITY_TAB_NOT_ENCRYPTED_CONNECTION_TEXT,
subject_name));
} else if (ssl.security_bits() < 80) {
- state = SECTION_STATE_ERROR;
+ icon_id = ICON_STATE_ERROR;
description.assign(l10n_util::GetStringFUTF16(
IDS_PAGE_INFO_SECURITY_TAB_WEAK_ENCRYPTION_CONNECTION_TEXT,
subject_name));
@@ -176,9 +184,9 @@ PageInfoModel::PageInfoModel(Profile* profile,
const CommandLine* command_line(CommandLine::ForCurrentProcess());
if (command_line->HasSwitch(switches::kEnableNewPageInfoBubble) &&
!ssl.ran_insecure_content()) {
- state = SECTION_STATE_WARNING_MINOR;
+ icon_id = ICON_STATE_WARNING_MINOR;
} else {
- state = SECTION_STATE_ERROR;
+ icon_id = ICON_STATE_ERROR;
}
description.assign(l10n_util::GetStringFUTF16(
IDS_PAGE_INFO_SECURITY_TAB_ENCRYPTED_SENTENCE_LINK,
@@ -221,7 +229,7 @@ PageInfoModel::PageInfoModel(Profile* profile,
if (did_fallback) {
// For now, only SSLv3 fallback will trigger a warning icon.
- state = SECTION_STATE_ERROR;
+ icon_id = ICON_STATE_ERROR;
description += ASCIIToUTF16("\n\n");
description += l10n_util::GetStringUTF16(
IDS_PAGE_INFO_SECURITY_TAB_FALLBACK_MESSAGE);
@@ -235,7 +243,7 @@ PageInfoModel::PageInfoModel(Profile* profile,
if (!description.empty()) {
sections_.push_back(SectionInfo(
- state,
+ icon_id,
l10n_util::GetStringUTF16(IDS_PAGE_INFO_SECURITY_TAB_CONNECTION_TITLE),
headline,
description,
@@ -254,6 +262,13 @@ PageInfoModel::PageInfoModel(Profile* profile,
}
PageInfoModel::~PageInfoModel() {
+#if defined(OS_MACOSX)
+ // Release the NSImages.
+ for (std::vector<ImageType>::iterator it = icons_.begin();
+ it != icons_.end(); ++it) {
+ mac_util::NSObjectRelease(*it);
+ }
+#endif
}
int PageInfoModel::GetSectionCount() {
@@ -265,6 +280,19 @@ PageInfoModel::SectionInfo PageInfoModel::GetSectionInfo(int index) {
return sections_[index];
}
+PageInfoModel::ImageType PageInfoModel::GetIconImage(SectionStateIcon icon_id) {
+ if (icon_id == ICON_NONE)
+ return NULL;
+ // TODO(rsesek): Remove once the window is replaced with the bubble.
+ const CommandLine* command_line(CommandLine::ForCurrentProcess());
+ if (!command_line->HasSwitch(switches::kEnableNewPageInfoBubble) &&
+ icon_id != ICON_STATE_OK) {
+ return icons_[ICON_STATE_WARNING_MAJOR];
+ }
+ // The buble uses new, various icons.
+ return icons_[icon_id];
+}
+
void PageInfoModel::OnGotVisitCountToHost(HistoryService::Handle handle,
bool found_visits,
int count,
@@ -284,12 +312,13 @@ void PageInfoModel::OnGotVisitCountToHost(HistoryService::Handle handle,
// We only show the Site Information heading for the new dialogs.
string16 title;
const CommandLine* command_line(CommandLine::ForCurrentProcess());
- if (command_line->HasSwitch(switches::kEnableNewPageInfoBubble))
+ bool as_bubble = command_line->HasSwitch(switches::kEnableNewPageInfoBubble);
+ if (as_bubble)
title = l10n_util::GetStringUTF16(IDS_PAGE_INFO_SITE_INFO_TITLE);
if (!visited_before_today) {
sections_.push_back(SectionInfo(
- SECTION_STATE_ERROR,
+ ICON_STATE_WARNING_MAJOR,
l10n_util::GetStringUTF16(
IDS_PAGE_INFO_SECURITY_TAB_PERSONAL_HISTORY_TITLE),
title,
@@ -298,7 +327,8 @@ void PageInfoModel::OnGotVisitCountToHost(HistoryService::Handle handle,
SECTION_INFO_FIRST_VISIT));
} else {
sections_.push_back(SectionInfo(
- SECTION_STATE_OK,
+ // TODO(rsesek): Remove once the window is replaced with the bubble.
+ as_bubble ? ICON_STATE_INFO : ICON_STATE_OK,
l10n_util::GetStringUTF16(
IDS_PAGE_INFO_SECURITY_TAB_PERSONAL_HISTORY_TITLE),
title,
@@ -316,4 +346,30 @@ void PageInfoModel::RegisterPrefs(PrefService* prefs) {
}
PageInfoModel::PageInfoModel() {
+ Init();
+}
+
+void PageInfoModel::Init() {
+ // Loads the icons into the vector. The order must match the SectionStateIcon
+ // enum.
+ icons_.push_back(GetBitmapNamed(IDR_PAGEINFO_GOOD));
+ icons_.push_back(GetBitmapNamed(IDR_PAGEINFO_WARNING_MINOR));
+ icons_.push_back(GetBitmapNamed(IDR_PAGEINFO_WARNING_MAJOR));
+ icons_.push_back(GetBitmapNamed(IDR_PAGEINFO_BAD));
+ icons_.push_back(GetBitmapNamed(IDR_PAGEINFO_INFO));
+}
+
+PageInfoModel::ImageType PageInfoModel::GetBitmapNamed(int resource_id) {
+ ResourceBundle& rb = ResourceBundle::GetSharedInstance();
+#if defined(OS_MACOSX)
+ // Unlike other platforms, the Mac ResourceBundle does not keep a shared image
+ // cache. These are released in the dtor.
+ ImageType image = rb.GetNSImageNamed(resource_id);
+ mac_util::NSObjectRetain(image);
+ return image;
+#elif defined(USE_X11) && !defined(TOOLKIT_VIEWS)
+ return rb.GetPixbufNamed(resource_id);
+#else
+ return rb.GetBitmapNamed(resource_id);
+#endif
}