Add delayloads config to dawn_native component

In chromium component build, dawn_native.dll statically loads user32.dll,
which can't be loaded under certain sandbox configurations, with win32k
lockdown enabled and removal of the win32k windows interceptions via
WinSboxNoFakeGdiInit chromium feature.

This change passes a delayload linker flag via public_configs to the
component when linking against user32.lib. This should load user32.dll
under the same circumstances as a non-component build.

Bug: chromium:326277735
Change-Id: Ie821503d43236b19836a2f5e5a0f1e88ceceaab4
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/186820
Reviewed-by: Brandon Jones <bajones@chromium.org>
Commit-Queue: Brandon Jones <bajones@chromium.org>
diff --git a/src/dawn/native/BUILD.gn b/src/dawn/native/BUILD.gn
index 25f5783..54c0cde 100644
--- a/src/dawn/native/BUILD.gn
+++ b/src/dawn/native/BUILD.gn
@@ -89,6 +89,13 @@
   }
 }
 
+# Config that adds delayloads when built as a shared library or component,
+# useful as we're linking user32.lib which can't always be loaded in the
+# chromium sandbox under win32k lockdown.
+config("win_delayload") {
+  ldflags = [ "/DELAYLOAD:user32.dll" ]
+}
+
 # Config that adds include directory for vulkan-utility-libraries.
 config("vulkan_utility_libraries_include") {
   include_dirs = [ "${dawn_vulkan_utility_libraries_dir}/include" ]
@@ -413,6 +420,7 @@
   # In UWP, all availiable APIs are defined in WindowsApp.lib
   if (is_win && !dawn_is_winuwp) {
     libs += [ "user32.lib" ]
+    public_configs = [ ":win_delayload" ]
   }
 
   if (dawn_is_winuwp && is_debug) {