| // Copyright 2018 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "chrome/browser/ssl/ssl_blocking_page.h" |
| |
| #include "base/bind.h" |
| #include "base/strings/string_number_conversions.h" |
| #include "chrome/browser/extensions/api/safe_browsing_private/safe_browsing_private_event_router_factory.h" |
| #include "chrome/browser/safe_browsing/test_extension_event_observer.h" |
| #include "chrome/common/extensions/api/safe_browsing_private.h" |
| #include "chrome/test/base/chrome_render_view_host_test_harness.h" |
| #include "net/test/cert_test_util.h" |
| #include "net/test/test_data_directory.h" |
| #include "testing/gmock/include/gmock/gmock.h" |
| #include "testing/gtest/include/gtest/gtest.h" |
| |
| namespace OnSecurityInterstitialShown = |
| extensions::api::safe_browsing_private::OnSecurityInterstitialShown; |
| namespace OnSecurityInterstitialProceeded = |
| extensions::api::safe_browsing_private::OnSecurityInterstitialProceeded; |
| |
| namespace { |
| |
| void EmptyCallback(content::CertificateRequestResultType unused_type) {} |
| |
| } // namespace |
| |
| class SSLBlockingPageTest : public ChromeRenderViewHostTestHarness { |
| public: |
| SSLBlockingPageTest() {} |
| |
| void SetUp() override { |
| ChromeRenderViewHostTestHarness::SetUp(); |
| test_event_router_ = |
| extensions::CreateAndUseTestEventRouter(browser_context()); |
| extensions::SafeBrowsingPrivateEventRouterFactory::GetInstance() |
| ->SetTestingFactory( |
| browser_context(), |
| base::BindRepeating( |
| &safe_browsing::BuildSafeBrowsingPrivateEventRouter)); |
| } |
| |
| extensions::TestEventRouter* test_event_router() { |
| return test_event_router_; |
| } |
| |
| private: |
| extensions::TestEventRouter* test_event_router_; |
| }; |
| |
| TEST_F(SSLBlockingPageTest, VerifySecurityInterstitialExtensionEvents) { |
| safe_browsing::TestExtensionEventObserver observer(test_event_router()); |
| |
| // Sets up elements needed for a SSL blcocking page. |
| GURL request_url("https://error.example.test"); |
| net::SSLInfo ssl_info; |
| ssl_info.cert = |
| net::ImportCertFromFile(net::GetTestCertsDirectory(), "ok_cert.pem"); |
| base::RepeatingCallback<void(content::CertificateRequestResultType)> |
| callback = base::BindRepeating(&EmptyCallback); |
| |
| // Simulates the showing of a SSL blocking page. |
| SSLBlockingPage* blocking_page = SSLBlockingPage::Create( |
| web_contents(), net::ERR_CERT_DATE_INVALID, ssl_info, request_url, |
| /*options_mask=*/0, base::Time::NowFromSystemTime(), |
| /*support_url=*/GURL(), |
| /*ssl_cert_reporter=*/nullptr, callback); |
| blocking_page->DontCreateViewForTesting(); |
| blocking_page->Show(); |
| |
| // Verifies that security interstitial shown event is observed. |
| observer.VerifyLatestSecurityInterstitialEvent( |
| OnSecurityInterstitialShown::kEventName, request_url, "SSL_ERROR", "", |
| net::ERR_CERT_DATE_INVALID); |
| |
| // Simulates a proceed action. |
| blocking_page->CommandReceived( |
| base::IntToString(security_interstitials::CMD_PROCEED)); |
| |
| // Verifies that security interstitial proceeded event is observed. |
| observer.VerifyLatestSecurityInterstitialEvent( |
| OnSecurityInterstitialProceeded::kEventName, request_url, "SSL_ERROR", "", |
| net::ERR_CERT_DATE_INVALID); |
| } |