Files
palemoon27/dom/base/nsIMutationObserver.h
T
roytam1 5e85317f94 import changes from `dev' branch of rmottola/Arctic-Fox:
- Bug 1214048 - Improve callee-not-a-function error for spread calls. (r=jorendorff) (f47489e821)
- Bug 1202561 - Mark no-longer-used constants in jsversion.h. r=jorendorff. (dd9a29e777)
- Bug 995610 - Part 0: Add release property to getBuildConfiguration(). r=evilpie (9aff95b34a)
- Bug 995610 - Part 1: Show deprecated warning for expression closure. r=evilpie (740af95e85)
- Bug 1167029 - Followup: remove now-unused DeprecatedLetBlock telemetry. (rs=efaust) (dc3293d70f)
- Bug 1201740 - Prevent interception if the request is a System XHR. r=bkelly (eea213dcc2)
- Bug 1182571: Make nsXMLHttpRequest use AsyncOpen2. r=ehsan (15089bb64b)
- Back out bug 1149127 because of Thunderbird insanity (2047b66990)
- Bug 1187404 - Allow tab to select an option from a select element in e10s r=Enn (e2c98e7c0f)
- Mac v2 signing - Bug 1047738 - Make distribution code look for the distribution directory under Contents/Resources due to v2 signing requirements. r=bsmedberg # Please enter the commit message for your changes. Lines starting (4d6f19f952)
- Bug 1176703 - load default theme manifest in safe mode, r=bsmedberg (374f8f6ca3)
- misc path and import fixes (4547430310)
- bug 1174704 - Implement GetUserDataDirectoryHome for iOS. r=froydnj (886abeed30)
- Bug 1177819. Replace the warning about anon content being passed into frame construction with an assert plus whitelisting of the known-OK cases. r=dholbert (9d9354f0af)
- Bug 1034110 - Provide a way to observe mutations for ::before/::after pseudo elements;r=smaug (48560d44b6)
- Bug 1205635: Don't define methods of Bluetooth backend interfaces in header, r=btian (a30773e87e)
- Bug 1181482 - Patch1: Refine some data types in gecko backend for GATT server read/write request APIs. r=btian (12921ff365)
- Bug 1181479: Refine StringToUuid; r=jocelyn (68ca54278a)
- Bug 1181479: Refine GenerateUuid(); r=jocelyn (dd91af86c9)
- Bug 1140952 - Implement read/write value of a descriptor for GATT client API (webapi part). f=jocelyn, r=btian, r=mrbkap (276d63e128)
- misspatch (87e07ca21f)
- Bug 1181479: Implement GATT Server service management; r=jocelyn, r=mrbkap (1abb22088d)
- Bug 1161939 - Correct bitwise checking on GATT characteristic write properties. r=jocelyn (fd0c6f1358)
- Bug 1181482 - Patch2: Revise read/write characteristic/descriptor value to cover both GATT client and GATT server role. r=btian, r=bz (658efbd941)
- Bug 1181479: Sync the coding style; r=jocelyn (ab0f1509c1)
- Bug 1181482 - Patch3: Implement |sendResponse| and BluetoothGattAttributeEvent for GATT server read/write requests. r=btian, r=bz (c50c93a6a3)
- Bug 1211140 - Remove telemetry for RegExpSourceProperty. r=till (faa512402e)
- Bug 1208835 - Add telemetry for RegExp static property access after String.prototype.replace with function argument and RegExp static property is changed inside it. r=till,bsmedberg (c412b13e4c)
- Bug 683218 - Remove non-standard __noSuchMethod__ feature. r=efaust (a3a567d797)
- Bug 1201460: Disallow asm.js compilation for class/methods; r=luke (963644c32f)
- Bug 1214013 - Remove drainGlobalOrEvalBindings and use generateBindings for all kinds of scripts. (r=efaust) (338778ce73)
- Bug 1214050 - Don't give overwritten non-deoptimized function bindings slots in global scripts. (r=efaust) (3e95d0ba46)
- Bug 1214013 - Parse global scripts non-incrementally. (r=efaust) (33a378413b)
- Bug 1214013 - Remove funky Maybe<ParseContext> logic in BytecodeCompiler. (r=efaust) (0f02d0e3da)
- Bug 1212719 - Throw SyntaxError immediately for unexpected TOK_TRIPLEDOT. r=Waldo (769ab2403d)
- Bug 1218204 - Remove else after return from Parser<ParseHandler>::maybeParseDirective. r=arai (519b748a63)
- Bug 1216966 - Part 1: Splurge and use separate error messages for generator comprehensions that need more parentheses and yield expressions that need more parentheses. r=efaust. (fcb6b0a5d2)
- Bug 1216966 - Part 2: Tweak a comment about comprehension syntax. r=efaust. (59670db722)
- Bug 1216966 - Part 3: Remove redundant method Parser::parenExprOrGeneratorComprehension. r=efaust. (e2a5d76e35)
- Bug 1216966 - Part 4: Update a big comment about for-loops in Parser.cpp. r=efaust. (ac28e492db)
- Bug 1216966 - Part 5: Code organization and comments around parsing comprehensions. r=efaust. (e5533b379b)
- Bug 1216623 - Part 1: Rename some loop variables to avoid conflicts with ES6 scoping rules. r=fitzgen, r=ttaubert, r=MattN, r=gps. (daf7d973b0)
- Bug 932517 - Treat let as a contextual keyword in sloppy mode and make it versionless. (r=jorendorff) (c95a8c115f)
- align to TFF (e27ad0cc42)
- Bug 1217001 - Refactor BytecodeEmitter::variables. Part 1: preliminaries. r=shu. (dad313be3e)
- Bug 1217001 - Part 2: Rename two local variables and improve some old comments. r=shu. (8f050c8d34)
- Bug 1217001 - Part 3: Remove one goto statement. r=shu. (6ff8f4d4de)
- Bug 1217001 - Part 4: Improve the comments on VarEmitOption. r=shu. (6396585f04)
- Bug 1217001 - Part 5: Further revise control structure in BytecodeEmitter::emitVariables(). r=shu. (e671d81923)
- Bug 1217001 - Part 6: Eliminate some continue statements. r=shu. (80a7767e89)
- Bug 1217001 - Part 7: Change BytecodeEmitter::emitNormalFor() to decouple it from weird expectations about BytecodeEmitter::emitVariables(). r=shu. (557a9249a8)
- Bug 1217001 - Part 8: Eliminate all uses of PNX_POPVAR. r=shu. (c9c27b5072)
- Bug 1217001 - Part 9: Remove PNX_POPVAR. r=shu. (012e716653)
- Bug 1217001 - Part 10: Delete redundant boolean argument. r=shu. (5f528ed198)
- Bug 1217001 - Part 11: Get rid of the last goto in BytecodeEmitter::emitVariables(). r=shu. (0d11883f9e)
- Fix a broken JS test. It landed in rev 093802a6d8ae (bug 1003554) and was apparently fine until it was merged to m-c/m-i, where it probably collided with rev bug 1217099 or bug 1217001. no_r=bustage to a CLOSED TREE. (12470085c8)
- Bug 1217099 - Stop emitting pointless JSOP_GETLOCAL; JSOP_POP bytecode sequence for `var x;`. r=shu. (9c69ca3bd3)
-  Bug 1217110 - Remove unnecessary opcode JSOP_BINDINTRINSIC. r=shu. (58e4f74fd1)
2022-10-27 08:50:13 +08:00

483 lines
23 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 nsIMutationObserver_h
#define nsIMutationObserver_h
#include "nsISupports.h"
class nsAttrValue;
class nsIAtom;
class nsIContent;
class nsIDocument;
class nsINode;
namespace mozilla {
namespace dom {
class Element;
} // namespace dom
} // namespace mozilla
#define NS_IMUTATION_OBSERVER_IID \
{ 0x6d674c17, 0x0fbc, 0x4633, \
{ 0x8f, 0x46, 0x73, 0x4e, 0x87, 0xeb, 0xf0, 0xc7 } }
/**
* Information details about a characterdata change. Basically, we
* view all changes as replacements of a length of text at some offset
* with some other text (of possibly some other length).
*/
struct CharacterDataChangeInfo
{
/**
* True if this character data change is just an append.
*/
bool mAppend;
/**
* The offset in the text where the change occurred.
*/
uint32_t mChangeStart;
/**
* The offset such that mChangeEnd - mChangeStart is equal to the length of
* the text we removed. If this was a pure insert or append, this is equal to
* mChangeStart.
*/
uint32_t mChangeEnd;
/**
* The length of the text that was inserted in place of the removed text. If
* this was a pure text removal, this is 0.
*/
uint32_t mReplaceLength;
/**
* The net result is that mChangeStart characters at the beginning of the
* text remained as they were. The next mChangeEnd - mChangeStart characters
* were removed, and mReplaceLength characters were inserted in their place.
* The text that used to begin at mChangeEnd now begins at
* mChangeStart + mReplaceLength.
*/
struct Details {
enum {
eMerge, // two text nodes are merged as a result of normalize()
eSplit // a text node is split as a result of splitText()
} mType;
/**
* For eMerge it's the text node that will be removed, for eSplit it's the
* new text node.
*/
nsIContent* mNextSibling;
};
/**
* Used for splitText() and normalize(), otherwise null.
*/
Details* mDetails;
};
/**
* Mutation observer interface
*
* See nsINode::AddMutationObserver, nsINode::RemoveMutationObserver for how to
* attach or remove your observers.
*
* WARNING: During these notifications, you are not allowed to perform
* any mutations to the current or any other document, or start a
* network load. If you need to perform such operations do that
* during the _last_ nsIDocumentObserver::EndUpdate notification. The
* expection for this is ParentChainChanged, where mutations should be
* done from an async event, as the notification might not be
* surrounded by BeginUpdate/EndUpdate calls.
*/
class nsIMutationObserver : public nsISupports
{
public:
NS_DECLARE_STATIC_IID_ACCESSOR(NS_IMUTATION_OBSERVER_IID)
/**
* Notification that the node value of a data node (text, cdata, pi, comment)
* will be changed.
*
* This notification is not sent when a piece of content is
* added/removed from the document (the other notifications are used
* for that).
*
* @param aDocument The owner-document of aContent. Can be null.
* @param aContent The piece of content that changed. Is never null.
* @param aInfo The structure with information details about the change.
*
* @note Callers of this method might not hold a strong reference to the
* observer. The observer is responsible for making sure it stays
* alive for the duration of the call as needed. The observer may
* assume that this call will happen when there are script blockers on
* the stack.
*/
virtual void CharacterDataWillChange(nsIDocument *aDocument,
nsIContent* aContent,
CharacterDataChangeInfo* aInfo) = 0;
/**
* Notification that the node value of a data node (text, cdata, pi, comment)
* has changed.
*
* This notification is not sent when a piece of content is
* added/removed from the document (the other notifications are used
* for that).
*
* @param aDocument The owner-document of aContent. Can be null.
* @param aContent The piece of content that changed. Is never null.
* @param aInfo The structure with information details about the change.
*
* @note Callers of this method might not hold a strong reference to the
* observer. The observer is responsible for making sure it stays
* alive for the duration of the call as needed. The observer may
* assume that this call will happen when there are script blockers on
* the stack.
*/
virtual void CharacterDataChanged(nsIDocument *aDocument,
nsIContent* aContent,
CharacterDataChangeInfo* aInfo) = 0;
/**
* Notification that an attribute of an element will change. This
* can happen before the BeginUpdate for the change and may not
* always be followed by an AttributeChanged (in particular, if the
* attribute doesn't actually change there will be no corresponding
* AttributeChanged).
*
* @param aDocument The owner-document of aContent. Can be null.
* @param aContent The element whose attribute will change
* @param aNameSpaceID The namespace id of the changing attribute
* @param aAttribute The name of the changing attribute
* @param aModType Whether or not the attribute will be added, changed, or
* removed. The constants are defined in
* nsIDOMMutationEvent.h.
* @param aNewValue The new value, IF it has been preparsed by
* BeforeSetAttr, otherwise null.
*
* @note Callers of this method might not hold a strong reference to the
* observer. The observer is responsible for making sure it stays
* alive for the duration of the call as needed. The observer may
* assume that this call will happen when there are script blockers on
* the stack.
*/
virtual void AttributeWillChange(nsIDocument* aDocument,
mozilla::dom::Element* aElement,
int32_t aNameSpaceID,
nsIAtom* aAttribute,
int32_t aModType,
const nsAttrValue* aNewValue) = 0;
/**
* Notification that an attribute of an element has changed.
*
* @param aDocument The owner-document of aContent. Can be null.
* @param aElement The element whose attribute changed
* @param aNameSpaceID The namespace id of the changed attribute
* @param aAttribute The name of the changed attribute
* @param aModType Whether or not the attribute was added, changed, or
* removed. The constants are defined in
* nsIDOMMutationEvent.h.
* @param aOldValue The old value, if either the old value or the new
* value are StoresOwnData() (or absent); null otherwise.
*
* @note Callers of this method might not hold a strong reference to the
* observer. The observer is responsible for making sure it stays
* alive for the duration of the call as needed. The observer may
* assume that this call will happen when there are script blockers on
* the stack.
*/
virtual void AttributeChanged(nsIDocument* aDocument,
mozilla::dom::Element* aElement,
int32_t aNameSpaceID,
nsIAtom* aAttribute,
int32_t aModType,
const nsAttrValue* aOldValue) = 0;
/**
* Notification that the root of a native anonymous has been added
* or removed.
*
* @param aDocument Owner doc of aContent
* @param aContent Anonymous node that's been added or removed
* @param aIsRemove True if it's a removal, false if an addition
*/
virtual void NativeAnonymousChildListChange(nsIDocument* aDocument,
nsIContent* aContent,
bool aIsRemove) {}
/**
* Notification that an attribute of an element has been
* set to the value it already had.
*
* @param aDocument The owner-document of aContent.
* @param aElement The element whose attribute changed
* @param aNameSpaceID The namespace id of the changed attribute
* @param aAttribute The name of the changed attribute
*/
virtual void AttributeSetToCurrentValue(nsIDocument* aDocument,
mozilla::dom::Element* aElement,
int32_t aNameSpaceID,
nsIAtom* aAttribute) {}
/**
* Notification that one or more content nodes have been appended to the
* child list of another node in the tree.
*
* @param aDocument The owner-document of aContent. Can be null.
* @param aContainer The container that had new children appended. Is never
* null.
* @param aFirstNewContent the node at aIndexInContainer in aContainer.
* @param aNewIndexInContainer the index in the container of the first
* new child
*
* @note Callers of this method might not hold a strong reference to the
* observer. The observer is responsible for making sure it stays
* alive for the duration of the call as needed. The observer may
* assume that this call will happen when there are script blockers on
* the stack.
*/
virtual void ContentAppended(nsIDocument *aDocument,
nsIContent* aContainer,
nsIContent* aFirstNewContent,
int32_t aNewIndexInContainer) = 0;
/**
* Notification that a content node has been inserted as child to another
* node in the tree.
*
* @param aDocument The owner-document of aContent, or, when aContainer
* is null, the container that had the child inserted.
* Can be null.
* @param aContainer The container that had new a child inserted. Can be
* null to indicate that the child was inserted into
* aDocument
* @param aChild The newly inserted child.
* @param aIndexInContainer The index in the container of the new child.
*
* @note Callers of this method might not hold a strong reference to the
* observer. The observer is responsible for making sure it stays
* alive for the duration of the call as needed. The observer may
* assume that this call will happen when there are script blockers on
* the stack.
*/
virtual void ContentInserted(nsIDocument *aDocument,
nsIContent* aContainer,
nsIContent* aChild,
int32_t aIndexInContainer) = 0;
/**
* Notification that a content node has been removed from the child list of
* another node in the tree.
*
* @param aDocument The owner-document of aContent, or, when aContainer
* is null, the container that had the child removed.
* Can be null.
* @param aContainer The container that had new a child removed. Can be
* null to indicate that the child was removed from
* aDocument.
* @param aChild The child that was removed.
* @param aIndexInContainer The index in the container which the child used
* to have.
* @param aPreviousSibling The previous sibling to the child that was removed.
* Can be null if there was no previous sibling.
*
* @note Callers of this method might not hold a strong reference to the
* observer. The observer is responsible for making sure it stays
* alive for the duration of the call as needed. The observer may
* assume that this call will happen when there are script blockers on
* the stack.
*/
virtual void ContentRemoved(nsIDocument *aDocument,
nsIContent* aContainer,
nsIContent* aChild,
int32_t aIndexInContainer,
nsIContent* aPreviousSibling) = 0;
/**
* The node is in the process of being destroyed. Calling QI on the node is
* not supported, however it is possible to get children and flags through
* nsINode as well as calling IsNodeOfType(eCONTENT) and casting to
* nsIContent to get attributes.
*
* NOTE: This notification is only called on observers registered directly
* on the node. This is because when the node is destroyed it can not have
* any ancestors. If you want to know when a descendant node is being
* removed from the observed node, use the ContentRemoved notification.
*
* @param aNode The node being destroyed.
*
* @note Callers of this method might not hold a strong reference to
* the observer. The observer is responsible for making sure it
* stays alive for the duration of the call as needed.
*/
virtual void NodeWillBeDestroyed(const nsINode *aNode) = 0;
/**
* Notification that the node's parent chain has changed. This
* happens when either the node or one of its ancestors is inserted
* or removed as a child of another node.
*
* Note that when a node is inserted this notification is sent to
* all descendants of that node, since all such nodes have their
* parent chain changed.
*
* @param aContent The piece of content that had its parent changed.
*
* @note Callers of this method might not hold a strong reference to
* the observer. The observer is responsible for making sure it
* stays alive for the duration of the call as needed.
*/
virtual void ParentChainChanged(nsIContent *aContent) = 0;
};
NS_DEFINE_STATIC_IID_ACCESSOR(nsIMutationObserver, NS_IMUTATION_OBSERVER_IID)
#define NS_DECL_NSIMUTATIONOBSERVER_CHARACTERDATAWILLCHANGE \
virtual void CharacterDataWillChange(nsIDocument* aDocument, \
nsIContent* aContent, \
CharacterDataChangeInfo* aInfo) override;
#define NS_DECL_NSIMUTATIONOBSERVER_CHARACTERDATACHANGED \
virtual void CharacterDataChanged(nsIDocument* aDocument, \
nsIContent* aContent, \
CharacterDataChangeInfo* aInfo) override;
#define NS_DECL_NSIMUTATIONOBSERVER_ATTRIBUTEWILLCHANGE \
virtual void AttributeWillChange(nsIDocument* aDocument, \
mozilla::dom::Element* aElement, \
int32_t aNameSpaceID, \
nsIAtom* aAttribute, \
int32_t aModType, \
const nsAttrValue* aNewValue) override;
#define NS_DECL_NSIMUTATIONOBSERVER_NATIVEANONYMOUSCHILDLISTCHANGE \
virtual void NativeAnonymousChildListChange(nsIDocument* aDocument, \
nsIContent* aContent, \
bool aIsRemove) override;
#define NS_DECL_NSIMUTATIONOBSERVER_ATTRIBUTECHANGED \
virtual void AttributeChanged(nsIDocument* aDocument, \
mozilla::dom::Element* aElement, \
int32_t aNameSpaceID, \
nsIAtom* aAttribute, \
int32_t aModType, \
const nsAttrValue* aOldValue) override;
#define NS_DECL_NSIMUTATIONOBSERVER_CONTENTAPPENDED \
virtual void ContentAppended(nsIDocument* aDocument, \
nsIContent* aContainer, \
nsIContent* aFirstNewContent, \
int32_t aNewIndexInContainer) override;
#define NS_DECL_NSIMUTATIONOBSERVER_CONTENTINSERTED \
virtual void ContentInserted(nsIDocument* aDocument, \
nsIContent* aContainer, \
nsIContent* aChild, \
int32_t aIndexInContainer) override;
#define NS_DECL_NSIMUTATIONOBSERVER_CONTENTREMOVED \
virtual void ContentRemoved(nsIDocument* aDocument, \
nsIContent* aContainer, \
nsIContent* aChild, \
int32_t aIndexInContainer, \
nsIContent* aPreviousSibling) override;
#define NS_DECL_NSIMUTATIONOBSERVER_NODEWILLBEDESTROYED \
virtual void NodeWillBeDestroyed(const nsINode* aNode) override;
#define NS_DECL_NSIMUTATIONOBSERVER_PARENTCHAINCHANGED \
virtual void ParentChainChanged(nsIContent *aContent) override;
#define NS_DECL_NSIMUTATIONOBSERVER \
NS_DECL_NSIMUTATIONOBSERVER_CHARACTERDATAWILLCHANGE \
NS_DECL_NSIMUTATIONOBSERVER_CHARACTERDATACHANGED \
NS_DECL_NSIMUTATIONOBSERVER_ATTRIBUTEWILLCHANGE \
NS_DECL_NSIMUTATIONOBSERVER_NATIVEANONYMOUSCHILDLISTCHANGE \
NS_DECL_NSIMUTATIONOBSERVER_ATTRIBUTECHANGED \
NS_DECL_NSIMUTATIONOBSERVER_CONTENTAPPENDED \
NS_DECL_NSIMUTATIONOBSERVER_CONTENTINSERTED \
NS_DECL_NSIMUTATIONOBSERVER_CONTENTREMOVED \
NS_DECL_NSIMUTATIONOBSERVER_NODEWILLBEDESTROYED \
NS_DECL_NSIMUTATIONOBSERVER_PARENTCHAINCHANGED
#define NS_IMPL_NSIMUTATIONOBSERVER_CORE_STUB(_class) \
void \
_class::NodeWillBeDestroyed(const nsINode* aNode) \
{ \
}
#define NS_IMPL_NSIMUTATIONOBSERVER_CONTENT(_class) \
void \
_class::CharacterDataWillChange(nsIDocument* aDocument, \
nsIContent* aContent, \
CharacterDataChangeInfo* aInfo) \
{ \
} \
void \
_class::CharacterDataChanged(nsIDocument* aDocument, \
nsIContent* aContent, \
CharacterDataChangeInfo* aInfo) \
{ \
} \
void \
_class::AttributeWillChange(nsIDocument* aDocument, \
mozilla::dom::Element* aElement, \
int32_t aNameSpaceID, \
nsIAtom* aAttribute, \
int32_t aModType, \
const nsAttrValue* aNewValue) \
{ \
} \
void \
_class::NativeAnonymousChildListChange(nsIDocument* aDocument, \
nsIContent* aContent, \
bool aIsRemove) \
{ \
} \
void \
_class::AttributeChanged(nsIDocument* aDocument, \
mozilla::dom::Element* aElement, \
int32_t aNameSpaceID, \
nsIAtom* aAttribute, \
int32_t aModType, \
const nsAttrValue* aOldValue) \
{ \
} \
void \
_class::ContentAppended(nsIDocument* aDocument, \
nsIContent* aContainer, \
nsIContent* aFirstNewContent, \
int32_t aNewIndexInContainer) \
{ \
} \
void \
_class::ContentInserted(nsIDocument* aDocument, \
nsIContent* aContainer, \
nsIContent* aChild, \
int32_t aIndexInContainer) \
{ \
} \
void \
_class::ContentRemoved(nsIDocument* aDocument, \
nsIContent* aContainer, \
nsIContent* aChild, \
int32_t aIndexInContainer, \
nsIContent* aPreviousSibling) \
{ \
} \
void \
_class::ParentChainChanged(nsIContent *aContent) \
{ \
}
#endif /* nsIMutationObserver_h */