nsresult HTMLSourceElement::BindToTree(nsIDocument *aDocument, nsIContent *aParent, nsIContent *aBindingParent, bool aCompileEventHandlers) { nsresult rv = nsGenericHTMLElement::BindToTree(aDocument, aParent, aBindingParent, aCompileEventHandlers); NS_ENSURE_SUCCESS(rv, rv); if (aParent && aParent->IsNodeOfType(nsINode::eMEDIA)) { HTMLMediaElement* media = static_cast<HTMLMediaElement*>(aParent); media->NotifyAddedSource(); } else if (aParent && aParent->IsHTMLElement(nsGkAtoms::picture)) { // Find any img siblings after this <source> and notify them nsCOMPtr<nsIContent> sibling = AsContent(); while ( (sibling = sibling->GetNextSibling()) ) { if (sibling->IsHTMLElement(nsGkAtoms::img)) { HTMLImageElement *img = static_cast<HTMLImageElement*>(sibling.get()); img->PictureSourceAdded(AsContent()); } } } return NS_OK; }
nsresult HTMLImageElement::AfterSetAttr(int32_t aNameSpaceID, nsIAtom* aName, const nsAttrValue* aValue, bool aNotify) { if (aNameSpaceID == kNameSpaceID_None && mForm && (aName == nsGkAtoms::name || aName == nsGkAtoms::id) && aValue && !aValue->IsEmptyString()) { // add the image to the hashtable as needed NS_ABORT_IF_FALSE(aValue->Type() == nsAttrValue::eAtom, "Expected atom value for name/id"); mForm->AddImageElementToTable(this, nsDependentAtomString(aValue->GetAtomValue())); } // Handle src/srcset/crossorigin updates. If aNotify is false, we are coming // from the parser or some such place; we'll get bound after all the // attributes have been set, so we'll do the image load from BindToTree. if (aName == nsGkAtoms::src && aNameSpaceID == kNameSpaceID_None) { // SetAttr handles setting src in the non-responsive case, so only handle it // for responsive mode or unsetting if (!aValue) { CancelImageRequests(aNotify); } else if (mResponsiveSelector) { mResponsiveSelector->SetDefaultSource(aValue ? aValue->GetStringValue() : EmptyString()); LoadSelectedImage(false, aNotify); } } else if (aName == nsGkAtoms::srcset && aNameSpaceID == kNameSpaceID_None && aNotify && AsContent()->IsInDoc() && IsSrcsetEnabled()) { // We currently don't handle responsive mode until BindToTree UpdateSourceSet(aValue->GetStringValue()); LoadSelectedImage(false, aNotify); } else if (aName == nsGkAtoms::crossorigin && aNameSpaceID == kNameSpaceID_None && aNotify) { // We want aForce == true in this LoadImage call, because we want to force // a new load of the image with the new cross origin policy. nsCOMPtr<nsIURI> currentURI; if (NS_SUCCEEDED(GetCurrentURI(getter_AddRefs(currentURI))) && currentURI) { LoadImage(currentURI, true, aNotify); } } return nsGenericHTMLElement::AfterSetAttr(aNameSpaceID, aName, aValue, aNotify); }