Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1132)

Unified Diff: chrome/browser/ui/browser_browsertest.cc

Issue 1986953002: Move SecurityStyleChanged logic and tests to chrome/browser/ssl (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: minor cleanup Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/ui/browser.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/ui/browser_browsertest.cc
diff --git a/chrome/browser/ui/browser_browsertest.cc b/chrome/browser/ui/browser_browsertest.cc
index 89237794d0d0f55784e1a51729c8bc9eb97e6210..d7a2b9ada149a67c59c06f2709b934aa910bcfc1 100644
--- a/chrome/browser/ui/browser_browsertest.cc
+++ b/chrome/browser/ui/browser_browsertest.cc
@@ -89,8 +89,6 @@
#include "content/public/browser/render_widget_host.h"
#include "content/public/browser/render_widget_host_view.h"
#include "content/public/browser/resource_context.h"
-#include "content/public/browser/security_style_explanation.h"
-#include "content/public/browser/security_style_explanations.h"
#include "content/public/browser/web_contents.h"
#include "content/public/browser/web_contents_observer.h"
#include "content/public/common/frame_navigate_params.h"
@@ -105,19 +103,10 @@
#include "extensions/common/constants.h"
#include "extensions/common/extension.h"
#include "extensions/common/extension_set.h"
-#include "net/base/net_errors.h"
-#include "net/base/test_data_directory.h"
-#include "net/cert/x509_certificate.h"
#include "net/dns/mock_host_resolver.h"
-#include "net/ssl/ssl_cipher_suite_names.h"
-#include "net/ssl/ssl_connection_status_flags.h"
-#include "net/test/cert_test_util.h"
#include "net/test/embedded_test_server/embedded_test_server.h"
#include "net/test/embedded_test_server/request_handler_util.h"
#include "net/test/spawned_test_server/spawned_test_server.h"
-#include "net/test/url_request/url_request_mock_http_job.h"
-#include "net/url_request/url_request_filter.h"
-#include "net/url_request/url_request_test_util.h"
#include "ui/base/l10n/l10n_util.h"
#include "ui/base/page_transition_types.h"
@@ -147,8 +136,6 @@ using extensions::Extension;
namespace {
-enum CertificateStatus { VALID_CERTIFICATE, INVALID_CERTIFICATE };
-
const char* kBeforeUnloadHTML =
"<html><head><title>beforeunload</title></head><body>"
"<script>window.onbeforeunload=function(e){return 'foo'}</script>"
@@ -344,124 +331,6 @@ class RenderViewSizeObserver : public content::WebContentsObserver {
DISALLOW_COPY_AND_ASSIGN(RenderViewSizeObserver);
};
-void ProceedThroughInterstitial(content::WebContents* web_contents) {
- InterstitialPage* interstitial_page = web_contents->GetInterstitialPage();
- ASSERT_TRUE(interstitial_page);
-
- content::WindowedNotificationObserver observer(
- content::NOTIFICATION_LOAD_STOP,
- content::Source<NavigationController>(&web_contents->GetController()));
- interstitial_page->Proceed();
- observer.Wait();
-}
-
-void GetFilePathWithHostAndPortReplacement(
- const std::string& original_file_path,
- const net::HostPortPair& host_port_pair,
- std::string* replacement_path) {
- base::StringPairs replacement_text;
- replacement_text.push_back(
- make_pair("REPLACE_WITH_HOST_AND_PORT", host_port_pair.ToString()));
- net::test_server::GetFilePathWithReplacements(
- original_file_path, replacement_text, replacement_path);
-}
-
-// A WebContentsObserver useful for testing the SecurityStyleChanged()
-// method: it keeps track of the latest security style and explanation
-// that was fired.
-class SecurityStyleTestObserver : public WebContentsObserver {
- public:
- explicit SecurityStyleTestObserver(content::WebContents* web_contents)
- : content::WebContentsObserver(web_contents),
- latest_security_style_(content::SECURITY_STYLE_UNKNOWN) {}
- ~SecurityStyleTestObserver() override {}
-
- void SecurityStyleChanged(content::SecurityStyle security_style,
- const content::SecurityStyleExplanations&
- security_style_explanations) override {
- latest_security_style_ = security_style;
- latest_explanations_ = security_style_explanations;
- }
-
- content::SecurityStyle latest_security_style() const {
- return latest_security_style_;
- }
-
- const content::SecurityStyleExplanations& latest_explanations() const {
- return latest_explanations_;
- }
-
- void ClearLatestSecurityStyleAndExplanations() {
- latest_security_style_ = content::SECURITY_STYLE_UNKNOWN;
- latest_explanations_ = content::SecurityStyleExplanations();
- }
-
- private:
- content::SecurityStyle latest_security_style_;
- content::SecurityStyleExplanations latest_explanations_;
-
- DISALLOW_COPY_AND_ASSIGN(SecurityStyleTestObserver);
-};
-
-// Check that |observer|'s latest event was for an expired certificate
-// and that it saw the proper SecurityStyle and explanations.
-void CheckBrokenSecurityStyle(const SecurityStyleTestObserver& observer,
- int error,
- Browser* browser) {
- EXPECT_EQ(content::SECURITY_STYLE_AUTHENTICATION_BROKEN,
- observer.latest_security_style());
-
- const content::SecurityStyleExplanations& expired_explanation =
- observer.latest_explanations();
- EXPECT_EQ(0u, expired_explanation.unauthenticated_explanations.size());
- ASSERT_EQ(1u, expired_explanation.broken_explanations.size());
-
- // Check that the summary and description are as expected.
- EXPECT_EQ(l10n_util::GetStringUTF8(IDS_CERTIFICATE_CHAIN_ERROR),
- expired_explanation.broken_explanations[0].summary);
-
- base::string16 error_string = base::UTF8ToUTF16(net::ErrorToString(error));
- EXPECT_EQ(l10n_util::GetStringFUTF8(
- IDS_CERTIFICATE_CHAIN_ERROR_DESCRIPTION_FORMAT, error_string),
- expired_explanation.broken_explanations[0].description);
-
- // Check the associated certificate id.
- int cert_id = browser->tab_strip_model()->GetActiveWebContents()->
- GetController().GetActiveEntry()->GetSSL().cert_id;
- EXPECT_EQ(cert_id,
- expired_explanation.broken_explanations[0].cert_id);
-}
-
-// Checks that the given |secure_explanations| contains appropriate
-// an appropriate explanation if the certificate status is valid.
-void CheckSecureExplanations(
- const std::vector<content::SecurityStyleExplanation>& secure_explanations,
- CertificateStatus cert_status,
- Browser* browser) {
- ASSERT_EQ(cert_status == VALID_CERTIFICATE ? 2u : 1u,
- secure_explanations.size());
- if (cert_status == VALID_CERTIFICATE) {
- EXPECT_EQ(l10n_util::GetStringUTF8(IDS_VALID_SERVER_CERTIFICATE),
- secure_explanations[0].summary);
- EXPECT_EQ(
- l10n_util::GetStringUTF8(IDS_VALID_SERVER_CERTIFICATE_DESCRIPTION),
- secure_explanations[0].description);
- int cert_id = browser->tab_strip_model()
- ->GetActiveWebContents()
- ->GetController()
- .GetActiveEntry()
- ->GetSSL()
- .cert_id;
- EXPECT_EQ(cert_id, secure_explanations[0].cert_id);
- }
-
- EXPECT_EQ(l10n_util::GetStringUTF8(IDS_SECURE_PROTOCOL_AND_CIPHERSUITE),
- secure_explanations.back().summary);
- EXPECT_EQ(
- l10n_util::GetStringUTF8(IDS_SECURE_PROTOCOL_AND_CIPHERSUITE_DESCRIPTION),
- secure_explanations.back().description);
-}
-
} // namespace
class BrowserTest : public ExtensionBrowserTest {
@@ -2827,339 +2696,6 @@ IN_PROC_BROWSER_TEST_F(BrowserTest, CanDuplicateTab) {
EXPECT_TRUE(chrome::CanDuplicateTabAt(browser(), 1));
}
-// Tests that the WebContentsObserver::SecurityStyleChanged event fires
-// with the current style on HTTP, broken HTTPS, and valid HTTPS pages.
-IN_PROC_BROWSER_TEST_F(BrowserTest, SecurityStyleChangedObserver) {
- net::EmbeddedTestServer https_test_server(
- net::EmbeddedTestServer::TYPE_HTTPS);
- https_test_server.ServeFilesFromSourceDirectory(base::FilePath(kDocRoot));
- ASSERT_TRUE(https_test_server.Start());
-
- net::EmbeddedTestServer https_test_server_expired(
- net::EmbeddedTestServer::TYPE_HTTPS);
- https_test_server_expired.SetSSLConfig(net::EmbeddedTestServer::CERT_EXPIRED);
- https_test_server_expired.ServeFilesFromSourceDirectory(
- base::FilePath(kDocRoot));
- ASSERT_TRUE(https_test_server_expired.Start());
- ASSERT_TRUE(embedded_test_server()->Start());
-
- content::WebContents* web_contents =
- browser()->tab_strip_model()->GetActiveWebContents();
- SecurityStyleTestObserver observer(web_contents);
-
- // Visit an HTTP url.
- GURL http_url(embedded_test_server()->GetURL("/"));
- ui_test_utils::NavigateToURL(browser(), http_url);
- EXPECT_EQ(content::SECURITY_STYLE_UNAUTHENTICATED,
- observer.latest_security_style());
- EXPECT_EQ(0u,
- observer.latest_explanations().unauthenticated_explanations.size());
- EXPECT_EQ(0u, observer.latest_explanations().broken_explanations.size());
- EXPECT_EQ(0u, observer.latest_explanations().secure_explanations.size());
- EXPECT_FALSE(observer.latest_explanations().scheme_is_cryptographic);
- EXPECT_FALSE(observer.latest_explanations().ran_insecure_content);
- EXPECT_FALSE(observer.latest_explanations().displayed_insecure_content);
-
- // Visit an (otherwise valid) HTTPS page that displays mixed content.
- std::string replacement_path;
- GetFilePathWithHostAndPortReplacement(
- "/ssl/page_displays_insecure_content.html",
- embedded_test_server()->host_port_pair(), &replacement_path);
-
- GURL mixed_content_url(https_test_server.GetURL(replacement_path));
- ui_test_utils::NavigateToURL(browser(), mixed_content_url);
- EXPECT_EQ(content::SECURITY_STYLE_UNAUTHENTICATED,
- observer.latest_security_style());
-
- const content::SecurityStyleExplanations& mixed_content_explanation =
- observer.latest_explanations();
- ASSERT_EQ(0u, mixed_content_explanation.unauthenticated_explanations.size());
- ASSERT_EQ(0u, mixed_content_explanation.broken_explanations.size());
- CheckSecureExplanations(mixed_content_explanation.secure_explanations,
- VALID_CERTIFICATE, browser());
- EXPECT_TRUE(mixed_content_explanation.scheme_is_cryptographic);
- EXPECT_TRUE(mixed_content_explanation.displayed_insecure_content);
- EXPECT_FALSE(mixed_content_explanation.ran_insecure_content);
- EXPECT_EQ(content::SECURITY_STYLE_UNAUTHENTICATED,
- mixed_content_explanation.displayed_insecure_content_style);
- EXPECT_EQ(content::SECURITY_STYLE_AUTHENTICATION_BROKEN,
- mixed_content_explanation.ran_insecure_content_style);
-
- // Visit a broken HTTPS url.
- GURL expired_url(https_test_server_expired.GetURL(std::string("/")));
- ui_test_utils::NavigateToURL(browser(), expired_url);
-
- // An interstitial should show, and an event for the lock icon on the
- // interstitial should fire.
- content::WaitForInterstitialAttach(web_contents);
- EXPECT_TRUE(web_contents->ShowingInterstitialPage());
- CheckBrokenSecurityStyle(observer, net::ERR_CERT_DATE_INVALID, browser());
- CheckSecureExplanations(observer.latest_explanations().secure_explanations,
- INVALID_CERTIFICATE, browser());
- EXPECT_TRUE(observer.latest_explanations().scheme_is_cryptographic);
- EXPECT_FALSE(observer.latest_explanations().displayed_insecure_content);
- EXPECT_FALSE(observer.latest_explanations().ran_insecure_content);
-
- // Before clicking through, navigate to a different page, and then go
- // back to the interstitial.
- GURL valid_https_url(https_test_server.GetURL(std::string("/")));
- ui_test_utils::NavigateToURL(browser(), valid_https_url);
- EXPECT_EQ(content::SECURITY_STYLE_AUTHENTICATED,
- observer.latest_security_style());
- EXPECT_EQ(0u,
- observer.latest_explanations().unauthenticated_explanations.size());
- EXPECT_EQ(0u, observer.latest_explanations().broken_explanations.size());
- CheckSecureExplanations(observer.latest_explanations().secure_explanations,
- VALID_CERTIFICATE, browser());
- EXPECT_TRUE(observer.latest_explanations().scheme_is_cryptographic);
- EXPECT_FALSE(observer.latest_explanations().displayed_insecure_content);
- EXPECT_FALSE(observer.latest_explanations().ran_insecure_content);
-
- // After going back to the interstitial, an event for a broken lock
- // icon should fire again.
- ui_test_utils::NavigateToURL(browser(), expired_url);
- content::WaitForInterstitialAttach(web_contents);
- EXPECT_TRUE(web_contents->ShowingInterstitialPage());
- CheckBrokenSecurityStyle(observer, net::ERR_CERT_DATE_INVALID, browser());
- CheckSecureExplanations(observer.latest_explanations().secure_explanations,
- INVALID_CERTIFICATE, browser());
- EXPECT_TRUE(observer.latest_explanations().scheme_is_cryptographic);
- EXPECT_FALSE(observer.latest_explanations().displayed_insecure_content);
- EXPECT_FALSE(observer.latest_explanations().ran_insecure_content);
-
- // Since the next expected style is the same as the previous, clear
- // the observer (to make sure that the event fires twice and we don't
- // just see the previous event's style).
- observer.ClearLatestSecurityStyleAndExplanations();
-
- // Other conditions cannot be tested on this host after clicking
- // through because once the interstitial is clicked through, all URLs
- // for this host will remain in a broken state.
- ProceedThroughInterstitial(web_contents);
- CheckBrokenSecurityStyle(observer, net::ERR_CERT_DATE_INVALID, browser());
- CheckSecureExplanations(observer.latest_explanations().secure_explanations,
- INVALID_CERTIFICATE, browser());
- EXPECT_TRUE(observer.latest_explanations().scheme_is_cryptographic);
- EXPECT_FALSE(observer.latest_explanations().displayed_insecure_content);
- EXPECT_FALSE(observer.latest_explanations().ran_insecure_content);
-}
-
-// Visit a valid HTTPS page, then a broken HTTPS page, and then go back,
-// and test that the observed security style matches.
-IN_PROC_BROWSER_TEST_F(BrowserTest, SecurityStyleChangedObserverGoBack) {
- net::EmbeddedTestServer https_test_server(
- net::EmbeddedTestServer::TYPE_HTTPS);
- https_test_server.ServeFilesFromSourceDirectory(base::FilePath(kDocRoot));
- ASSERT_TRUE(https_test_server.Start());
-
- net::EmbeddedTestServer https_test_server_expired(
- net::EmbeddedTestServer::TYPE_HTTPS);
- https_test_server_expired.SetSSLConfig(net::EmbeddedTestServer::CERT_EXPIRED);
- https_test_server_expired.ServeFilesFromSourceDirectory(
- base::FilePath(kDocRoot));
- ASSERT_TRUE(https_test_server_expired.Start());
-
- content::WebContents* web_contents =
- browser()->tab_strip_model()->GetActiveWebContents();
- SecurityStyleTestObserver observer(web_contents);
-
- // Visit a valid HTTPS url.
- GURL valid_https_url(https_test_server.GetURL(std::string("/")));
- ui_test_utils::NavigateToURL(browser(), valid_https_url);
- EXPECT_EQ(content::SECURITY_STYLE_AUTHENTICATED,
- observer.latest_security_style());
- EXPECT_EQ(0u,
- observer.latest_explanations().unauthenticated_explanations.size());
- EXPECT_EQ(0u, observer.latest_explanations().broken_explanations.size());
- CheckSecureExplanations(observer.latest_explanations().secure_explanations,
- VALID_CERTIFICATE, browser());
- EXPECT_TRUE(observer.latest_explanations().scheme_is_cryptographic);
- EXPECT_FALSE(observer.latest_explanations().displayed_insecure_content);
- EXPECT_FALSE(observer.latest_explanations().ran_insecure_content);
-
- // Navigate to a bad HTTPS page on a different host, and then click
- // Back to verify that the previous good security style is seen again.
- GURL expired_https_url(https_test_server_expired.GetURL(std::string("/")));
- host_resolver()->AddRule("www.example_broken.test", "127.0.0.1");
- GURL::Replacements replace_host;
- replace_host.SetHostStr("www.example_broken.test");
- GURL https_url_different_host =
- expired_https_url.ReplaceComponents(replace_host);
-
- ui_test_utils::NavigateToURL(browser(), https_url_different_host);
-
- content::WaitForInterstitialAttach(web_contents);
- EXPECT_TRUE(web_contents->ShowingInterstitialPage());
- CheckBrokenSecurityStyle(observer, net::ERR_CERT_COMMON_NAME_INVALID,
- browser());
- ProceedThroughInterstitial(web_contents);
- CheckBrokenSecurityStyle(observer, net::ERR_CERT_COMMON_NAME_INVALID,
- browser());
- CheckSecureExplanations(observer.latest_explanations().secure_explanations,
- INVALID_CERTIFICATE, browser());
- EXPECT_TRUE(observer.latest_explanations().scheme_is_cryptographic);
- EXPECT_FALSE(observer.latest_explanations().displayed_insecure_content);
- EXPECT_FALSE(observer.latest_explanations().ran_insecure_content);
-
- content::WindowedNotificationObserver back_nav_load_observer(
- content::NOTIFICATION_LOAD_STOP,
- content::Source<NavigationController>(&web_contents->GetController()));
- chrome::GoBack(browser(), CURRENT_TAB);
- back_nav_load_observer.Wait();
-
- EXPECT_EQ(content::SECURITY_STYLE_AUTHENTICATED,
- observer.latest_security_style());
- EXPECT_EQ(0u,
- observer.latest_explanations().unauthenticated_explanations.size());
- EXPECT_EQ(0u, observer.latest_explanations().broken_explanations.size());
- CheckSecureExplanations(observer.latest_explanations().secure_explanations,
- VALID_CERTIFICATE, browser());
- EXPECT_TRUE(observer.latest_explanations().scheme_is_cryptographic);
- EXPECT_FALSE(observer.latest_explanations().displayed_insecure_content);
- EXPECT_FALSE(observer.latest_explanations().ran_insecure_content);
-}
-
-namespace {
-
-// After AddNonsecureUrlHandler() is called, requests to this hostname
-// will use obsolete TLS settings.
-const char kMockNonsecureHostname[] = "example-nonsecure.test";
-
-// A URLRequestMockHTTPJob that mocks a TLS connection with an obsolete
-// protocol version.
-class URLRequestObsoleteTLSJob : public net::URLRequestMockHTTPJob {
- public:
- URLRequestObsoleteTLSJob(net::URLRequest* request,
- net::NetworkDelegate* network_delegate,
- const base::FilePath& file_path,
- scoped_refptr<net::X509Certificate> cert,
- scoped_refptr<base::TaskRunner> task_runner)
- : net::URLRequestMockHTTPJob(request,
- network_delegate,
- file_path,
- task_runner),
- cert_(std::move(cert)) {}
-
- void GetResponseInfo(net::HttpResponseInfo* info) override {
- net::URLRequestMockHTTPJob::GetResponseInfo(info);
- net::SSLConnectionStatusSetVersion(net::SSL_CONNECTION_VERSION_TLS1_1,
- &info->ssl_info.connection_status);
- const uint16_t kTlsEcdheRsaWithAes128CbcSha = 0xc013;
- net::SSLConnectionStatusSetCipherSuite(kTlsEcdheRsaWithAes128CbcSha,
- &info->ssl_info.connection_status);
- info->ssl_info.cert = cert_;
- }
-
- protected:
- ~URLRequestObsoleteTLSJob() override {}
-
- private:
- const scoped_refptr<net::X509Certificate> cert_;
-
- DISALLOW_COPY_AND_ASSIGN(URLRequestObsoleteTLSJob);
-};
-
-// A URLRequestInterceptor that handles requests with
-// URLRequestObsoleteTLSJob jobs.
-class URLRequestNonsecureInterceptor : public net::URLRequestInterceptor {
- public:
- URLRequestNonsecureInterceptor(
- const base::FilePath& base_path,
- scoped_refptr<base::SequencedWorkerPool> worker_pool,
- scoped_refptr<net::X509Certificate> cert)
- : base_path_(base_path),
- worker_pool_(std::move(worker_pool)),
- cert_(std::move(cert)) {}
-
- ~URLRequestNonsecureInterceptor() override {}
-
- // net::URLRequestInterceptor:
- net::URLRequestJob* MaybeInterceptRequest(
- net::URLRequest* request,
- net::NetworkDelegate* network_delegate) const override {
- return new URLRequestObsoleteTLSJob(
- request, network_delegate, base_path_, cert_,
- worker_pool_->GetTaskRunnerWithShutdownBehavior(
- base::SequencedWorkerPool::SKIP_ON_SHUTDOWN));
- }
-
- private:
- const base::FilePath base_path_;
- const scoped_refptr<base::SequencedWorkerPool> worker_pool_;
- const scoped_refptr<net::X509Certificate> cert_;
-
- DISALLOW_COPY_AND_ASSIGN(URLRequestNonsecureInterceptor);
-};
-
-// Installs a handler to serve HTTPS requests to
-// |kMockNonsecureHostname| with connections that have obsolete TLS
-// settings.
-void AddNonsecureUrlHandler(
- const base::FilePath& base_path,
- scoped_refptr<net::X509Certificate> cert,
- scoped_refptr<base::SequencedWorkerPool> worker_pool) {
- net::URLRequestFilter* filter = net::URLRequestFilter::GetInstance();
- filter->AddHostnameInterceptor(
- "https", kMockNonsecureHostname,
- std::unique_ptr<net::URLRequestInterceptor>(
- new URLRequestNonsecureInterceptor(base_path, worker_pool, cert)));
-}
-
-class BrowserTestNonsecureURLRequest : public BrowserTest {
- public:
- BrowserTestNonsecureURLRequest() : BrowserTest(), cert_(nullptr) {}
-
- void SetUpInProcessBrowserTestFixture() override {
- cert_ =
- net::ImportCertFromFile(net::GetTestCertsDirectory(), "ok_cert.pem");
- ASSERT_TRUE(cert_);
- }
-
- void SetUpOnMainThread() override {
- base::FilePath serve_file;
- PathService::Get(chrome::DIR_TEST_DATA, &serve_file);
- serve_file = serve_file.Append(FILE_PATH_LITERAL("title1.html"));
- content::BrowserThread::PostTask(
- content::BrowserThread::IO, FROM_HERE,
- base::Bind(
- &AddNonsecureUrlHandler, serve_file, cert_,
- make_scoped_refptr(content::BrowserThread::GetBlockingPool())));
- }
-
- private:
- scoped_refptr<net::X509Certificate> cert_;
-
- DISALLOW_COPY_AND_ASSIGN(BrowserTestNonsecureURLRequest);
-};
-
-} // namespace
-
-// Tests that a connection with obsolete TLS settings does not get a
-// secure connection explanation.
-IN_PROC_BROWSER_TEST_F(BrowserTestNonsecureURLRequest,
- SecurityStyleChangedObserverNonsecureConnection) {
- content::WebContents* web_contents =
- browser()->tab_strip_model()->GetActiveWebContents();
- SecurityStyleTestObserver observer(web_contents);
-
- ui_test_utils::NavigateToURL(
- browser(), GURL(std::string("https://") + kMockNonsecureHostname));
-
- // The security style of the page doesn't get downgraded for obsolete
- // TLS settings, so it should remain at SECURITY_STYLE_AUTHENTICATED.
- EXPECT_EQ(content::SECURITY_STYLE_AUTHENTICATED,
- observer.latest_security_style());
-
- // The messages explaining the security style do, however, get
- // downgraded: SECURE_PROTOCOL_AND_CIPHERSUITE should not show up when
- // the TLS settings are obsolete.
- for (const auto& explanation :
- observer.latest_explanations().secure_explanations) {
- EXPECT_NE(l10n_util::GetStringUTF8(IDS_SECURE_PROTOCOL_AND_CIPHERSUITE),
- explanation.summary);
- }
-}
-
namespace {
class JSBooleanResultGetter {
public:
« no previous file with comments | « chrome/browser/ui/browser.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698