pw_web_ui: Write WebSerialTransport, which talks to the device.

WebSerialTransport connects to devices over WebSerial and implements the
DeviceTransport interface. DeviceTransport defines how raw bytes are
sent to and from connected devices.

Change-Id: Ic6c402036f9d2aaea61e05b1f4c42ccc58349b3d
Reviewed-on: https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/11725
Commit-Queue: Matthew Soulanille <msoulanille@google.com>
Reviewed-by: Max Koopman <koopman@google.com>
Reviewed-by: Alexei Frolov <frolv@google.com>
diff --git a/WORKSPACE b/WORKSPACE
index 4f0b22a..68c001c 100644
--- a/WORKSPACE
+++ b/WORKSPACE
@@ -25,8 +25,8 @@
     urls = ["https://github.com/bazelbuild/rules_nodejs/releases/download/1.6.0/rules_nodejs-1.6.0.tar.gz"],
 )
 
+# Get the latest LTS version of Node
 load("@build_bazel_rules_nodejs//:index.bzl", "node_repositories")
-
 node_repositories(package_json = ["//:package.json"])
 
 # Install packages with yarn
@@ -42,6 +42,21 @@
 install_bazel_dependencies()
 
 
-# Setup TypeScript
+# Set up TypeScript
 load("@npm_bazel_typescript//:index.bzl", "ts_setup_workspace")
 ts_setup_workspace()
+
+# Set up Karma
+load("@npm_bazel_karma//:package.bzl", "npm_bazel_karma_dependencies")
+npm_bazel_karma_dependencies()
+
+load("@io_bazel_rules_webtesting//web:repositories.bzl", "web_test_repositories")
+web_test_repositories()
+
+load("@io_bazel_rules_webtesting//web/versioned:browsers-0.3.2.bzl", "browser_repositories")
+
+browser_repositories(
+    chromium = True,
+    firefox = True,
+)
+