Index: chrome/browser/toolbar_model.cc |
=================================================================== |
--- chrome/browser/toolbar_model.cc (revision 42491) |
+++ chrome/browser/toolbar_model.cc (working copy) |
@@ -16,6 +16,7 @@ |
#include "chrome/common/pref_names.h" |
#include "chrome/common/url_constants.h" |
#include "grit/generated_resources.h" |
+#include "grit/theme_resources.h" |
#include "net/base/cert_status_flags.h" |
#include "net/base/net_util.h" |
@@ -37,7 +38,6 @@ |
languages = navigation_controller->profile()->GetPrefs()->GetString( |
prefs::kAcceptLanguages); |
NavigationEntry* entry = navigation_controller->GetActiveEntry(); |
- // We may not have a navigation entry yet |
if (!navigation_controller->tab_contents()->ShouldDisplayURL()) { |
// Explicitly hide the URL for this tab. |
url = GURL(); |
@@ -51,138 +51,113 @@ |
ToolbarModel::SecurityLevel ToolbarModel::GetSecurityLevel() const { |
if (input_in_progress_) // When editing, assume no security style. |
- return ToolbarModel::NORMAL; |
+ return NONE; |
NavigationController* navigation_controller = GetNavigationController(); |
if (!navigation_controller) // We might not have a controller on init. |
- return ToolbarModel::NORMAL; |
+ return NONE; |
NavigationEntry* entry = navigation_controller->GetActiveEntry(); |
if (!entry) |
- return ToolbarModel::NORMAL; |
+ return NONE; |
- switch (entry->ssl().security_style()) { |
- case SECURITY_STYLE_AUTHENTICATED: |
- if (entry->ssl().has_mixed_content()) |
- return ToolbarModel::NORMAL; |
- return ToolbarModel::SECURE; |
- case SECURITY_STYLE_AUTHENTICATION_BROKEN: |
- return ToolbarModel::INSECURE; |
+ const NavigationEntry::SSLStatus& ssl = entry->ssl(); |
+ switch (ssl.security_style()) { |
case SECURITY_STYLE_UNKNOWN: |
case SECURITY_STYLE_UNAUTHENTICATED: |
- return ToolbarModel::NORMAL; |
- default: |
- NOTREACHED(); |
- return ToolbarModel::NORMAL; |
- } |
-} |
+ return NONE; |
-ToolbarModel::SecurityLevel ToolbarModel::GetSchemeSecurityLevel() const { |
- // For now, in sync with the security level. |
- return GetSecurityLevel(); |
-} |
+ case SECURITY_STYLE_AUTHENTICATION_BROKEN: |
+ return SECURITY_ERROR; |
-ToolbarModel::Icon ToolbarModel::GetIcon() const { |
- if (input_in_progress_) |
- return ToolbarModel::NO_ICON; |
- |
- NavigationController* navigation_controller = GetNavigationController(); |
- if (!navigation_controller) // We might not have a controller on init. |
- return ToolbarModel::NO_ICON; |
- |
- NavigationEntry* entry = navigation_controller->GetActiveEntry(); |
- if (!entry) |
- return ToolbarModel::NO_ICON; |
- |
- const NavigationEntry::SSLStatus& ssl = entry->ssl(); |
- switch (ssl.security_style()) { |
case SECURITY_STYLE_AUTHENTICATED: |
if (ssl.has_mixed_content()) |
- return ToolbarModel::WARNING_ICON; |
- return ToolbarModel::LOCK_ICON; |
- case SECURITY_STYLE_AUTHENTICATION_BROKEN: |
- return ToolbarModel::WARNING_ICON; |
- case SECURITY_STYLE_UNKNOWN: |
- case SECURITY_STYLE_UNAUTHENTICATED: |
- return ToolbarModel::NO_ICON; |
+ return SECURITY_WARNING; |
+ if ((ssl.cert_status() & net::CERT_STATUS_IS_EV) && |
+ CertStore::GetSharedInstance()->RetrieveCert(ssl.cert_id(), NULL)) |
+ return EV_SECURE; |
+ return SECURE; |
+ |
default: |
NOTREACHED(); |
- return ToolbarModel::NO_ICON; |
+ return NONE; |
} |
} |
+int ToolbarModel::GetSecurityIcon() const { |
+ static int icon_ids[NUM_SECURITY_LEVELS] = { |
+ 0, |
+ IDR_EV_SECURE, |
+ IDR_SECURE, |
+ IDR_SECURITY_WARNING, |
+ IDR_SECURITY_ERROR, |
+ }; |
+ DCHECK(arraysize(icon_ids) == NUM_SECURITY_LEVELS); |
+ return icon_ids[GetSecurityLevel()]; |
+} |
+ |
void ToolbarModel::GetIconHoverText(std::wstring* text) const { |
DCHECK(text); |
+ text->clear(); |
- NavigationController* navigation_controller = GetNavigationController(); |
- // We don't expect to be called during initialization, so the controller |
- // should never be NULL. |
- DCHECK(navigation_controller); |
- NavigationEntry* entry = navigation_controller->GetActiveEntry(); |
- DCHECK(entry); |
+ switch (GetSecurityLevel()) { |
+ case NONE: |
+ // There's no security icon, and thus no hover text. |
+ return; |
- |
- const NavigationEntry::SSLStatus& ssl = entry->ssl(); |
- switch (ssl.security_style()) { |
- case SECURITY_STYLE_AUTHENTICATED: { |
- if (ssl.has_mixed_content()) { |
- SSLErrorInfo error_info = SSLErrorInfo::CreateError( |
- SSLErrorInfo::MIXED_CONTENTS, NULL, GURL()); |
- text->assign(error_info.short_description()); |
- } else { |
- DCHECK(entry->url().has_host()); |
- text->assign(l10n_util::GetStringF(IDS_SECURE_CONNECTION, |
- UTF8ToWide(entry->url().host()))); |
- } |
- break; |
+ case EV_SECURE: |
+ case SECURE: { |
+ // Note: Navigation controller and active entry are guaranteed non-NULL or |
+ // the security level would be NONE. |
+ GURL url(GetNavigationController()->GetActiveEntry()->url()); |
+ DCHECK(url.has_host()); |
+ *text = l10n_util::GetStringF(IDS_SECURE_CONNECTION, |
+ UTF8ToWide(url.host())); |
+ return; |
} |
- case SECURITY_STYLE_AUTHENTICATION_BROKEN: { |
- CreateErrorText(entry, text); |
- if (text->empty()) { |
- // If the authentication is broken, we should always have at least one |
- // error. |
- NOTREACHED(); |
- return; |
- } |
- break; |
- } |
+ |
+ case SECURITY_WARNING: |
+ *text = SSLErrorInfo::CreateError(SSLErrorInfo::MIXED_CONTENTS, NULL, |
+ GURL()).short_description(); |
+ return; |
+ |
+ case SECURITY_ERROR: |
+ // See note above. |
+ CreateErrorText(GetNavigationController()->GetActiveEntry(), text); |
+ // If the authentication is broken, we should always have at least one |
+ // error. |
+ DCHECK(!text->empty()); |
+ return; |
+ |
default: |
- // Don't show the info bubble in any other cases. |
- text->clear(); |
- break; |
+ NOTREACHED(); |
+ return; |
} |
} |
-ToolbarModel::InfoTextType ToolbarModel::GetInfoText( |
- std::wstring* text, |
- std::wstring* tooltip) const { |
- DCHECK(text && tooltip); |
- text->clear(); |
- tooltip->clear(); |
+std::wstring ToolbarModel::GetSecurityInfoText() const { |
+ switch (GetSecurityLevel()) { |
+ case NONE: |
+ case SECURE: |
+ case SECURITY_WARNING: |
+ return std::wstring(); |
- if (input_in_progress_) |
- return INFO_NO_INFO; |
+ case EV_SECURE: { |
+ scoped_refptr<net::X509Certificate> cert; |
+ // See note in GetIconHoverText(). |
+ CertStore::GetSharedInstance()->RetrieveCert( |
+ GetNavigationController()->GetActiveEntry()->ssl().cert_id(), |
+ &cert); |
+ return SSLManager::GetEVCertName(*cert); |
+ } |
- NavigationController* navigation_controller = GetNavigationController(); |
- if (!navigation_controller) // We might not have a controller on init. |
- return INFO_NO_INFO; |
+ case SECURITY_ERROR: |
+ return l10n_util::GetString(IDS_SECURITY_BROKEN); |
- NavigationEntry* entry = navigation_controller->GetActiveEntry(); |
- const NavigationEntry::SSLStatus& ssl = entry->ssl(); |
- if (!entry || ssl.has_mixed_content() || |
- net::IsCertStatusError(ssl.cert_status()) || |
- ((ssl.cert_status() & net::CERT_STATUS_IS_EV) == 0)) |
- return INFO_NO_INFO; |
- |
- scoped_refptr<net::X509Certificate> cert; |
- CertStore::GetSharedInstance()->RetrieveCert(ssl.cert_id(), &cert); |
- if (!cert.get()) { |
- NOTREACHED(); |
- return INFO_NO_INFO; |
+ default: |
+ NOTREACHED(); |
+ return std::wstring(); |
} |
- |
- SSLManager::GetEVCertNames(*cert, text, tooltip); |
- return INFO_EV_TEXT; |
} |
NavigationController* ToolbarModel::GetNavigationController() const { |
@@ -197,10 +172,8 @@ |
std::wstring* text) const { |
const NavigationEntry::SSLStatus& ssl = entry->ssl(); |
std::vector<SSLErrorInfo> errors; |
- SSLErrorInfo::GetErrorsForCertStatus(ssl.cert_id(), |
- ssl.cert_status(), |
- entry->url(), |
- &errors); |
+ SSLErrorInfo::GetErrorsForCertStatus(ssl.cert_id(), ssl.cert_status(), |
+ entry->url(), &errors); |
if (ssl.has_mixed_content()) { |
errors.push_back(SSLErrorInfo::CreateError(SSLErrorInfo::MIXED_CONTENTS, |
NULL, GURL())); |
@@ -210,19 +183,16 @@ |
NULL, GURL())); |
} |
- int error_count = static_cast<int>(errors.size()); |
- if (error_count == 0) { |
- text->assign(L""); |
- } else if (error_count == 1) { |
- text->assign(errors[0].short_description()); |
+ if (errors.empty()) { |
+ text->clear(); |
+ } else if (errors.size() == 1) { |
+ *text = errors[0].short_description(); |
} else { |
// Multiple errors. |
- text->assign(l10n_util::GetString(IDS_SEVERAL_SSL_ERRORS)); |
- text->append(L"\n"); |
- for (int i = 0; i < error_count; ++i) { |
+ *text = l10n_util::GetString(IDS_SEVERAL_SSL_ERRORS); |
+ for (size_t i = 0; i < errors.size(); ++i) { |
+ text->append(L"\n"); |
text->append(errors[i].short_description()); |
- if (i != error_count - 1) |
- text->append(L"\n"); |
} |
} |
} |