Enable GN check for webrtc/{p2p,system_wrappers}

Introduce new small header-only targets in system_wrappers:
:cpu_features_api
:field_trial_api
:metrics_api
to untangle and optimize dependencies but still satisfy GN check.

In webrtc/p2p, previously uncovered header "base/fakecandidatepair.h"
is added to :p2p_test_utils target.

Refactor system_wrappers so 'rtc_p2p' can depend on only
system_wrappers:field_trial_api instead of all of system_wrappers
(which led to a breakage in Chromium that called for the revert of
https://codereview.webrtc.org/2735583002).

BUG=webrtc:6828
NOTRY=True

Review-Url: https://codereview.webrtc.org/2739863002
Cr-Commit-Position: refs/heads/master@{#17812}
diff --git a/.gn b/.gn
index 1265bc5..585ff30 100644
--- a/.gn
+++ b/.gn
@@ -33,8 +33,10 @@
   "//webrtc/media/*",
   "//webrtc/modules/*",
   "//webrtc/ortc/*",
+  "//webrtc/p2p/*",
   "//webrtc/sdk/*",
   "//webrtc/stats/*",
+  "//webrtc/system_wrappers/*",
   "//webrtc/tools/*",
   "//webrtc/test/*",
   "//webrtc/voice_engine/*",
diff --git a/webrtc/api/BUILD.gn b/webrtc/api/BUILD.gn
index 71e5243..fdd441a 100644
--- a/webrtc/api/BUILD.gn
+++ b/webrtc/api/BUILD.gn
@@ -35,7 +35,9 @@
 }
 
 rtc_static_library("libjingle_peerconnection_api") {
-  check_includes = false  # TODO(kjellander): Remove (bugs.webrtc.org/6828)
+  # Cannot have GN check enabled since that would introduce dependency cycles
+  # TODO(kjellander): Remove (bugs.webrtc.org/7504)
+  check_includes = false
   cflags = []
   sources = [
     "datachannel.h",
@@ -82,7 +84,18 @@
 
   deps = [
     ":rtc_stats_api",
+    "..:webrtc_common",
+    "../base:rtc_base",
+    "../base:rtc_base_approved",
+    "audio_codecs:audio_codecs_api",
   ]
+
+  # This is needed until bugs.webrtc.org/7504 is removed so this target can
+  # properly depend on ../media:rtc_media_base
+  # TODO(kjellander): Remove this dependency.
+  if (is_nacl) {
+    deps += [ "//native_client_sdk/src/libraries/nacl_io" ]
+  }
 }
 
 rtc_source_set("ortc_api") {
diff --git a/webrtc/media/BUILD.gn b/webrtc/media/BUILD.gn
index 08ffa7d..ea4b8f3 100644
--- a/webrtc/media/BUILD.gn
+++ b/webrtc/media/BUILD.gn
@@ -107,6 +107,10 @@
     "../common_video:common_video",
     "../p2p",
   ]
+
+  if (is_nacl) {
+    deps += [ "//native_client_sdk/src/libraries/nacl_io" ]
+  }
 }
 
 rtc_static_library("rtc_media") {
diff --git a/webrtc/p2p/BUILD.gn b/webrtc/p2p/BUILD.gn
index a31b7f1..3141c52 100644
--- a/webrtc/p2p/BUILD.gn
+++ b/webrtc/p2p/BUILD.gn
@@ -85,7 +85,10 @@
   defines = []
 
   deps = [
+    "../api:libjingle_peerconnection_api",
+    "../api:ortc_api",
     "../base:rtc_base",
+    "../system_wrappers:field_trial_api",
   ]
 
   if (rtc_build_expat) {
@@ -145,6 +148,7 @@
   rtc_source_set("p2p_test_utils") {
     testonly = true
     sources = [
+      "base/fakecandidatepair.h",
       "base/fakedtlstransport.h",
       "base/fakeicetransport.h",
       "base/fakepackettransport.h",
@@ -155,16 +159,15 @@
       "base/teststunserver.h",
       "base/testturnserver.h",
     ]
-
     deps = [
       ":rtc_p2p",
+      "../api:ortc_api",
+      "../base:rtc_base",
+      "../base:rtc_base_approved",
+      "../base:rtc_base_tests_utils",
+      "../test:test_support",
       "//testing/gmock",
     ]
-
-    if (!build_with_chromium && is_clang) {
-      # Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163).
-      suppressed_configs += [ "//build/config/clang:find_bad_constructs" ]
-    }
   }
 
   rtc_source_set("rtc_p2p_unittests") {
@@ -205,6 +208,11 @@
       ":p2p_test_utils",
       ":rtc_p2p",
       "../api:fakemetricsobserver",
+      "../api:ortc_api",
+      "../base:rtc_base",
+      "../base:rtc_base_approved",
+      "../base:rtc_base_tests_utils",
+      "../test:test_support",
       "//testing/gmock",
       "//testing/gtest",
     ]
@@ -228,6 +236,7 @@
   }
 
   deps = [
+    ":rtc_p2p",
     "..:webrtc_common",
     "../base:rtc_base",
   ]
@@ -241,6 +250,10 @@
     ]
     deps = [
       ":libstunprober",
+      ":p2p_test_utils",
+      ":rtc_p2p",
+      "../base:rtc_base",
+      "../base:rtc_base_tests_utils",
       "//testing/gmock",
       "//testing/gtest",
     ]
diff --git a/webrtc/system_wrappers/BUILD.gn b/webrtc/system_wrappers/BUILD.gn
index 1ecb9e8..325c016 100644
--- a/webrtc/system_wrappers/BUILD.gn
+++ b/webrtc/system_wrappers/BUILD.gn
@@ -18,13 +18,10 @@
     "include/aligned_malloc.h",
     "include/atomic32.h",
     "include/clock.h",
-    "include/cpu_features_wrapper.h",
     "include/cpu_info.h",
     "include/event_wrapper.h",
-    "include/field_trial.h",
     "include/file_wrapper.h",
     "include/fix_interlocked_exchange_pointer_win.h",
-    "include/metrics.h",
     "include/ntp_time.h",
     "include/rtp_to_ntp_estimator.h",
     "include/rw_lock_wrapper.h",
@@ -64,6 +61,11 @@
   deps = [
     "..:webrtc_common",
   ]
+  public_deps = [
+    ":cpu_features_api",
+    ":field_trial_api",
+    ":metrics_api",
+  ]
 
   if (is_android) {
     sources += [
@@ -104,6 +106,11 @@
     libs += [ "winmm.lib" ]
 
     cflags = [ "/wd4334" ]  # Ignore warning on shift operator promotion.
+
+    # Windows needs //webrtc/base:rtc_base due to include of webrtc/base/win32.h
+    # in source/clock.cc.
+    # TODO(kjellander): Remove (bugs.webrtc.org/6828)
+    deps += [ "../base:rtc_base" ]
   }
 
   if (is_win && is_clang) {
@@ -114,11 +121,39 @@
   deps += [ "../base:rtc_base_approved" ]
 }
 
+rtc_source_set("cpu_features_api") {
+  sources = [
+    "include/cpu_features_wrapper.h",
+  ]
+  deps = [
+    "..:webrtc_common",
+  ]
+}
+
+rtc_source_set("field_trial_api") {
+  sources = [
+    "include/field_trial.h",
+  ]
+}
+
+rtc_source_set("metrics_api") {
+  sources = [
+    "include/metrics.h",
+  ]
+  deps = [
+    "..:webrtc_common",
+    "../base:rtc_base_approved",
+  ]
+}
+
 rtc_static_library("field_trial_default") {
   sources = [
     "include/field_trial_default.h",
     "source/field_trial_default.cc",
   ]
+  deps = [
+    ":field_trial_api",
+  ]
 }
 
 rtc_static_library("metrics_default") {
@@ -126,6 +161,10 @@
     "include/metrics_default.h",
     "source/metrics_default.cc",
   ]
+  deps = [
+    ":metrics_api",
+    "../base:rtc_base_approved",
+  ]
 }
 
 group("system_wrappers_default") {
@@ -153,6 +192,9 @@
     sources = [
       "source/cpu_features_linux.c",
     ]
+    deps = [
+      ":cpu_features_api",
+    ]
   }
 }
 
@@ -179,6 +221,8 @@
     deps = [
       ":metrics_default",
       ":system_wrappers",
+      "..:webrtc_common",
+      "../base:rtc_base_approved",
       "../test:test_main",
       "//testing/gtest",
     ]