diff --git a/javatests/com/google/gerrit/acceptance/api/accounts/AccountIT.java b/javatests/com/google/gerrit/acceptance/api/accounts/AccountIT.java
index 6131ada..dcf3cbb 100644
--- a/javatests/com/google/gerrit/acceptance/api/accounts/AccountIT.java
+++ b/javatests/com/google/gerrit/acceptance/api/accounts/AccountIT.java
@@ -1099,6 +1099,27 @@
   }
 
   @Test
+  @Sandboxed
+  public void deleteAllEmails() throws Exception {
+    EmailInput input = new EmailInput();
+    input.email = "foo.bar@example.com";
+    input.noConfirmation = true;
+    gApi.accounts().self().addEmail(input);
+
+    requestScopeOperations.resetCurrentApiUser();
+    Set<String> allEmails = getEmails();
+    assertThat(allEmails).hasSize(2);
+
+    for (String email : allEmails) {
+      gApi.accounts().self().deleteEmail(email);
+    }
+
+    requestScopeOperations.resetCurrentApiUser();
+    assertThat(getEmails()).isEmpty();
+    assertThat(gApi.accounts().self().get().email).isNull();
+  }
+
+  @Test
   public void deleteEmailFromCustomExternalIdSchemes() throws Exception {
     String email = "foo.bar@example.com";
     String extId1 = "foo:bar";
diff --git a/tools/bzl/js.bzl b/tools/bzl/js.bzl
index 1bc4819..08d357c 100644
--- a/tools/bzl/js.bzl
+++ b/tools/bzl/js.bzl
@@ -45,6 +45,8 @@
     implementation = _npm_binary_impl,
 )
 
+ComponentInfo = provider()
+
 # for use in repo rules.
 def _run_npm_binary_str(ctx, tarball, args):
     python_bin = ctx.which("python")
@@ -133,31 +135,29 @@
 def _bower_component_impl(ctx):
     transitive_zipfiles = depset(
         direct = [ctx.file.zipfile],
-        transitive = [d.transitive_zipfiles for d in ctx.attr.deps],
+        transitive = [d[ComponentInfo].transitive_zipfiles for d in ctx.attr.deps],
     )
 
     transitive_licenses = depset(
         direct = [ctx.file.license],
-        transitive = [d.transitive_licenses for d in ctx.attr.deps],
+        transitive = [d[ComponentInfo].transitive_licenses for d in ctx.attr.deps],
     )
 
     transitive_versions = depset(
         direct = ctx.files.version_json,
-        transitive = [d.transitive_versions for d in ctx.attr.deps],
+        transitive = [d[ComponentInfo].transitive_versions for d in ctx.attr.deps],
     )
 
-    return struct(
-        transitive_licenses = transitive_licenses,
-        transitive_versions = transitive_versions,
-        transitive_zipfiles = transitive_zipfiles,
-    )
+    return [
+        ComponentInfo(
+            transitive_licenses = transitive_licenses,
+            transitive_versions = transitive_versions,
+            transitive_zipfiles = transitive_zipfiles,
+        ),
+    ]
 
 _common_attrs = {
-    "deps": attr.label_list(providers = [
-        "transitive_zipfiles",
-        "transitive_versions",
-        "transitive_licenses",
-    ]),
+    "deps": attr.label_list(providers = [ComponentInfo]),
 }
 
 def _js_component(ctx):
@@ -187,11 +187,13 @@
     if ctx.file.license:
         licenses.append(ctx.file.license)
 
-    return struct(
-        transitive_licenses = depset(licenses),
-        transitive_versions = depset(),
-        transitive_zipfiles = list([ctx.outputs.zip]),
-    )
+    return [
+        ComponentInfo(
+            transitive_licenses = depset(licenses),
+            transitive_versions = depset(),
+            transitive_zipfiles = list([ctx.outputs.zip]),
+        ),
+    ]
 
 js_component = rule(
     _js_component,
@@ -233,16 +235,16 @@
     """A bunch of bower components zipped up."""
     zips = depset()
     for d in ctx.attr.deps:
-        files = d.transitive_zipfiles
+        files = d[ComponentInfo].transitive_zipfiles
 
         # TODO(davido): Make sure the field always contains a depset
         if type(files) == "list":
             files = depset(files)
         zips = depset(transitive = [zips, files])
 
-    versions = depset(transitive = [d.transitive_versions for d in ctx.attr.deps])
+    versions = depset(transitive = [d[ComponentInfo].transitive_versions for d in ctx.attr.deps])
 
-    licenses = depset(transitive = [d.transitive_versions for d in ctx.attr.deps])
+    licenses = depset(transitive = [d[ComponentInfo].transitive_versions for d in ctx.attr.deps])
 
     out_zip = ctx.outputs.zip
     out_versions = ctx.outputs.version_json
@@ -272,11 +274,13 @@
         command = "(echo '{' ; for j in  %s ; do cat $j; echo ',' ; done ; echo \\\"\\\":\\\"\\\"; echo '}') > %s" % (" ".join([v.path for v in versions.to_list()]), out_versions.path),
     )
 
-    return struct(
-        transitive_licenses = licenses,
-        transitive_versions = versions,
-        transitive_zipfiles = zips,
-    )
+    return [
+        ComponentInfo(
+            transitive_licenses = licenses,
+            transitive_versions = versions,
+            transitive_zipfiles = zips,
+        ),
+    ]
 
 bower_component_bundle = rule(
     _bower_component_bundle_impl,
@@ -304,7 +308,7 @@
     else:
         bundled = ctx.outputs.html
     destdir = ctx.outputs.html.path + ".dir"
-    zips = [z for d in ctx.attr.deps for z in d.transitive_zipfiles.to_list()]
+    zips = [z for d in ctx.attr.deps for z in d[ComponentInfo].transitive_zipfiles.to_list()]
 
     hermetic_npm_binary = " ".join([
         "python",
@@ -404,7 +408,7 @@
         ),
         "pkg": attr.string(mandatory = True),
         "split": attr.bool(default = True),
-        "deps": attr.label_list(providers = ["transitive_zipfiles"]),
+        "deps": attr.label_list(providers = [ComponentInfo]),
         "_bundler_archive": attr.label(
             default = Label("@polymer-bundler//:%s" % _npm_tarball("polymer-bundler")),
             allow_single_file = True,
