Force Chromium deps on the WebRTC component.

This CL adds a visibility check to the rtc_* GN templates in order
to force Chromium to depend only on publicly visible targets from
//third_party/webrtc_overrides and not from //third_party/webrtc.

This is required in order to ensure that the Chromium's component
builds continues to work correctly without introducing direct
dependency paths on WebRTC that would statically link it in multiple
shared libraries.

Bug: webrtc:9419
Change-Id: Ib89f4fc571512f99678ee4f61696b316374346d9
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/154344
Commit-Queue: Mirko Bonadei <mbonadei@webrtc.org>
Reviewed-by: Dirk Pranke <dpranke@chromium.org>
Reviewed-by: Karl Wiberg <kwiberg@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#29806}
diff --git a/api/task_queue/BUILD.gn b/api/task_queue/BUILD.gn
index 7d44977..00be784 100644
--- a/api/task_queue/BUILD.gn
+++ b/api/task_queue/BUILD.gn
@@ -39,6 +39,15 @@
 
   check_includes = false  # no-presubmit-check TODO(bugs.webrtc.org/9419)
   if (build_with_chromium) {
+    visibility = []
+    visibility = webrtc_default_visibility
+    visibility += [
+      # This is the only Chromium target that can depend on this. The reason
+      # behind this is the fact that this is a 'testonly' target and as such
+      # it cannot be part of the WebRTC component.
+      "//third_party/blink/renderer/platform:blink_platform_unittests_sources",
+    ]
+
     # Don't depend on WebRTC code outside of webrtc_overrides:webrtc_component
     # because this will break the WebRTC component build in Chromium.
     deps = [
diff --git a/webrtc.gni b/webrtc.gni
index 4e0f364..ec0ca54 100644
--- a/webrtc.gni
+++ b/webrtc.gni
@@ -471,6 +471,21 @@
       }
     }
 
+    # Chromium should only depend on the WebRTC component in order to
+    # avoid to statically link WebRTC in a component build.
+    if (build_with_chromium) {
+      publicly_visible = false
+      foreach(v, visibility) {
+        if (v == "*") {
+          publicly_visible = true
+        }
+      }
+      if (publicly_visible) {
+        visibility = []
+        visibility = webrtc_default_visibility
+      }
+    }
+
     if (!defined(testonly) || !testonly) {
       configs += rtc_prod_configs
     }
@@ -643,6 +658,21 @@
       }
     }
 
+    # Chromium should only depend on the WebRTC component in order to
+    # avoid to statically link WebRTC in a component build.
+    if (build_with_chromium) {
+      publicly_visible = false
+      foreach(v, visibility) {
+        if (v == "*") {
+          publicly_visible = true
+        }
+      }
+      if (publicly_visible) {
+        visibility = []
+        visibility = webrtc_default_visibility
+      }
+    }
+
     if (!defined(testonly) || !testonly) {
       configs += rtc_prod_configs
     }