dawn_node: Error if the specified backend is not found

Defaulting to the 0'th adapter can silently use the Null adapter, which is no fun for anyone.

Bug tint:1354

Change-Id: I14e2379175cb90a48753bd81d096391d15d2dc22
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/75070
Commit-Queue: Ben Clayton <bclayton@google.com>
Auto-Submit: Ben Clayton <bclayton@google.com>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Commit-Queue: Corentin Wallez <cwallez@chromium.org>
diff --git a/src/dawn_node/binding/GPU.cpp b/src/dawn_node/binding/GPU.cpp
index 50eb020..a13ed30 100644
--- a/src/dawn_node/binding/GPU.cpp
+++ b/src/dawn_node/binding/GPU.cpp
@@ -112,6 +112,9 @@
         std::transform(forceBackend.begin(), forceBackend.end(), forceBackend.begin(),
                        [](char c) { return std::tolower(c); });
 
+        // Default to first adapter if a backend is not specified
+        size_t adapterIndex = 0;
+
         if (!forceBackend.empty()) {
             if (forceBackend == "null") {
                 targetBackendType = wgpu::BackendType::Null;
@@ -129,17 +132,24 @@
                 targetBackendType = wgpu::BackendType::OpenGL;
             } else if (forceBackend == "opengles" || forceBackend == "gles") {
                 targetBackendType = wgpu::BackendType::OpenGLES;
+            } else {
+                promise.Reject("unknown backend '" + forceBackend + "'");
+                return promise;
             }
-        }
 
-        // Default to first adapter if we don't find a match
-        size_t adapterIndex = 0;
-        for (size_t i = 0; i < adapters.size(); ++i) {
-            wgpu::AdapterProperties props;
-            adapters[i].GetProperties(&props);
-            if (props.backendType == targetBackendType) {
-                adapterIndex = i;
-                break;
+            bool found = false;
+            for (size_t i = 0; i < adapters.size(); ++i) {
+                wgpu::AdapterProperties props;
+                adapters[i].GetProperties(&props);
+                if (props.backendType == targetBackendType) {
+                    adapterIndex = i;
+                    found = true;
+                    break;
+                }
+            }
+            if (!found) {
+                promise.Reject("backend '" + forceBackend + "' not found");
+                return promise;
             }
         }