| 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");
|
| }
|
| }
|
| }
|
|
|