Commit 64687c5b authored by Oleh Lamzin's avatar Oleh Lamzin Committed by Commit Bot

Introduce wilco_dtc NetworkContext

Introduce wilco_dtc NetworkContext to be able to continue establish TLS
connection when server ask client authentication certificate.

Bug: b:144545936
TEST=browser tests
TEST=verified manually on the device that we are able to setup
     connection and receive response from the server

Change-Id: I039c683fed6859641ea42a1bb79536a7629419de
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1964071
Commit-Queue: Oleh Lamzin <lamzin@google.com>
Reviewed-by: default avatarPavol Marko <pmarko@chromium.org>
Reviewed-by: default avatarMatt Menke <mmenke@chromium.org>
Cr-Commit-Position: refs/heads/master@{#734072}
parent 990662d0
...@@ -2310,6 +2310,7 @@ source_set("chromeos") { ...@@ -2310,6 +2310,7 @@ source_set("chromeos") {
"wilco_dtc_supportd/wilco_dtc_supportd_manager.h", "wilco_dtc_supportd/wilco_dtc_supportd_manager.h",
"wilco_dtc_supportd/wilco_dtc_supportd_messaging.cc", "wilco_dtc_supportd/wilco_dtc_supportd_messaging.cc",
"wilco_dtc_supportd/wilco_dtc_supportd_messaging.h", "wilco_dtc_supportd/wilco_dtc_supportd_messaging.h",
"wilco_dtc_supportd/wilco_dtc_supportd_network_context.cc",
"wilco_dtc_supportd/wilco_dtc_supportd_notification_controller.cc", "wilco_dtc_supportd/wilco_dtc_supportd_notification_controller.cc",
"wilco_dtc_supportd/wilco_dtc_supportd_notification_controller.h", "wilco_dtc_supportd/wilco_dtc_supportd_notification_controller.h",
"wilco_dtc_supportd/wilco_dtc_supportd_web_request_service.cc", "wilco_dtc_supportd/wilco_dtc_supportd_web_request_service.cc",
...@@ -3047,6 +3048,8 @@ source_set("unit_tests") { ...@@ -3047,6 +3048,8 @@ source_set("unit_tests") {
"usb/cros_usb_detector_unittest.cc", "usb/cros_usb_detector_unittest.cc",
"wilco_dtc_supportd/testing_wilco_dtc_supportd_bridge_wrapper.cc", "wilco_dtc_supportd/testing_wilco_dtc_supportd_bridge_wrapper.cc",
"wilco_dtc_supportd/testing_wilco_dtc_supportd_bridge_wrapper.h", "wilco_dtc_supportd/testing_wilco_dtc_supportd_bridge_wrapper.h",
"wilco_dtc_supportd/testing_wilco_dtc_supportd_network_context.cc",
"wilco_dtc_supportd/testing_wilco_dtc_supportd_network_context.h",
"wilco_dtc_supportd/wilco_dtc_supportd_bridge_unittest.cc", "wilco_dtc_supportd/wilco_dtc_supportd_bridge_unittest.cc",
"wilco_dtc_supportd/wilco_dtc_supportd_manager_unittest.cc", "wilco_dtc_supportd/wilco_dtc_supportd_manager_unittest.cc",
"wilco_dtc_supportd/wilco_dtc_supportd_messaging_unittest.cc", "wilco_dtc_supportd/wilco_dtc_supportd_messaging_unittest.cc",
......
...@@ -9,6 +9,7 @@ ...@@ -9,6 +9,7 @@
#include "base/files/file.h" #include "base/files/file.h"
#include "base/memory/platform_shared_memory_region.h" #include "base/memory/platform_shared_memory_region.h"
#include "base/memory/read_only_shared_memory_region.h" #include "base/memory/read_only_shared_memory_region.h"
#include "base/threading/thread_restrictions.h"
#include "base/unguessable_token.h" #include "base/unguessable_token.h"
#include "mojo/public/c/system/types.h" #include "mojo/public/c/system/types.h"
#include "mojo/public/cpp/system/handle.h" #include "mojo/public/cpp/system/handle.h"
...@@ -27,7 +28,12 @@ base::StringPiece GetStringPieceFromMojoHandle( ...@@ -27,7 +28,12 @@ base::StringPiece GetStringPieceFromMojoHandle(
return base::StringPiece(); return base::StringPiece();
base::File file(platform_file); base::File file(platform_file);
const size_t file_size = file.GetLength(); size_t file_size = 0;
{
// TODO(b/146119375): Remove blocking operation from production code.
base::ScopedAllowBlockingForTesting allow_blocking;
file_size = file.GetLength();
}
if (file_size <= 0) if (file_size <= 0)
return base::StringPiece(); return base::StringPiece();
......
...@@ -16,7 +16,9 @@ ...@@ -16,7 +16,9 @@
#include "base/run_loop.h" #include "base/run_loop.h"
#include "base/test/bind_test_util.h" #include "base/test/bind_test_util.h"
#include "chrome/browser/chromeos/wilco_dtc_supportd/fake_wilco_dtc_supportd_client.h" #include "chrome/browser/chromeos/wilco_dtc_supportd/fake_wilco_dtc_supportd_client.h"
#include "chrome/browser/chromeos/wilco_dtc_supportd/wilco_dtc_supportd_bridge.h"
#include "chrome/browser/chromeos/wilco_dtc_supportd/wilco_dtc_supportd_client.h" #include "chrome/browser/chromeos/wilco_dtc_supportd/wilco_dtc_supportd_client.h"
#include "chrome/browser/chromeos/wilco_dtc_supportd/wilco_dtc_supportd_network_context.h"
#include "chrome/test/base/testing_browser_process.h" #include "chrome/test/base/testing_browser_process.h"
#include "chrome/test/base/testing_profile_manager.h" #include "chrome/test/base/testing_profile_manager.h"
#include "mojo/public/cpp/bindings/remote.h" #include "mojo/public/cpp/bindings/remote.h"
...@@ -144,10 +146,10 @@ std::unique_ptr<TestingWilcoDtcSupportdBridgeWrapper> ...@@ -144,10 +146,10 @@ std::unique_ptr<TestingWilcoDtcSupportdBridgeWrapper>
TestingWilcoDtcSupportdBridgeWrapper::Create( TestingWilcoDtcSupportdBridgeWrapper::Create(
wilco_dtc_supportd::mojom::WilcoDtcSupportdService* wilco_dtc_supportd::mojom::WilcoDtcSupportdService*
mojo_wilco_dtc_supportd_service, mojo_wilco_dtc_supportd_service,
scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory, std::unique_ptr<WilcoDtcSupportdNetworkContext> network_context,
std::unique_ptr<WilcoDtcSupportdBridge>* bridge) { std::unique_ptr<WilcoDtcSupportdBridge>* bridge) {
return base::WrapUnique(new TestingWilcoDtcSupportdBridgeWrapper( return base::WrapUnique(new TestingWilcoDtcSupportdBridgeWrapper(
mojo_wilco_dtc_supportd_service, std::move(url_loader_factory), bridge)); mojo_wilco_dtc_supportd_service, std::move(network_context), bridge));
} }
TestingWilcoDtcSupportdBridgeWrapper::~TestingWilcoDtcSupportdBridgeWrapper() = TestingWilcoDtcSupportdBridgeWrapper::~TestingWilcoDtcSupportdBridgeWrapper() =
...@@ -205,7 +207,7 @@ void TestingWilcoDtcSupportdBridgeWrapper::HandleMojoGetService( ...@@ -205,7 +207,7 @@ void TestingWilcoDtcSupportdBridgeWrapper::HandleMojoGetService(
TestingWilcoDtcSupportdBridgeWrapper::TestingWilcoDtcSupportdBridgeWrapper( TestingWilcoDtcSupportdBridgeWrapper::TestingWilcoDtcSupportdBridgeWrapper(
wilco_dtc_supportd::mojom::WilcoDtcSupportdService* wilco_dtc_supportd::mojom::WilcoDtcSupportdService*
mojo_wilco_dtc_supportd_service, mojo_wilco_dtc_supportd_service,
scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory, std::unique_ptr<WilcoDtcSupportdNetworkContext> network_context,
std::unique_ptr<WilcoDtcSupportdBridge>* bridge) std::unique_ptr<WilcoDtcSupportdBridge>* bridge)
: mojo_wilco_dtc_supportd_service_receiver_( : mojo_wilco_dtc_supportd_service_receiver_(
mojo_wilco_dtc_supportd_service) { mojo_wilco_dtc_supportd_service) {
...@@ -218,7 +220,7 @@ TestingWilcoDtcSupportdBridgeWrapper::TestingWilcoDtcSupportdBridgeWrapper( ...@@ -218,7 +220,7 @@ TestingWilcoDtcSupportdBridgeWrapper::TestingWilcoDtcSupportdBridgeWrapper(
base::BindRepeating( base::BindRepeating(
&TestingWilcoDtcSupportdBridgeWrapper::HandleMojoGetService, &TestingWilcoDtcSupportdBridgeWrapper::HandleMojoGetService,
base::Unretained(this)))), base::Unretained(this)))),
url_loader_factory, std::move(network_context),
std::make_unique<WilcoDtcSupportdNotificationController>( std::make_unique<WilcoDtcSupportdNotificationController>(
profile_manager->profile_manager())); profile_manager->profile_manager()));
} }
......
...@@ -5,11 +5,11 @@ ...@@ -5,11 +5,11 @@
#ifndef CHROME_BROWSER_CHROMEOS_WILCO_DTC_SUPPORTD_TESTING_WILCO_DTC_SUPPORTD_BRIDGE_WRAPPER_H_ #ifndef CHROME_BROWSER_CHROMEOS_WILCO_DTC_SUPPORTD_TESTING_WILCO_DTC_SUPPORTD_BRIDGE_WRAPPER_H_
#define CHROME_BROWSER_CHROMEOS_WILCO_DTC_SUPPORTD_TESTING_WILCO_DTC_SUPPORTD_BRIDGE_WRAPPER_H_ #define CHROME_BROWSER_CHROMEOS_WILCO_DTC_SUPPORTD_TESTING_WILCO_DTC_SUPPORTD_BRIDGE_WRAPPER_H_
#include <memory>
#include "base/callback.h" #include "base/callback.h"
#include "base/macros.h" #include "base/macros.h"
#include "base/memory/scoped_refptr.h" #include "chrome/services/wilco_dtc_supportd/public/mojom/wilco_dtc_supportd.mojom.h"
#include "chrome/browser/chromeos/wilco_dtc_supportd/wilco_dtc_supportd_bridge.h"
#include "chrome/services/wilco_dtc_supportd/public/mojom/wilco_dtc_supportd.mojom-forward.h"
#include "mojo/public/cpp/bindings/pending_receiver.h" #include "mojo/public/cpp/bindings/pending_receiver.h"
#include "mojo/public/cpp/bindings/pending_remote.h" #include "mojo/public/cpp/bindings/pending_remote.h"
#include "mojo/public/cpp/bindings/receiver.h" #include "mojo/public/cpp/bindings/receiver.h"
...@@ -18,6 +18,9 @@ ...@@ -18,6 +18,9 @@
namespace chromeos { namespace chromeos {
class WilcoDtcSupportdBridge;
class WilcoDtcSupportdNetworkContext;
// Manages a fake instance of WilcoDtcSupportdBridge for unit tests. Mocks out // Manages a fake instance of WilcoDtcSupportdBridge for unit tests. Mocks out
// the Mojo communication and provides tools for simulating and handling Mojo // the Mojo communication and provides tools for simulating and handling Mojo
// requests. // requests.
...@@ -31,7 +34,7 @@ class TestingWilcoDtcSupportdBridgeWrapper final { ...@@ -31,7 +34,7 @@ class TestingWilcoDtcSupportdBridgeWrapper final {
static std::unique_ptr<TestingWilcoDtcSupportdBridgeWrapper> Create( static std::unique_ptr<TestingWilcoDtcSupportdBridgeWrapper> Create(
wilco_dtc_supportd::mojom::WilcoDtcSupportdService* wilco_dtc_supportd::mojom::WilcoDtcSupportdService*
mojo_wilco_dtc_supportd_service, mojo_wilco_dtc_supportd_service,
scoped_refptr<network::SharedURLLoaderFactory> url_loade_factory, std::unique_ptr<WilcoDtcSupportdNetworkContext> network_context,
std::unique_ptr<WilcoDtcSupportdBridge>* bridge); std::unique_ptr<WilcoDtcSupportdBridge>* bridge);
~TestingWilcoDtcSupportdBridgeWrapper(); ~TestingWilcoDtcSupportdBridgeWrapper();
...@@ -57,7 +60,7 @@ class TestingWilcoDtcSupportdBridgeWrapper final { ...@@ -57,7 +60,7 @@ class TestingWilcoDtcSupportdBridgeWrapper final {
TestingWilcoDtcSupportdBridgeWrapper( TestingWilcoDtcSupportdBridgeWrapper(
wilco_dtc_supportd::mojom::WilcoDtcSupportdService* wilco_dtc_supportd::mojom::WilcoDtcSupportdService*
mojo_wilco_dtc_supportd_service, mojo_wilco_dtc_supportd_service,
scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory, std::unique_ptr<WilcoDtcSupportdNetworkContext> network_context,
std::unique_ptr<WilcoDtcSupportdBridge>* bridge); std::unique_ptr<WilcoDtcSupportdBridge>* bridge);
// Implements the GetService Mojo method of the WilcoDtcSupportdServiceFactory // Implements the GetService Mojo method of the WilcoDtcSupportdServiceFactory
......
// 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 "chrome/browser/chromeos/wilco_dtc_supportd/testing_wilco_dtc_supportd_network_context.h"
#include "services/network/public/mojom/url_loader_factory.mojom.h"
namespace chromeos {
TestingWilcoDtcSupportdNetworkContext::TestingWilcoDtcSupportdNetworkContext() =
default;
TestingWilcoDtcSupportdNetworkContext::
~TestingWilcoDtcSupportdNetworkContext() = default;
network::mojom::URLLoaderFactory*
TestingWilcoDtcSupportdNetworkContext::GetURLLoaderFactory() {
return &test_url_loader_factory_;
}
network::TestURLLoaderFactory*
TestingWilcoDtcSupportdNetworkContext::test_url_loader_factory() {
return &test_url_loader_factory_;
}
} // namespace chromeos
// 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 CHROME_BROWSER_CHROMEOS_WILCO_DTC_SUPPORTD_TESTING_WILCO_DTC_SUPPORTD_NETWORK_CONTEXT_H_
#define CHROME_BROWSER_CHROMEOS_WILCO_DTC_SUPPORTD_TESTING_WILCO_DTC_SUPPORTD_NETWORK_CONTEXT_H_
#include "base/macros.h"
#include "chrome/browser/chromeos/wilco_dtc_supportd/wilco_dtc_supportd_network_context.h"
#include "services/network/test/test_url_loader_factory.h"
namespace network {
namespace mojom {
class URLLoaderFactory;
} // namespace mojom
} // namespace network
namespace chromeos {
class TestingWilcoDtcSupportdNetworkContext
: public WilcoDtcSupportdNetworkContext {
public:
TestingWilcoDtcSupportdNetworkContext();
~TestingWilcoDtcSupportdNetworkContext() override;
// WilcoDtcSupportdNetworkContext overrides:
network::mojom::URLLoaderFactory* GetURLLoaderFactory() override;
network::TestURLLoaderFactory* test_url_loader_factory();
private:
network::TestURLLoaderFactory test_url_loader_factory_;
DISALLOW_COPY_AND_ASSIGN(TestingWilcoDtcSupportdNetworkContext);
};
} // namespace chromeos
#endif // CHROME_BROWSER_CHROMEOS_WILCO_DTC_SUPPORTD_TESTING_WILCO_DTC_SUPPORTD_NETWORK_CONTEXT_H_
...@@ -17,6 +17,7 @@ ...@@ -17,6 +17,7 @@
#include "chrome/browser/chromeos/wilco_dtc_supportd/mojo_utils.h" #include "chrome/browser/chromeos/wilco_dtc_supportd/mojo_utils.h"
#include "chrome/browser/chromeos/wilco_dtc_supportd/wilco_dtc_supportd_client.h" #include "chrome/browser/chromeos/wilco_dtc_supportd/wilco_dtc_supportd_client.h"
#include "chrome/browser/chromeos/wilco_dtc_supportd/wilco_dtc_supportd_messaging.h" #include "chrome/browser/chromeos/wilco_dtc_supportd/wilco_dtc_supportd_messaging.h"
#include "chrome/browser/chromeos/wilco_dtc_supportd/wilco_dtc_supportd_network_context.h"
#include "chrome/browser/chromeos/wilco_dtc_supportd/wilco_dtc_supportd_notification_controller.h" #include "chrome/browser/chromeos/wilco_dtc_supportd/wilco_dtc_supportd_notification_controller.h"
#include "chrome/browser/profiles/profile_manager.h" #include "chrome/browser/profiles/profile_manager.h"
#include "chromeos/dbus/dbus_thread_manager.h" #include "chromeos/dbus/dbus_thread_manager.h"
...@@ -27,7 +28,6 @@ ...@@ -27,7 +28,6 @@
#include "mojo/public/cpp/platform/platform_handle.h" #include "mojo/public/cpp/platform/platform_handle.h"
#include "mojo/public/cpp/system/invitation.h" #include "mojo/public/cpp/system/invitation.h"
#include "mojo/public/cpp/system/message_pipe.h" #include "mojo/public/cpp/system/message_pipe.h"
#include "services/network/public/cpp/shared_url_loader_factory.h"
#include "third_party/cros_system_api/dbus/wilco_dtc_supportd/dbus-constants.h" #include "third_party/cros_system_api/dbus/wilco_dtc_supportd/dbus-constants.h"
namespace chromeos { namespace chromeos {
...@@ -113,19 +113,19 @@ int WilcoDtcSupportdBridge::max_connection_attempt_count_for_testing() { ...@@ -113,19 +113,19 @@ int WilcoDtcSupportdBridge::max_connection_attempt_count_for_testing() {
} }
WilcoDtcSupportdBridge::WilcoDtcSupportdBridge( WilcoDtcSupportdBridge::WilcoDtcSupportdBridge(
scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory) std::unique_ptr<WilcoDtcSupportdNetworkContext> network_context)
: WilcoDtcSupportdBridge( : WilcoDtcSupportdBridge(
std::make_unique<WilcoDtcSupportdBridgeDelegateImpl>(), std::make_unique<WilcoDtcSupportdBridgeDelegateImpl>(),
std::move(url_loader_factory), std::move(network_context),
std::make_unique<WilcoDtcSupportdNotificationController>()) {} std::make_unique<WilcoDtcSupportdNotificationController>()) {}
WilcoDtcSupportdBridge::WilcoDtcSupportdBridge( WilcoDtcSupportdBridge::WilcoDtcSupportdBridge(
std::unique_ptr<Delegate> delegate, std::unique_ptr<Delegate> delegate,
scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory, std::unique_ptr<WilcoDtcSupportdNetworkContext> network_context,
std::unique_ptr<WilcoDtcSupportdNotificationController> std::unique_ptr<WilcoDtcSupportdNotificationController>
notification_controller) notification_controller)
: delegate_(std::move(delegate)), : delegate_(std::move(delegate)),
web_request_service_(std::move(url_loader_factory)), web_request_service_(std::move(network_context)),
notification_controller_(std::move(notification_controller)) { notification_controller_(std::move(notification_controller)) {
DCHECK(delegate_); DCHECK(delegate_);
DCHECK(notification_controller_); DCHECK(notification_controller_);
......
...@@ -20,12 +20,10 @@ ...@@ -20,12 +20,10 @@
#include "mojo/public/cpp/bindings/remote.h" #include "mojo/public/cpp/bindings/remote.h"
#include "mojo/public/cpp/system/buffer.h" #include "mojo/public/cpp/system/buffer.h"
namespace network {
class SharedURLLoaderFactory;
} // namespace network
namespace chromeos { namespace chromeos {
class WilcoDtcSupportdNetworkContext;
// Establishes Mojo communication to the wilco_dtc_supportd daemon. The Mojo // Establishes Mojo communication to the wilco_dtc_supportd daemon. The Mojo
// pipe gets bootstrapped via D-Bus, and the class takes care of waiting until // pipe gets bootstrapped via D-Bus, and the class takes care of waiting until
// the wilco_dtc_supportd D-Bus service gets started and of repeating the // the wilco_dtc_supportd D-Bus service gets started and of repeating the
...@@ -56,11 +54,11 @@ class WilcoDtcSupportdBridge final ...@@ -56,11 +54,11 @@ class WilcoDtcSupportdBridge final
static int max_connection_attempt_count_for_testing(); static int max_connection_attempt_count_for_testing();
explicit WilcoDtcSupportdBridge( explicit WilcoDtcSupportdBridge(
scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory); std::unique_ptr<WilcoDtcSupportdNetworkContext> network_context);
// For use in tests. // For use in tests.
WilcoDtcSupportdBridge( WilcoDtcSupportdBridge(
std::unique_ptr<Delegate> delegate, std::unique_ptr<Delegate> delegate,
scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory, std::unique_ptr<WilcoDtcSupportdNetworkContext> network_context,
std::unique_ptr<WilcoDtcSupportdNotificationController> std::unique_ptr<WilcoDtcSupportdNotificationController>
notification_controller); notification_controller);
......
...@@ -8,12 +8,13 @@ ...@@ -8,12 +8,13 @@
#include "base/bind.h" #include "base/bind.h"
#include "base/logging.h" #include "base/logging.h"
#include "base/memory/scoped_refptr.h"
#include "base/optional.h" #include "base/optional.h"
#include "base/posix/eintr_wrapper.h" #include "base/posix/eintr_wrapper.h"
#include "base/test/task_environment.h" #include "base/test/task_environment.h"
#include "chrome/browser/chromeos/wilco_dtc_supportd/fake_wilco_dtc_supportd_client.h" #include "chrome/browser/chromeos/wilco_dtc_supportd/fake_wilco_dtc_supportd_client.h"
#include "chrome/browser/chromeos/wilco_dtc_supportd/testing_wilco_dtc_supportd_network_context.h"
#include "chrome/browser/chromeos/wilco_dtc_supportd/wilco_dtc_supportd_bridge.h" #include "chrome/browser/chromeos/wilco_dtc_supportd/wilco_dtc_supportd_bridge.h"
#include "chrome/browser/chromeos/wilco_dtc_supportd/wilco_dtc_supportd_network_context.h"
#include "chrome/services/wilco_dtc_supportd/public/mojom/wilco_dtc_supportd.mojom.h" #include "chrome/services/wilco_dtc_supportd/public/mojom/wilco_dtc_supportd.mojom.h"
#include "chrome/test/base/testing_browser_process.h" #include "chrome/test/base/testing_browser_process.h"
#include "chrome/test/base/testing_profile_manager.h" #include "chrome/test/base/testing_profile_manager.h"
...@@ -22,8 +23,6 @@ ...@@ -22,8 +23,6 @@
#include "mojo/public/cpp/bindings/receiver.h" #include "mojo/public/cpp/bindings/receiver.h"
#include "mojo/public/cpp/bindings/remote.h" #include "mojo/public/cpp/bindings/remote.h"
#include "mojo/public/cpp/system/handle.h" #include "mojo/public/cpp/system/handle.h"
#include "services/network/public/cpp/weak_wrapper_shared_url_loader_factory.h"
#include "services/network/test/test_url_loader_factory.h"
#include "testing/gmock/include/gmock/gmock.h" #include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h" #include "testing/gtest/include/gtest/gtest.h"
...@@ -191,8 +190,7 @@ class WilcoDtcSupportdBridgeTest : public testing::Test { ...@@ -191,8 +190,7 @@ class WilcoDtcSupportdBridgeTest : public testing::Test {
wilco_dtc_supportd_bridge_ = std::make_unique<WilcoDtcSupportdBridge>( wilco_dtc_supportd_bridge_ = std::make_unique<WilcoDtcSupportdBridge>(
std::make_unique<FakeWilcoDtcSupportdBridgeDelegate>( std::make_unique<FakeWilcoDtcSupportdBridgeDelegate>(
&mojo_wilco_dtc_supportd_service_factory_), &mojo_wilco_dtc_supportd_service_factory_),
base::MakeRefCounted<network::WeakWrapperSharedURLLoaderFactory>( std::make_unique<TestingWilcoDtcSupportdNetworkContext>(),
&test_url_loader_factory_),
std::move(notification_controller)); std::move(notification_controller));
} }
...@@ -264,7 +262,6 @@ class WilcoDtcSupportdBridgeTest : public testing::Test { ...@@ -264,7 +262,6 @@ class WilcoDtcSupportdBridgeTest : public testing::Test {
mojo::Remote<wilco_dtc_supportd::mojom::WilcoDtcSupportdClient> mojo::Remote<wilco_dtc_supportd::mojom::WilcoDtcSupportdClient>
mojo_wilco_dtc_supportd_client_; mojo_wilco_dtc_supportd_client_;
network::TestURLLoaderFactory test_url_loader_factory_;
}; };
} // namespace } // namespace
......
...@@ -12,6 +12,7 @@ ...@@ -12,6 +12,7 @@
#include "base/strings/string_util.h" #include "base/strings/string_util.h"
#include "chrome/browser/browser_process.h" #include "chrome/browser/browser_process.h"
#include "chrome/browser/chromeos/wilco_dtc_supportd/wilco_dtc_supportd_bridge.h" #include "chrome/browser/chromeos/wilco_dtc_supportd/wilco_dtc_supportd_bridge.h"
#include "chrome/browser/chromeos/wilco_dtc_supportd/wilco_dtc_supportd_network_context.h"
#include "chrome/browser/net/system_network_context_manager.h" #include "chrome/browser/net/system_network_context_manager.h"
#include "chromeos/dbus/upstart/upstart_client.h" #include "chromeos/dbus/upstart/upstart_client.h"
#include "components/session_manager/core/session_manager.h" #include "components/session_manager/core/session_manager.h"
...@@ -49,8 +50,7 @@ WilcoDtcSupportdManagerDelegateImpl::~WilcoDtcSupportdManagerDelegateImpl() = ...@@ -49,8 +50,7 @@ WilcoDtcSupportdManagerDelegateImpl::~WilcoDtcSupportdManagerDelegateImpl() =
std::unique_ptr<WilcoDtcSupportdBridge> std::unique_ptr<WilcoDtcSupportdBridge>
WilcoDtcSupportdManagerDelegateImpl::CreateWilcoDtcSupportdBridge() { WilcoDtcSupportdManagerDelegateImpl::CreateWilcoDtcSupportdBridge() {
return std::make_unique<WilcoDtcSupportdBridge>( return std::make_unique<WilcoDtcSupportdBridge>(
g_browser_process->system_network_context_manager() std::make_unique<WilcoDtcSupportdNetworkContextImpl>());
->GetSharedURLLoaderFactory());
} }
// Returns true if only affiliated users are logged-in. // Returns true if only affiliated users are logged-in.
......
...@@ -4,6 +4,8 @@ ...@@ -4,6 +4,8 @@
#include "chrome/browser/chromeos/wilco_dtc_supportd/wilco_dtc_supportd_manager.h" #include "chrome/browser/chromeos/wilco_dtc_supportd/wilco_dtc_supportd_manager.h"
#include <memory>
#include "base/barrier_closure.h" #include "base/barrier_closure.h"
#include "base/memory/ptr_util.h" #include "base/memory/ptr_util.h"
#include "base/run_loop.h" #include "base/run_loop.h"
...@@ -12,15 +14,16 @@ ...@@ -12,15 +14,16 @@
#include "chrome/browser/chromeos/settings/scoped_testing_cros_settings.h" #include "chrome/browser/chromeos/settings/scoped_testing_cros_settings.h"
#include "chrome/browser/chromeos/settings/stub_cros_settings_provider.h" #include "chrome/browser/chromeos/settings/stub_cros_settings_provider.h"
#include "chrome/browser/chromeos/wilco_dtc_supportd/testing_wilco_dtc_supportd_bridge_wrapper.h" #include "chrome/browser/chromeos/wilco_dtc_supportd/testing_wilco_dtc_supportd_bridge_wrapper.h"
#include "chrome/browser/chromeos/wilco_dtc_supportd/testing_wilco_dtc_supportd_network_context.h"
#include "chrome/browser/chromeos/wilco_dtc_supportd/wilco_dtc_supportd_bridge.h"
#include "chrome/browser/chromeos/wilco_dtc_supportd/wilco_dtc_supportd_client.h" #include "chrome/browser/chromeos/wilco_dtc_supportd/wilco_dtc_supportd_client.h"
#include "chrome/browser/chromeos/wilco_dtc_supportd/wilco_dtc_supportd_network_context.h"
#include "chrome/services/wilco_dtc_supportd/public/mojom/wilco_dtc_supportd.mojom.h" #include "chrome/services/wilco_dtc_supportd/public/mojom/wilco_dtc_supportd.mojom.h"
#include "chromeos/dbus/upstart/fake_upstart_client.h" #include "chromeos/dbus/upstart/fake_upstart_client.h"
#include "components/session_manager/core/session_manager.h" #include "components/session_manager/core/session_manager.h"
#include "components/session_manager/session_manager_types.h" #include "components/session_manager/session_manager_types.h"
#include "components/user_manager/scoped_user_manager.h" #include "components/user_manager/scoped_user_manager.h"
#include "components/user_manager/user_names.h" #include "components/user_manager/user_names.h"
#include "services/network/public/cpp/weak_wrapper_shared_url_loader_factory.h"
#include "services/network/test/test_url_loader_factory.h"
#include "testing/gmock/include/gmock/gmock.h" #include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h" #include "testing/gtest/include/gtest/gtest.h"
...@@ -77,8 +80,7 @@ class FakeWilcoDtcSupportdManagerDelegate final ...@@ -77,8 +80,7 @@ class FakeWilcoDtcSupportdManagerDelegate final
testing_wilco_dtc_supportd_bridge_wrapper_ = testing_wilco_dtc_supportd_bridge_wrapper_ =
TestingWilcoDtcSupportdBridgeWrapper::Create( TestingWilcoDtcSupportdBridgeWrapper::Create(
mojo_wilco_dtc_supportd_service_, mojo_wilco_dtc_supportd_service_,
base::MakeRefCounted<network::WeakWrapperSharedURLLoaderFactory>( std::make_unique<TestingWilcoDtcSupportdNetworkContext>(),
&test_url_loader_factory_),
&wilco_dtc_supportd_bridge); &wilco_dtc_supportd_bridge);
DCHECK(wilco_dtc_supportd_bridge); DCHECK(wilco_dtc_supportd_bridge);
testing_wilco_dtc_supportd_bridge_wrapper_->EstablishFakeMojoConnection(); testing_wilco_dtc_supportd_bridge_wrapper_->EstablishFakeMojoConnection();
...@@ -86,7 +88,6 @@ class FakeWilcoDtcSupportdManagerDelegate final ...@@ -86,7 +88,6 @@ class FakeWilcoDtcSupportdManagerDelegate final
} }
private: private:
network::TestURLLoaderFactory test_url_loader_factory_;
std::unique_ptr<TestingWilcoDtcSupportdBridgeWrapper> std::unique_ptr<TestingWilcoDtcSupportdBridgeWrapper>
testing_wilco_dtc_supportd_bridge_wrapper_; testing_wilco_dtc_supportd_bridge_wrapper_;
MockMojoWilcoDtcSupportdService* mojo_wilco_dtc_supportd_service_; MockMojoWilcoDtcSupportdService* mojo_wilco_dtc_supportd_service_;
......
...@@ -9,19 +9,19 @@ ...@@ -9,19 +9,19 @@
#include "base/bind.h" #include "base/bind.h"
#include "base/callback.h" #include "base/callback.h"
#include "base/logging.h" #include "base/logging.h"
#include "base/memory/scoped_refptr.h"
#include "base/memory/shared_memory_mapping.h" #include "base/memory/shared_memory_mapping.h"
#include "base/run_loop.h" #include "base/run_loop.h"
#include "base/test/task_environment.h" #include "base/test/task_environment.h"
#include "chrome/browser/chromeos/wilco_dtc_supportd/mojo_utils.h" #include "chrome/browser/chromeos/wilco_dtc_supportd/mojo_utils.h"
#include "chrome/browser/chromeos/wilco_dtc_supportd/testing_wilco_dtc_supportd_bridge_wrapper.h" #include "chrome/browser/chromeos/wilco_dtc_supportd/testing_wilco_dtc_supportd_bridge_wrapper.h"
#include "chrome/browser/chromeos/wilco_dtc_supportd/testing_wilco_dtc_supportd_network_context.h"
#include "chrome/browser/chromeos/wilco_dtc_supportd/wilco_dtc_supportd_bridge.h"
#include "chrome/browser/chromeos/wilco_dtc_supportd/wilco_dtc_supportd_client.h" #include "chrome/browser/chromeos/wilco_dtc_supportd/wilco_dtc_supportd_client.h"
#include "chrome/browser/chromeos/wilco_dtc_supportd/wilco_dtc_supportd_messaging.h" #include "chrome/browser/chromeos/wilco_dtc_supportd/wilco_dtc_supportd_messaging.h"
#include "chrome/browser/chromeos/wilco_dtc_supportd/wilco_dtc_supportd_network_context.h"
#include "chrome/services/wilco_dtc_supportd/public/mojom/wilco_dtc_supportd.mojom.h" #include "chrome/services/wilco_dtc_supportd/public/mojom/wilco_dtc_supportd.mojom.h"
#include "extensions/browser/api/messaging/native_message_host.h" #include "extensions/browser/api/messaging/native_message_host.h"
#include "mojo/public/cpp/system/handle.h" #include "mojo/public/cpp/system/handle.h"
#include "services/network/public/cpp/weak_wrapper_shared_url_loader_factory.h"
#include "services/network/test/test_url_loader_factory.h"
#include "testing/gmock/include/gmock/gmock.h" #include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h" #include "testing/gtest/include/gtest/gtest.h"
...@@ -130,8 +130,7 @@ class WilcoDtcSupportdMessagingOpenedByExtensionTest : public testing::Test { ...@@ -130,8 +130,7 @@ class WilcoDtcSupportdMessagingOpenedByExtensionTest : public testing::Test {
testing_wilco_dtc_supportd_bridge_wrapper_ = testing_wilco_dtc_supportd_bridge_wrapper_ =
TestingWilcoDtcSupportdBridgeWrapper::Create( TestingWilcoDtcSupportdBridgeWrapper::Create(
&mojo_wilco_dtc_supportd_service_, &mojo_wilco_dtc_supportd_service_,
base::MakeRefCounted<network::WeakWrapperSharedURLLoaderFactory>( std::make_unique<TestingWilcoDtcSupportdNetworkContext>(),
&test_url_loader_factory_),
&wilco_dtc_supportd_bridge_); &wilco_dtc_supportd_bridge_);
} }
...@@ -156,7 +155,6 @@ class WilcoDtcSupportdMessagingOpenedByExtensionTest : public testing::Test { ...@@ -156,7 +155,6 @@ class WilcoDtcSupportdMessagingOpenedByExtensionTest : public testing::Test {
private: private:
base::test::TaskEnvironment task_environment_; base::test::TaskEnvironment task_environment_;
StrictMock<MockMojoWilcoDtcSupportdService> mojo_wilco_dtc_supportd_service_; StrictMock<MockMojoWilcoDtcSupportdService> mojo_wilco_dtc_supportd_service_;
network::TestURLLoaderFactory test_url_loader_factory_;
std::unique_ptr<TestingWilcoDtcSupportdBridgeWrapper> std::unique_ptr<TestingWilcoDtcSupportdBridgeWrapper>
testing_wilco_dtc_supportd_bridge_wrapper_; testing_wilco_dtc_supportd_bridge_wrapper_;
std::unique_ptr<WilcoDtcSupportdBridge> wilco_dtc_supportd_bridge_; std::unique_ptr<WilcoDtcSupportdBridge> wilco_dtc_supportd_bridge_;
......
// 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 "chrome/browser/chromeos/wilco_dtc_supportd/wilco_dtc_supportd_network_context.h"
#include <memory>
#include "chrome/browser/browser_process.h"
#include "chrome/browser/net/system_network_context_manager.h"
#include "content/public/browser/browser_thread.h"
#include "content/public/browser/network_service_instance.h"
#include "services/network/network_service.h"
namespace chromeos {
WilcoDtcSupportdNetworkContextImpl::WilcoDtcSupportdNetworkContextImpl()
: proxy_config_monitor_(g_browser_process->local_state()) {
DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
}
WilcoDtcSupportdNetworkContextImpl::~WilcoDtcSupportdNetworkContextImpl() =
default;
network::mojom::URLLoaderFactory*
WilcoDtcSupportdNetworkContextImpl::GetURLLoaderFactory() {
DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
if (!url_loader_factory_ || !url_loader_factory_.is_connected()) {
EnsureNetworkContextExists();
network::mojom::URLLoaderFactoryParamsPtr url_loader_factory_params =
network::mojom::URLLoaderFactoryParams::New();
url_loader_factory_params->process_id = network::mojom::kBrowserProcessId;
url_loader_factory_params->is_corb_enabled = false;
url_loader_factory_params->is_trusted = true;
url_loader_factory_.reset();
network_context_->CreateURLLoaderFactory(
url_loader_factory_.BindNewPipeAndPassReceiver(),
std::move(url_loader_factory_params));
}
return url_loader_factory_.get();
}
void WilcoDtcSupportdNetworkContextImpl::FlushForTesting() {
if (network_context_) {
network_context_.FlushForTesting();
}
if (url_loader_factory_) {
url_loader_factory_.FlushForTesting();
}
}
void WilcoDtcSupportdNetworkContextImpl::EnsureNetworkContextExists() {
if (network_context_ && network_context_.is_connected()) {
return;
}
CreateNetworkContext();
}
void WilcoDtcSupportdNetworkContextImpl::CreateNetworkContext() {
network::mojom::NetworkContextParamsPtr network_context_params =
g_browser_process->system_network_context_manager()
->CreateDefaultNetworkContextParams();
network_context_params->context_name = "wilco_dtc";
network_context_params->http_cache_enabled = false;
proxy_config_monitor_.AddToNetworkContextParams(network_context_params.get());
network_context_.reset();
content::GetNetworkService()->CreateNetworkContext(
network_context_.BindNewPipeAndPassReceiver(),
std::move(network_context_params));
}
} // namespace chromeos
// 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 CHROME_BROWSER_CHROMEOS_WILCO_DTC_SUPPORTD_WILCO_DTC_SUPPORTD_NETWORK_CONTEXT_H_
#define CHROME_BROWSER_CHROMEOS_WILCO_DTC_SUPPORTD_WILCO_DTC_SUPPORTD_NETWORK_CONTEXT_H_
#include "base/macros.h"
#include "chrome/browser/net/proxy_config_monitor.h"
#include "mojo/public/cpp/bindings/remote.h"
#include "services/network/public/mojom/network_context.mojom.h"
#include "services/network/public/mojom/url_loader_factory.mojom.h"
namespace chromeos {
class WilcoDtcSupportdNetworkContext {
public:
virtual ~WilcoDtcSupportdNetworkContext() = default;
virtual network::mojom::URLLoaderFactory* GetURLLoaderFactory() = 0;
};
class WilcoDtcSupportdNetworkContextImpl
: public WilcoDtcSupportdNetworkContext {
public:
WilcoDtcSupportdNetworkContextImpl();
~WilcoDtcSupportdNetworkContextImpl() override;
// WilcoDtcSupportdNetworkContext overrides:
network::mojom::URLLoaderFactory* GetURLLoaderFactory() override;
void FlushForTesting();
private:
// Ensures that Network Context created and connected to the network service.
void EnsureNetworkContextExists();
// Creates Network Context.
void CreateNetworkContext();
ProxyConfigMonitor proxy_config_monitor_;
// NetworkContext using the network service.
mojo::Remote<network::mojom::NetworkContext> network_context_;
mojo::Remote<network::mojom::URLLoaderFactory> url_loader_factory_;
DISALLOW_COPY_AND_ASSIGN(WilcoDtcSupportdNetworkContextImpl);
};
} // namespace chromeos
#endif // CHROME_BROWSER_CHROMEOS_WILCO_DTC_SUPPORTD_WILCO_DTC_SUPPORTD_NETWORK_CONTEXT_H_
...@@ -10,6 +10,7 @@ ...@@ -10,6 +10,7 @@
#include "base/callback.h" #include "base/callback.h"
#include "base/logging.h" #include "base/logging.h"
#include "chrome/browser/chromeos/wilco_dtc_supportd/mojo_utils.h" #include "chrome/browser/chromeos/wilco_dtc_supportd/mojo_utils.h"
#include "chrome/browser/chromeos/wilco_dtc_supportd/wilco_dtc_supportd_network_context.h"
#include "mojo/public/cpp/system/buffer.h" #include "mojo/public/cpp/system/buffer.h"
#include "net/base/load_flags.h" #include "net/base/load_flags.h"
#include "net/base/net_errors.h" #include "net/base/net_errors.h"
...@@ -17,9 +18,12 @@ ...@@ -17,9 +18,12 @@
#include "net/http/http_request_headers.h" #include "net/http/http_request_headers.h"
#include "net/http/http_response_headers.h" #include "net/http/http_response_headers.h"
#include "net/http/http_status_code.h" #include "net/http/http_status_code.h"
#include "net/traffic_annotation/network_traffic_annotation.h"
#include "services/network/network_service.h"
#include "services/network/public/cpp/resource_request.h" #include "services/network/public/cpp/resource_request.h"
#include "services/network/public/cpp/shared_url_loader_factory.h"
#include "services/network/public/cpp/simple_url_loader.h" #include "services/network/public/cpp/simple_url_loader.h"
#include "services/network/public/mojom/network_context.mojom.h"
#include "services/network/public/mojom/url_loader_factory.mojom.h"
#include "url/url_constants.h" #include "url/url_constants.h"
namespace chromeos { namespace chromeos {
...@@ -57,9 +61,9 @@ bool IsHttpOkCode(int code) { ...@@ -57,9 +61,9 @@ bool IsHttpOkCode(int code) {
} // namespace } // namespace
WilcoDtcSupportdWebRequestService::WilcoDtcSupportdWebRequestService( WilcoDtcSupportdWebRequestService::WilcoDtcSupportdWebRequestService(
scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory) std::unique_ptr<WilcoDtcSupportdNetworkContext> network_context)
: url_loader_factory_(std::move(url_loader_factory)) { : network_context_(std::move(network_context)) {
DCHECK(url_loader_factory_); DCHECK(network_context_);
} }
WilcoDtcSupportdWebRequestService::~WilcoDtcSupportdWebRequestService() { WilcoDtcSupportdWebRequestService::~WilcoDtcSupportdWebRequestService() {
...@@ -148,7 +152,7 @@ void WilcoDtcSupportdWebRequestService::PerformRequest( ...@@ -148,7 +152,7 @@ void WilcoDtcSupportdWebRequestService::PerformRequest(
} }
// Do not allow local requests. // Do not allow local requests.
if (net::IsLocalhost(url)) { if (!allow_local_requests_ && net::IsLocalhost(url)) {
LOG(ERROR) << "Local requests are not allowed."; LOG(ERROR) << "Local requests are not allowed.";
std::move(callback).Run(wilco_dtc_supportd::mojom:: std::move(callback).Run(wilco_dtc_supportd::mojom::
WilcoDtcSupportdWebRequestStatus::kNetworkError, WilcoDtcSupportdWebRequestStatus::kNetworkError,
...@@ -223,7 +227,7 @@ void WilcoDtcSupportdWebRequestService::MaybeStartNextRequest() { ...@@ -223,7 +227,7 @@ void WilcoDtcSupportdWebRequestService::MaybeStartNextRequest() {
// Do not retry. // Do not retry.
url_loader_->SetRetryOptions(0, network::SimpleURLLoader::RETRY_NEVER); url_loader_->SetRetryOptions(0, network::SimpleURLLoader::RETRY_NEVER);
url_loader_->DownloadToString( url_loader_->DownloadToString(
url_loader_factory_.get(), network_context_->GetURLLoaderFactory(),
base::BindOnce(&WilcoDtcSupportdWebRequestService::OnRequestComplete, base::BindOnce(&WilcoDtcSupportdWebRequestService::OnRequestComplete,
base::Unretained(this)), base::Unretained(this)),
kWilcoDtcSupportdWebResponseMaxSizeInBytes); kWilcoDtcSupportdWebResponseMaxSizeInBytes);
......
...@@ -11,7 +11,6 @@ ...@@ -11,7 +11,6 @@
#include "base/containers/queue.h" #include "base/containers/queue.h"
#include "base/macros.h" #include "base/macros.h"
#include "base/memory/scoped_refptr.h"
#include "base/strings/string_piece.h" #include "base/strings/string_piece.h"
#include "chrome/services/wilco_dtc_supportd/public/mojom/wilco_dtc_supportd.mojom.h" #include "chrome/services/wilco_dtc_supportd/public/mojom/wilco_dtc_supportd.mojom.h"
#include "url/gurl.h" #include "url/gurl.h"
...@@ -19,7 +18,6 @@ ...@@ -19,7 +18,6 @@
namespace network { namespace network {
struct ResourceRequest; struct ResourceRequest;
class SharedURLLoaderFactory;
class SimpleURLLoader; class SimpleURLLoader;
} // namespace network } // namespace network
...@@ -32,6 +30,8 @@ extern const int kWilcoDtcSupportdWebRequestQueueMaxSize; ...@@ -32,6 +30,8 @@ extern const int kWilcoDtcSupportdWebRequestQueueMaxSize;
// Max size of web response body in bytes. // Max size of web response body in bytes.
extern const int kWilcoDtcSupportdWebResponseMaxSizeInBytes; extern const int kWilcoDtcSupportdWebResponseMaxSizeInBytes;
class WilcoDtcSupportdNetworkContext;
// This class manages and performs web requests initiated by // This class manages and performs web requests initiated by
// wilco_dtc_supportd_processor. This service performs only one request at a // wilco_dtc_supportd_processor. This service performs only one request at a
// time and queues additional incoming requests. It can handle the limited // time and queues additional incoming requests. It can handle the limited
...@@ -45,7 +45,7 @@ class WilcoDtcSupportdWebRequestService final { ...@@ -45,7 +45,7 @@ class WilcoDtcSupportdWebRequestService final {
mojo::ScopedHandle)>; mojo::ScopedHandle)>;
explicit WilcoDtcSupportdWebRequestService( explicit WilcoDtcSupportdWebRequestService(
scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory); std::unique_ptr<WilcoDtcSupportdNetworkContext> network_context);
~WilcoDtcSupportdWebRequestService(); ~WilcoDtcSupportdWebRequestService();
// Performs web request. The response is returned by |callback| which is // Performs web request. The response is returned by |callback| which is
...@@ -62,6 +62,10 @@ class WilcoDtcSupportdWebRequestService final { ...@@ -62,6 +62,10 @@ class WilcoDtcSupportdWebRequestService final {
int request_queue_size_for_testing() { return request_queue_.size(); } int request_queue_size_for_testing() { return request_queue_.size(); }
void set_allow_local_requests_for_testing(bool allow) {
allow_local_requests_ = allow;
}
private: private:
struct WebRequest { struct WebRequest {
WebRequest(); WebRequest();
...@@ -79,7 +83,11 @@ class WilcoDtcSupportdWebRequestService final { ...@@ -79,7 +83,11 @@ class WilcoDtcSupportdWebRequestService final {
// Starts the next web request if there is any in the |request_queue_|. // Starts the next web request if there is any in the |request_queue_|.
void OnRequestComplete(std::unique_ptr<std::string> response_body); void OnRequestComplete(std::unique_ptr<std::string> response_body);
scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory_; // Configures whether it's allowed to perform web requests to the local host
// URL. Change only for tests.
bool allow_local_requests_ = false;
std::unique_ptr<WilcoDtcSupportdNetworkContext> network_context_;
// Should be reset for every web request. // Should be reset for every web request.
std::unique_ptr<network::SimpleURLLoader> url_loader_; std::unique_ptr<network::SimpleURLLoader> url_loader_;
......
...@@ -9,26 +9,25 @@ ...@@ -9,26 +9,25 @@
#include "base/bind.h" #include "base/bind.h"
#include "base/logging.h" #include "base/logging.h"
#include "base/memory/scoped_refptr.h"
#include "base/memory/shared_memory_mapping.h" #include "base/memory/shared_memory_mapping.h"
#include "base/run_loop.h" #include "base/run_loop.h"
#include "base/strings/string_piece.h" #include "base/strings/string_piece.h"
#include "base/strings/stringprintf.h" #include "base/strings/stringprintf.h"
#include "base/test/task_environment.h" #include "base/test/task_environment.h"
#include "chrome/browser/chromeos/wilco_dtc_supportd/mojo_utils.h" #include "chrome/browser/chromeos/wilco_dtc_supportd/mojo_utils.h"
#include "chrome/browser/chromeos/wilco_dtc_supportd/testing_wilco_dtc_supportd_network_context.h"
#include "chrome/browser/chromeos/wilco_dtc_supportd/wilco_dtc_supportd_web_request_service.h"
#include "chrome/services/wilco_dtc_supportd/public/mojom/wilco_dtc_supportd.mojom.h" #include "chrome/services/wilco_dtc_supportd/public/mojom/wilco_dtc_supportd.mojom.h"
#include "net/base/net_errors.h" #include "net/base/net_errors.h"
#include "net/http/http_request_headers.h" #include "net/http/http_request_headers.h"
#include "net/http/http_status_code.h" #include "net/http/http_status_code.h"
#include "services/network/public/cpp/resource_request.h" #include "services/network/public/cpp/resource_request.h"
#include "services/network/public/cpp/weak_wrapper_shared_url_loader_factory.h"
#include "services/network/test/test_url_loader_factory.h" #include "services/network/test/test_url_loader_factory.h"
#include "services/network/test/test_utils.h" #include "services/network/test/test_utils.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h" #include "testing/gtest/include/gtest/gtest.h"
#include "url/gurl.h" #include "url/gurl.h"
#include "chrome/browser/chromeos/wilco_dtc_supportd/wilco_dtc_supportd_web_request_service.h"
namespace chromeos { namespace chromeos {
namespace { namespace {
...@@ -66,15 +65,23 @@ class WilcoDtcSupportdWebRequestServiceTest : public testing::Test { ...@@ -66,15 +65,23 @@ class WilcoDtcSupportdWebRequestServiceTest : public testing::Test {
int http_status; int http_status;
std::string response_body; std::string response_body;
}; };
WilcoDtcSupportdWebRequestServiceTest() { WilcoDtcSupportdWebRequestServiceTest() {
auto testing_network_context =
std::make_unique<TestingWilcoDtcSupportdNetworkContext>();
testing_network_context_ = testing_network_context.get();
web_request_service_ = std::make_unique<WilcoDtcSupportdWebRequestService>( web_request_service_ = std::make_unique<WilcoDtcSupportdWebRequestService>(
base::MakeRefCounted<network::WeakWrapperSharedURLLoaderFactory>( std::move(testing_network_context));
&test_url_loader_factory_));
} }
~WilcoDtcSupportdWebRequestServiceTest() override {} ~WilcoDtcSupportdWebRequestServiceTest() override {}
void TearDown() override { test_url_loader_factory_.ClearResponses(); } void TearDown() override {
if (testing_network_context_) {
testing_network_context_->test_url_loader_factory()->ClearResponses();
}
}
// Start new web request with the next parameters: // Start new web request with the next parameters:
// * web request parameters: // * web request parameters:
...@@ -109,12 +116,16 @@ class WilcoDtcSupportdWebRequestServiceTest : public testing::Test { ...@@ -109,12 +116,16 @@ class WilcoDtcSupportdWebRequestServiceTest : public testing::Test {
auto response_head = response_status auto response_head = response_status
? network::CreateURLResponseHead(*response_status) ? network::CreateURLResponseHead(*response_status)
: network::mojom::URLResponseHead::New(); : network::mojom::URLResponseHead::New();
test_url_loader_factory_.AddResponse( ASSERT_TRUE(testing_network_context_);
testing_network_context_->test_url_loader_factory()->AddResponse(
GURL(url), std::move(response_head), response_body, GURL(url), std::move(response_head), response_body,
network::URLLoaderCompletionStatus(net_error)); network::URLLoaderCompletionStatus(net_error));
} }
void DestroyService() { web_request_service_.reset(); } void DestroyService() {
testing_network_context_ = nullptr;
web_request_service_.reset();
}
WilcoDtcSupportdWebRequestService* web_request_service() { WilcoDtcSupportdWebRequestService* web_request_service() {
return web_request_service_.get(); return web_request_service_.get();
...@@ -122,8 +133,10 @@ class WilcoDtcSupportdWebRequestServiceTest : public testing::Test { ...@@ -122,8 +133,10 @@ class WilcoDtcSupportdWebRequestServiceTest : public testing::Test {
// Returns a Content-Type header value or empty string if none. // Returns a Content-Type header value or empty string if none.
std::string GetContentTypeFromPendingRequest(const std::string& url) { std::string GetContentTypeFromPendingRequest(const std::string& url) {
DCHECK(testing_network_context_);
const network::ResourceRequest* request; const network::ResourceRequest* request;
if (!test_url_loader_factory_.IsPending(GURL(url).spec(), &request) || if (!testing_network_context_->test_url_loader_factory()->IsPending(
GURL(url).spec(), &request) ||
!request) { !request) {
return ""; return "";
} }
...@@ -149,8 +162,10 @@ class WilcoDtcSupportdWebRequestServiceTest : public testing::Test { ...@@ -149,8 +162,10 @@ class WilcoDtcSupportdWebRequestServiceTest : public testing::Test {
} }
std::unique_ptr<WilcoDtcSupportdWebRequestService> web_request_service_; std::unique_ptr<WilcoDtcSupportdWebRequestService> web_request_service_;
network::TestURLLoaderFactory test_url_loader_factory_;
base::test::SingleThreadTaskEnvironment task_environment_; base::test::SingleThreadTaskEnvironment task_environment_;
// Owned by |web_request_service_|.
TestingWilcoDtcSupportdNetworkContext* testing_network_context_ = nullptr;
}; };
} // namespace } // namespace
......
...@@ -2368,6 +2368,7 @@ if (!is_android) { ...@@ -2368,6 +2368,7 @@ if (!is_android) {
"../browser/chromeos/web_applications/media_app_integration_browsertest.cc", "../browser/chromeos/web_applications/media_app_integration_browsertest.cc",
"../browser/chromeos/web_applications/system_web_app_integration_test.cc", "../browser/chromeos/web_applications/system_web_app_integration_test.cc",
"../browser/chromeos/web_applications/system_web_app_integration_test.h", "../browser/chromeos/web_applications/system_web_app_integration_test.h",
"../browser/chromeos/wilco_dtc_supportd/wilco_dtc_supportd_web_request_service_browsertest.cc",
"../browser/download/notification/download_notification_browsertest.cc", "../browser/download/notification/download_notification_browsertest.cc",
"../browser/drive/drive_notification_manager_factory_browsertest.cc", "../browser/drive/drive_notification_manager_factory_browsertest.cc",
"../browser/extensions/api/certificate_provider/certificate_provider_apitest.cc", "../browser/extensions/api/certificate_provider/certificate_provider_apitest.cc",
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment