Revert "Revert "GN rtc_* templates: Set default visibility to webrtc_root + "/*"""

This reverts commit c73e1f437889d882cbf2987f7fb3a029a6150613.

Reason for revert: 
The problem with failed deps in chrome content/renderer had already been fixed in https://webrtc-review.googlesource.com/c/src/+/38660

Original change's description:
> Revert "GN rtc_* templates: Set default visibility to webrtc_root + "/*""
> 
> This reverts commit 588c548657b3ddf76e7b3f241263eef7f5799f16.
> 
> Reason for revert: 
> 
> Breaks Chrome FYI:
> 
> /b/c/b/Linux_Builder/src/buildtools/linux64/gn gen //out/Release --check
>   -> returned 1
> ERROR at //build/split_static_library.gni:12:5: Dependency not allowed.
>     static_library(target_name) {
>     ^----------------------------
> The item //content/renderer:renderer
> can not depend on //third_party/webrtc/media:rtc_internal_video_codecs
> because it is not in //third_party/webrtc/media:rtc_internal_video_codecs's visibility list: [
>   //third_party/webrtc/*
>   //third_party/webrtc_overrides/*
> ]
> 
>  https://logs.chromium.org/v/?s=chromium%2Fbb%2Fchromium.webrtc.fyi%2FLinux_Builder%2F23560%2F%2B%2Frecipes%2Fsteps%2Fgenerate_build_files%2F0%2Fstdout
> 
> Original change's description:
> > GN rtc_* templates: Set default visibility to webrtc_root + "/*"
> > 
> > This means that by default, targets are visible to everything under
> > the WebRTC root, but not visible to anything else.
> > 
> > API targets are manually tagged with visibility "*", so that targets
> > outside the WebRTC tree can see them.
> > 
> > BUG=webrtc:8254
> > 
> > Change-Id: Icdbee6e0d22d93240ff2fb530c8f9dc48e351509
> > Reviewed-on: https://webrtc-review.googlesource.com/24140
> > Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org>
> > Commit-Queue: Karl Wiberg <kwiberg@webrtc.org>
> > Cr-Commit-Position: refs/heads/master@{#21548}
> 
> TBR=mbonadei@webrtc.org,kwiberg@webrtc.org
> 
> Change-Id: I06620ce3d6f67482935c22efa231dd6cab91625a
> No-Presubmit: true
> No-Tree-Checks: true
> No-Try: true
> Bug: webrtc:8254
> Reviewed-on: https://webrtc-review.googlesource.com/38760
> Reviewed-by: Per Kjellander <perkj@webrtc.org>
> Commit-Queue: Per Kjellander <perkj@webrtc.org>
> Cr-Commit-Position: refs/heads/master@{#21555}

TBR=mbonadei@webrtc.org,kwiberg@webrtc.org,perkj@webrtc.org

Change-Id: I6f720078ce21bd172e0a6471bae8c4c011e4a657
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: webrtc:8254
Reviewed-on: https://webrtc-review.googlesource.com/38860
Reviewed-by: Per Kjellander <perkj@webrtc.org>
Commit-Queue: Per Kjellander <perkj@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#21558}
diff --git a/api/BUILD.gn b/api/BUILD.gn
index 6ac235b..dcda369 100644
--- a/api/BUILD.gn
+++ b/api/BUILD.gn
@@ -13,12 +13,14 @@
 }
 
 group("api") {
+  visibility = [ "*" ]
   public_deps = [
     ":libjingle_peerconnection_api",
   ]
 }
 
 rtc_source_set("call_api") {
+  visibility = [ "*" ]
   sources = [
     "call/audio_sink.h",
   ]
@@ -34,6 +36,7 @@
 }
 
 rtc_static_library("libjingle_peerconnection_api") {
+  visibility = [ "*" ]
   cflags = []
   sources = [
     "candidate.cc",
@@ -114,6 +117,8 @@
 }
 
 rtc_source_set("peerconnection_and_implicit_call_api") {
+  visibility = [ "*" ]
+
   # The peerconnectioninterface.h file pulls in call/callfactoryinterface.h
   # and the entire call module with it. We need to either get rid of this
   # dependency or pull most of call/ into the API. For now, silence the warnings
@@ -126,12 +131,14 @@
 }
 
 rtc_source_set("libjingle_logging_api") {
+  visibility = [ "*" ]
   sources = [
     "rtceventlogoutput.h",
   ]
 }
 
 rtc_source_set("ortc_api") {
+  visibility = [ "*" ]
   sources = [
     "ortc/mediadescription.cc",
     "ortc/mediadescription.h",
@@ -164,6 +171,7 @@
 }
 
 rtc_source_set("rtc_stats_api") {
+  visibility = [ "*" ]
   cflags = []
   sources = [
     "stats/rtcstats.h",
@@ -179,6 +187,7 @@
 }
 
 rtc_source_set("audio_mixer_api") {
+  visibility = [ "*" ]
   sources = [
     "audio/audio_mixer.h",
   ]
@@ -190,12 +199,14 @@
 }
 
 rtc_source_set("transport_api") {
+  visibility = [ "*" ]
   sources = [
     "call/transport.h",
   ]
 }
 
 rtc_source_set("video_frame_api") {
+  visibility = [ "*" ]
   sources = [
     "video/video_content_type.cc",
     "video/video_content_type.h",
@@ -215,6 +226,7 @@
 }
 
 rtc_source_set("video_frame_api_i420") {
+  visibility = [ "*" ]
   sources = [
     "video/i420_buffer.cc",
     "video/i420_buffer.h",
@@ -229,6 +241,7 @@
 }
 
 rtc_source_set("array_view") {
+  visibility = [ "*" ]
   sources = [
     "array_view.h",
   ]
@@ -239,6 +252,7 @@
 }
 
 rtc_source_set("optional") {
+  visibility = [ "*" ]
   sources = [
     "optional.cc",
     "optional.h",
@@ -251,6 +265,7 @@
 }
 
 rtc_source_set("refcountedbase") {
+  visibility = [ "*" ]
   sources = [
     "refcountedbase.h",
   ]
@@ -260,6 +275,7 @@
 }
 
 rtc_source_set("libjingle_peerconnection_test_api") {
+  visibility = [ "*" ]
   testonly = true
   sources = [
     "test/fakeconstraints.h",
diff --git a/api/audio_codecs/BUILD.gn b/api/audio_codecs/BUILD.gn
index 01dc124..f730260 100644
--- a/api/audio_codecs/BUILD.gn
+++ b/api/audio_codecs/BUILD.gn
@@ -13,6 +13,7 @@
 }
 
 rtc_source_set("audio_codecs_api") {
+  visibility = [ "*" ]
   sources = [
     "audio_decoder.cc",
     "audio_decoder.h",
@@ -38,6 +39,7 @@
 }
 
 rtc_static_library("builtin_audio_decoder_factory") {
+  visibility = [ "*" ]
   sources = [
     "builtin_audio_decoder_factory.cc",
     "builtin_audio_decoder_factory.h",
@@ -66,6 +68,7 @@
 }
 
 rtc_static_library("builtin_audio_encoder_factory") {
+  visibility = [ "*" ]
   sources = [
     "builtin_audio_encoder_factory.cc",
     "builtin_audio_encoder_factory.h",
diff --git a/api/audio_codecs/L16/BUILD.gn b/api/audio_codecs/L16/BUILD.gn
index 8f06a8f..f047bf1 100644
--- a/api/audio_codecs/L16/BUILD.gn
+++ b/api/audio_codecs/L16/BUILD.gn
@@ -13,6 +13,7 @@
 }
 
 rtc_static_library("audio_encoder_L16") {
+  visibility = [ "*" ]
   sources = [
     "audio_encoder_L16.cc",
     "audio_encoder_L16.h",
@@ -27,6 +28,7 @@
 }
 
 rtc_static_library("audio_decoder_L16") {
+  visibility = [ "*" ]
   sources = [
     "audio_decoder_L16.cc",
     "audio_decoder_L16.h",
diff --git a/api/audio_codecs/g711/BUILD.gn b/api/audio_codecs/g711/BUILD.gn
index aa86490..b62c679 100644
--- a/api/audio_codecs/g711/BUILD.gn
+++ b/api/audio_codecs/g711/BUILD.gn
@@ -13,6 +13,7 @@
 }
 
 rtc_static_library("audio_encoder_g711") {
+  visibility = [ "*" ]
   sources = [
     "audio_encoder_g711.cc",
     "audio_encoder_g711.h",
@@ -27,6 +28,7 @@
 }
 
 rtc_static_library("audio_decoder_g711") {
+  visibility = [ "*" ]
   sources = [
     "audio_decoder_g711.cc",
     "audio_decoder_g711.h",
diff --git a/api/audio_codecs/g722/BUILD.gn b/api/audio_codecs/g722/BUILD.gn
index 5af7e5c..0d12195 100644
--- a/api/audio_codecs/g722/BUILD.gn
+++ b/api/audio_codecs/g722/BUILD.gn
@@ -13,12 +13,14 @@
 }
 
 rtc_source_set("audio_encoder_g722_config") {
+  visibility = [ "*" ]
   sources = [
     "audio_encoder_g722_config.h",
   ]
 }
 
 rtc_static_library("audio_encoder_g722") {
+  visibility = [ "*" ]
   sources = [
     "audio_encoder_g722.cc",
     "audio_encoder_g722.h",
@@ -34,6 +36,7 @@
 }
 
 rtc_static_library("audio_decoder_g722") {
+  visibility = [ "*" ]
   sources = [
     "audio_decoder_g722.cc",
     "audio_decoder_g722.h",
diff --git a/api/audio_codecs/ilbc/BUILD.gn b/api/audio_codecs/ilbc/BUILD.gn
index 0f5f80d..944d4eb 100644
--- a/api/audio_codecs/ilbc/BUILD.gn
+++ b/api/audio_codecs/ilbc/BUILD.gn
@@ -13,12 +13,14 @@
 }
 
 rtc_source_set("audio_encoder_ilbc_config") {
+  visibility = [ "*" ]
   sources = [
     "audio_encoder_ilbc_config.h",
   ]
 }
 
 rtc_static_library("audio_encoder_ilbc") {
+  visibility = [ "*" ]
   sources = [
     "audio_encoder_ilbc.cc",
     "audio_encoder_ilbc.h",
@@ -34,6 +36,7 @@
 }
 
 rtc_static_library("audio_decoder_ilbc") {
+  visibility = [ "*" ]
   sources = [
     "audio_decoder_ilbc.cc",
     "audio_decoder_ilbc.h",
diff --git a/api/audio_codecs/isac/BUILD.gn b/api/audio_codecs/isac/BUILD.gn
index 5bd477d..f63435c 100644
--- a/api/audio_codecs/isac/BUILD.gn
+++ b/api/audio_codecs/isac/BUILD.gn
@@ -18,6 +18,7 @@
 # on cleverly chosen criteria.
 
 rtc_source_set("audio_encoder_isac") {
+  visibility = [ "*" ]
   public = [
     "audio_encoder_isac.h",
   ]
@@ -34,6 +35,7 @@
 }
 
 rtc_source_set("audio_decoder_isac") {
+  visibility = [ "*" ]
   public = [
     "audio_decoder_isac.h",
   ]
@@ -65,6 +67,7 @@
 }
 
 rtc_static_library("audio_encoder_isac_fix") {
+  visibility = [ "*" ]
   sources = [
     "audio_encoder_isac_fix.cc",
     "audio_encoder_isac_fix.h",
@@ -79,6 +82,7 @@
 }
 
 rtc_static_library("audio_decoder_isac_fix") {
+  visibility = [ "*" ]
   sources = [
     "audio_decoder_isac_fix.cc",
     "audio_decoder_isac_fix.h",
@@ -93,6 +97,7 @@
 }
 
 rtc_static_library("audio_encoder_isac_float") {
+  visibility = [ "*" ]
   sources = [
     "audio_encoder_isac_float.cc",
     "audio_encoder_isac_float.h",
@@ -107,6 +112,7 @@
 }
 
 rtc_static_library("audio_decoder_isac_float") {
+  visibility = [ "*" ]
   sources = [
     "audio_decoder_isac_float.cc",
     "audio_decoder_isac_float.h",
diff --git a/api/audio_codecs/opus/BUILD.gn b/api/audio_codecs/opus/BUILD.gn
index 9d07c95..13a4b5d 100644
--- a/api/audio_codecs/opus/BUILD.gn
+++ b/api/audio_codecs/opus/BUILD.gn
@@ -13,6 +13,7 @@
 }
 
 rtc_static_library("audio_encoder_opus_config") {
+  visibility = [ "*" ]
   sources = [
     "audio_encoder_opus_config.cc",
     "audio_encoder_opus_config.h",
@@ -30,6 +31,7 @@
 }
 
 rtc_source_set("audio_encoder_opus") {
+  visibility = [ "*" ]
   public = [
     "audio_encoder_opus.h",
   ]
@@ -50,6 +52,7 @@
 }
 
 rtc_static_library("audio_decoder_opus") {
+  visibility = [ "*" ]
   sources = [
     "audio_decoder_opus.cc",
     "audio_decoder_opus.h",
diff --git a/api/video_codecs/BUILD.gn b/api/video_codecs/BUILD.gn
index 6f3623d..5da8980 100644
--- a/api/video_codecs/BUILD.gn
+++ b/api/video_codecs/BUILD.gn
@@ -13,6 +13,7 @@
 }
 
 rtc_source_set("video_codecs_api") {
+  visibility = [ "*" ]
   sources = [
     "sdp_video_format.h",
     "video_decoder.h",
diff --git a/audio/utility/BUILD.gn b/audio/utility/BUILD.gn
index 4e01710..aa8445c 100644
--- a/audio/utility/BUILD.gn
+++ b/audio/utility/BUILD.gn
@@ -14,6 +14,7 @@
 }
 
 rtc_static_library("audio_frame_operations") {
+  visibility = [ "*" ]
   sources = [
     "audio_frame_operations.cc",
     "audio_frame_operations.h",
diff --git a/call/BUILD.gn b/call/BUILD.gn
index 99de0c9..90460e7 100644
--- a/call/BUILD.gn
+++ b/call/BUILD.gn
@@ -54,6 +54,7 @@
 }
 
 rtc_source_set("rtp_receiver") {
+  visibility = [ "*" ]
   sources = [
     "rtcp_demuxer.cc",
     "rtcp_demuxer.h",
diff --git a/common_audio/BUILD.gn b/common_audio/BUILD.gn
index 27287ec..34cdddc 100644
--- a/common_audio/BUILD.gn
+++ b/common_audio/BUILD.gn
@@ -107,7 +107,7 @@
 }
 
 rtc_source_set("mock_common_audio") {
-  visibility += [ "*" ]
+  visibility += webrtc_default_visibility
   testonly = true
   sources = [
     "mocks/mock_smoothing_filter.h",
@@ -263,14 +263,14 @@
 }
 
 rtc_source_set("fir_filter") {
-  visibility += [ "*" ]
+  visibility += webrtc_default_visibility
   sources = [
     "fir_filter.h",
   ]
 }
 
 rtc_source_set("fir_filter_factory") {
-  visibility += [ "*" ]
+  visibility += webrtc_default_visibility
   sources = [
     "fir_filter_c.cc",
     "fir_filter_c.h",
@@ -398,7 +398,7 @@
 
 if (rtc_include_tests) {
   rtc_test("common_audio_unittests") {
-    visibility += [ "*" ]
+    visibility += webrtc_default_visibility
     testonly = true
 
     sources = [
diff --git a/common_video/BUILD.gn b/common_video/BUILD.gn
index 68b102b..1c298fd 100644
--- a/common_video/BUILD.gn
+++ b/common_video/BUILD.gn
@@ -13,6 +13,8 @@
 }
 
 rtc_static_library("common_video") {
+  visibility = [ "*" ]
+
   sources = [
     "bitrate_adjuster.cc",
     "h264/h264_bitstream_parser.cc",
diff --git a/logging/BUILD.gn b/logging/BUILD.gn
index e755b16..7ecb0fa 100644
--- a/logging/BUILD.gn
+++ b/logging/BUILD.gn
@@ -88,6 +88,7 @@
 }
 
 rtc_static_library("rtc_event_log_impl") {
+  visibility = [ "*" ]
   sources = [
     "rtc_event_log/encoder/rtc_event_log_encoder.h",
     "rtc_event_log/encoder/rtc_event_log_encoder_legacy.cc",
diff --git a/media/BUILD.gn b/media/BUILD.gn
index 6379240..24d9c2e 100644
--- a/media/BUILD.gn
+++ b/media/BUILD.gn
@@ -33,6 +33,7 @@
 }
 
 rtc_source_set("rtc_h264_profile_id") {
+  visibility = [ "*" ]
   sources = [
     "base/h264_profile_level_id.cc",
     "base/h264_profile_level_id.h",
@@ -52,6 +53,7 @@
 }
 
 rtc_static_library("rtc_media_base") {
+  visibility = [ "*" ]
   defines = []
   libs = []
   deps = [
@@ -213,6 +215,7 @@
 }
 
 rtc_static_library("rtc_audio_video") {
+  visibility = [ "*" ]
   defines = []
   libs = []
   deps = [
@@ -373,6 +376,7 @@
 }
 
 rtc_source_set("rtc_media") {
+  visibility = [ "*" ]
   public_deps = [
     ":rtc_audio_video",
     ":rtc_data",
diff --git a/modules/BUILD.gn b/modules/BUILD.gn
index 1f93e99..b5de323 100644
--- a/modules/BUILD.gn
+++ b/modules/BUILD.gn
@@ -43,6 +43,7 @@
 }
 
 rtc_source_set("module_api") {
+  visibility = [ "*" ]
   sources = [
     "include/module.h",
     "include/module_common_types.h",
diff --git a/modules/audio_coding/BUILD.gn b/modules/audio_coding/BUILD.gn
index 1d6a70c8..f9eea0c 100644
--- a/modules/audio_coding/BUILD.gn
+++ b/modules/audio_coding/BUILD.gn
@@ -40,7 +40,7 @@
                     ]
 
 rtc_static_library("audio_format_conversion") {
-  visibility += [ "*" ]
+  visibility += webrtc_default_visibility
   sources = [
     "codecs/audio_format_conversion.cc",
     "codecs/audio_format_conversion.h",
@@ -57,7 +57,7 @@
 }
 
 rtc_static_library("rent_a_codec") {
-  visibility += [ "*" ]
+  visibility += webrtc_default_visibility
   sources = [
     "acm2/acm_codec_database.cc",
     "acm2/acm_codec_database.h",
@@ -297,7 +297,7 @@
 }
 
 rtc_static_library("ilbc") {
-  visibility += [ "*" ]
+  visibility += webrtc_default_visibility
   sources = [
     "codecs/ilbc/audio_decoder_ilbc.cc",
     "codecs/ilbc/audio_decoder_ilbc.h",
@@ -823,7 +823,7 @@
 }
 
 rtc_static_library("webrtc_opus") {
-  visibility += [ "*" ]
+  visibility += webrtc_default_visibility
   sources = [
     "codecs/opus/audio_decoder_opus.cc",
     "codecs/opus/audio_decoder_opus.h",
@@ -884,7 +884,7 @@
 
 if (rtc_enable_protobuf) {
   proto_library("ana_debug_dump_proto") {
-    visibility += [ "*" ]
+    visibility += webrtc_default_visibility
     sources = [
       "audio_network_adaptor/debug_dump.proto",
     ]
@@ -902,7 +902,7 @@
 }
 
 rtc_static_library("audio_network_adaptor_config") {
-  visibility += [ "*" ]
+  visibility += webrtc_default_visibility
   sources = [
     "audio_network_adaptor/audio_network_adaptor_config.cc",
     "audio_network_adaptor/include/audio_network_adaptor_config.h",
@@ -913,7 +913,7 @@
 }
 
 rtc_static_library("audio_network_adaptor") {
-  visibility += [ "*" ]
+  visibility += webrtc_default_visibility
   sources = [
     "audio_network_adaptor/audio_network_adaptor_impl.cc",
     "audio_network_adaptor/audio_network_adaptor_impl.h",
@@ -984,7 +984,7 @@
 }
 
 rtc_static_library("neteq") {
-  visibility += [ "*" ]
+  visibility += webrtc_default_visibility
   sources = [
     "neteq/accelerate.cc",
     "neteq/accelerate.h",
@@ -1082,7 +1082,7 @@
 # that ultimately are built and run as a part of the Chromium ecosystem, which
 # does not set the rtc_include_tests flag.
 rtc_source_set("neteq_tools_minimal") {
-  visibility += [ "*" ]
+  visibility += webrtc_default_visibility
   sources = [
     "neteq/tools/audio_sink.cc",
     "neteq/tools/audio_sink.h",
@@ -1119,7 +1119,7 @@
 }
 
 rtc_source_set("neteq_test_tools") {
-  visibility += [ "*" ]
+  visibility += webrtc_default_visibility
   testonly = true
   sources = [
     "neteq/tools/audio_checksum.h",
@@ -1178,7 +1178,7 @@
 }
 
 rtc_source_set("neteq_tools") {
-  visibility += [ "*" ]
+  visibility += webrtc_default_visibility
   sources = [
     "neteq/tools/fake_decode_from_file.cc",
     "neteq/tools/fake_decode_from_file.h",
@@ -1214,7 +1214,7 @@
 }
 
 rtc_source_set("neteq_input_audio_tools") {
-  visibility += [ "*" ]
+  visibility += webrtc_default_visibility
   sources = [
     "neteq/tools/input_audio_file.cc",
     "neteq/tools/input_audio_file.h",
@@ -1275,7 +1275,7 @@
   }
 
   group("audio_coding_tests") {
-    visibility += [ "*" ]
+    visibility += webrtc_default_visibility
     testonly = true
     public_deps = [
       ":acm_receive_test",
@@ -1310,7 +1310,7 @@
 
   rtc_source_set("audio_coding_modules_tests") {
     testonly = true
-    visibility += [ "*" ]
+    visibility += webrtc_default_visibility
 
     sources = [
       "test/ACMTest.h",
@@ -1374,7 +1374,7 @@
 
   rtc_source_set("audio_coding_perf_tests") {
     testonly = true
-    visibility += [ "*" ]
+    visibility += webrtc_default_visibility
 
     sources = [
       "codecs/opus/opus_complexity_unittest.cc",
@@ -2053,7 +2053,7 @@
 
   rtc_source_set("audio_coding_unittests") {
     testonly = true
-    visibility += [ "*" ]
+    visibility += webrtc_default_visibility
 
     sources = [
       "acm2/acm_receiver_unittest.cc",
diff --git a/modules/audio_device/BUILD.gn b/modules/audio_device/BUILD.gn
index 3b70c07..eac2dc0 100644
--- a/modules/audio_device/BUILD.gn
+++ b/modules/audio_device/BUILD.gn
@@ -46,6 +46,7 @@
 }
 
 rtc_source_set("audio_device") {
+  visibility = [ "*" ]
   public_deps = [
     ":audio_device_generic",
   ]
diff --git a/modules/audio_processing/BUILD.gn b/modules/audio_processing/BUILD.gn
index c5724e5..4de77c7 100644
--- a/modules/audio_processing/BUILD.gn
+++ b/modules/audio_processing/BUILD.gn
@@ -26,6 +26,7 @@
 }
 
 rtc_static_library("audio_processing") {
+  visibility = [ "*" ]
   configs += [ ":apm_debug_dump" ]
   sources = [
     "aec/aec_resampler.cc",
@@ -290,6 +291,7 @@
 }
 
 rtc_source_set("audio_processing_statistics") {
+  visibility = [ "*" ]
   sources = [
     "include/audio_processing_statistics.cc",
     "include/audio_processing_statistics.h",
@@ -781,6 +783,7 @@
   }
 
   rtc_source_set("audioproc_test_utils") {
+    visibility = [ "*" ]
     testonly = true
     sources = [
       "test/audio_buffer_tools.cc",
diff --git a/modules/audio_processing/aec_dump/BUILD.gn b/modules/audio_processing/aec_dump/BUILD.gn
index 2e44509..aac4b0a 100644
--- a/modules/audio_processing/aec_dump/BUILD.gn
+++ b/modules/audio_processing/aec_dump/BUILD.gn
@@ -9,6 +9,7 @@
 import("../../../webrtc.gni")  # This contains def of 'rtc_enable_protobuf'
 
 rtc_source_set("aec_dump") {
+  visibility = [ "*" ]
   sources = [
     "aec_dump_factory.h",
   ]
diff --git a/modules/bitrate_controller/BUILD.gn b/modules/bitrate_controller/BUILD.gn
index a791c33..165db62 100644
--- a/modules/bitrate_controller/BUILD.gn
+++ b/modules/bitrate_controller/BUILD.gn
@@ -9,6 +9,7 @@
 import("../../webrtc.gni")
 
 rtc_static_library("bitrate_controller") {
+  visibility = [ "*" ]
   sources = [
     "bitrate_controller_impl.cc",
     "bitrate_controller_impl.h",
diff --git a/modules/congestion_controller/BUILD.gn b/modules/congestion_controller/BUILD.gn
index e2c79a0..46c3047 100644
--- a/modules/congestion_controller/BUILD.gn
+++ b/modules/congestion_controller/BUILD.gn
@@ -17,6 +17,7 @@
 }
 
 rtc_static_library("congestion_controller") {
+  visibility = [ "*" ]
   configs += [ ":bwe_test_logging" ]
   sources = [
     "include/receive_side_congestion_controller.h",
diff --git a/modules/desktop_capture/BUILD.gn b/modules/desktop_capture/BUILD.gn
index fa414b7..04fef21 100644
--- a/modules/desktop_capture/BUILD.gn
+++ b/modules/desktop_capture/BUILD.gn
@@ -12,6 +12,7 @@
 use_desktop_capture_differ_sse2 = current_cpu == "x86" || current_cpu == "x64"
 
 rtc_static_library("primitives") {
+  visibility = [ "*" ]
   sources = [
     "desktop_capture_types.h",
     "desktop_frame.cc",
@@ -159,6 +160,7 @@
 }
 
 rtc_source_set("desktop_capture") {
+  visibility = [ "*" ]
   public_deps = [
     ":desktop_capture_generic",
   ]
diff --git a/modules/media_file/BUILD.gn b/modules/media_file/BUILD.gn
index 589b281..4fff59d 100644
--- a/modules/media_file/BUILD.gn
+++ b/modules/media_file/BUILD.gn
@@ -13,6 +13,7 @@
 }
 
 rtc_static_library("media_file") {
+  visibility = [ "*" ]
   sources = [
     "media_file.h",
     "media_file_defines.h",
diff --git a/modules/remote_bitrate_estimator/BUILD.gn b/modules/remote_bitrate_estimator/BUILD.gn
index 0ca6b87..c57b498 100644
--- a/modules/remote_bitrate_estimator/BUILD.gn
+++ b/modules/remote_bitrate_estimator/BUILD.gn
@@ -9,6 +9,7 @@
 import("../../webrtc.gni")
 
 rtc_static_library("remote_bitrate_estimator") {
+  visibility = [ "*" ]
   sources = [
     "aimd_rate_control.cc",
     "aimd_rate_control.h",
diff --git a/modules/rtp_rtcp/BUILD.gn b/modules/rtp_rtcp/BUILD.gn
index f07ff1a..bf94013 100644
--- a/modules/rtp_rtcp/BUILD.gn
+++ b/modules/rtp_rtcp/BUILD.gn
@@ -97,6 +97,7 @@
 }
 
 rtc_static_library("rtp_rtcp") {
+  visibility = [ "*" ]
   sources = [
     "include/flexfec_receiver.h",
     "include/flexfec_sender.h",
@@ -230,6 +231,7 @@
 }
 
 rtc_source_set("rtcp_transceiver") {
+  visibility = [ "*" ]
   public = [
     "source/rtcp_transceiver.h",
     "source/rtcp_transceiver_config.h",
diff --git a/modules/utility/BUILD.gn b/modules/utility/BUILD.gn
index e3de364..fbfa61e 100644
--- a/modules/utility/BUILD.gn
+++ b/modules/utility/BUILD.gn
@@ -9,6 +9,7 @@
 import("../../webrtc.gni")
 
 rtc_static_library("utility") {
+  visibility = [ "*" ]
   sources = [
     "include/audio_frame_operations.h",
     "include/helpers_android.h",
@@ -45,6 +46,7 @@
 
 rtc_source_set("mock_process_thread") {
   testonly = true
+  visibility = [ "*" ]
   sources = [
     "include/mock/mock_process_thread.h",
   ]
diff --git a/modules/video_capture/BUILD.gn b/modules/video_capture/BUILD.gn
index 8df5205..6378564 100644
--- a/modules/video_capture/BUILD.gn
+++ b/modules/video_capture/BUILD.gn
@@ -47,6 +47,7 @@
 }
 
 rtc_static_library("video_capture") {
+  visibility = [ "*" ]
   sources = [
     "external/device_info_external.cc",
     "external/video_capture_external.cc",
diff --git a/modules/video_coding/BUILD.gn b/modules/video_coding/BUILD.gn
index 2ca7f14..efd0f25 100644
--- a/modules/video_coding/BUILD.gn
+++ b/modules/video_coding/BUILD.gn
@@ -9,6 +9,7 @@
 import("../../webrtc.gni")
 
 rtc_static_library("video_coding") {
+  visibility = [ "*" ]
   sources = [
     "codec_database.cc",
     "codec_database.h",
@@ -168,6 +169,7 @@
 }
 
 rtc_source_set("video_coding_utility") {
+  visibility = [ "*" ]
   sources = [
     "codecs/interface/video_codec_interface.h",
     "codecs/interface/video_error_codes.h",
@@ -212,6 +214,7 @@
 }
 
 rtc_static_library("webrtc_h264") {
+  visibility = [ "*" ]
   sources = [
     "codecs/h264/h264.cc",
     "codecs/h264/include/h264.h",
@@ -255,6 +258,7 @@
 }
 
 rtc_static_library("webrtc_i420") {
+  visibility = [ "*" ]
   sources = [
     "codecs/i420/i420.cc",
     "codecs/i420/include/i420.h",
@@ -332,6 +336,7 @@
 
 # This target includes the internal SW codec.
 rtc_static_library("webrtc_vp8") {
+  visibility = [ "*" ]
   sources = [
     "codecs/vp8/default_temporal_layers.cc",
     "codecs/vp8/default_temporal_layers.h",
@@ -376,6 +381,7 @@
 }
 
 rtc_static_library("webrtc_vp9") {
+  visibility = [ "*" ]
   if (rtc_libvpx_build_vp9) {
     sources = [
       "codecs/vp9/include/vp9.h",
diff --git a/modules/video_processing/BUILD.gn b/modules/video_processing/BUILD.gn
index 4fd5e88..351e579 100644
--- a/modules/video_processing/BUILD.gn
+++ b/modules/video_processing/BUILD.gn
@@ -12,6 +12,7 @@
 build_video_processing_sse2 = current_cpu == "x86" || current_cpu == "x64"
 
 rtc_static_library("video_processing") {
+  visibility = [ "*" ]
   sources = [
     "util/denoiser_filter.cc",
     "util/denoiser_filter_c.cc",
diff --git a/p2p/BUILD.gn b/p2p/BUILD.gn
index f9c75cf2..f72ce16 100644
--- a/p2p/BUILD.gn
+++ b/p2p/BUILD.gn
@@ -20,6 +20,7 @@
 }
 
 rtc_static_library("rtc_p2p") {
+  visibility = [ "*" ]
   sources = [
     "base/asyncstuntcpsocket.cc",
     "base/asyncstuntcpsocket.h",
@@ -194,6 +195,7 @@
 }
 
 rtc_static_library("libstunprober") {
+  visibility = [ "*" ]
   sources = [
     "stunprober/stunprober.cc",
     "stunprober/stunprober.h",
diff --git a/pc/BUILD.gn b/pc/BUILD.gn
index cd1a489..09fa2c2 100644
--- a/pc/BUILD.gn
+++ b/pc/BUILD.gn
@@ -26,6 +26,7 @@
 }
 
 rtc_static_library("rtc_pc_base") {
+  visibility = [ "*" ]
   defines = []
   sources = [
     "audiomonitor.cc",
@@ -99,6 +100,7 @@
 }
 
 rtc_source_set("rtc_pc") {
+  visibility = [ "*" ]
   deps = [
     ":rtc_pc_base",
     "../media:rtc_audio_video",
@@ -115,6 +117,7 @@
 }
 
 rtc_static_library("peerconnection") {
+  visibility = [ "*" ]
   cflags = []
   sources = [
     "audiotrack.cc",
@@ -237,6 +240,7 @@
 }
 
 rtc_source_set("libjingle_peerconnection") {
+  visibility = [ "*" ]
   deps = [
     ":create_pc_factory",
     ":peerconnection",
diff --git a/rtc_base/BUILD.gn b/rtc_base/BUILD.gn
index cc475f7..479f67f 100644
--- a/rtc_base/BUILD.gn
+++ b/rtc_base/BUILD.gn
@@ -64,6 +64,7 @@
 }
 
 source_set("protobuf_utils") {
+  visibility = [ "*" ]
   sources = [
     "protobuf_utils.h",
   ]
@@ -81,6 +82,7 @@
 }
 
 rtc_source_set("rtc_base_approved") {
+  visibility = [ "*" ]
   public_deps = [
     ":rtc_base_approved_generic",
   ]
@@ -377,6 +379,7 @@
 }
 
 rtc_source_set("rtc_task_queue") {
+  visibility = [ "*" ]
   deps = [
     ":rtc_base_approved",
   ]
@@ -405,6 +408,7 @@
 }
 
 rtc_source_set("rtc_task_queue_impl") {
+  visibility = [ "*" ]
   deps = [
     ":checks",
     ":rtc_base_approved",
@@ -506,6 +510,7 @@
 }
 
 rtc_static_library("rtc_base") {
+  visibility = [ "*" ]
   public_deps = [
     ":rtc_base_generic",
   ]
@@ -789,6 +794,7 @@
 }
 
 rtc_source_set("gtest_prod") {
+  visibility = [ "*" ]
   sources = [
     "gtest_prod_util.h",
   ]
@@ -984,6 +990,7 @@
   }
 
   rtc_source_set("rtc_task_queue_unittests") {
+    visibility = [ "*" ]
     testonly = true
 
     sources = [
diff --git a/rtc_tools/BUILD.gn b/rtc_tools/BUILD.gn
index 8a04b14..ac7e44d 100644
--- a/rtc_tools/BUILD.gn
+++ b/rtc_tools/BUILD.gn
@@ -71,6 +71,7 @@
 }
 
 rtc_executable("frame_analyzer") {
+  visibility = [ "*" ]
   sources = [
     "frame_analyzer/frame_analyzer.cc",
   ]
@@ -121,6 +122,7 @@
   }
 
   rtc_executable("rgba_to_i420_converter") {
+    visibility = [ "*" ]
     sources = [
       "converter/converter.cc",
       "converter/converter.h",
diff --git a/sdk/BUILD.gn b/sdk/BUILD.gn
index 14d529a..ef243d0 100644
--- a/sdk/BUILD.gn
+++ b/sdk/BUILD.gn
@@ -212,6 +212,7 @@
     }
 
     rtc_static_library("ui_objc") {
+      visibility = [ "*" ]
       if (is_ios) {
         sources = [
           "objc/Framework/Classes/UI/RTCCameraPreviewView.m",
@@ -273,6 +274,7 @@
     }
 
     rtc_static_library("peerconnection_objc") {
+      visibility = [ "*" ]
       sources = [
         "objc/Framework/Classes/PeerConnection/RTCAVFoundationVideoSource+Private.h",
         "objc/Framework/Classes/PeerConnection/RTCAVFoundationVideoSource.mm",
@@ -370,6 +372,7 @@
     # The applications which only use WebRTC DataChannel can depend on this
     # target instead of rtc_sdk_objc.
     rtc_static_library("peerconnectionfactory_no_media_objc") {
+      visibility = [ "*" ]
       defines = [ "HAVE_NO_MEDIA" ]
 
       sources = [
diff --git a/sdk/android/BUILD.gn b/sdk/android/BUILD.gn
index 366961d..9709714 100644
--- a/sdk/android/BUILD.gn
+++ b/sdk/android/BUILD.gn
@@ -63,6 +63,7 @@
 }
 
 rtc_source_set("base_jni") {
+  visibility = [ "*" ]
   sources = [
     "src/jni/androidhistogram.cc",
     "src/jni/class_loader.cc",
@@ -441,6 +442,7 @@
 }
 
 rtc_static_library("libjingle_peerconnection_jni") {
+  visibility = [ "*" ]
   public_deps = [
     ":audio_jni",
     ":base_jni",
@@ -460,6 +462,7 @@
 }
 
 rtc_static_library("libjingle_peerconnection_metrics_default_jni") {
+  visibility = [ "*" ]
   sources = [
     "src/jni/androidmetrics.cc",
   ]
diff --git a/stats/BUILD.gn b/stats/BUILD.gn
index 92cd1a9..92231ce 100644
--- a/stats/BUILD.gn
+++ b/stats/BUILD.gn
@@ -15,6 +15,7 @@
 }
 
 rtc_static_library("rtc_stats") {
+  visibility = [ "*" ]
   cflags = []
   sources = [
     "rtcstats.cc",
@@ -29,6 +30,7 @@
 }
 
 rtc_source_set("rtc_stats_test_utils") {
+  visibility = [ "*" ]
   cflags = []
   sources = [
     "test/rtcteststats.cc",
diff --git a/style-guide.md b/style-guide.md
index ca9bad2..d8fbaae 100644
--- a/style-guide.md
+++ b/style-guide.md
@@ -116,7 +116,7 @@
 [gn]: https://chromium.googlesource.com/chromium/src/tools/gn/
 [chr-gn-style]: https://chromium.googlesource.com/chromium/src/tools/gn/+/HEAD/docs/style_guide.md
 
-### WebRTC-specific GN templates
+### <a name="webrtc-gn-templates"></a>WebRTC-specific GN templates
 
 Use the following [GN templates][gn-templ] to ensure that all
 our [targets][gn-target] are built with the same configuration:
@@ -132,6 +132,23 @@
 [gn-templ]: https://chromium.googlesource.com/chromium/src/tools/gn/+/HEAD/docs/language.md#Templates
 [gn-target]: https://chromium.googlesource.com/chromium/src/tools/gn/+/HEAD/docs/language.md#Targets
 
+### Target visibility and the native API
+
+The [WebRTC-specific GN templates](#webrtc-gn-templates) declare build
+targets whose default `visibility` allows all other targets in the
+WebRTC tree (and no targets outside the tree) to depend on them.
+
+Prefer to restrict the visibility if possible:
+
+* If a target is used by only one or a tiny number of other targets,
+  prefer to list them explicitly: `visibility = [ ":foo", ":bar" ]`
+* If a target is used only by targets in the same `BUILD.gn` file:
+  `visibility = [ ":*" ]`.
+
+Setting `visibility = [ "*" ]` means that targets outside the WebRTC
+tree can depend on this target; use this only for build targets whose
+headers are part of the [native API](native-api.md).
+
 ### Conditional compilation with the C preprocessor
 
 Avoid using the C preprocessor to conditionally enable or disable
diff --git a/system_wrappers/BUILD.gn b/system_wrappers/BUILD.gn
index f999e21..358137f 100644
--- a/system_wrappers/BUILD.gn
+++ b/system_wrappers/BUILD.gn
@@ -13,6 +13,7 @@
 import("../webrtc.gni")
 
 rtc_static_library("system_wrappers") {
+  visibility = [ "*" ]
   sources = [
     "include/aligned_array.h",
     "include/aligned_malloc.h",
@@ -130,6 +131,7 @@
 }
 
 rtc_source_set("metrics_api") {
+  visibility = [ "*" ]
   sources = [
     "include/metrics.h",
   ]
@@ -141,6 +143,7 @@
 }
 
 rtc_source_set("field_trial_default") {
+  visibility = [ "*" ]
   sources = [
     "include/field_trial_default.h",
     "source/field_trial_default.cc",
@@ -151,6 +154,7 @@
 }
 
 rtc_source_set("metrics_default") {
+  visibility = [ "*" ]
   sources = [
     "include/metrics_default.h",
     "source/metrics_default.cc",
diff --git a/test/BUILD.gn b/test/BUILD.gn
index fe8a89e..00a7ae5 100644
--- a/test/BUILD.gn
+++ b/test/BUILD.gn
@@ -36,6 +36,7 @@
 }
 
 rtc_source_set("video_test_common") {
+  visibility = [ "*" ]
   testonly = true
   sources = [
     "fake_texture_frame.cc",
@@ -105,6 +106,7 @@
 }
 
 rtc_source_set("field_trial") {
+  visibility = [ "*" ]
   testonly = true
   sources = [
     "field_trial.cc",
@@ -119,6 +121,7 @@
 }
 
 rtc_source_set("perf_test") {
+  visibility = [ "*" ]
   testonly = true
   sources = [
     "testsupport/perf_test.cc",
@@ -147,6 +150,7 @@
 }
 
 rtc_source_set("test_support") {
+  visibility = [ "*" ]
   testonly = true
 
   sources = [
@@ -196,6 +200,7 @@
 
 if (rtc_include_tests) {
   rtc_source_set("test_main") {
+    visibility = [ "*" ]
     testonly = true
     sources = [
       "test_main.cc",
@@ -478,6 +483,7 @@
 }
 
 rtc_source_set("direct_transport") {
+  visibility = [ "*" ]
   testonly = true
   sources = [
     "direct_transport.cc",
@@ -518,6 +524,7 @@
 }
 
 rtc_source_set("fake_audio_device") {
+  visibility = [ "*" ]
   testonly = true
   sources = [
     "fake_audio_device.cc",
diff --git a/voice_engine/BUILD.gn b/voice_engine/BUILD.gn
index a10b792..bb9253f 100644
--- a/voice_engine/BUILD.gn
+++ b/voice_engine/BUILD.gn
@@ -104,7 +104,7 @@
 
 if (rtc_include_tests) {
   rtc_test("voice_engine_unittests") {
-    visibility += [ "*" ]
+    visibility += webrtc_default_visibility
     deps = [
       ":voice_engine",
       "../api/audio_codecs:builtin_audio_decoder_factory",
diff --git a/webrtc.gni b/webrtc.gni
index b8ceb8e..ffa92d4 100644
--- a/webrtc.gni
+++ b/webrtc.gni
@@ -264,6 +264,13 @@
   suppressed_configs = []
 }
 
+webrtc_default_visibility = [ webrtc_root + "/*" ]
+if (build_with_chromium) {
+  # Allow Chromium's WebRTC overrides targets to bypass the regular
+  # visibility restrictions.
+  webrtc_default_visibility += [ webrtc_root + "/../webrtc_overrides/*" ]
+}
+
 template("rtc_test") {
   test(target_name) {
     forward_variables_from(invoker,
@@ -304,6 +311,9 @@
                              "visibility",
                            ])
     forward_variables_from(invoker, [ "visibility" ])
+    if (!defined(visibility)) {
+      visibility = webrtc_default_visibility
+    }
     configs += invoker.configs
     configs -= rtc_remove_configs
     configs -= invoker.suppressed_configs
@@ -326,6 +336,9 @@
                              "visibility",
                            ])
     forward_variables_from(invoker, [ "visibility" ])
+    if (!defined(visibility)) {
+      visibility = webrtc_default_visibility
+    }
     configs += invoker.configs
     configs -= rtc_remove_configs
     configs -= invoker.suppressed_configs
@@ -352,6 +365,9 @@
                              "visibility",
                            ])
     forward_variables_from(invoker, [ "visibility" ])
+    if (!defined(visibility)) {
+      visibility = webrtc_default_visibility
+    }
     configs += invoker.configs
     configs -= rtc_remove_configs
     configs -= invoker.suppressed_configs
@@ -373,6 +389,9 @@
                              "visibility",
                            ])
     forward_variables_from(invoker, [ "visibility" ])
+    if (!defined(visibility)) {
+      visibility = webrtc_default_visibility
+    }
     configs += invoker.configs
     configs -= rtc_remove_configs
     configs -= invoker.suppressed_configs
@@ -400,6 +419,9 @@
                                "visibility",
                              ])
       forward_variables_from(invoker, [ "visibility" ])
+      if (!defined(visibility)) {
+        visibility = webrtc_default_visibility
+      }
       configs += invoker.configs
       configs -= rtc_remove_configs
       configs -= invoker.suppressed_configs