Android: Allow compiling browser without Java UI

Currently OS_ANDROID is used in many places to invoke
Java UI-specific codepaths.
Introduce ANDROID_JAVA_UI instead where this makes
sense.

Exclude all android sources from chrome/browser/android
and chrome/browser/ui/android when this is not set.

Most of these have dependencies on the Java UI or tab model.
Some of the features will need revisiting / untangling.

BUG=557285,507792
NOTRY=True

Review URL: https://codereview.chromium.org/1459793002

Cr-Commit-Position: refs/heads/master@{#363255}
diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn
index d3e319e..ac6967f 100644
--- a/chrome/browser/BUILD.gn
+++ b/chrome/browser/BUILD.gn
@@ -276,6 +276,34 @@
     sources += rebase_path(gypi_values.chrome_browser_web_resource_sources,
                            ".",
                            "//chrome")
+    if (android_java_ui) {
+      sources +=
+          rebase_path(gypi_values.chrome_browser_sync_android_java_ui_sources,
+                      ".",
+                      "//chrome")
+      sources +=
+          rebase_path(gypi_values.chrome_browser_ssl_android_java_ui_sources,
+                      ".",
+                      "//chrome")
+      sources += rebase_path(
+              gypi_values.chrome_browser_history_android_java_ui_sources,
+              ".",
+              "//chrome")
+      sources += rebase_path(
+              gypi_values.chrome_browser_permissions_android_java_ui_sources,
+              ".",
+              "//chrome")
+      sources += rebase_path(
+              gypi_values.chrome_browser_search_engines_android_java_ui_sources,
+              ".",
+              "//chrome")
+      if (enable_supervised_users) {
+        sources += rebase_path(
+                gypi_values.chrome_browser_supervised_user_android_java_ui_sources,
+                ".",
+                "//chrome")
+      }
+    }
 
     deps += [
       "//apps",
@@ -644,11 +672,11 @@
     sources += rebase_path(gypi_values.chrome_browser_notifications_sources,
                            ".",
                            "//chrome")
-    if (is_android) {
-      sources +=
-          rebase_path(gypi_values.chrome_browser_notifications_android_sources,
-                      ".",
-                      "//chrome")
+    if (android_java_ui) {
+      sources += rebase_path(
+              gypi_values.chrome_browser_notifications_android_java_ui_sources,
+              ".",
+              "//chrome")
     } else {
       sources += rebase_path(
               gypi_values.chrome_browser_notifications_non_android_sources,
@@ -727,6 +755,12 @@
   if (is_android) {
     sources +=
         rebase_path(gypi_values.chrome_browser_android_sources, ".", "//chrome")
+  }
+
+  if (android_java_ui) {
+    sources += rebase_path(gypi_values.chrome_browser_android_java_ui_sources,
+                           ".",
+                           "//chrome")
     sources += rebase_path(gypi_values.chrome_browser_bookmark_android_sources,
                            ".",
                            "//chrome")
@@ -734,7 +768,6 @@
       ":client_discourse_context_proto",
       ":delta_file_proto",
       ":jni_headers",
-      "//components/cdm/browser",
       "//components/data_usage/android",
       "//components/enhanced_bookmarks",
       "//components/precache/content",
@@ -743,16 +776,25 @@
       "//components/service_tab_launcher",
       "//components/toolbar",
       "//components/web_contents_delegate_android",
+    ]
+
+    defines += [ "ENABLE_DATA_REDUCTION_PROXY_DEBUGGING" ]
+  }
+
+  if (is_android) {
+    deps += [
+      "//components/cdm/browser",
+      "//components/resources:components_resources",
       "//third_party/android_opengl/etc1",
       "//third_party/android_tools:cpu_features",
       "//third_party/libaddressinput:util",
     ]
+
     deps -= [
       "//components/storage_monitor",
       "//components/web_modal",
       "//third_party/libaddressinput",
     ]
-    defines += [ "ENABLE_DATA_REDUCTION_PROXY_DEBUGGING" ]
 
     if (use_seccomp_bpf) {
       defines += [ "USE_SECCOMP_BPF" ]
@@ -924,7 +966,7 @@
   }
 }
 
-if (is_android) {
+if (android_java_ui) {
   # GYP version: chrome/chrome_browser.gypi:chrome_browser_jni_headers
   generate_jni("jni_headers") {
     sources =