Restrict absl_source_set visibility in favor of the component.

Since the absl component build has landed, this CL restricts access
to the absl source_sets in favor of a direct dependency on the
component target.

For now there is an allowlist but based on the outcome of
https://groups.google.com/a/chromium.org/forum/#!topic/cxx/cNZPHgfhNP4
it might be lifted.

Bug: 1046390
Change-Id: I171ff8352e10241ca5dd3703d15e189a5ff534b7
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2260532
Commit-Queue: Mirko Bonadei <mbonadei@chromium.org>
Reviewed-by: Nico Weber <thakis@chromium.org>
Cr-Original-Commit-Position: refs/heads/master@{#782940}
Cr-Mirrored-From: https://chromium.googlesource.com/chromium/src
Cr-Mirrored-Commit: 50f3c4a3086a0f62e002a869d9bbc845097a08ec
diff --git a/BUILD.gn b/BUILD.gn
index b96d354..4a090e0 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -8,6 +8,7 @@
 
 import("//build/toolchain/toolchain.gni")
 import("//testing/test.gni")
+import("//third_party/abseil-cpp/absl.gni")
 
 config("absl_component_build") {
   defines = [ "ABSL_CONSUME_DLL" ]
@@ -62,6 +63,14 @@
     "//third_party/abseil-cpp/absl/types:optional",
     "//third_party/abseil-cpp/absl/types:variant",
   ]
+
+  # Usage of Abseil in Chromium is guarded by an explicit opt-in list, before
+  # adding projects to this list please reach out to cxx@chromium.org and CC:
+  # - https://cs.chromium.org/chromium/src/third_party/abseil-cpp/OWNERS
+  #
+  # More information can be found at:
+  # https://docs.google.com/document/d/1DgS1-A3rzboTLjpf4m1sqkJgWjnY_Ru2dokk1X1vBDU
+  visibility = absl_visibility
 }
 
 group("default") {
diff --git a/absl.gni b/absl.gni
index b2cf17d..a68823c 100644
--- a/absl.gni
+++ b/absl.gni
@@ -30,25 +30,24 @@
 # https://docs.google.com/document/d/1DgS1-A3rzboTLjpf4m1sqkJgWjnY_Ru2dokk1X1vBDU
 declare_args() {
   # Additional targets that can depend on absl.
-  # ** DISCLAIMER **
-  #
-  # Using "additional_absl_clients" is highly discouraged because it will break
-  # the component build since Abseil doesn't have export annotations and WebRTC
-  # is already depending on it. Any CL that use "additional_absl_clients" will
-  # have a really high probability of being reverted.
   additional_absl_clients = []
 }
-assert(!is_component_build || additional_absl_clients == [])
 
 _chromium_absl_clients = [
   "//libassistant/*",
-  "//third_party/webrtc/*",
-  "//third_party/abseil-cpp/*",
+  "//third_party/blink/renderer/modules/peerconnection",
+  "//third_party/blink/renderer/platform",
   "//third_party/googletest:gtest",
-  "//third_party/shell-encryption/*",
+  "//third_party/openscreen/src/third_party/abseil/*",
   "//third_party/private_membership/*",
+  "//third_party/shell-encryption/*",
+  "//third_party/webrtc/*",
 ]
 
+# When adding a new package to `absl_visibility`, please check that all the
+# Abseil dependencies that are required are listed in the dependencies of
+# //third_party/abseil-cpp:absl. If not, please add them and run:
+# //third_party/abseil-cpp/generate_def_file.py.
 absl_visibility = _chromium_absl_clients + additional_absl_clients
 
 template("absl_source_set") {
@@ -73,15 +72,22 @@
     }
     public_configs += [ "//third_party/abseil-cpp:absl_include_config" ]
 
-    # Usage of Abseil in Chromium is guarded by an explicit opt-in list, before
-    # adding projects to this list please reach out to cxx@chromium.org and CC:
-    # - https://cs.chromium.org/chromium/src/third_party/abseil-cpp/OWNERS
-    #
-    # More information can be found at:
-    # https://docs.google.com/document/d/1DgS1-A3rzboTLjpf4m1sqkJgWjnY_Ru2dokk1X1vBDU
     if (!defined(visibility)) {
       if (build_with_chromium) {
-        visibility = absl_visibility
+        visibility = [
+          "//third_party/abseil-cpp/*",
+
+          # WebRTC binary to run PSNR and SSIM video quality analysis. It
+          # statically links absl and it is used by "browser_tests" when
+          # is_component_build=false but it cannot depend on the absl
+          # component because it uses absl/flags.
+          "//third_party/webrtc/rtc_tools:frame_analyzer",
+          # WebRTC binaries used by //:chromium_builder_asan, they both
+          # statically link absl (because they depend on absl/flags) and are
+          # used by Chromium only when is_component_build=false.
+          "//third_party/webrtc/rtc_tools:rtp_generator",
+          "//third_party/webrtc/rtc_tools:video_replay",
+        ]
       } else {
         visibility = [ "*" ]
       }
diff --git a/absl/base/BUILD.gn b/absl/base/BUILD.gn
index 8b19d23..c1b9ac5 100644
--- a/absl/base/BUILD.gn
+++ b/absl/base/BUILD.gn
@@ -10,15 +10,13 @@
     ":config",
     ":core_headers",
   ]
-  visibility = []
-  visibility += [ "//third_party/abseil-cpp/absl/*" ]
+  visibility = [ "//third_party/abseil-cpp/absl/*" ]
 }
 
 absl_source_set("errno_saver") {
   public = [ "internal/errno_saver.h" ]
   deps = [ ":config" ]
-  visibility = []
-  visibility += [ "//third_party/abseil-cpp/absl/*" ]
+  visibility = [ "//third_party/abseil-cpp/absl/*" ]
 }
 
 absl_source_set("log_severity") {
@@ -39,8 +37,7 @@
     ":core_headers",
     ":log_severity",
   ]
-  visibility = []
-  visibility += [ "//third_party/abseil-cpp/absl/*" ]
+  visibility = [ "//third_party/abseil-cpp/absl/*" ]
 }
 
 absl_source_set("spinlock_wait") {
@@ -57,8 +54,7 @@
     ":core_headers",
     ":errno_saver",
   ]
-  visibility = []
-  visibility += [ "//third_party/abseil-cpp/absl/base:*" ]
+  visibility = [ "//third_party/abseil-cpp/absl/base:*" ]
 }
 
 absl_source_set("config") {
@@ -75,7 +71,6 @@
 
   # Abseil's dynamic annotations are only visible inside Abseil because
   # their usage is deprecated in Chromium (see README.chromium for more info).
-  visibility = []
   visibility = [ "//third_party/abseil-cpp/absl/*" ]
   deps = [ ":config" ]
 }
@@ -120,8 +115,7 @@
     ":config",
     "//third_party/abseil-cpp/absl/meta:type_traits",
   ]
-  visibility = []
-  visibility += [ "//third_party/abseil-cpp/absl/*" ]
+  visibility = [ "//third_party/abseil-cpp/absl/*" ]
 }
 
 absl_source_set("base") {
@@ -168,22 +162,19 @@
     ":config",
     ":raw_logging_internal",
   ]
-  visibility = []
-  visibility += [ "//third_party/abseil-cpp/absl/*" ]
+  visibility = [ "//third_party/abseil-cpp/absl/*" ]
 }
 
 absl_source_set("exception_testing") {
   testonly = true
   public = [ "internal/exception_testing.h" ]
   deps = [ ":config" ]
-  visibility = []
-  visibility += [ "//third_party/abseil-cpp/absl/*" ]
+  visibility = [ "//third_party/abseil-cpp/absl/*" ]
 }
 
 absl_source_set("pretty_function") {
   public = [ "internal/pretty_function.h" ]
-  visibility = []
-  visibility += [ "//third_party/abseil-cpp/absl/*" ]
+  visibility = [ "//third_party/abseil-cpp/absl/*" ]
 }
 
 # TODO(mbonadei): This target throws by design. We should probably
@@ -242,8 +233,7 @@
     ":config",
     ":core_headers",
   ]
-  visibility = []
-  visibility += [ "//third_party/abseil-cpp/absl/*" ]
+  visibility = [ "//third_party/abseil-cpp/absl/*" ]
 }
 
 absl_source_set("exponential_biased") {
@@ -253,8 +243,7 @@
     ":config",
     ":core_headers",
   ]
-  visibility = []
-  visibility += [ "//third_party/abseil-cpp/absl/*" ]
+  visibility = [ "//third_party/abseil-cpp/absl/*" ]
 }
 
 absl_source_set("periodic_sampler") {
@@ -274,8 +263,7 @@
     ":config",
     ":raw_logging_internal",
   ]
-  visibility = []
-  visibility += [ "//third_party/abseil-cpp/absl/*" ]
+  visibility = [ "//third_party/abseil-cpp/absl/*" ]
 }
 
 absl_source_set("strerror") {
@@ -286,15 +274,13 @@
     ":core_headers",
     ":errno_saver",
   ]
-  visibility = []
-  visibility += [ "//third_party/abseil-cpp/absl/*" ]
+  visibility = [ "//third_party/abseil-cpp/absl/*" ]
 }
 
 absl_source_set("fast_type_id") {
   public = [ "internal/fast_type_id.h" ]
   deps = [ ":config" ]
-  visibility = []
-  visibility += [ "//third_party/abseil-cpp/absl/*" ]
+  visibility = [ "//third_party/abseil-cpp/absl/*" ]
 }
 
 absl_source_set("config_test") {
diff --git a/absl/container/BUILD.gn b/absl/container/BUILD.gn
index f66f029..87574de 100644
--- a/absl/container/BUILD.gn
+++ b/absl/container/BUILD.gn
@@ -47,8 +47,7 @@
   testonly = true
   public = [ "internal/counting_allocator.h" ]
   deps = [ "//third_party/abseil-cpp/absl/base:config" ]
-  visibility = []
-  visibility += [ ":*" ]
+  visibility = [ ":*" ]
 }
 
 absl_source_set("test_instance_tracker") {
@@ -56,8 +55,7 @@
   sources = [ "internal/test_instance_tracker.cc" ]
   public = [ "internal/test_instance_tracker.h" ]
   deps = [ "//third_party/abseil-cpp/absl/types:compare" ]
-  visibility = []
-  visibility += [ "//third_party/abseil-cpp/absl/*" ]
+  visibility = [ "//third_party/abseil-cpp/absl/*" ]
 }
 
 absl_source_set("flat_hash_map") {
@@ -196,8 +194,7 @@
 
 absl_source_set("have_sse") {
   public = [ "internal/have_sse.h" ]
-  visibility = []
-  visibility += [ ":*" ]
+  visibility = [ ":*" ]
 }
 
 absl_source_set("common") {
diff --git a/absl/debugging/BUILD.gn b/absl/debugging/BUILD.gn
index 05b400e..048a872 100644
--- a/absl/debugging/BUILD.gn
+++ b/absl/debugging/BUILD.gn
@@ -58,8 +58,7 @@
 absl_source_set("examine_stack") {
   sources = [ "internal/examine_stack.cc" ]
   public = [ "internal/examine_stack.h" ]
-  visibility = []
-  visibility += [ ":*" ]
+  visibility = [ ":*" ]
   deps = [
     ":stacktrace",
     ":symbolize",
@@ -137,8 +136,7 @@
     testonly = true
     sources = [ "leak_check.cc" ]
     public = [ "leak_check.h" ]
-    visibility = []
-    visibility += [ ":*" ]
+    visibility = [ ":*" ]
     deps = [ "//third_party/abseil-cpp/absl/base:config" ]
   }
 } else {
@@ -146,8 +144,7 @@
     testonly = true
     sources = [ "leak_check.cc" ]
     public = [ "leak_check.h" ]
-    visibility = []
-    visibility += [ ":*" ]
+    visibility = [ ":*" ]
     deps = [ "//third_party/abseil-cpp/absl/base:config" ]
   }
 }
@@ -161,6 +158,5 @@
     "//third_party/abseil-cpp/absl/base:core_headers",
     "//third_party/abseil-cpp/absl/base:raw_logging_internal",
   ]
-  visibility = []
-  visibility += [ ":*" ]
+  visibility = [ ":*" ]
 }
diff --git a/absl/flags/BUILD.gn b/absl/flags/BUILD.gn
index 7318b6d..969d89e 100644
--- a/absl/flags/BUILD.gn
+++ b/absl/flags/BUILD.gn
@@ -16,8 +16,7 @@
     "//third_party/abseil-cpp/absl/base:config",
     "//third_party/abseil-cpp/absl/strings",
   ]
-  visibility = []
-  visibility += [ ":*" ]
+  visibility = [ ":*" ]
 }
 
 absl_source_set("program_name") {
@@ -31,8 +30,7 @@
     "//third_party/abseil-cpp/absl/strings",
     "//third_party/abseil-cpp/absl/synchronization",
   ]
-  visibility = []
-  visibility += [ ":*" ]
+  visibility = [ ":*" ]
 }
 
 absl_source_set("config") {
@@ -72,8 +70,7 @@
     "//third_party/abseil-cpp/absl/base:config",
     "//third_party/abseil-cpp/absl/base:fast_type_id",
   ]
-  visibility = []
-  visibility += [ ":*" ]
+  visibility = [ ":*" ]
 }
 
 absl_source_set("commandlineflag") {
@@ -99,8 +96,7 @@
     "//third_party/abseil-cpp/absl/base:config",
     "//third_party/abseil-cpp/absl/strings",
   ]
-  visibility = []
-  visibility += [ ":*" ]
+  visibility = [ ":*" ]
 }
 
 absl_source_set("reflection") {
@@ -141,8 +137,7 @@
     "//third_party/abseil-cpp/absl/synchronization",
     "//third_party/abseil-cpp/absl/utility",
   ]
-  visibility = []
-  visibility += [
+  visibility = [
     ":*",
     "//third_party/abseil-cpp/absl/base/*",
   ]
@@ -183,8 +178,7 @@
     "//third_party/abseil-cpp/absl/base:core_headers",
     "//third_party/abseil-cpp/absl/strings",
   ]
-  visibility = []
-  visibility += [ ":*" ]
+  visibility = [ ":*" ]
 }
 
 absl_source_set("usage") {
diff --git a/absl/hash/BUILD.gn b/absl/hash/BUILD.gn
index d546eb9..ca4a05b 100644
--- a/absl/hash/BUILD.gn
+++ b/absl/hash/BUILD.gn
@@ -5,19 +5,6 @@
 import("//build_overrides/build.gni")
 import("//third_party/abseil-cpp/absl.gni")
 
-# Usage of Abseil in Chromium is guarded by an explicit opt-in list, before
-# adding projects to this list please reach out to cxx@chromium.org and CC:
-# - https://cs.chromium.org/chromium/src/third_party/abseil-cpp/OWNERS
-#
-# More information can be found at:
-# https://docs.google.com/document/d/1DgS1-A3rzboTLjpf4m1sqkJgWjnY_Ru2dokk1X1vBDU
-if (build_with_chromium) {
-  default_visibility = absl_visibility
-  default_visibility += [ "//third_party/openscreen/*" ]
-} else {
-  default_visibility = [ "*" ]
-}
-
 absl_source_set("hash") {
   sources = [
     "internal/hash.cc",
@@ -36,7 +23,6 @@
     "//third_party/abseil-cpp/absl/types:variant",
     "//third_party/abseil-cpp/absl/utility",
   ]
-  visibility = default_visibility
 }
 
 absl_source_set("hash_testing") {
@@ -59,8 +45,7 @@
     "//third_party/abseil-cpp/absl/strings",
     "//third_party/abseil-cpp/absl/strings:str_format",
   ]
-  visibility = []
-  visibility += [ "//third_party/abseil-cpp/absl/*" ]
+  visibility = [ "//third_party/abseil-cpp/absl/*" ]
 }
 
 absl_source_set("city") {
diff --git a/absl/strings/BUILD.gn b/absl/strings/BUILD.gn
index ab20189..e392ec1 100644
--- a/absl/strings/BUILD.gn
+++ b/absl/strings/BUILD.gn
@@ -5,19 +5,6 @@
 import("//build_overrides/build.gni")
 import("//third_party/abseil-cpp/absl.gni")
 
-# Usage of Abseil in Chromium is guarded by an explicit opt-in list, before
-# adding projects to this list please reach out to cxx@chromium.org and CC:
-# - https://cs.chromium.org/chromium/src/third_party/abseil-cpp/OWNERS
-#
-# More information can be found at:
-# https://docs.google.com/document/d/1DgS1-A3rzboTLjpf4m1sqkJgWjnY_Ru2dokk1X1vBDU
-if (build_with_chromium) {
-  default_visibility = absl_visibility
-  default_visibility += [ "//third_party/openscreen/*" ]
-} else {
-  default_visibility = [ "*" ]
-}
-
 absl_source_set("strings") {
   sources = [
     "ascii.cc",
@@ -67,7 +54,6 @@
     "//third_party/abseil-cpp/absl/meta:type_traits",
     "//third_party/abseil-cpp/absl/numeric:int128",
   ]
-  visibility = default_visibility
 }
 
 absl_source_set("internal") {
@@ -115,8 +101,7 @@
     "internal/str_format/output.h",
     "internal/str_format/parser.h",
   ]
-  visibility = []
-  visibility += [ ":*" ]
+  visibility = [ ":*" ]
   deps = [
     ":strings",
     "//third_party/abseil-cpp/absl/base:bits",
@@ -132,8 +117,7 @@
 
 absl_source_set("cord_internal") {
   public = [ "internal/cord_internal.h" ]
-  visibility = []
-  visibility += [ ":*" ]
+  visibility = [ ":*" ]
   deps = [
     ":strings",
     "//third_party/abseil-cpp/absl/meta:type_traits",
@@ -171,8 +155,7 @@
   testonly = true
   sources = [ "internal/pow10_helper.cc" ]
   public = [ "internal/pow10_helper.h" ]
-  visibility = []
-  visibility += [ ":*" ]
+  visibility = [ ":*" ]
   deps = [ "//third_party/abseil-cpp/absl/base:config" ]
 }
 
diff --git a/absl/synchronization/BUILD.gn b/absl/synchronization/BUILD.gn
index 0cfcebf..7ff4b93 100644
--- a/absl/synchronization/BUILD.gn
+++ b/absl/synchronization/BUILD.gn
@@ -15,8 +15,7 @@
     "//third_party/abseil-cpp/absl/base:malloc_internal",
     "//third_party/abseil-cpp/absl/base:raw_logging_internal",
   ]
-  visibility = []
-  visibility += [ "//third_party/abseil-cpp/absl/*" ]
+  visibility = [ "//third_party/abseil-cpp/absl/*" ]
 }
 
 absl_source_set("kernel_timeout_internal") {
@@ -26,8 +25,7 @@
     "//third_party/abseil-cpp/absl/base:raw_logging_internal",
     "//third_party/abseil-cpp/absl/time",
   ]
-  visibility = []
-  visibility += [ ":*" ]
+  visibility = [ ":*" ]
 }
 
 absl_source_set("synchronization") {
@@ -74,8 +72,7 @@
     ":synchronization",
     "//third_party/abseil-cpp/absl/base:core_headers",
   ]
-  visibility = []
-  visibility += [ "//third_party/abseil-cpp/absl/*" ]
+  visibility = [ "//third_party/abseil-cpp/absl/*" ]
 }
 
 absl_source_set("per_thread_sem_test_common") {
diff --git a/absl/time/BUILD.gn b/absl/time/BUILD.gn
index 7196dd6..dbe5193 100644
--- a/absl/time/BUILD.gn
+++ b/absl/time/BUILD.gn
@@ -44,6 +44,5 @@
     "//third_party/googletest:gtest",
     "//third_party/googletest:gmock",
   ]
-  visibility = []
-  visibility += [ "//third_party/abseil-cpp/absl/time:*" ]
+  visibility = [ "//third_party/abseil-cpp/absl/time:*" ]
 }
diff --git a/absl/types/BUILD.gn b/absl/types/BUILD.gn
index 42faa90..751d8b8 100644
--- a/absl/types/BUILD.gn
+++ b/absl/types/BUILD.gn
@@ -5,23 +5,6 @@
 import("//build_overrides/build.gni")
 import("//third_party/abseil-cpp/absl.gni")
 
-# Usage of Abseil in Chromium is guarded by an explicit opt-in list, before
-# adding projects to this list please reach out to cxx@chromium.org and CC:
-# - https://cs.chromium.org/chromium/src/third_party/abseil-cpp/OWNERS
-#
-# More information can be found at:
-# https://docs.google.com/document/d/1DgS1-A3rzboTLjpf4m1sqkJgWjnY_Ru2dokk1X1vBDU
-if (build_with_chromium) {
-  default_visibility = absl_visibility
-  default_visibility += [
-    "//third_party/blink/renderer/platform:platform",
-    "//third_party/blink/renderer/modules/peerconnection:peerconnection",
-    "//third_party/openscreen/*",
-  ]
-} else {
-  default_visibility = [ "*" ]
-}
-
 absl_source_set("any") {
   public = [ "any.h" ]
   deps = [
@@ -49,8 +32,7 @@
     "//third_party/abseil-cpp/absl/base:config",
     "//third_party/abseil-cpp/absl/base:raw_logging_internal",
   ]
-  visibility = []
-  visibility += [ ":*" ]
+  visibility = [ ":*" ]
 }
 
 absl_source_set("span") {
@@ -76,7 +58,6 @@
     "//third_party/abseil-cpp/absl/meta:type_traits",
     "//third_party/abseil-cpp/absl/utility",
   ]
-  visibility = default_visibility
 }
 
 absl_source_set("bad_optional_access") {
@@ -108,7 +89,6 @@
     "//third_party/abseil-cpp/absl/meta:type_traits",
     "//third_party/abseil-cpp/absl/utility",
   ]
-  visibility = default_visibility
 }
 
 absl_source_set("compare") {