/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* vim: set ts=8 sts=2 et sw=2 tw=80: */ /* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
namespace mozilla { class EventChainPreVisitor; namespace dom {
class ImageLoadTask;
class ResponsiveImageSelector; class HTMLImageElement final : public nsGenericHTMLElement, public nsImageLoadingContent { friendclass HTMLSourceElement; friendclass HTMLPictureElement; friendclass ImageLoadTask;
/** * Given a hypothetical <img> or <source> tag with the given parameters, * return what URI we would attempt to use, if any. Used by the preloader to * resolve sources prior to DOM creation. * * @param aDocument The document this image would be for, for referencing * viewport width and DPI/zoom * @param aIsSourceTag If these parameters are for a <source> tag (as in a * <picture>) rather than an <img> tag. Note that some attrs are unused * when this is true an vice versa * @param aSrcAttr [ignored if aIsSourceTag] The src attr for this image. * @param aSrcsetAttr The srcset attr for this image/source * @param aSizesAttr The sizes attr for this image/source * @param aTypeAttr [ignored if !aIsSourceTag] The type attr for this source. * Should be a void string to differentiate no type attribute * from an empty one. * @param aMediaAttr [ignored if !aIsSourceTag] The media attr for this * source. Should be a void string to differentiate no * media attribute from an empty one. * @param aResult A reference to store the resulting URL spec in if we * selected a source. This value is not guaranteed to parse to * a valid URL, merely the URL that the tag would attempt to * resolve and load (which may be the empty string). This * parameter is not modified if return value is false. * @return True if we were able to select a final source, false if further * sources would be considered. It follows that this always returns * true if !aIsSourceTag. * * Note that the return value may be true with an empty string as the result, * which implies that the parameters provided describe a tag that would select * no source. This is distinct from a return of false which implies that * further <source> or <img> tags would be considered.
*/ staticbool SelectSourceForTagWithAttrs(
Document* aDocument, bool aIsSourceTag, const nsAString& aSrcAttr, const nsAString& aSrcsetAttr, const nsAString& aSizesAttr, const nsAString& aTypeAttr, const nsAString& aMediaAttr,
nsAString& aResult);
// This is used when restyling, for retrieving the extra style from the source // element. const StyleLockedDeclarationBlock* GetMappedAttributesFromSource() const;
// Update the responsive source synchronously and queues a task to run // LoadSelectedImage pending stable state. void UpdateSourceSyncAndQueueImageTask( bool aAlwaysLoad, bool aNotify, const HTMLSourceElement* aSkippedSource = nullptr);
// Clears the current image load task. void ClearImageLoadTask();
// True if we have a srcset attribute or a <picture> parent, regardless of if // any valid responsive sources were parsed from either. bool HaveSrcsetOrInPicture() const;
// True if the given URL equals the last URL that was loaded by this element. bool SelectedSourceMatchesLast(nsIURI* aSelectedSource);
// Load the current mResponsiveSelector (responsive mode) or src attr image. // Note: This doesn't run the full selection for the responsive selector. void LoadSelectedImage(bool aAlwaysLoad);
// True if this string represents a type we would support on <source type> staticbool SupportedPictureSourceType(const nsAString& aType);
// Update/create/destroy mResponsiveSelector void PictureSourceSrcsetChanged(nsIContent* aSourceNode, const nsAString& aNewValue, bool aNotify); void PictureSourceSizesChanged(nsIContent* aSourceNode, const nsAString& aNewValue, bool aNotify); // As we re-run the source selection on these mutations regardless, // we don't actually care which changed or to what void PictureSourceMediaOrTypeChanged(nsIContent* aSourceNode, bool aNotify);
// This is called when we update "width" or "height" attribute of source // element. void PictureSourceDimensionChanged(HTMLSourceElement* aSourceNode, bool aNotify);
void PictureSourceAdded(bool aNotify,
HTMLSourceElement* aSourceNode = nullptr); // This should be called prior to the unbind, such that nextsibling works void PictureSourceRemoved(bool aNotify,
HTMLSourceElement* aSourceNode = nullptr);
// Re-evaluates all source nodes (picture <source>,<img>) and finds // the best source set for mResponsiveSelector. If a better source // is found, creates a new selector and feeds the source to it. If // the current ResponsiveSelector is not changed, runs // SelectImage(true) to re-evaluate its candidates. // // Because keeping the existing selector is the common case (and we // often do no-op reselections), this does not re-parse values for // the existing mResponsiveSelector, meaning you need to update its // parameters as appropriate before calling (or null it out to force // recreation) // // if |aSkippedSource| is non-null, we will skip it when running the // algorithm. This is used when we need to update the source when we are // removing the source element. // // Returns true if the source has changed, and false otherwise. bool UpdateResponsiveSource( const HTMLSourceElement* aSkippedSource = nullptr);
// Given a <source> node that is a previous sibling *or* ourselves, try to // create a ResponsiveSelector.
// If the node's srcset/sizes make for an invalid selector, returns // nullptr. This does not guarantee the resulting selector matches an image, // only that it is valid.
already_AddRefed<ResponsiveImageSelector> TryCreateResponsiveSelector(
Element* aSourceElement);
staticvoid MapAttributesIntoRule(MappedDeclarationsBuilder&); /** * This function is called by AfterSetAttr and OnAttrSetButNotChanged. * It will not be called if the value is being unset. * * @param aNamespaceID the namespace of the attr being set * @param aName the localname of the attribute being set * @param aValue the value it's being set to represented as either a string or * a parsed nsAttrValue. * @param aOldValue the value previously set. Will be null if no value was * previously set. This value should only be used when * aValueMaybeChanged is true; when aValueMaybeChanged is false, * aOldValue should be considered unreliable. * @param aNotify Whether we plan to notify document observers.
*/ void AfterMaybeChangeAttr(int32_t aNamespaceID, nsAtom* aName, const nsAttrValueOrString& aValue, const nsAttrValue* aOldValue,
nsIPrincipal* aMaybeScriptedPrincipal, bool aNotify);
bool ShouldLoadImage() const;
// Set this image as a lazy load image due to loading="lazy". void SetLazyLoading();
// Last URL that was attempted to load by this element.
nsCOMPtr<nsIURI> mLastSelectedSource; // Last pixel density that was selected. double mCurrentDensity = 1.0;
};
} // namespace dom
} // namespace mozilla
#endif/* mozilla_dom_HTMLImageElement_h */
¤ Dauer der Verarbeitung: 0.14 Sekunden
(vorverarbeitet)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung ist noch experimentell.