author | Xidorn Quan <me@upsuper.org> |
Fri, 10 Mar 2017 18:04:34 +1100 | |
changeset 346908 | 349830b775ae00c179133c8a9256b6338507f379 |
parent 346907 | 9c29dd17051ec2db36577c463449a87eb4255ea9 |
child 346909 | 0fbfe6e94cb2b4d20163e131bd0f9ab7a4f1aca0 |
push id | 31480 |
push user | cbook@mozilla.com |
push date | Fri, 10 Mar 2017 10:37:06 +0000 |
treeherder | mozilla-central@e18d3dd20e8d [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | bz |
bugs | 1345343 |
milestone | 55.0a1 |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
--- a/dom/base/FragmentOrElement.cpp +++ b/dom/base/FragmentOrElement.cpp @@ -409,16 +409,33 @@ nsIContent::GetBaseURI(bool aTryUseXHRDo base.swap(newBase); } } } return base.forget(); } +already_AddRefed<nsIURI> +nsIContent::GetBaseURIForStyleAttr() const +{ + if (!nsLayoutUtils::StyleAttrWithXMLBaseDisabled()) { + return GetBaseURI(); + } + if (IsInAnonymousSubtree() && IsAnonymousContentInSVGUseSubtree()) { + nsIContent* bindingParent = GetBindingParent(); + MOZ_ASSERT(bindingParent); + SVGUseElement* useElement = static_cast<SVGUseElement*>(bindingParent); + return do_AddRef(useElement->GetContentBaseURI()); + } + // This also ignores the case that SVG inside XBL binding. + // But it is probably fine. + return do_AddRef(OwnerDoc()->GetDocBaseURI()); +} + //---------------------------------------------------------------------- static inline JSObject* GetJSObjectChild(nsWrapperCache* aCache) { return aCache->PreservingWrapper() ? aCache->GetWrapperPreserveColor() : nullptr; }
--- a/dom/base/nsAttrValue.cpp +++ b/dom/base/nsAttrValue.cpp @@ -1697,17 +1697,17 @@ nsAttrValue::LoadImage(nsIDocument* aDoc } bool nsAttrValue::ParseStyleAttribute(const nsAString& aString, nsStyledElement* aElement) { nsIDocument* ownerDoc = aElement->OwnerDoc(); nsHTMLCSSStyleSheet* sheet = ownerDoc->GetInlineStyleSheet(); - nsCOMPtr<nsIURI> baseURI = aElement->GetBaseURI(); + nsCOMPtr<nsIURI> baseURI = aElement->GetBaseURIForStyleAttr(); nsIURI* docURI = ownerDoc->GetDocumentURI(); NS_ASSERTION(aElement->NodePrincipal() == ownerDoc->NodePrincipal(), "This is unexpected"); // If the (immutable) document URI does not match the element's base URI // (the common case is that they do match) do not cache the rule. This is // because the results of the CSS parser are dependent on these URIs, and we
--- a/dom/base/nsIContent.h +++ b/dom/base/nsIContent.h @@ -965,16 +965,19 @@ public: IsAnyOfXULElements(nsGkAtoms::scrollbar, nsGkAtoms::resizer, nsGkAtoms::scrollcorner); } // Overloaded from nsINode virtual already_AddRefed<nsIURI> GetBaseURI(bool aTryUseXHRDocBaseURI = false) const override; + // Returns base URI for style attribute. + already_AddRefed<nsIURI> GetBaseURIForStyleAttr() const; + virtual nsresult GetEventTargetParent( mozilla::EventChainPreVisitor& aVisitor) override; virtual bool IsPurple() = 0; virtual void RemovePurple() = 0; virtual bool OwnedOnlyByTheDOMTree() { return false; } protected:
--- a/layout/base/nsLayoutUtils.cpp +++ b/layout/base/nsLayoutUtils.cpp @@ -181,16 +181,17 @@ typedef nsStyleTransformMatrix::Transfor /* static */ bool nsLayoutUtils::sInvalidationDebuggingIsEnabled; /* static */ bool nsLayoutUtils::sCSSVariablesEnabled; /* static */ bool nsLayoutUtils::sInterruptibleReflowEnabled; /* static */ bool nsLayoutUtils::sSVGTransformBoxEnabled; /* static */ bool nsLayoutUtils::sTextCombineUprightDigitsEnabled; #ifdef MOZ_STYLO /* static */ bool nsLayoutUtils::sStyloEnabled; #endif +/* static */ bool nsLayoutUtils::sStyleAttrWithXMLBaseDisabled; /* static */ uint32_t nsLayoutUtils::sIdlePeriodDeadlineLimit; /* static */ uint32_t nsLayoutUtils::sQuiescentFramesBeforeIdlePeriod; static ViewID sScrollIdCounter = FrameMetrics::START_SCROLL_ID; typedef nsDataHashtable<nsUint64HashKey, nsIContent*> ContentMap; static ContentMap* sContentMap = nullptr; static ContentMap& GetContentMap() { @@ -7662,16 +7663,18 @@ nsLayoutUtils::Initialize() Preferences::AddBoolVarCache(&sSVGTransformBoxEnabled, "svg.transform-box.enabled"); Preferences::AddBoolVarCache(&sTextCombineUprightDigitsEnabled, "layout.css.text-combine-upright-digits.enabled"); #ifdef MOZ_STYLO Preferences::AddBoolVarCache(&sStyloEnabled, "layout.css.servo.enabled"); #endif + Preferences::AddBoolVarCache(&sStyleAttrWithXMLBaseDisabled, + "layout.css.style-attr-with-xml-base.disabled"); Preferences::AddUintVarCache(&sIdlePeriodDeadlineLimit, "layout.idle_period.time_limit", DEFAULT_IDLE_PERIOD_TIME_LIMIT); Preferences::AddUintVarCache(&sQuiescentFramesBeforeIdlePeriod, "layout.idle_period.required_quiescent_frames", DEFAULT_QUIESCENT_FRAMES); for (auto& callback : kPrefCallbacks) {
--- a/layout/base/nsLayoutUtils.h +++ b/layout/base/nsLayoutUtils.h @@ -2442,16 +2442,20 @@ public: static bool StyloEnabled() { #ifdef MOZ_STYLO return sStyloEnabled; #else return false; #endif } + static bool StyleAttrWithXMLBaseDisabled() { + return sStyleAttrWithXMLBaseDisabled; + } + static uint32_t IdlePeriodDeadlineLimit() { return sIdlePeriodDeadlineLimit; } static uint32_t QuiescentFramesBeforeIdlePeriod() { return sQuiescentFramesBeforeIdlePeriod; } @@ -2914,16 +2918,17 @@ private: static bool sInvalidationDebuggingIsEnabled; static bool sCSSVariablesEnabled; static bool sInterruptibleReflowEnabled; static bool sSVGTransformBoxEnabled; static bool sTextCombineUprightDigitsEnabled; #ifdef MOZ_STYLO static bool sStyloEnabled; #endif + static bool sStyleAttrWithXMLBaseDisabled; static uint32_t sIdlePeriodDeadlineLimit; static uint32_t sQuiescentFramesBeforeIdlePeriod; /** * Helper function for LogTestDataForPaint(). */ static void DoLogTestDataForPaint(mozilla::layers::LayerManager* aManager, ViewID aScrollId,
--- a/layout/style/nsDOMCSSAttrDeclaration.cpp +++ b/layout/style/nsDOMCSSAttrDeclaration.cpp @@ -163,17 +163,17 @@ nsDOMCSSAttributeDeclaration::GetCSSDecl void nsDOMCSSAttributeDeclaration::GetCSSParsingEnvironment(CSSParsingEnvironment& aCSSParseEnv) { NS_ASSERTION(mElement, "Something is severely broken -- there should be an Element here!"); nsIDocument* doc = mElement->OwnerDoc(); aCSSParseEnv.mSheetURI = doc->GetDocumentURI(); - aCSSParseEnv.mBaseURI = mElement->GetBaseURI(); + aCSSParseEnv.mBaseURI = mElement->GetBaseURIForStyleAttr(); aCSSParseEnv.mPrincipal = mElement->NodePrincipal(); aCSSParseEnv.mCSSLoader = doc->CSSLoader(); } NS_IMETHODIMP nsDOMCSSAttributeDeclaration::GetParentRule(nsIDOMCSSRule **aParent) { NS_ENSURE_ARG_POINTER(aParent);
--- a/modules/libpref/init/all.js +++ b/modules/libpref/init/all.js @@ -2674,16 +2674,19 @@ pref("layout.css.font-loading-api.enable pref("layout.css.control-characters.visible", false); #else pref("layout.css.control-characters.visible", true); #endif // Is support for column-span enabled? pref("layout.css.column-span.enabled", false); +// Is effect of xml:base disabled for style attribute? +pref("layout.css.style-attr-with-xml-base.disabled", false); + // pref for which side vertical scrollbars should be on // 0 = end-side in UI direction // 1 = end-side in document/content direction // 2 = right // 3 = left pref("layout.scrollbar.side", 0); // pref to stop overlay scrollbars from fading out, for testing purposes