Fix ENABLE_SWIFTSHADER flag.

Convert it to a build flag, as it never properly made the move from gyp.

BUG=646660

Review-Url: https://codereview.chromium.org/2337243003
Cr-Commit-Position: refs/heads/master@{#418948}
diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn
index e4f9f277..af7034c 100644
--- a/chrome/browser/BUILD.gn
+++ b/chrome/browser/BUILD.gn
@@ -1443,6 +1443,7 @@
     "//ui/gfx",
     "//ui/gfx/geometry",
     "//ui/gl",
+    "//ui/gl:gl_features",
     "//ui/message_center",
     "//ui/resources",
     "//ui/resources",
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
index b57dced..63e79be3 100644
--- a/chrome/browser/about_flags.cc
+++ b/chrome/browser/about_flags.cc
@@ -76,6 +76,7 @@
 #include "ui/display/display_switches.h"
 #include "ui/events/event_switches.h"
 #include "ui/gfx/switches.h"
+#include "ui/gl/gl_features.h"
 #include "ui/gl/gl_switches.h"
 #include "ui/keyboard/keyboard_switches.h"
 #include "ui/native_theme/native_theme_switches.h"
@@ -812,7 +813,7 @@
      FEATURE_VALUE_TYPE(features::kV8Ignition)},
     {"disable-software-rasterizer", IDS_FLAGS_SOFTWARE_RASTERIZER_NAME,
      IDS_FLAGS_SOFTWARE_RASTERIZER_DESCRIPTION,
-#if defined(ENABLE_SWIFTSHADER)
+#if BUILDFLAG(ENABLE_SWIFTSHADER)
      kOsAll,
 #else
      0,
diff --git a/chrome/browser/component_updater/swiftshader_component_installer.cc b/chrome/browser/component_updater/swiftshader_component_installer.cc
index e96c19f..411c8db 100644
--- a/chrome/browser/component_updater/swiftshader_component_installer.cc
+++ b/chrome/browser/component_updater/swiftshader_component_installer.cc
@@ -25,6 +25,7 @@
 #include "content/public/browser/gpu_data_manager.h"
 #include "content/public/browser/gpu_data_manager_observer.h"
 #include "gpu/config/gpu_feature_type.h"
+#include "ui/gl/gl_features.h"
 
 using content::BrowserThread;
 using content::GpuDataManager;
@@ -218,7 +219,7 @@
   }
 }
 
-#if defined(ENABLE_SWIFTSHADER)
+#if BUILDFLAG(ENABLE_SWIFTSHADER)
 
 // Check if there already is a version of swiftshader installed,
 // and if so register it.
@@ -258,7 +259,7 @@
 }  // namespace
 
 void RegisterSwiftShaderComponent(ComponentUpdateService* cus) {
-#if defined(ENABLE_SWIFTSHADER) && defined(ARCH_CPU_X86)
+#if BUILDFLAG(ENABLE_SWIFTSHADER) && defined(ARCH_CPU_X86)
   BrowserThread::PostTask(BrowserThread::FILE,
                           FROM_HERE,
                           base::Bind(&RegisterSwiftShaderPath, cus));
diff --git a/ui/gl/BUILD.gn b/ui/gl/BUILD.gn
index 970e716..ee771de0 100644
--- a/ui/gl/BUILD.gn
+++ b/ui/gl/BUILD.gn
@@ -2,11 +2,17 @@
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
+import("//build/buildflag_header.gni")
+import("//build/config/chrome_build.gni")
 import("//build/config/linux/pkg_config.gni")
 import("//build/config/ui.gni")
 import("//ui/ozone/ozone.gni")
 import("//testing/test.gni")
 
+declare_args() {
+  enable_swiftshader = false
+}
+
 use_egl = is_win || is_android || is_linux
 use_glx = use_x11 || ozone_platform_x11
 
@@ -15,6 +21,11 @@
   import("//build/config/android/rules.gni")
 }
 
+buildflag_header("gl_features") {
+  header = "gl_features.h"
+  flags = [ "ENABLE_SWIFTSHADER=$enable_swiftshader" ]
+}
+
 config("gl_config") {
   defines = []
   if (use_glx) {
diff --git a/ui/gl/init/BUILD.gn b/ui/gl/init/BUILD.gn
index 715dd280..074e7b1d 100644
--- a/ui/gl/init/BUILD.gn
+++ b/ui/gl/init/BUILD.gn
@@ -40,6 +40,7 @@
 
     libs = [ "dwmapi.lib" ]
     ldflags = [ "/DELAYLOAD:dwmapi.dll" ]
+    deps += [ "//ui/gl:gl_features" ]
   } else if (is_mac) {
     sources += [
       "gl_factory_mac.cc",
diff --git a/ui/gl/init/gl_initializer_win.cc b/ui/gl/init/gl_initializer_win.cc
index d1c3fe9d..b4b4c7f 100644
--- a/ui/gl/init/gl_initializer_win.cc
+++ b/ui/gl/init/gl_initializer_win.cc
@@ -23,6 +23,7 @@
 #include "ui/gl/angle_platform_impl.h"
 #include "ui/gl/gl_bindings.h"
 #include "ui/gl/gl_egl_api_implementation.h"
+#include "ui/gl/gl_features.h"
 #include "ui/gl/gl_gl_api_implementation.h"
 #include "ui/gl/gl_osmesa_api_implementation.h"
 #include "ui/gl/gl_surface_egl.h"
@@ -139,7 +140,7 @@
     return false;
   }
 
-#if defined(ENABLE_SWIFTSHADER)
+#if BUILDFLAG(ENABLE_SWIFTSHADER)
   if (using_swift_shader) {
     // Register key so that SwiftShader doesn't display watermark logo.
     typedef void (__stdcall *RegisterFunc)(const char* key);