NS_IMETHODIMP PropertyNodeList::GetValues(nsIVariant** aValues) { EnsureFresh(); nsCOMPtr<nsIWritableVariant> out = new nsVariant(); // We have to use an nsTArray<nsIVariant*> here and do manual refcounting because // nsWritableVariant::SetAsArray takes an nsIVariant**. nsTArray<nsIVariant*> values; uint32_t length = mElements.Length(); if (length == 0) { out->SetAsEmptyArray(); } else { for (uint32_t i = 0; i < length; ++i) { nsIVariant* itemValue; mElements.ElementAt(i)->GetItemValue(&itemValue); values.AppendElement(itemValue); } out->SetAsArray(nsIDataType::VTYPE_INTERFACE_IS, &NS_GET_IID(nsIVariant), values.Length(), values.Elements()); } out.forget(aValues); for (uint32_t i = 0; i < values.Length(); ++i) { NS_RELEASE(values[i]); } return NS_OK; }
NS_IMETHODIMP PropertyNodeList::GetLength(uint32_t* aLength) { EnsureFresh(); *aLength = mElements.Length(); return NS_OK; }
NS_IMETHODIMP HTMLPropertiesCollection::GetLength(uint32_t* aLength) { EnsureFresh(); *aLength = mProperties.Length(); return NS_OK; }
void PropertyStringList::EnsureFresh() { MOZ_ASSERT(NS_IsMainThread()); mCollection->EnsureFresh(); }
NS_INTERFACE_MAP_END NS_IMETHODIMP PropertyStringList::Item(uint32_t aIndex, nsAString& aResult) { mCollection->EnsureFresh(); return nsDOMStringList::Item(aIndex, aResult); }
NS_IMETHODIMP PropertyNodeList::Item(uint32_t aIndex, nsIDOMNode** aReturn) { EnsureFresh(); nsINode* element = mElements.SafeElementAt(aIndex); if (!element) { *aReturn = NULL; return NS_OK; } return CallQueryInterface(element, aReturn); }
uint32_t nsDOMWindowList::GetLength() { EnsureFresh(); NS_ENSURE_TRUE(mDocShellNode, 0); int32_t length; nsresult rv = mDocShellNode->GetChildCount(&length); NS_ENSURE_SUCCESS(rv, 0); return uint32_t(length); }
PropertyNodeList* HTMLPropertiesCollection::NamedItem(const nsAString& aName) { EnsureFresh(); PropertyNodeList* propertyList = mNamedItemEntries.GetWeak(aName); if (!propertyList) { nsRefPtr<PropertyNodeList> newPropertyList = new PropertyNodeList(this, mRoot, aName); mNamedItemEntries.Put(aName, newPropertyList); propertyList = newPropertyList; } return propertyList; }
NS_INTERFACE_MAP_END void PropertyNodeList::GetValues(JSContext* aCx, nsTArray<JS::Value >& aResult, ErrorResult& aError) { EnsureFresh(); JSObject* wrapper = GetWrapper(); JSAutoCompartment ac(aCx, wrapper); uint32_t length = mElements.Length(); for (uint32_t i = 0; i < length; ++i) { JS::Value v = mElements.ElementAt(i)->GetItemValue(aCx, wrapper, aError); if (aError.Failed()) { return; } aResult.AppendElement(v); } }
void PropertyNodeList::EnsureFresh() { if (mDoc && !mIsDirty) { return; } mIsDirty = false; mCollection->EnsureFresh(); Clear(); uint32_t count = mCollection->mProperties.Length(); for (uint32_t i = 0; i < count; ++i) { nsGenericHTMLElement* element = mCollection->mProperties.ElementAt(i); const nsAttrValue* attr = element->GetParsedAttr(nsGkAtoms::itemprop); if (attr->Contains(mName)) { AppendElement(element); } } }
already_AddRefed<nsIDOMWindow> nsDOMWindowList::IndexedGetter(uint32_t aIndex, bool& aFound) { EnsureFresh(); aFound = false; NS_ENSURE_TRUE(mDocShellNode, nullptr); nsCOMPtr<nsIDocShellTreeItem> item; mDocShellNode->GetChildAt(aIndex, getter_AddRefs(item)); if (!item) { return nullptr; } nsCOMPtr<nsIDOMWindow> window = do_GetInterface(item); MOZ_ASSERT(window); aFound = true; return window.forget(); }
NS_IMETHODIMP nsDOMWindowList::NamedItem(const nsAString& aName, mozIDOMWindowProxy** aReturn) { nsCOMPtr<nsIDocShellTreeItem> item; *aReturn = nullptr; EnsureFresh(); if (mDocShellNode) { mDocShellNode->FindChildWithName(aName, false, false, nullptr, nullptr, getter_AddRefs(item)); nsCOMPtr<nsIScriptGlobalObject> globalObject(do_GetInterface(item)); if (globalObject) { CallQueryInterface(globalObject.get(), aReturn); } } return NS_OK; }
nsIContent* PropertyNodeList::Item(uint32_t aIndex) { EnsureFresh(); return mElements.SafeElementAt(aIndex); }
NS_IMETHODIMP PropertyStringList::Contains(const nsAString& aString, bool* aResult) { mCollection->EnsureFresh(); return nsDOMStringList::Contains(aString, aResult); }
NS_IMETHODIMP PropertyStringList::GetLength(uint32_t* aLength) { mCollection->EnsureFresh(); return nsDOMStringList::GetLength(aLength); }
nsGenericElement* HTMLPropertiesCollection::GetElementAt(uint32_t aIndex) { EnsureFresh(); return mProperties.SafeElementAt(aIndex); }
void HTMLPropertiesCollection::GetSupportedNames(nsTArray<nsString>& aNames) { EnsureFresh(); mNames->CopyList(aNames); }
void PropertyStringList::EnsureFresh() { mCollection->EnsureFresh(); }
int32_t PropertyNodeList::IndexOf(nsIContent* aContent) { EnsureFresh(); return mElements.IndexOf(aContent); }