JSObject*
HTMLFormControlsCollection::NamedItem(JSContext* aCx, const nsAString& aName,
                                      ErrorResult& aError)
{
  nsISupports* item = NamedItemInternal(aName, true);
  if (!item) {
    return nullptr;
  }
  JS::Rooted<JSObject*> wrapper(aCx, nsWrapperCache::GetWrapper());
  JSAutoCompartment ac(aCx, wrapper);
  JS::Rooted<JS::Value> v(aCx);
  if (!dom::WrapObject(aCx, wrapper, item, &v)) {
    aError.Throw(NS_ERROR_FAILURE);
    return nullptr;
  }
  return &v.toObject();
}
void
HTMLFormControlsCollection::NamedGetter(const nsAString& aName,
                                        bool& aFound,
                                        Nullable<OwningRadioNodeListOrElement>& aResult)
{
  nsISupports* item = NamedItemInternal(aName, true);
  if (!item) {
    aFound = false;
    return;
  }
  aFound = true;
  if (nsCOMPtr<Element> element = do_QueryInterface(item)) {
    aResult.SetValue().SetAsElement() = element;
    return;
  }
  if (nsCOMPtr<RadioNodeList> nodelist = do_QueryInterface(item)) {
    aResult.SetValue().SetAsRadioNodeList() = nodelist;
    return;
  }
  MOZ_ASSERT_UNREACHABLE("Should only have Elements and NodeLists here.");
}