Adjust getHTML behavior to match recent consensus

This includes two changes:

1. Rename includeShadowRoots to serializableShadowRoots
2. Do not throw an exception if serializableShadowRoots is false
   but shadowRoots is non-empty.

I also added IDL defaults for both parameters to clean up the C++.
I also added a test of the use counter for getHTML().

Bug: 41490936
Change-Id: Ieedd81b5165d9652c3a7b68dea4a4fa5fb088560
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5304121
Auto-Submit: Mason Freed <masonf@chromium.org>
Commit-Queue: Mason Freed <masonf@chromium.org>
Reviewed-by: Di Zhang <dizhangg@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1262930}
diff --git a/shadow-dom/declarative/gethtml.tentative.html b/shadow-dom/declarative/gethtml.tentative.html
index c48230c..eabd391 100644
--- a/shadow-dom/declarative/gethtml.tentative.html
+++ b/shadow-dom/declarative/gethtml.tentative.html
@@ -69,29 +69,28 @@
       const emptyElement = `<${elementType}></${elementType}>`;
       if (isOpen) {
         if (expectedSerializable) {
-          assert_equals(wrapper.getHTML({includeShadowRoots: true}), correctHtml);
+          assert_equals(wrapper.getHTML({serializableShadowRoots: true}), correctHtml);
         } else {
-          assert_equals(wrapper.getHTML({includeShadowRoots: true}), emptyElement);
+          assert_equals(wrapper.getHTML({serializableShadowRoots: true}), emptyElement);
         }
       } else {
         // Closed shadow roots should not be returned unless shadowRoots specifically contains the shadow root:
-        assert_equals(wrapper.getHTML({includeShadowRoots: true}), emptyElement);
-        assert_equals(wrapper.getHTML({includeShadowRoots: true, shadowRoots: []}), emptyElement);
+        assert_equals(wrapper.getHTML({serializableShadowRoots: true}), emptyElement);
+        assert_equals(wrapper.getHTML({serializableShadowRoots: true, shadowRoots: []}), emptyElement);
       }
-      // If we provide the shadow root, serialize it, regardless of includeShadowRoots.
-      assert_equals(wrapper.getHTML({includeShadowRoots: true, shadowRoots: [shadowRoot]}),correctHtml);
+      // If we provide the shadow root, serialize it, regardless of serializableShadowRoots.
+      assert_equals(wrapper.getHTML({serializableShadowRoots: true, shadowRoots: [shadowRoot]}),correctHtml);
+      assert_equals(wrapper.getHTML({serializableShadowRoots: false, shadowRoots: [shadowRoot]}),correctHtml);
       assert_equals(wrapper.getHTML({shadowRoots: [shadowRoot]}),correctHtml);
-      // This should always throw - includeShadowRoots false, but we've provided roots.
-      assert_throws_dom("NotSupportedError",() => wrapper.getHTML({includeShadowRoots: false, shadowRoots: [shadowRoot]}));
     } else {
       // For non-shadow hosts, getHTML() should also match .innerHTML
-      assert_equals(wrapper.getHTML({includeShadowRoots: true}),wrapper.innerHTML);
+      assert_equals(wrapper.getHTML({serializableShadowRoots: true}),wrapper.innerHTML);
     }
 
-    // Either way, make sure getHTML({includeShadowRoots: false}) matches .innerHTML
-    assert_equals(wrapper.getHTML({includeShadowRoots: false}),wrapper.innerHTML,'getHTML() with includeShadowRoots false should return the same as .innerHTML');
-    // ...and that the default for includeShadowRoots is false.
-    assert_equals(wrapper.getHTML(),wrapper.innerHTML,'The default for includeShadowRoots should be false');
+    // Either way, make sure getHTML({serializableShadowRoots: false}) matches .innerHTML
+    assert_equals(wrapper.getHTML({serializableShadowRoots: false}),wrapper.innerHTML,'getHTML() with serializableShadowRoots false should return the same as .innerHTML');
+    // ...and that the default for serializableShadowRoots is false.
+    assert_equals(wrapper.getHTML(),wrapper.innerHTML,'The default for serializableShadowRoots should be false');
 
   }, `${runGetHTMLOnShadowRoot ? 'ShadowRoot' : 'Element'}.getHTML() on <${elementType}>${allowsShadowDom ? `, with ${declarativeShadowDom ? 'declarative' : 'imperative'} shadow, mode=${mode}, delegatesFocus=${delegatesFocus}, serializable=${serializable}, clonable=${clonable}.` : ''}`);
 }