Enable crash reporting via the unified_analytics consent mechanism.

This pulls in the `okToSend` method from https://github.com/dart-lang/tools/pull/79 in the tools repository.

Bug: https://github.com/dart-lang/sdk/issues/28633
Change-Id: I512d041750050338699d3635ba426cc0acdd5a20
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/295380
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Janice Collins <jcollins@google.com>
Auto-Submit: Janice Collins <jcollins@google.com>
diff --git a/DEPS b/DEPS
index e23f965..6047f7c 100644
--- a/DEPS
+++ b/DEPS
@@ -172,7 +172,7 @@
   "test_descriptor_rev": "aa11162f55a93fc6cefc927c5189b5f74decb957",
   "test_process_rev": "946bc27abd9726c4dadb9afae7c56f55df5945ed",
   "test_reflective_loader_rev": "a85a930ad3736f93b96f6cc104d3576c1ae19e0e",
-  "tools_rev": "58d914764eab030bf537c2c58089c8ba7b46a313",
+  "tools_rev": "2308c672e0d7446f5bfdba96594b41f26fa24a2e",
   "typed_data_rev": "d85363d2efb333afce07ec409a529ec32986e1a2",
   "usage_rev": "0698711985b332432ce9a901bbbd3b1ed227b090",
   "vector_math_rev": "7dec98433b3e016fbe49107ad4320b31f519eb70",
diff --git a/pkg/analysis_server/lib/src/analytics/noop_analytics.dart b/pkg/analysis_server/lib/src/analytics/noop_analytics.dart
index d2f40c9..f6ea548 100644
--- a/pkg/analysis_server/lib/src/analytics/noop_analytics.dart
+++ b/pkg/analysis_server/lib/src/analytics/noop_analytics.dart
@@ -12,6 +12,9 @@
   String get getConsentMessage => throw UnimplementedError();
 
   @override
+  bool get okToSend => false;
+
+  @override
   Map<String, ToolInfo> get parsedTools => throw UnimplementedError();
 
   @override
diff --git a/pkg/analysis_server/lib/src/server/driver.dart b/pkg/analysis_server/lib/src/server/driver.dart
index 5217302..05a8dd9 100644
--- a/pkg/analysis_server/lib/src/server/driver.dart
+++ b/pkg/analysis_server/lib/src/server/driver.dart
@@ -207,14 +207,38 @@
       analytics.setSessionValue('cd1', analysisServerOptions.clientVersion);
     }
 
+    final defaultSdkPath = _getSdkPath(results);
+    final dartSdkManager = DartSdkManager(defaultSdkPath);
+
+    // TODO(brianwilkerson) It would be nice to avoid creating an SDK that
+    // can't be re-used, but the SDK is needed to create a package map provider
+    // in the case where we need to run `pub` in order to get the package map.
+    var defaultSdk = _createDefaultSdk(defaultSdkPath);
+
+    // Create the analytics manager.
+    AnalyticsManager analyticsManager;
+    if (disableAnalyticsForSession) {
+      analyticsManager = AnalyticsManager(NoopAnalytics());
+    } else {
+      // TODO(jcollins): implement a full map of `clientId`s to tools to cover
+      // more analyzer entry points than vscode.
+      if (clientId == 'VS-Code') {
+        analyticsManager = AnalyticsManager(_createAnalytics(
+            defaultSdk, defaultSdkPath, DashTool.vscodePlugins));
+      } else {
+        analyticsManager = AnalyticsManager(NoopAnalytics());
+      }
+    }
+
     bool shouldSendCallback() {
       // Check sdkConfig to optionally force reporting on.
       if (sdkConfig.crashReportingForceEnabled == true) {
         return true;
       }
 
-      // TODO(devoncarew): Replace with a real enablement check.
-      return false;
+      // Reuse the unified_analytics consent mechanism to determine whether
+      // we can send a crash report.
+      return analyticsManager.analytics.okToSend;
     }
 
     // Crash reporting
@@ -249,29 +273,6 @@
       return;
     }
 
-    final defaultSdkPath = _getSdkPath(results);
-    final dartSdkManager = DartSdkManager(defaultSdkPath);
-
-    // TODO(brianwilkerson) It would be nice to avoid creating an SDK that
-    // can't be re-used, but the SDK is needed to create a package map provider
-    // in the case where we need to run `pub` in order to get the package map.
-    var defaultSdk = _createDefaultSdk(defaultSdkPath);
-
-    // Create the analytics manager.
-    AnalyticsManager analyticsManager;
-    if (disableAnalyticsForSession) {
-      analyticsManager = AnalyticsManager(NoopAnalytics());
-    } else {
-      // TODO(jcollins): implement a full map of `clientId`s to tools to cover
-      // more analyzer entry points than vscode.
-      if (clientId == 'VS-Code') {
-        analyticsManager = AnalyticsManager(_createAnalytics(
-            defaultSdk, defaultSdkPath, DashTool.vscodePlugins));
-      } else {
-        analyticsManager = AnalyticsManager(NoopAnalytics());
-      }
-    }
-
     // Record the start of the session.
     analyticsManager.startUp(
         time: sessionStartTime,