GeckoView cannot enter fullscreen after error.

Actually, we don't check whether `handleFullscreenRequests` is successful. Then,
when it causes an error, GeckoView cannot enter full screen again since current
document's fullscreen state isn't updated.

If it causes an error, we should clean up the state like Firefox desktop.

Differential Revision: https://phabricator.services.mozilla.com/D163718

bugzilla-url: https://bugzilla.mozilla.org/show_bug.cgi?id=1803092
gecko-commit: f446e93d3e951cbefe0f61d8c38149a4d1c2adec
gecko-reviewers: geckoview-reviewers, calu
diff --git a/fullscreen/api/element-request-fullscreen-after-error.html b/fullscreen/api/element-request-fullscreen-after-error.html
new file mode 100644
index 0000000..4278382
--- /dev/null
+++ b/fullscreen/api/element-request-fullscreen-after-error.html
@@ -0,0 +1,40 @@
+<!DOCTYPE html>
+<title>Element#requestFullscreen() after error</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
+<div id="log"></div>
+<script>
+promise_test(async t => {
+  await new Promise(r => window.onload = r);
+
+  const element1 = document.createElement("div");
+  document.body.appendChild(element1);
+
+  await test_driver.bless("request full screen");
+  let promise = element1.requestFullscreen()
+  await new Promise(r => t.step_timeout(r, 0))
+  document.body.removeChild(element1);
+  try {
+    await promise;
+    assert_unreached("requestFullscreen shouldn't be successful");
+  } catch (e) {
+  }
+  try {
+    await document.exitFullscreen();
+  } catch (e) {
+  }
+
+  const element2 = document.createElement("div");
+  document.body.appendChild(element2);
+
+  await test_driver.bless("request full screen");
+  try {
+    await element2.requestFullscreen();
+  } catch (e) {
+    assert_unreached("requestFullscreen shouldn't throw an error - " + e.message);
+  }
+  await document.exitFullscreen();
+}, "requestFullscreen works even if previous requestFullscreen causes an error");
+</script>