[Sub Apps] Limit add() calls to at most 7 apps

To avoid overwhelming the user with an overloaded permissions prompt,
only allow 7 apps to be added at once.

Bug: 1402192
Test: third_party/blink/tools/run_web_tests.py external/wpt/subapps
Change-Id: I7ebb34c3700fdbf1b699debe78228d3bc4b889cc
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4127312
Reviewed-by: Ivan Šandrk <isandrk@chromium.org>
Reviewed-by: Jeremy Roman <jbroman@chromium.org>
Commit-Queue: Philipp Weiß <phweiss@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1090745}
diff --git a/subapps/add-error.tentative.https.html b/subapps/add-error.tentative.https.html
index d049268..c9db29b 100644
--- a/subapps/add-error.tentative.https.html
+++ b/subapps/add-error.tentative.https.html
@@ -90,6 +90,20 @@
 }, 'Missing user activation.');
 
 promise_test(async t => {
+  const same_origin_url = document.location.origin + '/sub-app-';
+
+  let add_call_params = {};
+  for (let i = 0; i < 8; i++) {
+    const url = same_origin_url + i;
+    add_call_params[url] = { install_url: url };
+  }
+
+  await test_driver.bless("installing subapps", async function () {
+    await promise_rejects_dom(t, 'DataError', navigator.subApps.add(add_call_params));
+  });
+}, 'Too many subapps at once.');
+
+promise_test(async t => {
   let add_call_params = {};
 
   const url_1 = document.location.origin + '/sub-app-1';