Factor out channel state watching
diff --git a/tools/run_tests/sources_and_headers.json b/tools/run_tests/sources_and_headers.json
index 5c74bf1..8dab263 100644
--- a/tools/run_tests/sources_and_headers.json
+++ b/tools/run_tests/sources_and_headers.json
@@ -936,6 +936,20 @@
       "gpr", 
       "gpr_test_util", 
       "grpc", 
+      "grpc_test_util"
+    ], 
+    "headers": [], 
+    "language": "c", 
+    "name": "uri_parser_test", 
+    "src": [
+      "test/core/client_config/uri_parser_test.c"
+    ]
+  }, 
+  {
+    "deps": [
+      "gpr", 
+      "gpr_test_util", 
+      "grpc", 
       "grpc++", 
       "grpc++_test_util", 
       "grpc_test_util"
@@ -8636,14 +8650,24 @@
       "src/core/channel/census_filter.h", 
       "src/core/channel/channel_args.h", 
       "src/core/channel/channel_stack.h", 
-      "src/core/channel/child_channel.h", 
       "src/core/channel/client_channel.h", 
-      "src/core/channel/client_setup.h", 
       "src/core/channel/connected_channel.h", 
+      "src/core/channel/connectivity_state.h", 
       "src/core/channel/context.h", 
       "src/core/channel/http_client_filter.h", 
       "src/core/channel/http_server_filter.h", 
       "src/core/channel/noop_filter.h", 
+      "src/core/client_config/client_config.h", 
+      "src/core/client_config/connector.h", 
+      "src/core/client_config/lb_policies/pick_first.h", 
+      "src/core/client_config/lb_policy.h", 
+      "src/core/client_config/resolver.h", 
+      "src/core/client_config/resolver_factory.h", 
+      "src/core/client_config/resolver_registry.h", 
+      "src/core/client_config/resolvers/dns_resolver.h", 
+      "src/core/client_config/subchannel.h", 
+      "src/core/client_config/subchannel_factory.h", 
+      "src/core/client_config/uri_parser.h", 
       "src/core/compression/message_compress.h", 
       "src/core/debug/trace.h", 
       "src/core/httpcli/format_request.h", 
@@ -8698,7 +8722,6 @@
       "src/core/surface/byte_buffer_queue.h", 
       "src/core/surface/call.h", 
       "src/core/surface/channel.h", 
-      "src/core/surface/client.h", 
       "src/core/surface/completion_queue.h", 
       "src/core/surface/event_string.h", 
       "src/core/surface/init.h", 
@@ -8717,6 +8740,8 @@
       "src/core/transport/chttp2/hpack_table.h", 
       "src/core/transport/chttp2/http2_errors.h", 
       "src/core/transport/chttp2/huffsyms.h", 
+      "src/core/transport/chttp2/incoming_metadata.h", 
+      "src/core/transport/chttp2/internal.h", 
       "src/core/transport/chttp2/status_conversion.h", 
       "src/core/transport/chttp2/stream_encoder.h", 
       "src/core/transport/chttp2/stream_map.h", 
@@ -8752,14 +8777,12 @@
       "src/core/channel/channel_args.h", 
       "src/core/channel/channel_stack.c", 
       "src/core/channel/channel_stack.h", 
-      "src/core/channel/child_channel.c", 
-      "src/core/channel/child_channel.h", 
       "src/core/channel/client_channel.c", 
       "src/core/channel/client_channel.h", 
-      "src/core/channel/client_setup.c", 
-      "src/core/channel/client_setup.h", 
       "src/core/channel/connected_channel.c", 
       "src/core/channel/connected_channel.h", 
+      "src/core/channel/connectivity_state.c", 
+      "src/core/channel/connectivity_state.h", 
       "src/core/channel/context.h", 
       "src/core/channel/http_client_filter.c", 
       "src/core/channel/http_client_filter.h", 
@@ -8767,6 +8790,28 @@
       "src/core/channel/http_server_filter.h", 
       "src/core/channel/noop_filter.c", 
       "src/core/channel/noop_filter.h", 
+      "src/core/client_config/client_config.c", 
+      "src/core/client_config/client_config.h", 
+      "src/core/client_config/connector.c", 
+      "src/core/client_config/connector.h", 
+      "src/core/client_config/lb_policies/pick_first.c", 
+      "src/core/client_config/lb_policies/pick_first.h", 
+      "src/core/client_config/lb_policy.c", 
+      "src/core/client_config/lb_policy.h", 
+      "src/core/client_config/resolver.c", 
+      "src/core/client_config/resolver.h", 
+      "src/core/client_config/resolver_factory.c", 
+      "src/core/client_config/resolver_factory.h", 
+      "src/core/client_config/resolver_registry.c", 
+      "src/core/client_config/resolver_registry.h", 
+      "src/core/client_config/resolvers/dns_resolver.c", 
+      "src/core/client_config/resolvers/dns_resolver.h", 
+      "src/core/client_config/subchannel.c", 
+      "src/core/client_config/subchannel.h", 
+      "src/core/client_config/subchannel_factory.c", 
+      "src/core/client_config/subchannel_factory.h", 
+      "src/core/client_config/uri_parser.c", 
+      "src/core/client_config/uri_parser.h", 
       "src/core/compression/algorithm.c", 
       "src/core/compression/message_compress.c", 
       "src/core/compression/message_compress.h", 
@@ -8891,8 +8936,6 @@
       "src/core/surface/channel.c", 
       "src/core/surface/channel.h", 
       "src/core/surface/channel_create.c", 
-      "src/core/surface/client.c", 
-      "src/core/surface/client.h", 
       "src/core/surface/completion_queue.c", 
       "src/core/surface/completion_queue.h", 
       "src/core/surface/event_string.c", 
@@ -8933,16 +8976,22 @@
       "src/core/transport/chttp2/http2_errors.h", 
       "src/core/transport/chttp2/huffsyms.c", 
       "src/core/transport/chttp2/huffsyms.h", 
+      "src/core/transport/chttp2/incoming_metadata.c", 
+      "src/core/transport/chttp2/incoming_metadata.h", 
+      "src/core/transport/chttp2/internal.h", 
+      "src/core/transport/chttp2/parsing.c", 
       "src/core/transport/chttp2/status_conversion.c", 
       "src/core/transport/chttp2/status_conversion.h", 
       "src/core/transport/chttp2/stream_encoder.c", 
       "src/core/transport/chttp2/stream_encoder.h", 
+      "src/core/transport/chttp2/stream_lists.c", 
       "src/core/transport/chttp2/stream_map.c", 
       "src/core/transport/chttp2/stream_map.h", 
       "src/core/transport/chttp2/timeout_encoding.c", 
       "src/core/transport/chttp2/timeout_encoding.h", 
       "src/core/transport/chttp2/varint.c", 
       "src/core/transport/chttp2/varint.h", 
+      "src/core/transport/chttp2/writing.c", 
       "src/core/transport/chttp2_transport.c", 
       "src/core/transport/chttp2_transport.h", 
       "src/core/transport/metadata.c", 
@@ -9047,14 +9096,24 @@
       "src/core/channel/census_filter.h", 
       "src/core/channel/channel_args.h", 
       "src/core/channel/channel_stack.h", 
-      "src/core/channel/child_channel.h", 
       "src/core/channel/client_channel.h", 
-      "src/core/channel/client_setup.h", 
       "src/core/channel/connected_channel.h", 
+      "src/core/channel/connectivity_state.h", 
       "src/core/channel/context.h", 
       "src/core/channel/http_client_filter.h", 
       "src/core/channel/http_server_filter.h", 
       "src/core/channel/noop_filter.h", 
+      "src/core/client_config/client_config.h", 
+      "src/core/client_config/connector.h", 
+      "src/core/client_config/lb_policies/pick_first.h", 
+      "src/core/client_config/lb_policy.h", 
+      "src/core/client_config/resolver.h", 
+      "src/core/client_config/resolver_factory.h", 
+      "src/core/client_config/resolver_registry.h", 
+      "src/core/client_config/resolvers/dns_resolver.h", 
+      "src/core/client_config/subchannel.h", 
+      "src/core/client_config/subchannel_factory.h", 
+      "src/core/client_config/uri_parser.h", 
       "src/core/compression/message_compress.h", 
       "src/core/debug/trace.h", 
       "src/core/iomgr/alarm.h", 
@@ -9097,7 +9156,6 @@
       "src/core/surface/byte_buffer_queue.h", 
       "src/core/surface/call.h", 
       "src/core/surface/channel.h", 
-      "src/core/surface/client.h", 
       "src/core/surface/completion_queue.h", 
       "src/core/surface/event_string.h", 
       "src/core/surface/init.h", 
@@ -9116,6 +9174,8 @@
       "src/core/transport/chttp2/hpack_table.h", 
       "src/core/transport/chttp2/http2_errors.h", 
       "src/core/transport/chttp2/huffsyms.h", 
+      "src/core/transport/chttp2/incoming_metadata.h", 
+      "src/core/transport/chttp2/internal.h", 
       "src/core/transport/chttp2/status_conversion.h", 
       "src/core/transport/chttp2/stream_encoder.h", 
       "src/core/transport/chttp2/stream_map.h", 
@@ -9146,14 +9206,12 @@
       "src/core/channel/channel_args.h", 
       "src/core/channel/channel_stack.c", 
       "src/core/channel/channel_stack.h", 
-      "src/core/channel/child_channel.c", 
-      "src/core/channel/child_channel.h", 
       "src/core/channel/client_channel.c", 
       "src/core/channel/client_channel.h", 
-      "src/core/channel/client_setup.c", 
-      "src/core/channel/client_setup.h", 
       "src/core/channel/connected_channel.c", 
       "src/core/channel/connected_channel.h", 
+      "src/core/channel/connectivity_state.c", 
+      "src/core/channel/connectivity_state.h", 
       "src/core/channel/context.h", 
       "src/core/channel/http_client_filter.c", 
       "src/core/channel/http_client_filter.h", 
@@ -9161,6 +9219,28 @@
       "src/core/channel/http_server_filter.h", 
       "src/core/channel/noop_filter.c", 
       "src/core/channel/noop_filter.h", 
+      "src/core/client_config/client_config.c", 
+      "src/core/client_config/client_config.h", 
+      "src/core/client_config/connector.c", 
+      "src/core/client_config/connector.h", 
+      "src/core/client_config/lb_policies/pick_first.c", 
+      "src/core/client_config/lb_policies/pick_first.h", 
+      "src/core/client_config/lb_policy.c", 
+      "src/core/client_config/lb_policy.h", 
+      "src/core/client_config/resolver.c", 
+      "src/core/client_config/resolver.h", 
+      "src/core/client_config/resolver_factory.c", 
+      "src/core/client_config/resolver_factory.h", 
+      "src/core/client_config/resolver_registry.c", 
+      "src/core/client_config/resolver_registry.h", 
+      "src/core/client_config/resolvers/dns_resolver.c", 
+      "src/core/client_config/resolvers/dns_resolver.h", 
+      "src/core/client_config/subchannel.c", 
+      "src/core/client_config/subchannel.h", 
+      "src/core/client_config/subchannel_factory.c", 
+      "src/core/client_config/subchannel_factory.h", 
+      "src/core/client_config/uri_parser.c", 
+      "src/core/client_config/uri_parser.h", 
       "src/core/compression/algorithm.c", 
       "src/core/compression/message_compress.c", 
       "src/core/compression/message_compress.h", 
@@ -9255,8 +9335,6 @@
       "src/core/surface/channel.c", 
       "src/core/surface/channel.h", 
       "src/core/surface/channel_create.c", 
-      "src/core/surface/client.c", 
-      "src/core/surface/client.h", 
       "src/core/surface/completion_queue.c", 
       "src/core/surface/completion_queue.h", 
       "src/core/surface/event_string.c", 
@@ -9296,16 +9374,22 @@
       "src/core/transport/chttp2/http2_errors.h", 
       "src/core/transport/chttp2/huffsyms.c", 
       "src/core/transport/chttp2/huffsyms.h", 
+      "src/core/transport/chttp2/incoming_metadata.c", 
+      "src/core/transport/chttp2/incoming_metadata.h", 
+      "src/core/transport/chttp2/internal.h", 
+      "src/core/transport/chttp2/parsing.c", 
       "src/core/transport/chttp2/status_conversion.c", 
       "src/core/transport/chttp2/status_conversion.h", 
       "src/core/transport/chttp2/stream_encoder.c", 
       "src/core/transport/chttp2/stream_encoder.h", 
+      "src/core/transport/chttp2/stream_lists.c", 
       "src/core/transport/chttp2/stream_map.c", 
       "src/core/transport/chttp2/stream_map.h", 
       "src/core/transport/chttp2/timeout_encoding.c", 
       "src/core/transport/chttp2/timeout_encoding.h", 
       "src/core/transport/chttp2/varint.c", 
       "src/core/transport/chttp2/varint.h", 
+      "src/core/transport/chttp2/writing.c", 
       "src/core/transport/chttp2_transport.c", 
       "src/core/transport/chttp2_transport.h", 
       "src/core/transport/metadata.c",