Commit 39ad8600 authored by Antonio Gomes's avatar Antonio Gomes Committed by Commit Bot

Onion soup FilteringNetworkManager

This is phase 3.7 on the design document [1].

[1] https://docs.google.com/document/d/1AJKVA5U4nDkyDB9p4ROrggWXadCxyy-grKaE9KS5vOU/

CL moves filtering_network_manager.cc|h|test from
content/renderer/p2p to Blink. It places the header temporarily in
Blink's exposed API.

BUG=787254
R=guidou@chromium.org, haraken@chromium.org

Change-Id: I1dbe602fc0dc8620fdd84acc961d2c3b5dd7fe14
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1792856
Commit-Queue: Antonio Gomes <tonikitoo@igalia.com>
Reviewed-by: default avatarKentaro Hara <haraken@chromium.org>
Reviewed-by: default avatarGuido Urdaneta <guidou@chromium.org>
Cr-Commit-Position: refs/heads/master@{#695116}
parent 5991fac1
......@@ -240,8 +240,6 @@ target(link_target_type, "renderer") {
"navigation_state.h",
"net_info_helper.cc",
"net_info_helper.h",
"p2p/filtering_network_manager.cc",
"p2p/filtering_network_manager.h",
"p2p/host_address_request.cc",
"p2p/host_address_request.h",
"p2p/ipc_network_manager.cc",
......@@ -494,8 +492,6 @@ target(link_target_type, "renderer") {
"//third_party/webrtc/rtc_base:socket_address",
"//third_party/webrtc/rtc_base:threading",
"//third_party/webrtc/rtc_base:timeutils",
# TODO(titovartem) remove dependency on WebRTC internals.
"//third_party/webrtc/rtc_base/third_party/sigslot:sigslot",
"//third_party/webrtc/stats",
"//third_party/webrtc/system_wrappers",
......
......@@ -29,7 +29,6 @@
#include "content/public/renderer/content_renderer_client.h"
#include "content/renderer/media/webrtc/rtc_peer_connection_handler.h"
#include "content/renderer/media/webrtc/stun_field_trial.h"
#include "content/renderer/p2p/filtering_network_manager.h"
#include "content/renderer/p2p/ipc_network_manager.h"
#include "content/renderer/p2p/ipc_socket_factory.h"
#include "content/renderer/p2p/mdns_responder_adapter.h"
......@@ -45,6 +44,7 @@
#include "third_party/blink/public/common/features.h"
#include "third_party/blink/public/platform/modules/mediastream/webrtc_uma_histograms.h"
#include "third_party/blink/public/platform/modules/p2p/empty_network_manager.h"
#include "third_party/blink/public/platform/modules/p2p/filtering_network_manager.h"
#include "third_party/blink/public/platform/modules/peerconnection/audio_codec_factory.h"
#include "third_party/blink/public/platform/modules/peerconnection/video_codec_factory.h"
#include "third_party/blink/public/platform/modules/webrtc/webrtc_logging.h"
......@@ -471,7 +471,7 @@ PeerConnectionDependencyFactory::CreatePortAllocator(
std::unique_ptr<rtc::NetworkManager> network_manager;
if (port_config.enable_multiple_routes) {
network_manager = std::make_unique<FilteringNetworkManager>(
network_manager = std::make_unique<blink::FilteringNetworkManager>(
network_manager_.get(), requesting_origin, media_permission);
} else {
network_manager =
......
......@@ -1957,7 +1957,6 @@ test("content_unittests") {
"../renderer/media/webrtc/webrtc_media_stream_track_adapter_map_unittest.cc",
"../renderer/media/webrtc/webrtc_media_stream_track_adapter_unittest.cc",
"../renderer/media/webrtc/webrtc_set_description_observer_unittest.cc",
"../renderer/p2p/filtering_network_manager_unittest.cc",
"../renderer/p2p/ipc_network_manager_unittest.cc",
"../renderer/peripheral_content_heuristic_unittest.cc",
"../renderer/queue_message_swap_promise_unittest.cc",
......
......@@ -150,6 +150,7 @@ source_set("blink_headers") {
"platform/modules/mediastream/web_platform_media_stream_track.h",
"platform/modules/mediastream/webrtc_uma_histograms.h",
"platform/modules/p2p/empty_network_manager.h",
"platform/modules/p2p/filtering_network_manager.h",
"platform/modules/p2p/network_list_manager.h",
"platform/modules/p2p/network_list_observer.h",
"platform/modules/p2p/network_manager_uma.h",
......
......@@ -2,15 +2,15 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CONTENT_RENDERER_P2P_FILTERING_NETWORK_MANAGER_H_
#define CONTENT_RENDERER_P2P_FILTERING_NETWORK_MANAGER_H_
#ifndef THIRD_PARTY_BLINK_PUBLIC_PLATFORM_MODULES_P2P_FILTERING_NETWORK_MANAGER_H_
#define THIRD_PARTY_BLINK_PUBLIC_PLATFORM_MODULES_P2P_FILTERING_NETWORK_MANAGER_H_
#include "base/macros.h"
#include "base/memory/weak_ptr.h"
#include "base/threading/thread_checker.h"
#include "base/time/time.h"
#include "content/common/content_export.h"
#include "third_party/blink/public/platform/modules/p2p/network_manager_uma.h"
#include "third_party/blink/public/platform/web_common.h"
#include "third_party/webrtc/rtc_base/network.h"
#include "third_party/webrtc/rtc_base/third_party/sigslot/sigslot.h"
#include "url/gurl.h"
......@@ -19,7 +19,7 @@ namespace media {
class MediaPermission;
} // namespace media
namespace content {
namespace blink {
// FilteringNetworkManager exposes rtc::NetworkManager to
// PeerConnectionDependencyFactory and wraps the IpcNetworkManager. It only
......@@ -32,19 +32,22 @@ namespace content {
// to reduce any extra call setup delay. This class is not thread safe and
// should only be used by WebRTC's network thread. It inherits from
// rtc::NetworkManagerBase to have the same implementation of
// GetAnyAddressNetworks(). We can't mark the whole class CONTENT_EXPORT as it
// requires all super classes to be CONTENT_EXPORT as well.
// GetAnyAddressNetworks(). We can't mark the whole class BLINK_PLATFORM_EXPORT
// as it requires all super classes to be BLINK_PLATFORM_EXPORT as well.
//
// TODO(crbug.com/787254): Move this class out of the Blink exposed API when
// all users of it have been Onion souped. Also, move it away from url/gurl.h.
class FilteringNetworkManager : public rtc::NetworkManagerBase,
public sigslot::has_slots<> {
public:
// This class is created by WebRTC's signaling thread but used by WebRTC's
// worker thread |task_runner|.
CONTENT_EXPORT FilteringNetworkManager(
BLINK_PLATFORM_EXPORT FilteringNetworkManager(
rtc::NetworkManager* network_manager,
const GURL& requesting_origin,
media::MediaPermission* media_permission);
CONTENT_EXPORT ~FilteringNetworkManager() override;
BLINK_PLATFORM_EXPORT ~FilteringNetworkManager() override;
// rtc::NetworkManager:
void Initialize() override;
......@@ -88,7 +91,7 @@ class FilteringNetworkManager : public rtc::NetworkManagerBase,
rtc::NetworkManager* network_manager_;
// The class is created by the signaling thread but used by the worker thread.
base::ThreadChecker thread_checker_;
THREAD_CHECKER(thread_checker_);
media::MediaPermission* media_permission_;
......@@ -120,6 +123,6 @@ class FilteringNetworkManager : public rtc::NetworkManagerBase,
DISALLOW_COPY_AND_ASSIGN(FilteringNetworkManager);
};
} // namespace content
} // namespace blink
#endif // CONTENT_RENDERER_P2P_FILTERING_NETWORK_MANAGER_H_
#endif // THIRD_PARTY_BLINK_PUBLIC_PLATFORM_MODULES_P2P_FILTERING_NETWORK_MANAGER_H_
......@@ -1228,6 +1228,7 @@ jumbo_component("platform") {
"mojo/string16_mojom_traits.cc",
"mojo/string16_mojom_traits.h",
"p2p/empty_network_manager.cc",
"p2p/filtering_network_manager.cc",
"p2p/network_manager_uma.cc",
"peerconnection/audio_codec_factory.cc",
"peerconnection/rtc_answer_options_platform.h",
......@@ -1807,6 +1808,7 @@ jumbo_source_set("blink_platform_unittests_sources") {
"mojo/interface_invalidator_test.cc",
"mojo/kurl_security_origin_test.cc",
"mojo/string16_mojom_traits_test.cc",
"p2p/filtering_network_manager_test.cc",
"peerconnection/rtc_stats_test.cc",
"peerconnection/rtc_video_decoder_adapter_test.cc",
"peerconnection/rtc_video_encoder_test.cc",
......
include_rules = [
"+media/base/media_permission.h",
]
......@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "content/renderer/p2p/filtering_network_manager.h"
#include "third_party/blink/public/platform/modules/p2p/filtering_network_manager.h"
#include <utility>
......@@ -12,7 +12,7 @@
#include "base/threading/thread_task_runner_handle.h"
#include "media/base/media_permission.h"
namespace content {
namespace blink {
FilteringNetworkManager::FilteringNetworkManager(
rtc::NetworkManager* network_manager,
......@@ -21,7 +21,7 @@ FilteringNetworkManager::FilteringNetworkManager(
: network_manager_(network_manager),
media_permission_(media_permission),
requesting_origin_(requesting_origin) {
thread_checker_.DetachFromThread();
DETACH_FROM_THREAD(thread_checker_);
set_enumeration_permission(ENUMERATION_BLOCKED);
// If the feature is not enabled, just return ALLOWED as it's requested.
......@@ -34,7 +34,7 @@ FilteringNetworkManager::FilteringNetworkManager(
}
FilteringNetworkManager::~FilteringNetworkManager() {
DCHECK(thread_checker_.CalledOnValidThread());
DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
// This helps to catch the case if permission never comes back.
if (!start_updating_time_.is_null())
ReportMetrics(false);
......@@ -51,7 +51,7 @@ void FilteringNetworkManager::Initialize() {
}
void FilteringNetworkManager::StartUpdating() {
DCHECK(thread_checker_.CalledOnValidThread());
DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
DCHECK(started_permission_check_);
if (start_updating_time_.is_null()) {
......@@ -75,14 +75,14 @@ void FilteringNetworkManager::StartUpdating() {
}
void FilteringNetworkManager::StopUpdating() {
DCHECK(thread_checker_.CalledOnValidThread());
DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
network_manager_->StopUpdating();
DCHECK_GT(start_count_, 0);
--start_count_;
}
void FilteringNetworkManager::GetNetworks(NetworkList* networks) const {
DCHECK(thread_checker_.CalledOnValidThread());
DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
networks->clear();
if (enumeration_permission() == ENUMERATION_ALLOWED)
......@@ -93,7 +93,7 @@ void FilteringNetworkManager::GetNetworks(NetworkList* networks) const {
webrtc::MdnsResponderInterface* FilteringNetworkManager::GetMdnsResponder()
const {
DCHECK(thread_checker_.CalledOnValidThread());
DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
if (enumeration_permission() == ENUMERATION_ALLOWED)
return nullptr;
......@@ -102,7 +102,7 @@ webrtc::MdnsResponderInterface* FilteringNetworkManager::GetMdnsResponder()
}
void FilteringNetworkManager::CheckPermission() {
DCHECK(thread_checker_.CalledOnValidThread());
DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
DCHECK(!started_permission_check_);
started_permission_check_ = true;
......@@ -121,7 +121,7 @@ void FilteringNetworkManager::CheckPermission() {
}
void FilteringNetworkManager::OnPermissionStatus(bool granted) {
DCHECK(thread_checker_.CalledOnValidThread());
DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
DCHECK_GT(pending_permission_checks_, 0);
VLOG(1) << "FilteringNetworkManager received permission status: "
<< (granted ? "granted" : "denied");
......@@ -139,7 +139,7 @@ void FilteringNetworkManager::OnPermissionStatus(bool granted) {
}
void FilteringNetworkManager::OnNetworksChanged() {
DCHECK(thread_checker_.CalledOnValidThread());
DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
pending_network_update_ = false;
// Update the default local addresses.
......@@ -214,4 +214,4 @@ void FilteringNetworkManager::SendNetworksChangedSignal() {
SignalNetworksChanged();
}
} // namespace content
} // namespace blink
......@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "content/renderer/p2p/filtering_network_manager.h"
#include "third_party/blink/public/platform/modules/p2p/filtering_network_manager.h"
#include <stddef.h>
......@@ -147,7 +147,7 @@ class MockMediaPermission : public media::MediaPermission {
} // namespace
namespace content {
namespace blink {
class FilteringNetworkManagerTest : public testing::Test,
public sigslot::has_slots<> {
......@@ -487,4 +487,4 @@ TEST_F(FilteringNetworkManagerTest,
}
}
} // namespace content
} // namespace blink
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