Commit Graph

360 Commits

Author SHA1 Message Date
Edgar Chen
492d02e96b Bug 1685421 - Part 2: Stop using NS_ERROR_DOM_HIERARCHY_REQUEST_ERR in nsINode; r=smaug
Differential Revision: https://phabricator.services.mozilla.com/D113344
2021-06-02 13:43:39 +00:00
Chris Peterson
5ac4034b03 Bug 1691889 - Replace MOZ_MUST_USE with [[nodiscard]] in dom/. r=peterv
The MOZ_MUST_USE macro is defined as clang's and gcc's nonstandard __attribute__((warn_unused_result)). Now that we compile as C++17 by default (bug 1560664), we can replace MOZ_MUST_USE with C++17's standard [[nodiscard]] attribute.

The [[nodiscard]] attribute must precede a function declaration's declaration specifiers (like static, extern, inline, or virtual). The __attribute__((warn_unused_result)) attribute does not have this order restriction.

Differential Revision: https://phabricator.services.mozilla.com/D107355
2021-03-10 08:19:25 +00:00
Emilio Cobos Álvarez
f631db2019 Bug 1682988 - Use UTF8String for querySelector and similar OM methods. r=heycam
This has no observable behavior change because we were converting to
UTF-8 in ParseSelectorList.

Differential Revision: https://phabricator.services.mozilla.com/D99961
2020-12-23 05:42:00 +00:00
Simon Giesecke
498d9ed9dc Bug 1673931 - Avoid including DebuggerNotificationBinding.h from header files. r=nika
Differential Revision: https://phabricator.services.mozilla.com/D97611
2020-12-10 11:09:32 +00:00
Kagami Sascha Rosylight
e7e599f07d Bug 1673837 - Part 3: Create ForEachAncestorObserver() r=smaug
Differential Revision: https://phabricator.services.mozilla.com/D95354
2020-11-10 18:50:00 +00:00
Kagami Sascha Rosylight
a1f57cb34e Bug 1669996 - Do not expose chromeonly nodes via Selection API r=emilio
Differential Revision: https://phabricator.services.mozilla.com/D93258
2020-10-15 20:49:47 +00:00
Narcis Beleuzu
6eb37d4f16 Backed out changeset b85cbc2a47a6 (bug 1669996) for mochitest failure on test_queryCaretRect.html CLOSED TREE 2020-10-13 12:23:51 +03:00
Kagami Sascha Rosylight
a666965a69 Bug 1669996 - Do not expose chromeonly nodes via Selection API r=emilio
Differential Revision: https://phabricator.services.mozilla.com/D93258
2020-10-13 07:30:04 +00:00
Masayuki Nakano
e2dac474f8 Bug 1623918 - part 2: Mark nsINode::GetSelectionRootContent() and its root callers as MOZ_CAN_RUN_SCRIPT as far as possible r=smaug
This patch tries to mark root callers of `nsINode::GetSelectionRootContent()`
which calls `nsINode::GetAnonymousRootElementOfTextEditor()` as far as possible
(and reasonable).

It's used by `ContentEventHandler` so that a lot of methods of
`EventStateManager`, `ContentEventHandler`, `IMEContentObserver` which are main
users of it are also marked as `MOZ_CAN_RUN_SCRIPT`.  I think that this is
reasonable.

On the other hand, it might not be reasonable to mark `IMEStateManager` methods
as `MOZ_CAN_RUN_SCRIPT` for initializing `IMEContentObserver` because
`IMEStateManager` may be able to initialize `IMEContentObserver` asynchronously
and its root callers are in XUL layout code.  Therefore, this patch uses
`MOZ_CAN_RUN_SCRIPT_BOUNDARY` for `IMEStateManager` at least for now.

Differential Revision: https://phabricator.services.mozilla.com/D92730
2020-10-09 02:37:47 +00:00
Masayuki Nakano
73681bea20 Bug 1623918 - part 1: Make nsINode::GetTextEditorRootContent() handle TextControlElement after stopping climbing the DOM tree up r=smaug
It was designed for retrieving associated `TextEditor` and its root content
(anonymous `<div>` element) if the node is in native anonymous subtree in a
text editor or if the node itself is a `TextControlElement`.  Additionally,
`TextControlElement` cannot be nested.  Therefore, it can stop climbing up the
DOM tree when it meets a `TextControlElement`.

Then, we can rewrite this without a loop implemented by itself.  Instead,
it can use `GetClosestNativeAnonymousSubtreeRootParent()` when the node is
in native anonymous subtree.  Otherwise, it just needs to check whether it's
a `TextControlElement` or not.  Therefore, we can make it stop using
`InclusiveAncestorsOfType`.

Finally, it calls `TextControlElement::GetTextEditor()` which is marked as
`MOZ_CAN_RUN_SCRIPT`.  And I think that it may cause running selection
listeners (mutation event listeners won't run because changes occur only in
the native anonymous subtree).  Therefore, we should mark all callers of
it with `MOZ_CAN_RUN_SCRIPT` later.

Differential Revision: https://phabricator.services.mozilla.com/D92728
2020-10-09 02:36:30 +00:00
Narcis Beleuzu
563e13d079 Backed out 2 changesets (bug 1623918) for crashtest failure on 1623918.html CLOSED TREE
Backed out changeset 519ca1b069e5 (bug 1623918)
Backed out changeset d8a09a5fea47 (bug 1623918)
2020-10-08 12:06:58 +03:00
Masayuki Nakano
66cbb9c6c6 Bug 1623918 - part 2: Mark nsINode::GetSelectionRootContent() and its root callers as MOZ_CAN_RUN_SCRIPT as far as possible r=smaug
This patch tries to mark root callers of `nsINode::GetSelectionRootContent()`
which calls `nsINode::GetAnonymousRootElementOfTextEditor()` as far as possible
(and reasonable).

It's used by `ContentEventHandler` so that a lot of methods of
`EventStateManager`, `ContentEventHandler`, `IMEContentObserver` which are main
users of it are also marked as `MOZ_CAN_RUN_SCRIPT`.  I think that this is
reasonable.

On the other hand, it might not be reasonable to mark `IMEStateManager` methods
as `MOZ_CAN_RUN_SCRIPT` for initializing `IMEContentObserver` because
`IMEStateManager` may be able to initialize `IMEContentObserver` asynchronously
and its root callers are in XUL layout code.  Therefore, this patch uses
`MOZ_CAN_RUN_SCRIPT_BOUNDARY` for `IMEStateManager` at least for now.

Differential Revision: https://phabricator.services.mozilla.com/D92730
2020-10-08 03:56:51 +00:00
Masayuki Nakano
4a80f1e088 Bug 1623918 - part 1: Make nsINode::GetTextEditorRootContent() handle TextControlElement after stopping climbing the DOM tree up r=smaug
It was designed for retrieving associated `TextEditor` and its root content
(anonymous `<div>` element) if the node is in native anonymous subtree in a
text editor or if the node itself is a `TextControlElement`.  Additionally,
`TextControlElement` cannot be nested.  Therefore, it can stop climbing up the
DOM tree when it meets a `TextControlElement`.

Then, we can rewrite this without a loop implemented by itself.  Instead,
it can use `GetClosestNativeAnonymousSubtreeRootParent()` when the node is
in native anonymous subtree.  Otherwise, it just needs to check whether it's
a `TextControlElement` or not.  Therefore, we can make it stop using
`InclusiveAncestorsOfType`.

Finally, it calls `TextControlElement::GetTextEditor()` which is marked as
`MOZ_CAN_RUN_SCRIPT`.  And I think that it may cause running selection
listeners (mutation event listeners won't run because changes occur only in
the native anonymous subtree).  Therefore, we should mark all callers of
it with `MOZ_CAN_RUN_SCRIPT` later.

Differential Revision: https://phabricator.services.mozilla.com/D92728
2020-10-08 03:55:29 +00:00
Simon Giesecke
ab6f0a7137 Bug 1650145 - Replace all value uses of Empty[C]String by 0-length _ns literals. r=froydnj,geckoview-reviewers,agi
Differential Revision: https://phabricator.services.mozilla.com/D82325
2020-09-23 15:17:15 +00:00
Masayuki Nakano
622e0d1a98 Bug 1660378 - part 9: Avoid QI for getting nsStyledElement pointer r=smaug
The editor modules does QI too many times when it sets or removes some style
with `execCommand` or XPCOM API.  Therefore, there should be an API to
retrieve `nsStyledElement` pointer from `nsINode*`.

Differential Revision: https://phabricator.services.mozilla.com/D87990
2020-08-26 05:29:06 +00:00
longsonr
39b4bba787 Bug 1658455 - Remove eANIMATION and eFILTER from IsNodeOfType r=dholbert
- eANIMATION is the same as testing for SVGAnimationElement
- eFILTER is the same as testing for SVGFE

Differential Revision: https://phabricator.services.mozilla.com/D86695
2020-08-15 10:38:17 +00:00
longsonr
734e7e5909 Bug 1653858 - Introduce concept of valid target for use elements and use it rather than listing out all elements r=dholbert
Differential Revision: https://phabricator.services.mozilla.com/D84104
2020-08-08 15:47:04 +00:00
Mirko Brodesser
b8617d9e23 Bug 1649121: part 46) Reference spec in nsINode::AppendChild's documentation. r=masayuki
Differential Revision: https://phabricator.services.mozilla.com/D83784
2020-07-17 08:44:40 +00:00
Alex Vincent
1e553e2a8f Bug 1626015 - Implement ParentNode#ReplaceChildren. r=emilio
Differential Revision: https://phabricator.services.mozilla.com/D75891
2020-05-28 00:58:24 +00:00
Razvan Maries
e8c8d40d45 Backed out changeset 004abcb3322e (bug 1626015) for perma failures on idlharness.window.html. CLOSED TREE 2020-05-28 01:23:57 +03:00
Alexander J. Vincent
c97d4d4f2e Bug 1626015 - Implement ParentNode#ReplaceChildren. r=emilio
Differential Revision: https://phabricator.services.mozilla.com/D75891
2020-05-27 18:44:13 +00:00
Emilio Cobos Álvarez
b1fc84a629 Bug 1640605 - Remove IsInAnonymousSubtree / IsRootOfAnonymousSubtree. r=edgar
In favor of the NativeAnonymous versions which they forward to.

Done automatically with:

  rg -l 'IsInAnonymousSubtree' | xargs sed -i 's/IsInAnonymousSubtree/IsInNativeAnonymousSubtree/g'

And removing the function definitions afterwards.

Differential Revision: https://phabricator.services.mozilla.com/D76681
2020-05-25 11:43:51 +00:00
Emilio Cobos Álvarez
8688ceb28a Bug 1639392 - Merge nsIStyleSheetLinkingElement and nsStyleLinkElement, and call it LinkStyle. r=jwatt
Which is the spec term. nsIStyleSheetLinkingElement is even more
confusing since it may not be an element at all (see: processing
instructions).

Differential Revision: https://phabricator.services.mozilla.com/D76071
2020-05-21 03:07:16 +00:00
Olli Pettay
f41ed32728 Bug 1637712 - Consider to move *Ancestor* API to nsINode r=emilio
Differential Revision: https://phabricator.services.mozilla.com/D75169
2020-05-20 14:55:15 +00:00
Mirko Brodesser
f1441f8b58 Bug 1623858: part 1) Rename nsINode::IsSelectionDescendant to nsINode::IsMaybeSelected. r=smaug
More accurate.

Differential Revision: https://phabricator.services.mozilla.com/D67599
2020-03-20 14:27:39 +00:00
Sean Feng
5676e09483 Bug 1377999 - Set nsINode to use the customized new operator r=smaug
We customized the new operator to allow Dom Arena to be hooked
in.

Differential Revision: https://phabricator.services.mozilla.com/D62350
2020-03-17 14:52:47 +00:00
Sean Feng
cfb767c8d3 Bug 1377999 - Handle cross docGroup node adoption by keeping arena alive r=smaug
Differential Revision: https://phabricator.services.mozilla.com/D66662
2020-03-17 14:52:45 +00:00
Boris Zbarsky
3dd9c503fe Bug 1622032. Improve some error messages in nsINode. r=nika
In particular, improve the error message for replaceChild when the two arguments get switched.

Differential Revision: https://phabricator.services.mozilla.com/D66640
2020-03-13 03:50:04 +00:00
Brad Werth
22b36f3377 Bug 1593756 Part 1: Add a new method GetBoxQuadsFromWindowOrigin. r=emilio,hiro
Window space is not a sensible space for CSS points, as returned by
getBoxQuads, since the CSS points are relative to window origin and not the
layout origin. This new method is useful in paired calling patterns, where
the returned quads are further translated by the position of the document
node relative to the window origin. Later parts of this patch demonstrate
this calling pattern in a test.

Differential Revision: https://phabricator.services.mozilla.com/D52788
2020-03-04 00:45:38 +00:00
Christoph Kerschbaumer
ae73f1a2cb Bug 1374612 - CSP: Hide nonce values from the DOM. r=smaug,annevk
Differential Revision: https://phabricator.services.mozilla.com/D62811
2020-02-29 12:35:46 +00:00
shindli
0767c8420c Backed out changeset ec4c2b2a561b (bug 1374612) for causing wpt permafails in /html/dom/reflection-metadata.html CLOSED TREE 2020-02-27 22:46:44 +02:00
Christoph Kerschbaumer
8b9708a5ac Bug 1374612 - CSP: Hide nonce values from the DOM. r=smaug
Differential Revision: https://phabricator.services.mozilla.com/D62811
2020-02-27 18:08:54 +00:00
Dorel Luca
4f94caa31d Backed out changeset 59fe98b41d80 (bug 1374612) for WPT failures in /html/dom/idlharness.https.html. CLOSED TREE 2020-02-27 14:08:48 +02:00
Christoph Kerschbaumer
b27dfad2ee Bug 1374612 - CSP: Hide nonce values from the DOM. r=smaug
Differential Revision: https://phabricator.services.mozilla.com/D62811
2020-02-27 09:32:04 +00:00
Masayuki Nakano
92864600e2 Bug 1613830 - Add nsINode::GetAsElementOrParentElement() r=smaug
This patch assumes that only element node can have content node.  I.e., we
won't hit the following `MOZ_ASSERT`:

```
Element* element = nullptr;
nsIContent* content = aContent;
while (content) {
  if (content->IsElement()) {
    element = content->AsElement();
    break;
  }
  content = content->GetParent();
}
MOZ_ASSERT(!content || content == element || content->GetParent() == element);
```

Differential Revision: https://phabricator.services.mozilla.com/D63308
2020-02-21 02:47:05 +00:00
Erik Nordin
57d2fd53ca Bug 1609288 - Apply styles from adopted stylesheets r=emilio
- Ensure that adopted styles are applied correctly to ShadowRoot
- Ensure that adopted styles are applied correctly to Document
- Add new WPT test cases to ensure the ordering of the styles.

Differential Revision: https://phabricator.services.mozilla.com/D60083
2020-02-15 01:16:46 +00:00
Emilio Cobos Álvarez
606f8a8fbc Bug 1614654 - Simplify property handling during adoption. r=smaug
We don't need to transfer all properties after adopt. Collecting all the nodes
with properties during adopt was needed because there used to be clone and adopt
user-data callbacks, see https://bugzilla.mozilla.org/show_bug.cgi?id=347524.

This ensures that NodeInfoChanged and similar callbacks can tweak node
properties, which is needed for bug 1542784.

Also simplify surrounding code. As far as I can tell we should always have
different documents if we get a NodeInfoManager object.

Differential Revision: https://phabricator.services.mozilla.com/D62439
2020-02-11 16:38:18 +00:00
Emilio Cobos Álvarez
fea80addd7 Bug 1613349 - Rename nsINode::DeleteProperty to RemoveProperty. r=smaug
And the related methods as well.

Differential Revision: https://phabricator.services.mozilla.com/D61768
2020-02-06 16:06:49 +00:00
Emilio Cobos Álvarez
4714f59f93 Bug 1613349 - Rename nsINode::UnsetProperty to nsINode::TakeProperty. r=smaug
For consistency with the previous change for layout.

Depends on D61755

Differential Revision: https://phabricator.services.mozilla.com/D61756
2020-02-05 22:26:20 +00:00
Mirko Brodesser
25cd1fd155 Bug 1609662: part 16) Move nsRange::IsNodeSelected to nsINode::IsSelected. r=smaug
Make it const-correct too.

Differential Revision: https://phabricator.services.mozilla.com/D60643
2020-01-27 09:25:00 +00:00
Mirko Brodesser
863fa8ca6e Bug 1608071: part 3) Rename nsSlots::mCommonAncestorRanges to nsSlots::mClosestCommonInclusiveAncestorRanges. r=smaug
Differential Revision: https://phabricator.services.mozilla.com/D59329
2020-01-13 10:29:56 +00:00
Mirko Brodesser
ae70537c80 Bug 1608071: part 1) Rename common ancestor to closest common inclusive ancestor around nsRange. r=smaug
It's more precise and enables one to reason more clearly about related
code.

Differential Revision: https://phabricator.services.mozilla.com/D59318
2020-01-13 10:29:31 +00:00
Gabriele Svelto
eb403b8785 Bug 1600545 - Remove useless inclusions of header files generated from IDL files in dom/ r=Ehsan
The inclusions were removed with the following very crude script and the
resulting breakage was fixed up by hand. The manual fixups did either
revert the changes done by the script, replace a generic header with a more
specific one or replace a header with a forward declaration.

find . -name "*.idl" | grep -v web-platform | grep -v third_party | while read path; do
    interfaces=$(grep "^\(class\|interface\).*:.*" "$path" | cut -d' ' -f2)
    if [ -n "$interfaces" ]; then
        if [[ "$interfaces" == *$'\n'* ]]; then
          regexp="\("
          for i in $interfaces; do regexp="$regexp$i\|"; done
          regexp="${regexp%%\\\|}\)"
        else
          regexp="$interfaces"
        fi
        interface=$(basename "$path")
        rg -l "#include.*${interface%%.idl}.h" . | while read path2; do
            hits=$(grep -v "#include.*${interface%%.idl}.h" "$path2" | grep -c "$regexp" )
            if [ $hits -eq 0 ]; then
                echo "Removing ${interface} from ${path2}"
                grep -v "#include.*${interface%%.idl}.h" "$path2" > "$path2".tmp
                mv -f "$path2".tmp "$path2"
            fi
        done
    fi
done

Differential Revision: https://phabricator.services.mozilla.com/D55442
2019-12-06 09:24:56 +00:00
Dorel Luca
67889e1013 Backed out changeset f6e53d1c6518 (bug 1600545) for Android build bustage. CLOSED TREE 2019-12-04 17:32:27 +02:00
Gabriele Svelto
dc6fa2e86c Bug 1600545 - Remove useless inclusions of header files generated from IDL files in dom/ r=Ehsan
The inclusions were removed with the following very crude script and the
resulting breakage was fixed up by hand. The manual fixups did either
revert the changes done by the script, replace a generic header with a more
specific one or replace a header with a forward declaration.

find . -name "*.idl" | grep -v web-platform | grep -v third_party | while read path; do
    interfaces=$(grep "^\(class\|interface\).*:.*" "$path" | cut -d' ' -f2)
    if [ -n "$interfaces" ]; then
        if [[ "$interfaces" == *$'\n'* ]]; then
          regexp="\("
          for i in $interfaces; do regexp="$regexp$i\|"; done
          regexp="${regexp%%\\\|}\)"
        else
          regexp="$interfaces"
        fi
        interface=$(basename "$path")
        rg -l "#include.*${interface%%.idl}.h" . | while read path2; do
            hits=$(grep -v "#include.*${interface%%.idl}.h" "$path2" | grep -c "$regexp" )
            if [ $hits -eq 0 ]; then
                echo "Removing ${interface} from ${path2}"
                grep -v "#include.*${interface%%.idl}.h" "$path2" > "$path2".tmp
                mv -f "$path2".tmp "$path2"
            fi
        done
    fi
done

Differential Revision: https://phabricator.services.mozilla.com/D55442
2019-12-04 15:01:19 +00:00
Sylvestre Ledru
0f8c6db00f Bug 1519636 - Reformat recent changes to the Google coding style r=Ehsan
# ignore-this-changeset

Differential Revision: https://phabricator.services.mozilla.com/D54686
2019-11-26 14:35:02 +00:00
Masayuki Nakano
16fa2f8998 Bug 1597679 - part 2: Make nsITextControlElement inherit nsGenericHTMLFormElementWithState r=smaug
Sub classes of `nsITextControlElement` are only `HTMLInputElement` and
`HTMLTextAreaElement`. And both base class is
`nsGenericHTMLFormElementWithState`.  Therefore, we can make
`nsITextControlElement` inherit `nsGenericHTMLFormElementWithState` and
make `HTMLInputElement` and `HTMLTextAreaElement` inherit
`nsITextControlElement`.  Then, we can get rid of a lot of QI between
`nsINode`/`nsIContent`/`Element` and `nsITextControlElement` (and note that
some of them in a hot path).

Additionally, this patch renames `nsITextControlElement` to
`mozilla::TextControlElement`.

Differential Revision: https://phabricator.services.mozilla.com/D54330
2019-11-25 06:35:15 +00:00
Coroiu Cristina
46945eade0 Backed out 3 changesets (bug 1597679) for Android debug build bustage at build/src/dom/base/nsContentAreaDragDrop.cpp
Backed out changeset 6a73b58e0db4 (bug 1597679)
Backed out changeset 90a172eff2de (bug 1597679)
Backed out changeset d4a156cf28ff (bug 1597679)
2019-11-24 09:02:53 +02:00
Masayuki Nakano
018bf53100 Bug 1597679 - part 2: Make nsITextControlElement inherit nsGenericHTMLFormElementWithState r=smaug
Sub classes of `nsITextControlElement` are only `HTMLInputElement` and
`HTMLTextAreaElement`. And both base class is
`nsGenericHTMLFormElementWithState`.  Therefore, we can make
`nsITextControlElement` inherit `nsGenericHTMLFormElementWithState` and
make `HTMLInputElement` and `HTMLTextAreaElement` inherit
`nsITextControlElement`.  Then, we can get rid of a lot of QI between
`nsINode`/`nsIContent`/`Element` and `nsITextControlElement` (and note that
some of them in a hot path).

Additionally, this patch renames `nsITextControlElement` to
`mozilla::TextControlElement`.

Differential Revision: https://phabricator.services.mozilla.com/D54330
2019-11-24 05:38:02 +00:00
Emilio Cobos Álvarez
7816f654e9 Bug 1597123 - Remove NODE_IS_ANONYMOUS_ROOT. r=smaug
We no longer have multiple kinds of anonymous subtrees, so we can get back one
node bit.

Differential Revision: https://phabricator.services.mozilla.com/D53344
2019-11-18 08:49:27 +00:00