already_AddRefed<nsISupports> AnonymousContent::GetCanvasContext( const nsAString& aElementId, const nsAString& aContextId, ErrorResult& aRv) { Element* element = GetElementById(aElementId); if (!element) { aRv.Throw(NS_ERROR_NOT_AVAILABLE); return nullptr; } if (!element->IsHTMLElement(nsGkAtoms::canvas)) { return nullptr; } nsCOMPtr<nsISupports> context; HTMLCanvasElement* canvas = static_cast<HTMLCanvasElement*>(element); canvas->GetContext(aContextId, getter_AddRefs(context)); return context.forget(); }
nsresult HTMLCanvasElement::CopyInnerTo(Element* aDest) { nsresult rv = nsGenericHTMLElement::CopyInnerTo(aDest); NS_ENSURE_SUCCESS(rv, rv); if (aDest->OwnerDoc()->IsStaticDocument()) { HTMLCanvasElement* dest = static_cast<HTMLCanvasElement*>(aDest); dest->mOriginalCanvas = this; nsCOMPtr<nsISupports> cxt; dest->GetContext(NS_LITERAL_STRING("2d"), getter_AddRefs(cxt)); nsRefPtr<CanvasRenderingContext2D> context2d = static_cast<CanvasRenderingContext2D*>(cxt.get()); if (context2d && !mPrintCallback) { HTMLImageOrCanvasOrVideoElement element; element.SetAsHTMLCanvasElement() = this; ErrorResult err; context2d->DrawImage(element, 0.0, 0.0, err); rv = err.ErrorCode(); } } return rv; }