summaryrefslogtreecommitdiff
path: root/chromium/components/openscreen_platform
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@qt.io>2020-10-06 12:48:11 +0200
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2020-10-13 09:33:43 +0000
commit7b5b123ac58f58ffde0f4f6e488bcd09aa4decd3 (patch)
treefa14ba0ca8d2683ba2efdabd246dc9b18a1229c6 /chromium/components/openscreen_platform
parent79b4f909db1049fca459c07cca55af56a9b54fe3 (diff)
downloadqtwebengine-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')
-rw-r--r--chromium/components/openscreen_platform/BUILD.gn6
-rw-r--r--chromium/components/openscreen_platform/network_context.cc35
-rw-r--r--chromium/components/openscreen_platform/network_context.h31
-rw-r--r--chromium/components/openscreen_platform/network_util.cc1
-rw-r--r--chromium/components/openscreen_platform/tls_connection_factory.cc17
-rw-r--r--chromium/components/openscreen_platform/tls_connection_factory.h7
-rw-r--r--chromium/components/openscreen_platform/tls_connection_factory_unittest.cc20
-rw-r--r--chromium/components/openscreen_platform/udp_socket.cc22
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