summaryrefslogtreecommitdiffstats
path: root/dom/html/HTMLFrameSetElement.cpp
diff options
context:
space:
mode:
authorMatt A. Tobin <email@mattatobin.com>2020-04-17 05:33:06 -0400
committerMatt A. Tobin <email@mattatobin.com>2020-04-17 05:33:06 -0400
commit17f7e1c8c6fca351174bdbd73981aa8e44d0f9da (patch)
treee8ea42c3121ecd79638172d226a94ad241a21ea9 /dom/html/HTMLFrameSetElement.cpp
parent940d191ef8b61309f4ea83d0fea77828f361251b (diff)
downloadUXP-17f7e1c8c6fca351174bdbd73981aa8e44d0f9da.tar
UXP-17f7e1c8c6fca351174bdbd73981aa8e44d0f9da.tar.gz
UXP-17f7e1c8c6fca351174bdbd73981aa8e44d0f9da.tar.lz
UXP-17f7e1c8c6fca351174bdbd73981aa8e44d0f9da.tar.xz
UXP-17f7e1c8c6fca351174bdbd73981aa8e44d0f9da.zip
Bug 1365092 - Move side effects of SetAttr and ParseAttribute to BeforeSetAttr and AfterSetAttr
* Moves side effects of nsGenericHTMLElement and Element's SetAttr, UnsetAttr, and ParseAttribute functions to the corresponding BeforeSetAttr and AfterSetAttr functions * Moves side effects of HTMLAnchorElement's SetAttr, UnsetAttr, and ParseAttribute functions to the corresponding BeforeSetAttr and AfterSetAttr functions * Moves side effects of HTMLImageElement's SetAttr function to the corresponding BeforeSetAttr and AfterSetAttr functions * Moves side effects of SetAttr, UnsetAttr, and ParseAttribute functions to BeforeSetAttr and AfterSetAttr Tag #1375
Diffstat (limited to 'dom/html/HTMLFrameSetElement.cpp')
-rw-r--r--dom/html/HTMLFrameSetElement.cpp61
1 files changed, 32 insertions, 29 deletions
diff --git a/dom/html/HTMLFrameSetElement.cpp b/dom/html/HTMLFrameSetElement.cpp
index 6d39caa19..861dbfe9f 100644
--- a/dom/html/HTMLFrameSetElement.cpp
+++ b/dom/html/HTMLFrameSetElement.cpp
@@ -9,6 +9,7 @@
#include "mozilla/dom/EventHandlerBinding.h"
#include "nsGlobalWindow.h"
#include "mozilla/UniquePtrExtensions.h"
+#include "nsAttrValueOrString.h"
NS_IMPL_NS_NEW_HTML_ELEMENT(FrameSet)
@@ -65,43 +66,45 @@ HTMLFrameSetElement::GetRows(nsAString& aRows)
}
nsresult
-HTMLFrameSetElement::SetAttr(int32_t aNameSpaceID,
- nsIAtom* aAttribute,
- nsIAtom* aPrefix,
- const nsAString& aValue,
- bool aNotify)
+HTMLFrameSetElement::BeforeSetAttr(int32_t aNamespaceID, nsIAtom* aName,
+ const nsAttrValueOrString* aValue,
+ bool aNotify)
{
- nsresult rv;
/* The main goal here is to see whether the _number_ of rows or
- * columns has changed. If it has, we need to reframe; otherwise
- * we want to reflow. So we set mCurrentRowColHint here, then call
- * nsGenericHTMLElement::SetAttr, which will end up calling
- * GetAttributeChangeHint and notifying layout with that hint.
- * Once nsGenericHTMLElement::SetAttr returns, we want to go back to our
- * normal hint, which is NS_STYLE_HINT_REFLOW.
+ * columns has changed. If it has, we need to reframe; otherwise
+ * we want to reflow.
+ * Ideally, the style hint would be changed back to reflow after the reframe
+ * has been performed. Unfortunately, however, the reframe will be performed
+ * by the call to nsNodeUtils::AttributeChanged, which occurs *after*
+ * AfterSetAttr is called, leaving us with no convenient way of changing the
+ * value back to reflow afterwards. However, nsNodeUtils::AttributeChanged is
+ * effectively the only consumer of this value, so as long as we always set
+ * the value correctly here, we should be fine.
*/
- if (aAttribute == nsGkAtoms::rows && aNameSpaceID == kNameSpaceID_None) {
- int32_t oldRows = mNumRows;
- ParseRowCol(aValue, mNumRows, &mRowSpecs);
+ mCurrentRowColHint = NS_STYLE_HINT_REFLOW;
+ if (aNamespaceID == kNameSpaceID_None) {
+ if (aName == nsGkAtoms::rows) {
+ if (aValue) {
+ int32_t oldRows = mNumRows;
+ ParseRowCol(aValue->String(), mNumRows, &mRowSpecs);
- if (mNumRows != oldRows) {
- mCurrentRowColHint = nsChangeHint_ReconstructFrame;
- }
- } else if (aAttribute == nsGkAtoms::cols &&
- aNameSpaceID == kNameSpaceID_None) {
- int32_t oldCols = mNumCols;
- ParseRowCol(aValue, mNumCols, &mColSpecs);
+ if (mNumRows != oldRows) {
+ mCurrentRowColHint = nsChangeHint_ReconstructFrame;
+ }
+ }
+ } else if (aName == nsGkAtoms::cols) {
+ if (aValue) {
+ int32_t oldCols = mNumCols;
+ ParseRowCol(aValue->String(), mNumCols, &mColSpecs);
- if (mNumCols != oldCols) {
- mCurrentRowColHint = nsChangeHint_ReconstructFrame;
+ if (mNumCols != oldCols) {
+ mCurrentRowColHint = nsChangeHint_ReconstructFrame;
+ }
+ }
}
}
- rv = nsGenericHTMLElement::SetAttr(aNameSpaceID, aAttribute, aPrefix,
- aValue, aNotify);
- mCurrentRowColHint = NS_STYLE_HINT_REFLOW;
-
- return rv;
+ return nsGenericHTMLElement::BeforeSetAttr(aNamespaceID, aName, aValue, aNotify);
}
nsresult