mirror of
https://github.com/roytam1/palemoon27.git
synced 2026-05-26 14:30:27 +00:00
7adb8133f5
- missing bit of 989499 and some other files (23b0597ba6) - Bug 1233666 - Remove hacks for getting frame pointer for x86/x64 gcc. r=glandium (bfe8f59916) - Bug 1176266: In TimeStamp_posix.cpp, check for XP_LINUX instead of LINUX, and add missing #include, to allow strrchr usage. r=BenWa (56c725cffa) - Bug 1167230 - Don't pack ProfileEntry on ARM. r=shu (89f880e0cb) - Bug 1209779 - Ensure that all null elements are written when streaming profiler JSON; r=shu (2bae5addc6) - missing bit of Bug 1141712 - Make LUL (55f1276545) - Bug 1061800 - Add breakpad ids to profiler in Linux. r=BenWa (994fd1a941) - Bug 829621 - Compute the breakpad-id for OS X. r=BenWa. (e129580174) - missing of Bug 938157 - Lightweight CFI/EXIDX (b355dc3140) - Bug 1193838 - Allow ProfileGatherer to gather profiles from exiting processes. r=BenWa (5ab1a6a3c9) - align some missing stuff (5ebecd2364) - align some missing stuff (b8ff7aa361) - Bug 1164315 - Update key fingerprint for bitbucket.org; r=me (c1a3fbd930) - Bug 1178955 - Refactor config path selection; r=smacleod (89552bb0ac) - Bug 1195445 - Update host key fingerprint for bugzilla.mozilla.org (3783541088) - Bug 1218903 - Update bmo fingerprint. r=fubar, a=Tomcat (5b836fc585) - Bug 1178955 - Print config path on failure; r=smacleod (f5499f3771) - Bug 1185113 - Support setting more secure file permissions; r=smacleod (7dbf6b22fd) - Bug 1184229 - Detect multiple version-control-tools repos in Mercurial config; r=smacleod (16c24072a9) - Bug 978514 - mach mercurial-setup: Use mqext from the version-control-tools repo (1fa5765e8a) - Bug 1178955 - Don't pass config paths to updater; r=smacleod (80fcb05121) - Bug 1197527 - Don't unnecessarily attempt to create extensions directory in MercurialUpdater; r=gps (9b049c3ff8) - Bug 1164812 - mach mercurial-setup: Always mark the v-c-t repo as needing update (bd631208bd) - Bug 1197527 - Always clone version-control-tools in MercurialSetupWizard; r=gps (6990e8f589) - Bug 1197527 - Consolidate obtaining hg path into mozversioncontrol.get_hg_path; r=gps (e0b029a8e9) - Bug 1200458 - Skip permission check for .hgrc on Windows in hgsetup wizard. r=gps DONTBUILD (cc5b0d6daf) - Bug 1168466 - Bump minimum Mercurial version; r=smacleod (7fde47cfbe) - Bug 1185113 - Clarify language around Bugzilla credentials; r=smacleod (9166fdfbf9) - Bug 1185112 - Don't prompt for Bugzilla username/password if cookies defined; r=smacleod (cd87c96823) - Bug 1188931 - Fix hgsetup wizard. r=gps (68a6b46be4) - Bug 1200461 - Prompt for Bugzilla API Key instead of password; r=smacleod (780fb5d85d) - Bug 1228580 - ./mach mercurial-setup should use ~ to set up extension paths, not my literal home directory. r=gps (7a0c839880) - Bug 1231192 - Mark Mercurial 3.5.2 as oldest non-legacy version; r=smacleod (8f69483333) - Bug 1231192 - Bump some minimum Mercurial version; r=smacleod (916c56a852) - Bug 1162093 - Add "push-to-try" from version-control-tools to the mercurial setup wizard prompt.;r=gps (d29c7cf63a) - Bug 1168466 - Prompt to install bundleclone extension; r=smacleod (780ce90a08) - Bug 1185557 - Print relevant config options; r=smacleod (2f3f7e0161) - Bug 1231192 - Support clonebundles feature; r=smacleod (dcba1ccd34) - Bug 1231192 - Offer to install hg wip; r=smacleod (c42ebce5c8) - Bug 1231192 - Only install host fingerprints if not running secure Python+hg; r=smacleod (3154a2497b) - Bug 1178955 - Error when semicolon comments are seen; r=smacleod (e1f7081bb6) - Bug 1231989 - Prompt to install hgwatchman extension; r=ahal (0eddf0c1c8) - Bug 1178955 - Print line number for parse errors; r=smacleod (5369468cf1) - Bug 1185557 - Only prompt to install progress on Mercurial <3.5; r=smacleod (401f362265) - Bug 1232747 - Check for ssl.SSLContext existence; r=dminor (d505b07c5c) - Bug 1144629 - UnicodeDecodeError in ./mach mercurial-setup. r=gps, r=glandium (611d3ec83e) - Bug 1216970 - Make the copying more obvious in ProfilerImpl::GetStacktrace. r=froydnj (085625e113) - Bug 1190466 - tools/rb/find-leakers.pl re-written in Python r=mccr8 (4bfdcad13e) - Bug 1116478 - Open web content handlers in the proper tab in e10s. r=billm (ff8e11f45e) - Bug 1213437 - Less data copying when handling structured clones in MessageManager, r=baku (c4e2a13253) - const-var (69d17f312d) - Bug 1203090 - Ensure we always use '/' as the starting path separator for the DOM path of the Directorys initially returned by HTMLInputElement.getFilesAndDirectories. r=baku (1325bbc40c) - Bug 1209975 - Stop using dom::Promise::MaybeRejectBrokenly() in GetDirectoryListingTask. r=baku (2106790950) - Bug 1209924 - Implement a general filtering mechanism for Directory::GetFilesAndDirectories, and add filtering of sensitive files/directories. r=baku (27b4a26262) - Force a repaint after DXGI device resets. (bug 1188019, r=bas) (09c999e6e5) - Bug 1163911 - Make responsive images block the document load event while the load task is queued. r=jst (0ee0e3db79) - Bug 1166138 - Make img srcset react to resize/viewport changes, r=jdm (91674519e6) - Bug 1194893 - Pref for default file upload directory. r=smaug (ec6d33d983) - bug 1116409: switch update server to sha2 cert; update in-tree pinning. r=rstrong,snorp,mfinkle,dkeeler (7c8f631f27) - bug 1116409: fix cert pinning on backup cert for aus5.mozilla.org. r=typofix (3c690cbc6d) - Bug 1167048 - Change default font for Thai script from serif to sans-serif. r=smontagu (15dc86c389) - Bug 1205570 - fix up font prefs for x-math lang group. r=heycam (03f1820752) - Bug 1071769: Use DrawTargetTiled on B2G. r=Bas (b80ce768f1) - fix misspatch of 1149343 (541dd7aac8) - Bug 1199766 - Disable ICE TCP SO gathering via user pref. r=bwc (80cdc9c662) - Bug 1187472 - only log UDP and TCP candidate gathering failures. r=bwc (bc3dcb02d0) - Bug 1190615 - Skip non-UDP STUN servers for UDP sockets. r=bwc (a2d1d914b5) - Bug 1187775 - skip host and reflexive ICE candidates if relay-only. r=bwc (7e2cba1685) - Bug 1185198 - use port 9 for TCP active candidates. r=bwc (0a89cb199d) - Bug 1177921 - Fix typo in STUN server name. r=drno (1ad43ced6b) - Bug 1178349 - Enable ice_unittests on desktop linux on CI. r=bwc (ce5ece8264) - Bug 1189041 - Add option to only gather addresses for default route. r=bwc (3651f2ff06) - Bug 1189040: add a whitelist for network interfaces to use with ICE/webrtc r=ekr (6f693af72c) - Bug 1189198 - don't start STUN transactions with a protocol mis-match. r=mtseng (a3b410e2a8) - Bug 1208096 - Handle various failure cases for TURN gathering better. r=drno (1d8e173448) - Bug 1211389 - Make absolutely sure the relay->srflx pointer doesn't dangle. r=drno (d59b0bf08d) - Bug 1215616: use base address for server rflx ICE candidates r=bwc (89d07331ac) - Bug 1207451 - removed framing from multi_tcp API. r=bwc (317f40f490) - Bug 1186590 - Part 1 - Enable interface prioritizer on all platforms. r=drno (036a69fdb3) - Bug 1194019 - New defaults for gather tests. r=bwc (8343ceab56) - Bug 1144933: Only check that remote candidate is loopback in TestLoopbackOnlySortOf. r=drno (1f53d824e4) - Bug 1186590 - Part 2 - Move hard-coded interface priority list into nrinterfaceprioritizer, and simplify some functions. r=drno (9f20fad21b) - Bug 1152137 - Part 1: Test case. r=ekr (6b50f06d90) - Bug 1152137 - Part 2: Remove attributes that could not be initted properly instead of just freeing them. r=ekr (ccdf81294a) - Bug 1200763 - Remove hard-coded STUN IP address from ice_unittest, and do a DNS lookup instead. r=drno (ae54a83363) - Bug 1208176 - Part 1: Add a couple of interface names. r=drno (b7ead0b476) - Bug 1208176 - Part 2: Add a one-sided trickle test case to ice_unittest. r=drno (ad6afedb1c) - Bug 1037618 - Relax candidate verification for TCP. r=bwc (0cad14c89e) - Bug 1208176 - Part 3: Be forgiving when we see prflx instead of host candidates in ice_unittest. r=drno (50bdec2ba3) - Bug 1035428: Re-register writeable callback after partially servicing the send queue. r=drno (2fdb7880fa) - Bug 1135753 - Mark some overridden virtual functions in WebRTC as MOZ_OVERRIDE; r=mt (97f451c97d) - Bug 950660: Part 4: Bridge TCPSocketChild to nr_socket r=bwc,jdm (654587b321) - Bug 971357: Log STUN responses at INFO instead of DEBUG. r=ekr (81b500df17) - Bug 1006809 - update triggered check behavior to RFC 5245. r+bwc r=mjf (31b718b5e5) - Bug 1208278 - improved STUN request timeout handling. r=bwc (cf470fb12f) - Bug 1142964 - Fix ICE tiebreaker on Windows. r=bwc (0d2fd78252) - Bug 1219557 - don't pair candidates from different reserved networks. r=mt r=bwc (24d3e5106c) - Bug 1220441 - Improve gather trickle ice unit tests. r=bwc r=mjf (96f76c6c8c) - Bug 1205421 - fix DNS resolution of STUN server in ice_unittest. r=bwc (5d5b153358) - Bug 1206465 - removed ice_ctx from TestStunTcpServer. r=bwc (9a0df03894) - ug 1008792 - Check for valid pointer before using. r=bwc (7660fd0a71) - Bug 1233101 - Use MOZ_LIKELY in js_new etc to help branch prediction; r=terrence (31fb244734) - Bug 1225565 - Fix module import cycle detection r=shu (370dc26ee8) - Bug 1225558 - Improve module error messages r=shu (83b6038bb3) - Bug 1225561 - Don't allow a module to export non-existent local bindings r=shu (41f065891a) - Bug 1233124 - Remove mis-named duplicate typedefs for rooted import and export entries r=terrence (17a60bdb39) - Bug 1208464 - Implement proposed ES7 functions Object.values and Object.entries. r=evilpie (615193d0fb) - Bug 1226549 - added assert check for matches pointer in for prevent null dereference. r=hv1989 (d321ad0385) - Bug 1232113 - "Make the format specifiers in JS_snprintf() invocations more portable". r=jcoppeard (7c58b79a53) - Bug 1232446 - Re-enable method calls in SelfHosted code using new anti-content checks. (r=till) (ba7dc22ff8) - Bug 1232159 - Stop using pseudo-Uint32Array in SelfHosted code. (r=till) (c325f8ff58) - Bug 1226235 - Print file and line info for failing assert in self-hosted code. r=efaust (4a8d54d38b) - fix misspatch (fca2efc1f1) - Bug 1186003 - Switch automated builds to Gtk+3. r=mshal (658ad843b7) - Bug 1181342 - tooltool manifests and build-clang config for clang 3.6 r=rail (6264b4df68) - Bug 1181342 - Follow up to use the unpack feature of tooltool instead of setup.sh r=glandium (96bb3b2062) - Bug 1181255 - Mozconfigs for tsan builds. r=glandium (19250f4cc1) - Bug 1181255 - Get tsan builds on gtk3. r=glandium (e5ffd1c02f) - Bug 1187664 - Create a fontconfig cache so that Firefox doesn't have to do it itself when run on build automation. r=mshal (8ce567bd4c) - Bug 1188780 - Include debug symbols in gtk3 tooltool package. r=mshal (a5b573aa58) - Bug 1188780: remove setup.sh invocations, as they fail outside the mock environment; r=glandium a=RyanVM (058e306cac) - Bug 1178513 - Fix non-unified bustage. r=wchen (543d1e5497) - Bug 1162789 - Add a comment explaining why mForm is not set to null during unlink (eaa2a82048) - Bug 1189655 - Define MOZ_HAVE_CXX11_CONSTEXPR on VS2015 or later. r=Waldo (2d134e3b41) - Bug 1231758 - Fix bogus assertion in BCE for Annex B function assignment. (r=jorendorff) (701b2530b9) - Bug 1233100 - Ensure that derived constructor bad return value errors are thrown before leaving the containing block. (r=shu) (52f5bcf0a5) - Bug 1232022, 1232449 - Address forgotten review nits and fix bogus error message. (rs=Waldo) (dfd9d5e388) - Bug 1233121 - Refactor ObjectBox tracing r=terrence (876a140535) - Bug 1231647 - Check for duplicate exported let and const in modules r=shu (99f53ad443)
375 lines
14 KiB
C++
375 lines
14 KiB
C++
/* -*- 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/. */
|
|
|
|
#ifndef mozilla_dom_HTMLImageElement_h
|
|
#define mozilla_dom_HTMLImageElement_h
|
|
|
|
#include "mozilla/Attributes.h"
|
|
#include "nsGenericHTMLElement.h"
|
|
#include "nsImageLoadingContent.h"
|
|
#include "nsIDOMHTMLImageElement.h"
|
|
#include "imgRequestProxy.h"
|
|
#include "Units.h"
|
|
#include "nsCycleCollectionParticipant.h"
|
|
|
|
// Only needed for IsPictureEnabled()
|
|
#include "mozilla/dom/HTMLPictureElement.h"
|
|
|
|
namespace mozilla {
|
|
class EventChainPreVisitor;
|
|
namespace dom {
|
|
|
|
class ResponsiveImageSelector;
|
|
class HTMLImageElement final : public nsGenericHTMLElement,
|
|
public nsImageLoadingContent,
|
|
public nsIDOMHTMLImageElement
|
|
{
|
|
friend class HTMLSourceElement;
|
|
friend class HTMLPictureElement;
|
|
friend class ImageLoadTask;
|
|
public:
|
|
explicit HTMLImageElement(already_AddRefed<mozilla::dom::NodeInfo>& aNodeInfo);
|
|
|
|
static already_AddRefed<HTMLImageElement>
|
|
Image(const GlobalObject& aGlobal,
|
|
const Optional<uint32_t>& aWidth,
|
|
const Optional<uint32_t>& aHeight,
|
|
ErrorResult& aError);
|
|
|
|
NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(HTMLImageElement,
|
|
nsGenericHTMLElement)
|
|
|
|
// nsISupports
|
|
NS_DECL_ISUPPORTS_INHERITED
|
|
|
|
virtual bool Draggable() const override;
|
|
|
|
// Element
|
|
virtual bool IsInteractiveHTMLContent(bool aIgnoreTabindex) const override;
|
|
|
|
// nsIDOMHTMLImageElement
|
|
NS_DECL_NSIDOMHTMLIMAGEELEMENT
|
|
|
|
NS_IMPL_FROMCONTENT_HTML_WITH_TAG(HTMLImageElement, img)
|
|
|
|
// override from nsImageLoadingContent
|
|
CORSMode GetCORSMode() override;
|
|
|
|
// nsIContent
|
|
virtual bool ParseAttribute(int32_t aNamespaceID,
|
|
nsIAtom* aAttribute,
|
|
const nsAString& aValue,
|
|
nsAttrValue& aResult) override;
|
|
virtual nsChangeHint GetAttributeChangeHint(const nsIAtom* aAttribute,
|
|
int32_t aModType) const override;
|
|
NS_IMETHOD_(bool) IsAttributeMapped(const nsIAtom* aAttribute) const override;
|
|
virtual nsMapRuleToAttributesFunc GetAttributeMappingFunction() const override;
|
|
|
|
virtual nsresult PreHandleEvent(EventChainPreVisitor& aVisitor) override;
|
|
|
|
bool IsHTMLFocusable(bool aWithMouse, bool *aIsFocusable, int32_t *aTabIndex) override;
|
|
|
|
// SetAttr override. C++ is stupid, so have to override both
|
|
// overloaded methods.
|
|
nsresult SetAttr(int32_t aNameSpaceID, nsIAtom* aName,
|
|
const nsAString& aValue, bool aNotify)
|
|
{
|
|
return SetAttr(aNameSpaceID, aName, nullptr, aValue, aNotify);
|
|
}
|
|
virtual nsresult SetAttr(int32_t aNameSpaceID, nsIAtom* aName,
|
|
nsIAtom* aPrefix, const nsAString& aValue,
|
|
bool aNotify) override;
|
|
|
|
virtual nsresult BindToTree(nsIDocument* aDocument, nsIContent* aParent,
|
|
nsIContent* aBindingParent,
|
|
bool aCompileEventHandlers) override;
|
|
virtual void UnbindFromTree(bool aDeep, bool aNullParent) override;
|
|
|
|
virtual EventStates IntrinsicState() const override;
|
|
virtual nsresult Clone(mozilla::dom::NodeInfo *aNodeInfo, nsINode **aResult) const override;
|
|
|
|
nsresult CopyInnerTo(Element* aDest);
|
|
|
|
void MaybeLoadImage();
|
|
|
|
static bool IsSrcsetEnabled();
|
|
|
|
bool IsMap()
|
|
{
|
|
return GetBoolAttr(nsGkAtoms::ismap);
|
|
}
|
|
void SetIsMap(bool aIsMap, ErrorResult& aError)
|
|
{
|
|
SetHTMLBoolAttr(nsGkAtoms::ismap, aIsMap, aError);
|
|
}
|
|
uint32_t Width()
|
|
{
|
|
return GetWidthHeightForImage(mCurrentRequest).width;
|
|
}
|
|
void SetWidth(uint32_t aWidth, ErrorResult& aError)
|
|
{
|
|
SetUnsignedIntAttr(nsGkAtoms::width, aWidth, aError);
|
|
}
|
|
uint32_t Height()
|
|
{
|
|
return GetWidthHeightForImage(mCurrentRequest).height;
|
|
}
|
|
void SetHeight(uint32_t aHeight, ErrorResult& aError)
|
|
{
|
|
SetUnsignedIntAttr(nsGkAtoms::height, aHeight, aError);
|
|
}
|
|
uint32_t NaturalWidth();
|
|
uint32_t NaturalHeight();
|
|
bool Complete();
|
|
uint32_t Hspace()
|
|
{
|
|
return GetUnsignedIntAttr(nsGkAtoms::hspace, 0);
|
|
}
|
|
void SetHspace(uint32_t aHspace, ErrorResult& aError)
|
|
{
|
|
SetUnsignedIntAttr(nsGkAtoms::hspace, aHspace, aError);
|
|
}
|
|
uint32_t Vspace()
|
|
{
|
|
return GetUnsignedIntAttr(nsGkAtoms::vspace, 0);
|
|
}
|
|
void SetVspace(uint32_t aVspace, ErrorResult& aError)
|
|
{
|
|
SetUnsignedIntAttr(nsGkAtoms::vspace, aVspace, aError);
|
|
}
|
|
|
|
// The XPCOM versions of the following getters work for Web IDL bindings as well
|
|
void SetAlt(const nsAString& aAlt, ErrorResult& aError)
|
|
{
|
|
SetHTMLAttr(nsGkAtoms::alt, aAlt, aError);
|
|
}
|
|
void SetSrc(const nsAString& aSrc, ErrorResult& aError)
|
|
{
|
|
SetHTMLAttr(nsGkAtoms::src, aSrc, aError);
|
|
}
|
|
void SetSrcset(const nsAString& aSrcset, ErrorResult& aError)
|
|
{
|
|
SetHTMLAttr(nsGkAtoms::srcset, aSrcset, aError);
|
|
}
|
|
void GetCrossOrigin(nsAString& aResult)
|
|
{
|
|
// Null for both missing and invalid defaults is ok, since we
|
|
// always parse to an enum value, so we don't need an invalid
|
|
// default, and we _want_ the missing default to be null.
|
|
GetEnumAttr(nsGkAtoms::crossorigin, nullptr, aResult);
|
|
}
|
|
void SetCrossOrigin(const nsAString& aCrossOrigin, ErrorResult& aError)
|
|
{
|
|
SetOrRemoveNullableStringAttr(nsGkAtoms::crossorigin, aCrossOrigin, aError);
|
|
}
|
|
void SetUseMap(const nsAString& aUseMap, ErrorResult& aError)
|
|
{
|
|
SetHTMLAttr(nsGkAtoms::usemap, aUseMap, aError);
|
|
}
|
|
void SetName(const nsAString& aName, ErrorResult& aError)
|
|
{
|
|
SetHTMLAttr(nsGkAtoms::name, aName, aError);
|
|
}
|
|
void SetAlign(const nsAString& aAlign, ErrorResult& aError)
|
|
{
|
|
SetHTMLAttr(nsGkAtoms::align, aAlign, aError);
|
|
}
|
|
void SetLongDesc(const nsAString& aLongDesc, ErrorResult& aError)
|
|
{
|
|
SetHTMLAttr(nsGkAtoms::longdesc, aLongDesc, aError);
|
|
}
|
|
void SetSizes(const nsAString& aSizes, ErrorResult& aError)
|
|
{
|
|
SetHTMLAttr(nsGkAtoms::sizes, aSizes, aError);
|
|
}
|
|
void SetBorder(const nsAString& aBorder, ErrorResult& aError)
|
|
{
|
|
SetHTMLAttr(nsGkAtoms::border, aBorder, aError);
|
|
}
|
|
void SetReferrerPolicy(const nsAString& aReferrer, ErrorResult& aError)
|
|
{
|
|
SetHTMLAttr(nsGkAtoms::referrerpolicy, aReferrer, aError);
|
|
}
|
|
void GetReferrerPolicy(nsAString& aReferrer)
|
|
{
|
|
GetHTMLAttr(nsGkAtoms::referrerpolicy, aReferrer);
|
|
}
|
|
|
|
net::ReferrerPolicy
|
|
GetImageReferrerPolicy() override
|
|
{
|
|
return GetReferrerPolicyAsEnum();
|
|
}
|
|
|
|
int32_t X();
|
|
int32_t Y();
|
|
// Uses XPCOM GetLowsrc.
|
|
void SetLowsrc(const nsAString& aLowsrc, ErrorResult& aError)
|
|
{
|
|
SetHTMLAttr(nsGkAtoms::lowsrc, aLowsrc, aError);
|
|
}
|
|
|
|
#ifdef DEBUG
|
|
nsIDOMHTMLFormElement* GetForm() const;
|
|
#endif
|
|
void SetForm(nsIDOMHTMLFormElement* aForm);
|
|
void ClearForm(bool aRemoveFromForm);
|
|
|
|
virtual void DestroyContent() override;
|
|
|
|
void MediaFeatureValuesChanged();
|
|
|
|
/**
|
|
* 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.
|
|
*/
|
|
static bool
|
|
SelectSourceForTagWithAttrs(nsIDocument *aDocument,
|
|
bool aIsSourceTag,
|
|
const nsAString& aSrcAttr,
|
|
const nsAString& aSrcsetAttr,
|
|
const nsAString& aSizesAttr,
|
|
const nsAString& aTypeAttr,
|
|
const nsAString& aMediaAttr,
|
|
nsAString& aResult);
|
|
|
|
/**
|
|
* If this image's src pointers to an SVG document, flush the SVG document's
|
|
* use counters to telemetry. Only used for testing purposes.
|
|
*/
|
|
void FlushUseCounters();
|
|
|
|
protected:
|
|
virtual ~HTMLImageElement();
|
|
|
|
// Queues a task to run LoadSelectedImage pending stable state.
|
|
//
|
|
// Pending Bug 1076583 this is only used by the responsive image
|
|
// algorithm (InResponsiveMode()) -- synchronous actions when just
|
|
// using img.src will bypass this, and update source and kick off
|
|
// image load synchronously.
|
|
void QueueImageLoadTask(bool aAlwaysLoad);
|
|
|
|
// True if we have a srcset attribute or a <picture> parent, regardless of if
|
|
// any valid responsive sources were parsed from either.
|
|
bool HaveSrcsetOrInPicture();
|
|
|
|
// True if we are using the newer image loading algorithm. This will be the
|
|
// only mode after Bug 1076583
|
|
bool InResponsiveMode();
|
|
|
|
// Resolve and load the current mResponsiveSelector (responsive mode) or src
|
|
// attr image.
|
|
nsresult LoadSelectedImage(bool aForce, bool aNotify, bool aAlwaysLoad);
|
|
|
|
// True if this string represents a type we would support on <source type>
|
|
static bool 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);
|
|
|
|
void PictureSourceAdded(nsIContent *aSourceNode);
|
|
// This should be called prior to the unbind, such that nextsibling works
|
|
void PictureSourceRemoved(nsIContent *aSourceNode);
|
|
|
|
// 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)
|
|
//
|
|
// Returns true if the source has changed, and false otherwise.
|
|
bool UpdateResponsiveSource();
|
|
|
|
// 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
|
|
// false. This does not guarantee the resulting selector matches an image,
|
|
// only that it is valid.
|
|
bool TryCreateResponsiveSelector(nsIContent *aSourceNode,
|
|
const nsAString *aSrcset = nullptr,
|
|
const nsAString *aSizes = nullptr);
|
|
|
|
CSSIntPoint GetXY();
|
|
virtual void GetItemValueText(DOMString& text) override;
|
|
virtual void SetItemValueText(const nsAString& text) override;
|
|
virtual JSObject* WrapNode(JSContext *aCx, JS::Handle<JSObject*> aGivenProto) override;
|
|
void UpdateFormOwner();
|
|
|
|
virtual nsresult BeforeSetAttr(int32_t aNameSpaceID, nsIAtom* aName,
|
|
nsAttrValueOrString* aValue,
|
|
bool aNotify) override;
|
|
|
|
virtual nsresult AfterSetAttr(int32_t aNameSpaceID, nsIAtom* aName,
|
|
const nsAttrValue* aValue, bool aNotify) override;
|
|
|
|
// Override for nsImageLoadingContent.
|
|
nsIContent* AsContent() override { return this; }
|
|
|
|
// This is a weak reference that this element and the HTMLFormElement
|
|
// cooperate in maintaining.
|
|
HTMLFormElement* mForm;
|
|
|
|
// Created when we're tracking responsive image state
|
|
RefPtr<ResponsiveImageSelector> mResponsiveSelector;
|
|
|
|
private:
|
|
bool SourceElementMatches(nsIContent* aSourceNode);
|
|
|
|
static void MapAttributesIntoRule(const nsMappedAttributes* aAttributes,
|
|
nsRuleData* aData);
|
|
|
|
bool mInDocResponsiveContent;
|
|
nsCOMPtr<nsIRunnable> mPendingImageLoadTask;
|
|
};
|
|
|
|
} // namespace dom
|
|
} // namespace mozilla
|
|
|
|
#endif /* mozilla_dom_HTMLImageElement_h */
|