aw_browser_context_unittest.cc 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. // Copyright 2019 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #include "android_webview/browser/aw_browser_context.h"
  5. #include "android_webview/browser/aw_browser_process.h"
  6. #include "android_webview/browser/aw_feature_list_creator.h"
  7. #include "android_webview/browser/network_service/aw_network_change_notifier_factory.h"
  8. #include "android_webview/common/aw_features.h"
  9. #include "base/memory/raw_ptr.h"
  10. #include "base/run_loop.h"
  11. #include "base/test/scoped_feature_list.h"
  12. #include "content/public/browser/browser_context.h"
  13. #include "content/public/test/browser_task_environment.h"
  14. #include "content/public/test/test_content_client_initializer.h"
  15. #include "mojo/core/embedder/embedder.h"
  16. #include "services/cert_verifier/public/mojom/cert_verifier_service_factory.mojom.h"
  17. #include "services/network/public/mojom/network_context.mojom.h"
  18. #include "testing/gtest/include/gtest/gtest.h"
  19. namespace android_webview {
  20. class AwBrowserContextTest : public testing::Test {
  21. protected:
  22. // Runs before the first test
  23. static void SetUpTestSuite() {
  24. net::NetworkChangeNotifier::SetFactory(
  25. new AwNetworkChangeNotifierFactory());
  26. }
  27. void SetUp() override {
  28. mojo::core::Init();
  29. test_content_client_initializer_ =
  30. new content::TestContentClientInitializer();
  31. AwFeatureListCreator* aw_feature_list_creator = new AwFeatureListCreator();
  32. aw_feature_list_creator->CreateLocalState();
  33. browser_process_ = new AwBrowserProcess(aw_feature_list_creator);
  34. }
  35. void TearDown() override {
  36. // Drain the message queue before destroying
  37. // |test_content_client_initializer_|, otherwise a posted task may call
  38. // content::GetNetworkConnectionTracker() after
  39. // TestContentClientInitializer's destructor sets it to null.
  40. base::RunLoop().RunUntilIdle();
  41. delete test_content_client_initializer_;
  42. delete browser_process_;
  43. }
  44. // Create the TestBrowserThreads.
  45. content::BrowserTaskEnvironment task_environment_;
  46. raw_ptr<content::TestContentClientInitializer>
  47. test_content_client_initializer_;
  48. raw_ptr<AwBrowserProcess> browser_process_;
  49. };
  50. // Tests that constraints on trust for Symantec-issued certificates are not
  51. // enforced for the NetworkContext, as it should behave like the Android system.
  52. TEST_F(AwBrowserContextTest, SymantecPoliciesExempted) {
  53. AwBrowserContext context;
  54. network::mojom::NetworkContextParams network_context_params;
  55. cert_verifier::mojom::CertVerifierCreationParams cert_verifier_params;
  56. context.ConfigureNetworkContextParams(
  57. false, base::FilePath(), &network_context_params, &cert_verifier_params);
  58. ASSERT_TRUE(network_context_params.initial_ssl_config);
  59. ASSERT_TRUE(
  60. network_context_params.initial_ssl_config->symantec_enforcement_disabled);
  61. }
  62. // Tests that SHA-1 is still allowed for locally-installed trust anchors,
  63. // including those in application manifests, as it should behave like
  64. // the Android system.
  65. TEST_F(AwBrowserContextTest, SHA1LocalAnchorsAllowed) {
  66. AwBrowserContext context;
  67. network::mojom::NetworkContextParams network_context_params;
  68. cert_verifier::mojom::CertVerifierCreationParams cert_verifier_params;
  69. context.ConfigureNetworkContextParams(
  70. false, base::FilePath(), &network_context_params, &cert_verifier_params);
  71. ASSERT_TRUE(network_context_params.initial_ssl_config);
  72. ASSERT_TRUE(
  73. network_context_params.initial_ssl_config->sha1_local_anchors_enabled);
  74. }
  75. // Tests that TLS 1.0/1.1 is still allowed for WebView if the escape hatch
  76. // feature is enabled.
  77. TEST_F(AwBrowserContextTest, LegacyTLSVersionsAllowed) {
  78. base::test::ScopedFeatureList feature_list;
  79. feature_list.InitAndEnableFeature(
  80. android_webview::features::kWebViewLegacyTlsSupport);
  81. AwBrowserContext context;
  82. network::mojom::NetworkContextParams network_context_params;
  83. cert_verifier::mojom::CertVerifierCreationParams cert_verifier_params;
  84. context.ConfigureNetworkContextParams(
  85. false, base::FilePath(), &network_context_params, &cert_verifier_params);
  86. ASSERT_TRUE(network_context_params.initial_ssl_config);
  87. EXPECT_EQ(network::mojom::SSLVersion::kTLS1,
  88. network_context_params.initial_ssl_config->version_min);
  89. }
  90. // Tests that TLS 1.0/1.1 are disallowed when the escape hatch feature is
  91. // disabled.
  92. TEST_F(AwBrowserContextTest, LegacyTLSVersionsDisallowed) {
  93. base::test::ScopedFeatureList feature_list;
  94. feature_list.InitAndDisableFeature(
  95. android_webview::features::kWebViewLegacyTlsSupport);
  96. AwBrowserContext context;
  97. network::mojom::NetworkContextParams network_context_params;
  98. cert_verifier::mojom::CertVerifierCreationParams cert_verifier_params;
  99. context.ConfigureNetworkContextParams(
  100. false, base::FilePath(), &network_context_params, &cert_verifier_params);
  101. ASSERT_TRUE(network_context_params.initial_ssl_config);
  102. EXPECT_EQ(network::mojom::SSLVersion::kTLS12,
  103. network_context_params.initial_ssl_config->version_min);
  104. }
  105. } // namespace android_webview