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();
}
Esempio n. 12
0
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);
}