| 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:
|
|
|