Commit Graph

47 Commits

Author SHA1 Message Date
Boris Zbarsky
02774793c2 Bug 1377980 part 2. Remove most C++ use of nsIDOMRange. r=mccr8 2018-05-17 12:01:38 -04:00
Boris Zbarsky
5d017f96cf Bug 1387143 part 29. Remove nsISelection. r=mats 2018-05-08 13:52:42 -04:00
Boris Zbarsky
deb12f1f80 Bug 1387143 part 28. Remove nsISelection::AsSelection(). r=mats 2018-05-08 13:52:42 -04:00
Boris Zbarsky
bcab2c9f4c Bug 1387143 part 27. Remove some unused nsISelection methods. r=mats 2018-05-08 13:52:42 -04:00
Boris Zbarsky
51ab63aa51 Bug 1387143 part 26. Remove nsISelection::Modify. r=mats 2018-05-08 13:52:42 -04:00
Boris Zbarsky
855d49e122 Bug 1387143 part 25. Remove nsISelection::DeleteFromDocument. r=mats 2018-05-08 13:52:42 -04:00
Boris Zbarsky
586f4fc92c Bug 1387143 part 24. Remove nsISelection::ContainsNode. r=mats 2018-05-08 13:52:42 -04:00
Boris Zbarsky
87fdbf744c Bug 1387143 part 23. Remove nsISelection collapse* methods. r=mats 2018-05-08 13:52:41 -04:00
Boris Zbarsky
3d7e344fa9 Bug 1387143 part 20. Remove nsISelectionPrivate. r=mats 2018-05-08 13:52:38 -04:00
Boris Zbarsky
3a63497f5f Bug 1387143 part 19. Remove remaining methods from nsISelectionPrivate. r=mats 2018-05-08 13:52:38 -04:00
Boris Zbarsky
682fac60a9 Bug 1387143 part 17. Remove GetRangesForInterval bits from nsISelectionPrivate. r=mats 2018-05-08 13:52:38 -04:00
Boris Zbarsky
170f0b5380 Bug 1387143 part 14. Remove nsISelectionPrivate::GetCachedFrameOffset. r=mats. 2018-05-08 13:52:37 -04:00
Boris Zbarsky
9b0537eabf Bug 1387143 part 13. Remove nsISelectionPrivate::Get/SetCanCacheFrameOffset. r=mats 2018-05-08 13:52:37 -04:00
Boris Zbarsky
50bb8b276c Bug 1387143 part 12. Remove nsISelectionPrivate::Add/RemoveSelectionListener. r=mats
None of the C++ callers of RemoveSelectionListener care about whether the
listener was already-added, and the only JS caller is in a test and knows the
listener was added.  So the behavior change to no-op instead of throwing when
trying to remove a nonexistent listener is OK.  Furthermore, the removal is
null-safe, so there's no point to explicitly failing if null is passed (which
it never is).

Since content can't directly add selection listeners, we can just use an
infallible append instead of returning errors callers don't check for anyway.

Also, no one passes null to AddSelectionListener, so we don't have to worry
about that part.
2018-05-08 13:52:37 -04:00
Boris Zbarsky
4576949e36 Bug 1387143 part 11. Support non-XPCOM weakreference on Selection. r=mats
This way we don't have to deal with QI to get a Selection out of a weakref.

mfbt weakrefs don't have a SizeOfOnlyThis.  In any case, the memory used by the
weakref itself is pretty minor...
2018-05-08 13:52:37 -04:00
Boris Zbarsky
7a57b66cbc Bug 1387143 part 9. Remove nsISelectionPrivate::Get/SetAncestorLimiter. r=mats 2018-05-08 13:52:37 -04:00
Boris Zbarsky
9f543072ec Bug 1387143 part 7. Move the TABLESELECTION_* constants from nsISelectionPrivate to a TableSelection enum. r=mats 2018-05-08 13:52:36 -04:00
Edgar Chen
d9444e4dd3 Bug 1422197 - Add fast path to get DocGroup in binding code for [CEReactions]; r=smaug
MozReview-Commit-ID: HgbFo9ddr0o
2017-11-27 16:10:27 +08:00
Masayuki Nakano
8ab1148ceb Bug 1423097 - part 1: Implement Selection::AnchorRef() and Selection::FocusRef() r=smaug
Some methods of editor retrieves anchor and focus of selection.  However, there
are no methods which directly access RangeBoundary of anchor and focus.

This patch adds it for making editor code simpler and avoiding unnecessary
child offset computation.

MozReview-Commit-ID: EvepQpFMi8S
2017-12-05 16:36:57 +09:00
Ting-Yu Lin
33e687a270 Bug 1417376 Part 2 - Pass nsPoint parameters by const references instead of references. r=mats
MozReview-Commit-ID: 6TveqwkOvc0
2017-11-15 18:26:10 +08:00
Ting-Yu Lin
e0c3800401 Bug 1417376 Part 1 - Change nsPoint parameter to pass by value for DoAutoScroll(). r=mats
This private method DoAutoScroll() modifies aPoint inside of it, and none of
other callers (StartAutoScrollTimer() and nsAutoScrollTimer::Notify()) read
aPoint afterwards, so we make aPoint pass by value rather than pass by
non-const-reference. This is necessary for later parts.

MozReview-Commit-ID: 9PtxFXIka7X
2017-11-16 10:32:22 +08:00
Masayuki Nakano
259bd18669 Bug 1415062 - part 1: Selection should have Collapse(const RawRangeBoundary&) and Collapse(const RawRangeBoundary&, ErrorResult&) for avoiding computing offset of child node in container r=smaug
Selection should have Collapse() methods which take RawRangeBoundary instead of
a set of container and offset in it.  Then, if caller know only child node but
doesn't know offset in the container, neither callers, Selections nor nsRange
needs to compute offset.  This makes them avoid calling expensive method,
nsINode::IndexOf().

MozReview-Commit-ID: 79IRajLe1FE
2017-11-07 15:29:15 +09:00
Andrew McCreight
2c2e9cbbbe Bug 1412125, part 2 - Fix dom/ mode lines. r=qdot
This was automatically generated by the script modeline.py.

MozReview-Commit-ID: BgulzkGteAL
2017-10-26 15:08:41 -07:00
Ehsan Akhgari
03e7774322 Bug 1405039 - Avoid using nsINode::GetChildAt() in HTMLEditor::GetSelectedElement(); r=masayuki 2017-10-02 14:22:57 -04:00
Andrew McCreight
74e46bb00c Bug 1216885 - Make nsISelectionPrivate not inherit from nsISelection. r=smaug
nsISelectionPrivate is accessible to script, while nsISelection is
not, so making the former inherit from the latter means script doesn't
have a complete view of the inheritance chain so the XPIDL compiler
produces an error.

It turns out that nothing in script relies on this inheritance, which
makes sense because I'm not sure how it would even work, so just
remove it.

MozReview-Commit-ID: 3Py2T7cprlD
2017-09-11 15:19:22 -07:00
Makoto Kato
570723bb86 Bug 1397791 - Move StartBatchChanges and EndBatchChanges from nsISelectionPrivate to Selection. r=smaug
There is no reason to keep StartBatchChanges and EndBatchChanges in nsISelectionPrivate since this is noscript method.  And if moving it to Selection, we can remove virtual keyword.

MozReview-Commit-ID: Go6njiW3r2x
2017-09-08 12:10:44 +09:00
Ehsan Akhgari
e1ad1c9215 Bug 1397577 - Avoid using GetChildAt() in HTMLEditor::GetSelectedOrParentTableElement(); r=smaug 2017-09-07 10:29:02 -04:00
Masayuki Nakano
976ec1a95d Bug 1393816 - part2: Selection::SetBaseAndExtent() should use mCachedRange if it's available r=smaug
Similar to Selection::Collapse(), if mCachedRange is available,
Selection::SetBaseAndExtent() should use it rather than creating new nsRange
instance.

Then, it can reduce the allocation cost and may reduce some other cost, e.g.,
adding it to mutation observer.

MozReview-Commit-ID: InQQusw2KMc
2017-08-26 00:12:38 +09:00
Masayuki Nakano
e443ffb551 Bug 1393816 - part1: Cache a range until new range is created in Selection r=smaug
When setting value of <input type="text">, nsTextEditorState removes all
ranges of normal selection first.  Then, TextEditor sets the value.  Finally,
TextEditor collapses the selection at the end of the text.

In bug 1386471, we got that there are some problems to remove the call of
Selection::RemoveAllRanges() in nsTextEditorState.  Therefore, we need another
approach to improve Selection::Collapse().

The approach of this patch is, when removing all ranges from normal selection,
Selection can cache an nsRange instance if there is an instance which is not
referenced from other than the Selection (i.e., it'll be removed when
Selection::Clear() is called).  Then, Selection::Collapse() can reuse it.  With
this fix, Selection::Collapse() can reduce allocation cost and may reduce some
other cost like adding it to mutation observer.

However, keeping nsRange instance may cause increasing mutation observer's cost
since nsRange will be adjusted its start node/offset and end node/offset with
mutation observer to guarantee that the range is always valid.  So, we can
cache such range only when the caller (or its callee) will set selection range
later.  Therefore, this patch adds Selection::RemoveAllRangesTemporarily()
and make only nsTextEditorState::SetValue() and
ContentEventHandler::OnSelectionEvent() use it.

MozReview-Commit-ID: FjWrbz4S1ld
2017-08-25 19:21:39 +09:00
Masayuki Nakano
d07db737a3 Bug 1393348 - part2: nsISelectionController::SELECTION_* should be sequential integer values r=smaug
nsISelectionController::SELECTION_* are declared as bit-mask.  However, no
methods of nsISelectionController treat them as bit-mask and these
values need a switch statement in nsFrameSelection to convert SelectionType to
array index of nsFrameSelection::mDOMSelections because it's too big to create
an array to do it.  Additionally, this conversion appears profile of
attachment 8848015.

So, now, we should declare these values as sequential integer values.

However, only nsTextFrame uses these values as bit-mask.  Therefore, this patch
adds new type, SelectionTypeMask and creates new inline method,
ToSelectionTypeMask(SelectionType), to retrieve mask value for a SelectionType.

MozReview-Commit-ID: 5Za8mA6iu4
2017-08-24 19:14:04 +09:00
Makoto Kato
7a35be570b Bug 1393355 - Move SetTextRangeStyle from nsISelectionPrivate to Selection. r=masayuki
There is no reason that SetTextRangeStyle is defined at nsISelectionPrivate.  Also, SetTextRangeStyle isn't scriptable, and is called from CompositionTransaction::SetIMESelection only.  So we should move this to Selection.

MozReview-Commit-ID: FCOA6wVhvYZ
2017-08-24 16:56:12 +09:00
Makoto Kato
8d71a839ca Bug 1348073 - Part 1. MoveCaret should move caret when focus node is whitespace only even if it is no frame. r=jfkthame
When enabling lazy frame construction, whitespace only node might not have frame.  So editor/libeditor/tests/test_bug1315065.html is failure because nsFrameSelection::MoveCaret returns error since focus node is whitespace only node that has no frame.

So if focus node is whitespace only, we should promote to parent to get primary frame then try again.

MozReview-Commit-ID: K83T2LP3Pc5
2017-08-23 19:09:07 +09:00
Ehsan Akhgari
a3176f96f1 Bug 1390382 - Part 1: Inline Selection::IsCollapsed(); r=smaug 2017-08-15 18:57:14 -04:00
Masayuki Nakano
4ca6e37750 Bug 1388004 - part1: Make nsContentUtils::GetHTMLEditor() return HTMLEditor* rather than nsIEditor* r=smaug
nsContentUtils::GetHTMLEditor() currently returns nsIEditor* since editor of doc shell may be any type of editors such as TextEditor or editor object which is implemented by JS.  However, nsIEditor is now a builtin class.  So, it can return HTMLEditor.

MozReview-Commit-ID: 3YoFOplZa7W
2017-08-07 16:33:59 +09:00
Aryeh Gregor
947daa8d85 Bug 1359397 - Don't allow Selection in nodes not in the document; r=masayuki
This matches the spec and Chrome, and seems to bring us closer to Edge
and WebKit as well.  It also matches our own behavior for addRange(),
which was changed in bug 1341137.

For collapse and selectAllChildren, we match the tests and browsers, but
the spec is incorrect at the time of this writing:
https://github.com/w3c/selection-api/pull/86

The removeAllRanges test hadn't been updated for the spec change.

MozReview-Commit-ID: DTK8283k5IP
2017-08-10 15:02:08 +03:00
Wes Kocher
df8bcfb77d Merge m-c to autoland a=merge CLOSED TREE
MozReview-Commit-ID: Ko3lhAvzMJN
2017-08-03 18:22:09 -07:00
Ehsan Akhgari
fbecae0596 Bug 1386411 - Part 3: Inline some helper functions in Selection.cpp; r=bzbarsky 2017-08-03 17:05:19 -04:00
Ehsan Akhgari
f7ac005911 Bug 1386411 - Part 2: Devirtualize and inline nsISelection::AsSelection(); r=bzbarsky
nsISelection is builtinclass, so this method doesn't need to be virtual.
2017-08-03 17:05:17 -04:00
Aryeh Gregor
dd3560d5d8 Bug 1359157 - Support Selection.type from spec; r=smaug
All other browsers already support it, more or less interoperably.

MozReview-Commit-ID: 4VoOeqBoKI0
2017-08-03 17:13:24 +03:00
Ehsan Akhgari
89b3a5b863 Bug 1385369 - Reserve 1 space in Selection::mRanges; r=qdot
Most selections on the Web end up with one Range inside them.
By reserving the space for this one range inline, we can avoid the
allocator pressure in a lot of hot code when manipulating the
Selection object.
2017-07-28 15:27:57 -04:00
Masayuki Nakano
d3fade8dbe Bug 1377989 - part7: Rename aParent, aParentNode and aNode related to nsRange to aContainer r=smaug
MozReview-Commit-ID: K7Lu0U0pdC8
2017-07-11 23:33:04 +09:00
Bill McCloskey
ce42826bdf Bug 1372405 - Provide names for all runnables in the tree (r=froydnj)
MozReview-Commit-ID: DKR6ROiHRS7
2017-06-26 14:19:58 -07:00
Carsten "Tomcat" Book
238bf154d5 Backed out changeset 4f6302a98ae4 (bug 1372405) 2017-06-21 13:59:26 +02:00
Bill McCloskey
67e8af4720 Bug 1372405 - Provide names for all runnables in the tree (r=froydnj)
MozReview-Commit-ID: DKR6ROiHRS7
2017-06-20 21:44:11 -07:00
Carsten "Tomcat" Book
bbe9441993 Backed out changeset 9846de3bd954 (bug 1372405) 2017-06-20 08:27:02 +02:00
Bill McCloskey
f69608368b Bug 1372405 - Provide names for all runnables in the tree (r=froydnj)
MozReview-Commit-ID: DKR6ROiHRS7
2017-06-19 22:25:47 -07:00
Mats Palmgren
b145bfa804 Bug 1373999 part 1 - Move layout/generic/nsSelection.cpp verbatim to dom/base/Selection.cpp, and layout/generic/Selection*.h to dom/base/. Also export a few table header files that it needs. r=smaug
MozReview-Commit-ID: 9YUmEOIHUdc
2017-06-19 00:07:36 +02:00