diff options
author | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2020-10-06 12:48:11 +0200 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2020-10-13 09:33:43 +0000 |
commit | 7b5b123ac58f58ffde0f4f6e488bcd09aa4decd3 (patch) | |
tree | fa14ba0ca8d2683ba2efdabd246dc9b18a1229c6 /chromium/components/openscreen_platform | |
parent | 79b4f909db1049fca459c07cca55af56a9b54fe3 (diff) | |
download | qtwebengine-chromium-7b5b123ac58f58ffde0f4f6e488bcd09aa4decd3.tar.gz |
BASELINE: Update Chromium to 84.0.4147.141
Change-Id: Ib85eb4cfa1cbe2b2b81e5022c8cad5c493969535
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
Diffstat (limited to 'chromium/components/openscreen_platform')
8 files changed, 112 insertions, 27 deletions
diff --git a/chromium/components/openscreen_platform/BUILD.gn b/chromium/components/openscreen_platform/BUILD.gn index 752144368eb..7418f682c82 100644 --- a/chromium/components/openscreen_platform/BUILD.gn +++ b/chromium/components/openscreen_platform/BUILD.gn @@ -15,9 +15,7 @@ source_set("openscreen_platform") { "trace_logging_platform.cc", ] - public_deps = [ - "//third_party/openscreen/src/platform", - ] + public_deps = [ "//third_party/openscreen/src/platform" ] deps = [ "//base", @@ -27,6 +25,8 @@ source_set("openscreen_platform") { source_set("openscreen_platform_network_service") { sources = [ + "network_context.cc", + "network_context.h", "tls_client_connection.cc", "tls_client_connection.h", "tls_connection_factory.cc", diff --git a/chromium/components/openscreen_platform/network_context.cc b/chromium/components/openscreen_platform/network_context.cc new file mode 100644 index 00000000000..0dfa5e0fb31 --- /dev/null +++ b/chromium/components/openscreen_platform/network_context.cc @@ -0,0 +1,35 @@ +// Copyright 2020 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 "components/openscreen_platform/network_context.h" + +namespace openscreen_platform { +namespace { + +static NetworkContextGetter* GetInstance() { + static NetworkContextGetter* getter = new NetworkContextGetter(); + return getter; +} + +} // namespace + +void SetNetworkContextGetter(NetworkContextGetter network_context_getter) { + NetworkContextGetter* getter = GetInstance(); + DCHECK(getter->is_null() || network_context_getter.is_null()); + *getter = std::move(network_context_getter); +} + +bool HasNetworkContextGetter() { + return !GetInstance()->is_null(); +} + +network::mojom::NetworkContext* GetNetworkContext() { + NetworkContextGetter* getter = GetInstance(); + if (getter->is_null()) { + return nullptr; + } + return getter->Run(); +} + +} // namespace openscreen_platform diff --git a/chromium/components/openscreen_platform/network_context.h b/chromium/components/openscreen_platform/network_context.h new file mode 100644 index 00000000000..0cc5b52157c --- /dev/null +++ b/chromium/components/openscreen_platform/network_context.h @@ -0,0 +1,31 @@ +// Copyright 2020 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. + +#ifndef COMPONENTS_OPENSCREEN_PLATFORM_NETWORK_CONTEXT_H_ +#define COMPONENTS_OPENSCREEN_PLATFORM_NETWORK_CONTEXT_H_ + +#include "base/bind.h" +#include "services/network/public/mojom/network_context.mojom.h" + +namespace openscreen_platform { + +using NetworkContextGetter = + base::RepeatingCallback<network::mojom::NetworkContext*()>; + +void SetNetworkContextGetter(NetworkContextGetter network_context_getter); +bool HasNetworkContextGetter(); + +// This and all subsequent NetworkContext calls made must obey the thread safety +// requirements of |network_context_getter|. This must be called each time a +// mojom::NetworkContext is needed; any returned pointer should not be stored +// beyond the scope in which it is received. +// +// In Chrome, the |network_context_getter| will always return the NetworkContext +// from the SystemNetworkContextManager; therefore, GetNetworkContext must be +// called on the UI thread. +network::mojom::NetworkContext* GetNetworkContext(); + +} // namespace openscreen_platform + +#endif // COMPONENTS_OPENSCREEN_PLATFORM_NETWORK_CONTEXT_H_ diff --git a/chromium/components/openscreen_platform/network_util.cc b/chromium/components/openscreen_platform/network_util.cc index 729a09eba24..c5a883dac58 100644 --- a/chromium/components/openscreen_platform/network_util.cc +++ b/chromium/components/openscreen_platform/network_util.cc @@ -7,6 +7,7 @@ #include <array> #include <memory> +#include "base/notreached.h" #include "net/base/address_family.h" #include "net/base/ip_endpoint.h" #include "net/base/net_errors.h" diff --git a/chromium/components/openscreen_platform/tls_connection_factory.cc b/chromium/components/openscreen_platform/tls_connection_factory.cc index 94a9f49da9f..01424aa304f 100644 --- a/chromium/components/openscreen_platform/tls_connection_factory.cc +++ b/chromium/components/openscreen_platform/tls_connection_factory.cc @@ -7,13 +7,15 @@ #include <openssl/pool.h> #include <utility> -#include "base/logging.h" +#include "base/notreached.h" +#include "components/openscreen_platform/network_context.h" #include "components/openscreen_platform/network_util.h" #include "components/openscreen_platform/tls_client_connection.h" #include "net/base/host_port_pair.h" #include "net/base/net_errors.h" #include "net/ssl/ssl_info.h" #include "net/traffic_annotation/network_traffic_annotation.h" +#include "services/network/public/mojom/network_context.mojom.h" #include "third_party/openscreen/src/platform/api/tls_connection.h" #include "third_party/openscreen/src/platform/base/tls_connect_options.h" #include "third_party/openscreen/src/platform/base/tls_credentials.h" @@ -25,7 +27,7 @@ std::unique_ptr<TlsConnectionFactory> TlsConnectionFactory::CreateFactory( Client* client, TaskRunner* task_runner) { return std::make_unique<openscreen_platform::TlsConnectionFactory>( - client, task_runner, nullptr /* network context */); + client, task_runner); } } // namespace openscreen @@ -70,8 +72,8 @@ TlsConnectionFactory::~TlsConnectionFactory() = default; void TlsConnectionFactory::Connect(const IPEndpoint& remote_address, const TlsConnectOptions& options) { - network::mojom::NetworkContext* network_context = network_context_; - // TODO(btolsch): Add fall-back lookup in follow-up NetworkContext patch. + network::mojom::NetworkContext* network_context = + openscreen_platform::GetNetworkContext(); if (!network_context) { client_->OnError(this, openscreen::Error::Code::kItemNotFound); return; @@ -107,11 +109,8 @@ void TlsConnectionFactory::Listen(const IPEndpoint& local_address, TlsConnectionFactory::TlsConnectionFactory( openscreen::TlsConnectionFactory::Client* client, - openscreen::TaskRunner* task_runner, - network::mojom::NetworkContext* network_context) - : client_(client), - task_runner_(task_runner), - network_context_(network_context) {} + openscreen::TaskRunner* task_runner) + : client_(client), task_runner_(task_runner) {} TlsConnectionFactory::TcpConnectRequest::TcpConnectRequest( openscreen::TlsConnectOptions options_in, diff --git a/chromium/components/openscreen_platform/tls_connection_factory.h b/chromium/components/openscreen_platform/tls_connection_factory.h index 9690089d3a9..2aaad8642ab 100644 --- a/chromium/components/openscreen_platform/tls_connection_factory.h +++ b/chromium/components/openscreen_platform/tls_connection_factory.h @@ -11,7 +11,6 @@ #include "mojo/public/cpp/bindings/pending_receiver.h" #include "mojo/public/cpp/bindings/receiver.h" #include "mojo/public/cpp/bindings/remote.h" -#include "services/network/public/mojom/network_context.mojom.h" #include "services/network/public/mojom/tcp_socket.mojom.h" #include "services/network/public/mojom/tls_socket.mojom.h" #include "third_party/openscreen/src/platform/api/tls_connection_factory.h" @@ -34,11 +33,8 @@ namespace openscreen_platform { class TlsConnectionFactory : public openscreen::TlsConnectionFactory { public: - // If provided, the network context is stored and dereferenced when attempting - // to connect. If not provided, the network context is dynamically looked up. TlsConnectionFactory(openscreen::TlsConnectionFactory::Client* client, - openscreen::TaskRunner* task_runner, - network::mojom::NetworkContext* network_context); + openscreen::TaskRunner* task_runner); ~TlsConnectionFactory() final; @@ -108,7 +104,6 @@ class TlsConnectionFactory : public openscreen::TlsConnectionFactory { openscreen::TlsConnectionFactory::Client* client_; openscreen::TaskRunner* const task_runner_; - network::mojom::NetworkContext* const network_context_; base::WeakPtrFactory<TlsConnectionFactory> weak_factory_{this}; }; diff --git a/chromium/components/openscreen_platform/tls_connection_factory_unittest.cc b/chromium/components/openscreen_platform/tls_connection_factory_unittest.cc index 7e6f4ab1942..e92fc7e7e5a 100644 --- a/chromium/components/openscreen_platform/tls_connection_factory_unittest.cc +++ b/chromium/components/openscreen_platform/tls_connection_factory_unittest.cc @@ -12,6 +12,7 @@ #include "base/sequenced_task_runner.h" #include "base/task/post_task.h" #include "base/test/task_environment.h" +#include "components/openscreen_platform/network_context.h" #include "components/openscreen_platform/task_runner.h" #include "components/openscreen_platform/tls_client_connection.h" #include "net/base/net_errors.h" @@ -99,19 +100,27 @@ class TlsConnectionFactoryTest : public ::testing::Test { task_environment_->GetMainThreadTaskRunner()); mock_network_context = std::make_unique<FakeNetworkContext>(); + SetNetworkContextGetter(base::BindRepeating( + &TlsConnectionFactoryTest::GetNetworkContext, base::Unretained(this))); + } + + void TearDown() override { + SetNetworkContextGetter(openscreen_platform::NetworkContextGetter()); + } + + protected: + network::mojom::NetworkContext* GetNetworkContext() { + return mock_network_context.get(); } std::unique_ptr<openscreen_platform::TaskRunner> task_runner; std::unique_ptr<FakeNetworkContext> mock_network_context; - - private: std::unique_ptr<base::test::TaskEnvironment> task_environment_; }; TEST_F(TlsConnectionFactoryTest, CallsNetworkContextCreateMethod) { StrictMock<MockTlsConnectionFactoryClient> mock_client; - TlsConnectionFactory factory(&mock_client, task_runner.get(), - mock_network_context.get()); + TlsConnectionFactory factory(&mock_client, task_runner.get()); factory.Connect(kValidOpenscreenEndpoint, TlsConnectOptions{}); @@ -122,8 +131,7 @@ TEST_F(TlsConnectionFactoryTest, CallsNetworkContextCreateMethod) { TEST_F(TlsConnectionFactoryTest, CallsOnConnectionFailedWhenNetworkContextReportsError) { StrictMock<MockTlsConnectionFactoryClient> mock_client; - TlsConnectionFactory factory(&mock_client, task_runner.get(), - mock_network_context.get()); + TlsConnectionFactory factory(&mock_client, task_runner.get()); EXPECT_CALL(mock_client, OnConnectionFailed(&factory, kValidOpenscreenEndpoint)); diff --git a/chromium/components/openscreen_platform/udp_socket.cc b/chromium/components/openscreen_platform/udp_socket.cc index 303d94916ef..90491feb888 100644 --- a/chromium/components/openscreen_platform/udp_socket.cc +++ b/chromium/components/openscreen_platform/udp_socket.cc @@ -8,6 +8,7 @@ #include "base/bind.h" #include "base/containers/span.h" +#include "components/openscreen_platform/network_context.h" #include "components/openscreen_platform/network_util.h" #include "mojo/public/cpp/bindings/pending_remote.h" #include "net/base/address_family.h" @@ -25,9 +26,24 @@ ErrorOr<std::unique_ptr<UdpSocket>> UdpSocket::Create( TaskRunner* task_runner, Client* client, const IPEndpoint& local_endpoint) { - // TODO(btolsch): Replace initialization code with NetworkContext follow-up - // patch. - return Error::Code::kInitializationFailure; + network::mojom::NetworkContext* const network_context = + openscreen_platform::GetNetworkContext(); + if (!network_context) { + return Error::Code::kInitializationFailure; + } + + mojo::PendingRemote<network::mojom::UDPSocketListener> listener_remote; + mojo::PendingReceiver<network::mojom::UDPSocketListener> pending_listener = + listener_remote.InitWithNewPipeAndPassReceiver(); + + mojo::Remote<network::mojom::UDPSocket> socket; + network_context->CreateUDPSocket(socket.BindNewPipeAndPassReceiver(), + std::move(listener_remote)); + + return ErrorOr<std::unique_ptr<UdpSocket>>( + std::make_unique<openscreen_platform::UdpSocket>( + client, local_endpoint, std::move(socket), + std::move(pending_listener))); } } // namespace openscreen |