UpdateContainsEntireSelectionFlagForElements(old_selection, new_selection);Shweta BindalUse below util functions to get old and new elements. If they are not same, set `SetContainsEntireSelection()`
Done
Element* element_to_clear = nullptr;
if (!old_selection.IsNone()) {
Node* old_anchor = old_selection.Anchor().AnchorNode();
Node* old_focus = old_selection.Focus().AnchorNode();
if (old_anchor && old_focus &&
old_anchor->parentElement() == old_focus->parentElement()) {
element_to_clear = old_anchor->parentElement();
}
}Shweta BindalUse an existing util function or create a new one to get `element` from selection.
Done
if (element_to_clear) {
if (LayoutObject* layout_object = element_to_clear->GetLayoutObject()) {
if (layout_object->ContainsEntireSelection()) {
layout_object->SetContainsEntireSelection(false);
const ComputedStyle* style = element_to_clear->GetComputedStyle();
if (style && !style->TextOverflow().IsClip()) {
layout_object->SetNeedsLayout(
layout_invalidation_reason::kStyleChange);
}
}
}
}Shweta BindalMove this to a function which takes above `element`, and the boolean flag to set
Done
| Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. |
name: "TextOverflowClipWithCaretSelection",It's not caret selection anymore rt?
| Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. |
There are many image comparison tests failing with "The three dots should not be selected" or similar expectations. Since the ellipses are no longer shown, should we remove them? Or change the expected text on image, instead of just doing rebaseline using tool.
Harness Error. harness_status.status = 1 , harness_status.message = aborted by navigation\nfrom target frame detached\n (Session info: chrome-headless-shell=147.0.7681.0)\nTraceback (most recent call last):\n File "/b/s/w/ir/third_party/wpt_tools/wpt/tools/wptrunner/wptrunner/executors/executorwebdriver.py", line 1147, in run_func\n self.result = True, self.func(self.protocol, self.url, self.timeout)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File "/b/s/w/ir/third_party/wpt_tools/wpt/tools/wptrunner/wptrunner/executors/executorwebdriver.py", line 1255, in do_testharness\n protocol.testharness.close_old_windows()\n File "/b/s/w/ir/third_party/wpt_tools/wpt/tools/wptrunner/wptrunner/executors/executorwebdriver.py", line 461, in close_old_windows\n self.close_windows(set(self.webdriver.handles) - {\n File "/b/s/w/ir/third_party/wpt_tools/wpt/tools/wptrunner/wptrunner/executors/executorwebdriver.py", line 472, in close_windows\n self.webdriver.window_handle = window_handle\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File "/b/s/w/ir/third_party/wpt_tools/wpt/tools/webdriver/webdriver/client.py", line 599, in window_handle\n return self.send_session_command("POST", "window", body=body)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File "/b/s/w/ir/third_party/wpt_tools/wpt/tools/webdriver/webdriver/client.py", line 556, in send_session_command\n return self.send_command(method, url, body, timeout)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File "/b/s/w/ir/third_party/wpt_tools/wpt/tools/webdriver/webdriver/client.py", line 517, in send_command\n raise err\nwebdriver.error.WebDriverException: aborted by navigation (500): aborted by navigation\nfrom target frame detached\n (Session info: chrome-headless-shell=147.0.7681.0)\n\nRemote-end stacktrace:\n\n#0 0x5aa3ad57add2 <unknown>\n#1 0x5aa3ad56c39e <unknown>\n#2 0x5aa3aced362b <unknown>\n#3 0x5aa3acec1582 <unknown>\n#4 0x5aa3acebf956 <unknown>\n#5 0x5aa3acebfef4 <unknown>\n#6 0x5aa3aced7d72 <unknown>\n#7 0x5aa3aced8d25 <unknown>\n#8 0x5aa3acedc081 <unknown>\n#9 0x5aa3acedc169 <unknown>\n#10 0x5aa3acf546f1 <unknown>\n#11 0x5aa3acf12590 <unknown>\n#12 0x5aa3acf11540 <unknown>\n#13 0x5aa3acf1232a <unknown>\n#14 0x5aa3ad513310 <unknown>\n#15 0x5aa3ad5308da <unknown>\n#16 0x5aa3ad53039b <unknown>\n#17 0x5aa3ad51e386 <unknown>\n#18 0x5aa3ad5310ea <unknown>\n#19 0x5aa3ad5035f1 <unknown>\n#20 0x5aa3ad558cd8 <unknown>\n#21 0x5aa3ad558e7a <unknown>\n#22 0x5aa3ad56ac7a <unknown>\n#23 0x7921aac94ac3 <unknown>\n#24 0x7921aad268d0 <unknown>\nCan you explain what went wrong here?
This is a testharness.js-based test.Explain the new failures
This is a testharness.js-based test.This file can be removed entirely.
This is a testharness.js-based test.This file too can be removed entirely.
This is a testharness.js-based test.This file too can be removed entirely.
This is a testharness.js-based test.Explain the new failures.
This is a testharness.js-based test.This file too can be removed entirely.
Harness Error. harness_status.status = 1 , harness_status.message = invalid argument: No target found for targetId\n (Session info: chrome-headless-shell=146.0.7679.0)\nTraceback (most recent call last):\n File "/Volumes/Work/s/w/ir/third_party/wpt_tools/wpt/tools/wptrunner/wptrunner/executors/executorwebdriver.py", line 1147, in run_func\n self.result = True, self.func(self.protocol, self.url, self.timeout)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File "/Volumes/Work/s/w/ir/third_party/wpt_tools/wpt/tools/wptrunner/wptrunner/executors/executorwebdriver.py", line 1255, in do_testharness\n protocol.testharness.close_old_windows()\n File "/Volumes/Work/s/w/ir/third_party/wpt_tools/wpt/tools/wptrunner/wptrunner/executors/executorwebdriver.py", line 461, in close_old_windows\n self.close_windows(set(self.webdriver.handles) - {\n File "/Volumes/Work/s/w/ir/third_party/wpt_tools/wpt/tools/wptrunner/wptrunner/executors/executorwebdriver.py", line 473, in close_windows\n remaining_windows = self.webdriver.window.close()\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File "/Volumes/Work/s/w/ir/third_party/wpt_tools/wpt/tools/webdriver/webdriver/client.py", line 282, in close\n handles = self.session.send_session_command("DELETE", "window")\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File "/Volumes/Work/s/w/ir/third_party/wpt_tools/wpt/tools/webdriver/webdriver/client.py", line 556, in send_session_command\n return self.send_command(method, url, body, timeout)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File "/Volumes/Work/s/w/ir/third_party/wpt_tools/wpt/tools/webdriver/webdriver/client.py", line 517, in send_command\n raise err\nwebdriver.error.InvalidArgumentException: invalid argument (400): invalid argument: No target found for targetId\n (Session info: chrome-headless-shell=146.0.7679.0)\n\nRemote-end stacktrace:\n\n0 chromedriver 0x0000000103038582 base::debug::CollectStackTrace(base::span<void const*, 18446744073709551615ul, void const**>) + 18\n1 chromedriver 0x0000000103029741 base::debug::StackTrace::StackTrace(unsigned long) + 225\n2 chromedriver 0x00000001026743c8 Status::Status(StatusCode, std::__Cr::basic_string<char, std::__Cr::char_traits<char>, std::__Cr::allocator<char>> const&) + 248\n3 chromedriver 0x000000010265d84c internal::ParseInspectorError(std::__Cr::basic_string<char, std::__Cr::char_traits<char>, std::__Cr::allocator<char>> const&) + 1228\n4 chromedriver 0x000000010265bd7a DevToolsClientImpl::SendCommandInternal(std::__Cr::basic_string<char, std::__Cr::char_traits<char>, std::__Cr::allocator<char>> const&, base::DictValue const&, std::__Cr::basic_string<char, std::__Cr::char_traits<char>, std::__Cr::allocator<char>> const&, base::DictValue*, bool, bool, int, Timeout const*) + 5130\n5 chromedriver 0x000000010265be67 DevToolsClientImpl::SendCommandWithTimeout(std::__Cr::basic_string<char, std::__Cr::char_traits<char>, std::__Cr::allocator<char>> const&, base::DictValue const&, Timeout const*) + 103\n6 chromedriver 0x000000010264f316 ChromeImpl::CloseTarget(std::__Cr::basic_string<char, std::__Cr::char_traits<char>, std::__Cr::allocator<char>> const&) + 198\n7 chromedriver 0x000000010264f6fa ChromeImpl::CloseWebView(std::__Cr::basic_string<char, std::__Cr::char_traits<char>, std::__Cr::allocator<char>> const&) + 74\n8 chromedriver 0x000000010270ac13 ExecuteClose(Session*, base::DictValue const&, std::__Cr::unique_ptr<base::Value, std::__Cr::default_delete<base::Value>>*) + 2131\n9 chromedriver 0x00000001026bf22d base::RepeatingCallback<Status (Session*, base::DictValue const&, std::__Cr::unique_ptr<base::Value, std::__Cr::default_delete<base::Value>>*)>::Run(Session*, base::DictValue const&, std::__Cr::unique_ptr<base::Value, std::__Cr::default_delete<base::Value>>*) const & + 157\n10 chromedriver 0x00000001026bdc09 (anonymous namespace)::ExecuteSessionCommandOnSessionThread(char const*, std::__Cr::basic_string<char, std::__Cr::char_traits<char>, std::__Cr::allocator<char>> const&, base::RepeatingCallback<Status (Session*, base::DictValue const&, std::__Cr::unique_ptr<base::Value, std::__Cr::default_delete<base::Value>>*)> const&, bool, bool, base::DictValue const&, scoped_refptr<base::SingleThreadTaskRunner>, base::RepeatingCallback<void (Status const&, std::__Cr::unique_ptr<base::Value, std::__Cr::default_delete<base::Value>>, std::__Cr::basic_string<char, std::__Cr::char_traits<char>, std::__Cr::allocator<char>> const&, bool)> const&) + 1177\n11 chromedriver 0x00000001026bedfa base::internal::Invoker<base::internal::FunctorTraits<void (*&&)(char const*, std::__Cr::basic_string<char, std::__Cr::char_traits<char>, std::__Cr::allocator<char>> const&, base::RepeatingCallback<Status (Session*, base::DictValue const&, std::__Cr::unique_ptr<base::Value, std::__Cr::default_delete<base::Value>>*)> const&, bool, bool, base::DictValue const&, scoped_refptr<base::SingleThreadTaskRunner>, base::RepeatingCallback<void (Status const&, std::__Cr::unique_ptr<base::Value, std::__Cr::default_delete<base::Value>>, std::__Cr::basic_string<char, std::__Cr::char_traits<char>, std::__Cr::allocator<char>> const&, bool)> const&), char const*&&, std::__Cr::basic_string<char, std::__Cr::char_traits<char>, std::__Cr::allocator<char>>&&, base::RepeatingCallback<Status (Session*, base::DictValue const&, std::__Cr::unique_ptr<base::Value, std::__Cr::default_delete<base::Value>>*)>&&, bool&&, bool&&, base::DictValue&&, scoped_refptr<base::SingleThreadTaskRunner>&&, base::RepeatingCallback<void (Status const&, std::__Cr::unique_ptr<base::Value, std::__Cr::default_delete<base::Value>>, std::__Cr::basic_string<char, std::__Cr::char_traits<char>, std::__Cr::allocator<char>> const&, bool)>&&>, base::internal::BindState<false, true, false, void (*)(char const*, std::__Cr::basic_string<char, std::__Cr::char_traits<char>, std::__Cr::allocator<char>> const&, base::RepeatingCallback<Status (Session*, base::DictValue const&, std::__Cr::unique_ptr<base::Value, std::__Cr::default_delete<base::Value>>*)> const&, bool, bool, base::DictValue const&, scoped_refptr<base::SingleThreadTaskRunner>, base::RepeatingCallback<void (Status const&, std::__Cr::unique_ptr<base::Value, std::__Cr::default_delete<base::Value>>, std::__Cr::basic_string<char, std::__Cr::char_traits<char>, std::__Cr::allocator<char>> const&, bool)> const&), base::internal::UnretainedWrapper<char const, base::unretained_traits::MayNotDangle, (partition_alloc::internal::RawPtrTraits)0>, std::__Cr::basic_string<char, std::__Cr::char_traits<char>, std::__Cr::allocator<char>>, base::RepeatingCallback<Status (Session*, base::DictValue const&, std::__Cr::unique_ptr<base::Value, std::__Cr::default_delete<base::Value>>*)>, bool, bool, base::DictValue, scoped_refptr<base::SingleThreadTaskRunner>, base::RepeatingCallback<void (Status const&, std::__Cr::unique_ptr<base::Value, std::__Cr::default_delete<base::Value>>, std::__Cr::basic_string<char, std::__Cr::char_traits<char>, std::__Cr::allocator<char>> const&, bool)>>, void ()>::RunOnce(base::internal::BindStateBase*) + 74\n12 chromedriver 0x0000000102653811 base::OnceCallback<void ()>::Run() && + 113\n13 chromedriver 0x0000000102f91960 base::TaskAnnotator::RunTaskImpl(base::PendingTask&) + 352\n14 chromedriver 0x0000000102fcb603 base::sequence_manager::internal::ThreadControllerWithMessagePumpImpl::DoWorkImpl(base::LazyNow*) + 2339\n15 chromedriver 0x0000000102fcaa8b base::sequence_manager::internal::ThreadControllerWithMessagePumpImpl::DoWork() + 123\n16 chromedriver 0x0000000102f943bc base::MessagePumpDefault::Run(base::MessagePump::Delegate*) + 236\n17 chromedriver 0x0000000102fcc71b base::sequence_manager::internal::ThreadControllerWithMessagePumpImpl::Run(bool, base::TimeDelta) + 1083\n18 chromedriver 0x0000000102f7cf90 base::RunLoop::Run(base::Location const&) + 1136\n19 chromedriver 0x000000010300eff7 base::Thread::Run(base::RunLoop*) + 151\n20 chromedriver 0x000000010300f427 base::Thread::ThreadMain() + 967\n21 chromedriver 0x0000000103028ba5 base::(anonymous namespace)::ThreadFunc(void*) + 133\n22 libsystem_pthread.dylib 0x00007ff8156d5df1 _pthread_start + 99\n23 libsystem_pthread.dylib 0x00007ff8156d1857 thread_start + 15\nExplain the error.
This is a testharness.js-based test.Explain the new error
There are many image comparison tests failing with "The three dots should not be selected" or similar expectations. Since the ellipses are no longer shown, should we remove them? Or change the expected text on image, instead of just doing rebaseline using tool.
Done
It's not caret selection anymore rt?
Done
Harness Error. harness_status.status = 1 , harness_status.message = aborted by navigation\nfrom target frame detached\n (Session info: chrome-headless-shell=147.0.7681.0)\nTraceback (most recent call last):\n File "/b/s/w/ir/third_party/wpt_tools/wpt/tools/wptrunner/wptrunner/executors/executorwebdriver.py", line 1147, in run_func\n self.result = True, self.func(self.protocol, self.url, self.timeout)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File "/b/s/w/ir/third_party/wpt_tools/wpt/tools/wptrunner/wptrunner/executors/executorwebdriver.py", line 1255, in do_testharness\n protocol.testharness.close_old_windows()\n File "/b/s/w/ir/third_party/wpt_tools/wpt/tools/wptrunner/wptrunner/executors/executorwebdriver.py", line 461, in close_old_windows\n self.close_windows(set(self.webdriver.handles) - {\n File "/b/s/w/ir/third_party/wpt_tools/wpt/tools/wptrunner/wptrunner/executors/executorwebdriver.py", line 472, in close_windows\n self.webdriver.window_handle = window_handle\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File "/b/s/w/ir/third_party/wpt_tools/wpt/tools/webdriver/webdriver/client.py", line 599, in window_handle\n return self.send_session_command("POST", "window", body=body)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File "/b/s/w/ir/third_party/wpt_tools/wpt/tools/webdriver/webdriver/client.py", line 556, in send_session_command\n return self.send_command(method, url, body, timeout)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File "/b/s/w/ir/third_party/wpt_tools/wpt/tools/webdriver/webdriver/client.py", line 517, in send_command\n raise err\nwebdriver.error.WebDriverException: aborted by navigation (500): aborted by navigation\nfrom target frame detached\n (Session info: chrome-headless-shell=147.0.7681.0)\n\nRemote-end stacktrace:\n\n#0 0x5aa3ad57add2 <unknown>\n#1 0x5aa3ad56c39e <unknown>\n#2 0x5aa3aced362b <unknown>\n#3 0x5aa3acec1582 <unknown>\n#4 0x5aa3acebf956 <unknown>\n#5 0x5aa3acebfef4 <unknown>\n#6 0x5aa3aced7d72 <unknown>\n#7 0x5aa3aced8d25 <unknown>\n#8 0x5aa3acedc081 <unknown>\n#9 0x5aa3acedc169 <unknown>\n#10 0x5aa3acf546f1 <unknown>\n#11 0x5aa3acf12590 <unknown>\n#12 0x5aa3acf11540 <unknown>\n#13 0x5aa3acf1232a <unknown>\n#14 0x5aa3ad513310 <unknown>\n#15 0x5aa3ad5308da <unknown>\n#16 0x5aa3ad53039b <unknown>\n#17 0x5aa3ad51e386 <unknown>\n#18 0x5aa3ad5310ea <unknown>\n#19 0x5aa3ad5035f1 <unknown>\n#20 0x5aa3ad558cd8 <unknown>\n#21 0x5aa3ad558e7a <unknown>\n#22 0x5aa3ad56ac7a <unknown>\n#23 0x7921aac94ac3 <unknown>\n#24 0x7921aad268d0 <unknown>\nCan you explain what went wrong here?
Needed to delete file
This is a testharness.js-based test.Shweta BindalExplain the new failures
Done
This file can be removed entirely.
Done
This file too can be removed entirely.
Done
This file too can be removed entirely.
Done
This is a testharness.js-based test.Shweta BindalExplain the new failures.
Done
This file too can be removed entirely.
Done
Harness Error. harness_status.status = 1 , harness_status.message = invalid argument: No target found for targetId\n (Session info: chrome-headless-shell=146.0.7679.0)\nTraceback (most recent call last):\n File "/Volumes/Work/s/w/ir/third_party/wpt_tools/wpt/tools/wptrunner/wptrunner/executors/executorwebdriver.py", line 1147, in run_func\n self.result = True, self.func(self.protocol, self.url, self.timeout)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File "/Volumes/Work/s/w/ir/third_party/wpt_tools/wpt/tools/wptrunner/wptrunner/executors/executorwebdriver.py", line 1255, in do_testharness\n protocol.testharness.close_old_windows()\n File "/Volumes/Work/s/w/ir/third_party/wpt_tools/wpt/tools/wptrunner/wptrunner/executors/executorwebdriver.py", line 461, in close_old_windows\n self.close_windows(set(self.webdriver.handles) - {\n File "/Volumes/Work/s/w/ir/third_party/wpt_tools/wpt/tools/wptrunner/wptrunner/executors/executorwebdriver.py", line 473, in close_windows\n remaining_windows = self.webdriver.window.close()\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File "/Volumes/Work/s/w/ir/third_party/wpt_tools/wpt/tools/webdriver/webdriver/client.py", line 282, in close\n handles = self.session.send_session_command("DELETE", "window")\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File "/Volumes/Work/s/w/ir/third_party/wpt_tools/wpt/tools/webdriver/webdriver/client.py", line 556, in send_session_command\n return self.send_command(method, url, body, timeout)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File "/Volumes/Work/s/w/ir/third_party/wpt_tools/wpt/tools/webdriver/webdriver/client.py", line 517, in send_command\n raise err\nwebdriver.error.InvalidArgumentException: invalid argument (400): invalid argument: No target found for targetId\n (Session info: chrome-headless-shell=146.0.7679.0)\n\nRemote-end stacktrace:\n\n0 chromedriver 0x0000000103038582 base::debug::CollectStackTrace(base::span<void const*, 18446744073709551615ul, void const**>) + 18\n1 chromedriver 0x0000000103029741 base::debug::StackTrace::StackTrace(unsigned long) + 225\n2 chromedriver 0x00000001026743c8 Status::Status(StatusCode, std::__Cr::basic_string<char, std::__Cr::char_traits<char>, std::__Cr::allocator<char>> const&) + 248\n3 chromedriver 0x000000010265d84c internal::ParseInspectorError(std::__Cr::basic_string<char, std::__Cr::char_traits<char>, std::__Cr::allocator<char>> const&) + 1228\n4 chromedriver 0x000000010265bd7a DevToolsClientImpl::SendCommandInternal(std::__Cr::basic_string<char, std::__Cr::char_traits<char>, std::__Cr::allocator<char>> const&, base::DictValue const&, std::__Cr::basic_string<char, std::__Cr::char_traits<char>, std::__Cr::allocator<char>> const&, base::DictValue*, bool, bool, int, Timeout const*) + 5130\n5 chromedriver 0x000000010265be67 DevToolsClientImpl::SendCommandWithTimeout(std::__Cr::basic_string<char, std::__Cr::char_traits<char>, std::__Cr::allocator<char>> const&, base::DictValue const&, Timeout const*) + 103\n6 chromedriver 0x000000010264f316 ChromeImpl::CloseTarget(std::__Cr::basic_string<char, std::__Cr::char_traits<char>, std::__Cr::allocator<char>> const&) + 198\n7 chromedriver 0x000000010264f6fa ChromeImpl::CloseWebView(std::__Cr::basic_string<char, std::__Cr::char_traits<char>, std::__Cr::allocator<char>> const&) + 74\n8 chromedriver 0x000000010270ac13 ExecuteClose(Session*, base::DictValue const&, std::__Cr::unique_ptr<base::Value, std::__Cr::default_delete<base::Value>>*) + 2131\n9 chromedriver 0x00000001026bf22d base::RepeatingCallback<Status (Session*, base::DictValue const&, std::__Cr::unique_ptr<base::Value, std::__Cr::default_delete<base::Value>>*)>::Run(Session*, base::DictValue const&, std::__Cr::unique_ptr<base::Value, std::__Cr::default_delete<base::Value>>*) const & + 157\n10 chromedriver 0x00000001026bdc09 (anonymous namespace)::ExecuteSessionCommandOnSessionThread(char const*, std::__Cr::basic_string<char, std::__Cr::char_traits<char>, std::__Cr::allocator<char>> const&, base::RepeatingCallback<Status (Session*, base::DictValue const&, std::__Cr::unique_ptr<base::Value, std::__Cr::default_delete<base::Value>>*)> const&, bool, bool, base::DictValue const&, scoped_refptr<base::SingleThreadTaskRunner>, base::RepeatingCallback<void (Status const&, std::__Cr::unique_ptr<base::Value, std::__Cr::default_delete<base::Value>>, std::__Cr::basic_string<char, std::__Cr::char_traits<char>, std::__Cr::allocator<char>> const&, bool)> const&) + 1177\n11 chromedriver 0x00000001026bedfa base::internal::Invoker<base::internal::FunctorTraits<void (*&&)(char const*, std::__Cr::basic_string<char, std::__Cr::char_traits<char>, std::__Cr::allocator<char>> const&, base::RepeatingCallback<Status (Session*, base::DictValue const&, std::__Cr::unique_ptr<base::Value, std::__Cr::default_delete<base::Value>>*)> const&, bool, bool, base::DictValue const&, scoped_refptr<base::SingleThreadTaskRunner>, base::RepeatingCallback<void (Status const&, std::__Cr::unique_ptr<base::Value, std::__Cr::default_delete<base::Value>>, std::__Cr::basic_string<char, std::__Cr::char_traits<char>, std::__Cr::allocator<char>> const&, bool)> const&), char const*&&, std::__Cr::basic_string<char, std::__Cr::char_traits<char>, std::__Cr::allocator<char>>&&, base::RepeatingCallback<Status (Session*, base::DictValue const&, std::__Cr::unique_ptr<base::Value, std::__Cr::default_delete<base::Value>>*)>&&, bool&&, bool&&, base::DictValue&&, scoped_refptr<base::SingleThreadTaskRunner>&&, base::RepeatingCallback<void (Status const&, std::__Cr::unique_ptr<base::Value, std::__Cr::default_delete<base::Value>>, std::__Cr::basic_string<char, std::__Cr::char_traits<char>, std::__Cr::allocator<char>> const&, bool)>&&>, base::internal::BindState<false, true, false, void (*)(char const*, std::__Cr::basic_string<char, std::__Cr::char_traits<char>, std::__Cr::allocator<char>> const&, base::RepeatingCallback<Status (Session*, base::DictValue const&, std::__Cr::unique_ptr<base::Value, std::__Cr::default_delete<base::Value>>*)> const&, bool, bool, base::DictValue const&, scoped_refptr<base::SingleThreadTaskRunner>, base::RepeatingCallback<void (Status const&, std::__Cr::unique_ptr<base::Value, std::__Cr::default_delete<base::Value>>, std::__Cr::basic_string<char, std::__Cr::char_traits<char>, std::__Cr::allocator<char>> const&, bool)> const&), base::internal::UnretainedWrapper<char const, base::unretained_traits::MayNotDangle, (partition_alloc::internal::RawPtrTraits)0>, std::__Cr::basic_string<char, std::__Cr::char_traits<char>, std::__Cr::allocator<char>>, base::RepeatingCallback<Status (Session*, base::DictValue const&, std::__Cr::unique_ptr<base::Value, std::__Cr::default_delete<base::Value>>*)>, bool, bool, base::DictValue, scoped_refptr<base::SingleThreadTaskRunner>, base::RepeatingCallback<void (Status const&, std::__Cr::unique_ptr<base::Value, std::__Cr::default_delete<base::Value>>, std::__Cr::basic_string<char, std::__Cr::char_traits<char>, std::__Cr::allocator<char>> const&, bool)>>, void ()>::RunOnce(base::internal::BindStateBase*) + 74\n12 chromedriver 0x0000000102653811 base::OnceCallback<void ()>::Run() && + 113\n13 chromedriver 0x0000000102f91960 base::TaskAnnotator::RunTaskImpl(base::PendingTask&) + 352\n14 chromedriver 0x0000000102fcb603 base::sequence_manager::internal::ThreadControllerWithMessagePumpImpl::DoWorkImpl(base::LazyNow*) + 2339\n15 chromedriver 0x0000000102fcaa8b base::sequence_manager::internal::ThreadControllerWithMessagePumpImpl::DoWork() + 123\n16 chromedriver 0x0000000102f943bc base::MessagePumpDefault::Run(base::MessagePump::Delegate*) + 236\n17 chromedriver 0x0000000102fcc71b base::sequence_manager::internal::ThreadControllerWithMessagePumpImpl::Run(bool, base::TimeDelta) + 1083\n18 chromedriver 0x0000000102f7cf90 base::RunLoop::Run(base::Location const&) + 1136\n19 chromedriver 0x000000010300eff7 base::Thread::Run(base::RunLoop*) + 151\n20 chromedriver 0x000000010300f427 base::Thread::ThreadMain() + 967\n21 chromedriver 0x0000000103028ba5 base::(anonymous namespace)::ThreadFunc(void*) + 133\n22 libsystem_pthread.dylib 0x00007ff8156d5df1 _pthread_start + 99\n23 libsystem_pthread.dylib 0x00007ff8156d1857 thread_start + 15\nShweta BindalExplain the error.
Done
This is a testharness.js-based test.Shweta BindalExplain the new error
Done
| Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. |
| Code-Review | +1 |
if (element && !builder.TextOverflow().IsClip() && !RuntimeEnabledFeatures::TextOverflowClipWithSelectionEnabled()) {git cl format
if (!element) {```suggestion
if (!element && !element->GetLayoutObject()) {
```
if (!layout_object) {
return;
}remove this block
| Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. |
| Commit-Queue | +1 |
if (element && !builder.TextOverflow().IsClip() && !RuntimeEnabledFeatures::TextOverflowClipWithSelectionEnabled()) {Shweta Bindalgit cl format
Done
```suggestion
if (!element && !element->GetLayoutObject()) {
```
Done
if (!layout_object) {
return;
}Shweta Bindalremove this block
Done
| Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. |
| Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. |
if (anchor && focus && anchor->parentElement() == focus->parentElement()) {Does this work well if the common parent is an inline element?
e.g.
```html
<p style="text-overflow:ellipsis">
<span id="common"><span>fo^o</span><span>bar|</span></span>
</p>
```
Suppose that `^` is the anchor point and `|` is the focus point.
SetContainsEntireSelectionFlag(element_to_clear, false);Should we handle **only** cases where a container contains entire selection?
Don't we handle selection across containers?
```html
<p>foo ^bar</p>
<p style="text-overflow:ellipsis">baz| qux...</p>
```
If `^` is the anchor point and `|` is the focus point, we'd like to disable ellipsis at least in the second `<p>`, don't we?
!node_.GetLayoutBlockFlow()->ContainsEntireSelection()) {nit: Moving the ContainsEntireSelection() check into ShouldTruncateOverflowingText() would be cleaner.
| Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. |
| Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. |
if (anchor && focus && anchor->parentElement() == focus->parentElement()) {Does this work well if the common parent is an inline element?
e.g.
```html
<p style="text-overflow:ellipsis">
<span id="common"><span>fo^o</span><span>bar|</span></span>
</p>
```
Suppose that `^` is the anchor point and `|` is the focus point.
changed the approach to clip the text for element which has selection focus
SetContainsEntireSelectionFlag(element_to_clear, false);Should we handle **only** cases where a container contains entire selection?
Don't we handle selection across containers?
```html
<p>foo ^bar</p>
<p style="text-overflow:ellipsis">baz| qux...</p>
```
If `^` is the anchor point and `|` is the focus point, we'd like to disable ellipsis at least in the second `<p>`, don't we?
Done
!node_.GetLayoutBlockFlow()->ContainsEntireSelection()) {nit: Moving the ContainsEntireSelection() check into ShouldTruncateOverflowingText() would be cleaner.
Done
Why will it be removed?
It was written when someone added change in styleadjuster to change text-overflow property on focus. Now since we are directly setting it from layout, I dont think it will matter if placeholder is clipped or not since user cannot interact with placeholder in any way
| Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. |
ContainsSelectionFocus()) {I guess `ContainsSelectionFocus()` should be `object_to_check->ContainsSelectionFocus()` for the following case:
```html
<div style="text-overflow:ellispsis">
<div>sub-block</div>
foo | bar (this is wrapped by an anonymous block-flow)
</div>
```
Shweta BindalWhy will it be removed?
It was written when someone added change in styleadjuster to change text-overflow property on focus. Now since we are directly setting it from layout, I dont think it will matter if placeholder is clipped or not since user cannot interact with placeholder in any way
Do you mean this CL will change the placeholder/autocomplete behavior?
Will a placeholder have no ellipsis? Will a placeholder have an ellipsis even if the text control is focused? What about interoperability with other browsers? Can we change the behavior by a separated patch?
Anyway, we should update the test for the new behavior, not remove the test.
| Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. |
I guess `ContainsSelectionFocus()` should be `object_to_check->ContainsSelectionFocus()` for the following case:
```html
<div style="text-overflow:ellispsis">
<div>sub-block</div>
foo | bar (this is wrapped by an anonymous block-flow)
</div>
```
Good catch. Changed to object_to_check->ContainsSelectionFocus() and set the flag on the non-anonymous parent that owns the text-overflow style.
Since ShouldTruncateOverflowingText() is evaluated during each child's inline layout and LayoutNG caches child results, the flag change alone doesn't cause cache misses — so we explicitly call SetNeedsLayout() on each block child (and on the block itself when it has no block children) to force re-evaluation.
Shweta BindalWhy will it be removed?
Kent TamuraIt was written when someone added change in styleadjuster to change text-overflow property on focus. Now since we are directly setting it from layout, I dont think it will matter if placeholder is clipped or not since user cannot interact with placeholder in any way
Do you mean this CL will change the placeholder/autocomplete behavior?
Will a placeholder have no ellipsis? Will a placeholder have an ellipsis even if the text control is focused? What about interoperability with other browsers? Can we change the behavior by a separated patch?
Anyway, we should update the test for the new behavior, not remove the test.
For placeholder yes behavior will change, placeholder's ellipsis text will not we converted into clipped on selection or focus.
Firefox also behaves in the same way
| Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. |
Shweta BindalWhy will it be removed?
Kent TamuraIt was written when someone added change in styleadjuster to change text-overflow property on focus. Now since we are directly setting it from layout, I dont think it will matter if placeholder is clipped or not since user cannot interact with placeholder in any way
Shweta BindalDo you mean this CL will change the placeholder/autocomplete behavior?
Will a placeholder have no ellipsis? Will a placeholder have an ellipsis even if the text control is focused? What about interoperability with other browsers? Can we change the behavior by a separated patch?
Anyway, we should update the test for the new behavior, not remove the test.
For placeholder yes behavior will change, placeholder's ellipsis text will not we converted into clipped on selection or focus.
Firefox also behaves in the same way
I recommend to drop the placeholder behavior change from this CL, and handle it in a separated CL and behind a separated runtime flag.
Shweta BindalWhy will it be removed?
Kent TamuraIt was written when someone added change in styleadjuster to change text-overflow property on focus. Now since we are directly setting it from layout, I dont think it will matter if placeholder is clipped or not since user cannot interact with placeholder in any way
Shweta BindalDo you mean this CL will change the placeholder/autocomplete behavior?
Will a placeholder have no ellipsis? Will a placeholder have an ellipsis even if the text control is focused? What about interoperability with other browsers? Can we change the behavior by a separated patch?
Anyway, we should update the test for the new behavior, not remove the test.
Kent TamuraFor placeholder yes behavior will change, placeholder's ellipsis text will not we converted into clipped on selection or focus.
Firefox also behaves in the same way
I recommend to drop the placeholder behavior change from this CL, and handle it in a separated CL and behind a separated runtime flag.
Made the changes. Will handle removing styleAdjuster code in separate PR
| Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. |
| Code-Review | +1 |
during editing. This was a hack in StyleAdjuster.The hack in StyleAdjust is only for placeholder and suggestions. This sentense should be removed.
<input>'s behavior is in TextControlInnerEditorElement::CustomStyleForLayoutObject().
The hack in StyleAdjust is only for placeholder and suggestions. This sentense should be removed.
<input>'s behavior is in TextControlInnerEditorElement::CustomStyleForLayoutObject().
Done
| Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. |
Exportable changes to web-platform-tests were detected in this CL and a pull request in the upstream repo has been made: https://github.com/web-platform-tests/wpt/pull/58159.
When this CL lands, the bot will automatically merge the PR on GitHub if the required GitHub checks pass; otherwise, ecosystem-infra@ team will triage the failures and may contact you.
WPT Export docs:
https://chromium.googlesource.com/chromium/src/+/main/docs/testing/web_platform_tests.md#Automatic-export-process
| Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. |
38 is the latest approved patch-set.
No files were changed between the latest approved patch-set and the submitted one.
[Editing] Control text truncation based on selection
Previously, text-overflow ellipsis was converted to clip
for focused input elements and placeholders to avoid rendering ellipsis
during editing.
Instead:
- Add |LayoutObject::ContainsSelection()| bitfield to track selection state
- In |SelectionEditor::SetSelection()|, notify parent elements of selection
changes and update their |ContainsSelection()| state
- In InlineLayoutAlgorithm, skip ellipsis truncation if block contains
selection |LayoutBlockFlow::ContainsSelection()|
New WPT tests verify ellipsis suppression in editable div/input/textarea
with caret. Updates multiple platform baselines for selection-aware
ellipsis rendering.
| Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. |
The WPT PR for this CL has been merged upstream! https://github.com/web-platform-tests/wpt/pull/58159
| Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. |
| Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. |
return block;This doesn't do what it says in the method name - e.g. it can return a non-LayoutBlock object is this safe?
| Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. |