summaryrefslogtreecommitdiff
path: root/chromium/third_party/blink/renderer/core/testing
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@qt.io>2021-05-20 09:47:09 +0200
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2021-06-07 11:15:42 +0000
commit189d4fd8fad9e3c776873be51938cd31a42b6177 (patch)
tree6497caeff5e383937996768766ab3bb2081a40b2 /chromium/third_party/blink/renderer/core/testing
parent8bc75099d364490b22f43a7ce366b366c08f4164 (diff)
downloadqtwebengine-chromium-189d4fd8fad9e3c776873be51938cd31a42b6177.tar.gz
BASELINE: Update Chromium to 90.0.4430.221
Change-Id: Iff4d9d18d2fcf1a576f3b1f453010f744a232920 Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
Diffstat (limited to 'chromium/third_party/blink/renderer/core/testing')
-rw-r--r--chromium/third_party/blink/renderer/core/testing/DEPS2
-rw-r--r--chromium/third_party/blink/renderer/core/testing/core_unit_test_helper.cc7
-rw-r--r--chromium/third_party/blink/renderer/core/testing/core_unit_test_helper.h4
-rw-r--r--chromium/third_party/blink/renderer/core/testing/data/add-frame-in-unload-main.html2
-rw-r--r--chromium/third_party/blink/renderer/core/testing/data/add-frame-in-unload-subframe.html6
-rw-r--r--chromium/third_party/blink/renderer/core/testing/data/composited_selection_bounds_basic_rtl.html24
-rw-r--r--chromium/third_party/blink/renderer/core/testing/data/composited_selection_bounds_vertical_lr_rtl.html25
-rw-r--r--chromium/third_party/blink/renderer/core/testing/data/composited_selection_bounds_vertical_rl_rtl.html25
-rw-r--r--chromium/third_party/blink/renderer/core/testing/data/display_none_frame.html5
-rw-r--r--chromium/third_party/blink/renderer/core/testing/data/prerender/multiple_prerenders.html37
-rw-r--r--chromium/third_party/blink/renderer/core/testing/data/prerender/single_prerender.html25
-rw-r--r--chromium/third_party/blink/renderer/core/testing/dictionary_test.cc22
-rw-r--r--chromium/third_party/blink/renderer/core/testing/dictionary_test.h7
-rw-r--r--chromium/third_party/blink/renderer/core/testing/dummy_modulator.cc40
-rw-r--r--chromium/third_party/blink/renderer/core/testing/dummy_modulator.h13
-rw-r--r--chromium/third_party/blink/renderer/core/testing/dummy_page_holder.cc24
-rw-r--r--chromium/third_party/blink/renderer/core/testing/dummy_page_holder.h1
-rw-r--r--chromium/third_party/blink/renderer/core/testing/fake_local_frame_host.cc36
-rw-r--r--chromium/third_party/blink/renderer/core/testing/fake_local_frame_host.h33
-rw-r--r--chromium/third_party/blink/renderer/core/testing/fake_remote_frame_host.cc16
-rw-r--r--chromium/third_party/blink/renderer/core/testing/fake_remote_frame_host.h17
-rw-r--r--chromium/third_party/blink/renderer/core/testing/fake_web_plugin.h8
-rw-r--r--chromium/third_party/blink/renderer/core/testing/internal_settings.cc33
-rw-r--r--chromium/third_party/blink/renderer/core/testing/internals.cc555
-rw-r--r--chromium/third_party/blink/renderer/core/testing/internals.h19
-rw-r--r--chromium/third_party/blink/renderer/core/testing/internals.idl15
-rw-r--r--chromium/third_party/blink/renderer/core/testing/intersection_observer_test_helper.h61
-rw-r--r--chromium/third_party/blink/renderer/core/testing/mock_clipboard_host.cc5
-rw-r--r--chromium/third_party/blink/renderer/core/testing/mock_clipboard_host.h2
-rw-r--r--chromium/third_party/blink/renderer/core/testing/mock_function_scope.cc66
-rw-r--r--chromium/third_party/blink/renderer/core/testing/mock_function_scope.h46
-rw-r--r--chromium/third_party/blink/renderer/core/testing/mock_policy_container_host.cc7
-rw-r--r--chromium/third_party/blink/renderer/core/testing/mock_policy_container_host.h14
-rw-r--r--chromium/third_party/blink/renderer/core/testing/module_test_base.cc31
-rw-r--r--chromium/third_party/blink/renderer/core/testing/module_test_base.h18
-rw-r--r--chromium/third_party/blink/renderer/core/testing/null_execution_context.cc3
-rw-r--r--chromium/third_party/blink/renderer/core/testing/null_execution_context.h2
-rw-r--r--chromium/third_party/blink/renderer/core/testing/page_test_base.cc4
-rw-r--r--chromium/third_party/blink/renderer/core/testing/scoped_fake_ukm_recorder.cc53
-rw-r--r--chromium/third_party/blink/renderer/core/testing/scoped_fake_ukm_recorder.h42
-rw-r--r--chromium/third_party/blink/renderer/core/testing/scoped_mock_overlay_scrollbars.h2
-rw-r--r--chromium/third_party/blink/renderer/core/testing/sim/sim_canvas.cc24
-rw-r--r--chromium/third_party/blink/renderer/core/testing/sim/sim_canvas.h17
-rw-r--r--chromium/third_party/blink/renderer/core/testing/sim/sim_compositor.cc15
-rw-r--r--chromium/third_party/blink/renderer/core/testing/sim/sim_compositor.h31
-rw-r--r--chromium/third_party/blink/renderer/core/testing/sim/sim_test.cc73
-rw-r--r--chromium/third_party/blink/renderer/core/testing/sim/sim_test.h40
-rw-r--r--chromium/third_party/blink/renderer/core/testing/sim/sim_web_frame_widget.cc18
-rw-r--r--chromium/third_party/blink/renderer/core/testing/sim/sim_web_frame_widget.h30
-rw-r--r--chromium/third_party/blink/renderer/core/testing/wait_for_event.cc4
50 files changed, 1326 insertions, 283 deletions
diff --git a/chromium/third_party/blink/renderer/core/testing/DEPS b/chromium/third_party/blink/renderer/core/testing/DEPS
index 9c2773daa13..7d8ad3b7bbb 100644
--- a/chromium/third_party/blink/renderer/core/testing/DEPS
+++ b/chromium/third_party/blink/renderer/core/testing/DEPS
@@ -1,6 +1,8 @@
include_rules = [
"+base/run_loop.h",
+ "+base/process/process_handle.h",
"+cc",
+ "+components/ukm/test_ukm_recorder.h",
# TODO(crbug.com/838693): Test harnesses use LayerTreeView
# from content instead of a fake WebLayerTreeView implementation, so
# that the Web abstraction can go away.
diff --git a/chromium/third_party/blink/renderer/core/testing/core_unit_test_helper.cc b/chromium/third_party/blink/renderer/core/testing/core_unit_test_helper.cc
index c2581c876a6..b7ad0351301 100644
--- a/chromium/third_party/blink/renderer/core/testing/core_unit_test_helper.cc
+++ b/chromium/third_party/blink/renderer/core/testing/core_unit_test_helper.cc
@@ -4,6 +4,7 @@
#include "third_party/blink/renderer/core/testing/core_unit_test_helper.h"
+#include "third_party/blink/public/common/tokens/tokens.h"
#include "third_party/blink/renderer/bindings/core/v8/v8_binding_for_core.h"
#include "third_party/blink/renderer/core/html/html_iframe_element.h"
#include "third_party/blink/renderer/core/input/event_handler.h"
@@ -25,9 +26,9 @@ LocalFrame* SingleChildLocalFrameClient::CreateFrame(
MakeGarbageCollected<LocalFrameClientWithParent>(parent_frame);
LocalFrame* child = MakeGarbageCollected<LocalFrame>(
child_client, *parent_frame->GetPage(), owner_element, parent_frame,
- nullptr, FrameInsertType::kInsertInConstructor,
- base::UnguessableToken::Create(), &parent_frame->window_agent_factory(),
- nullptr, /* policy_container */ nullptr);
+ nullptr, FrameInsertType::kInsertInConstructor, LocalFrameToken(),
+ &parent_frame->window_agent_factory(), nullptr,
+ /* policy_container */ nullptr);
child->CreateView(IntSize(500, 500), Color::kTransparent);
child->Init(nullptr);
diff --git a/chromium/third_party/blink/renderer/core/testing/core_unit_test_helper.h b/chromium/third_party/blink/renderer/core/testing/core_unit_test_helper.h
index d02c3609841..e2e2316cd3b 100644
--- a/chromium/third_party/blink/renderer/core/testing/core_unit_test_helper.h
+++ b/chromium/third_party/blink/renderer/core/testing/core_unit_test_helper.h
@@ -19,7 +19,6 @@
#include "third_party/blink/renderer/core/layout/layout_view.h"
#include "third_party/blink/renderer/core/layout/ng/layout_ng_block_flow.h"
#include "third_party/blink/renderer/core/loader/empty_clients.h"
-#include "third_party/blink/renderer/core/paint/ng/ng_paint_fragment.h"
#include "third_party/blink/renderer/core/testing/page_test_base.h"
#include "third_party/blink/renderer/platform/testing/layer_tree_host_embedder.h"
#include "third_party/blink/renderer/platform/wtf/allocator/allocator.h"
@@ -150,9 +149,6 @@ class RenderingTest : public PageTestBase {
const DisplayItemClient* GetDisplayItemClientFromLayoutObject(
LayoutObject* obj) const {
- auto* block_flow = DynamicTo<LayoutNGBlockFlow>(obj);
- if (block_flow && block_flow->PaintFragment())
- return block_flow->PaintFragment();
return obj;
}
diff --git a/chromium/third_party/blink/renderer/core/testing/data/add-frame-in-unload-main.html b/chromium/third_party/blink/renderer/core/testing/data/add-frame-in-unload-main.html
new file mode 100644
index 00000000000..8a174381a9b
--- /dev/null
+++ b/chromium/third_party/blink/renderer/core/testing/data/add-frame-in-unload-main.html
@@ -0,0 +1,2 @@
+<!DOCTYPE html>
+<body><iframe src="add-frame-in-unload-subframe.html"></iframe></body>
diff --git a/chromium/third_party/blink/renderer/core/testing/data/add-frame-in-unload-subframe.html b/chromium/third_party/blink/renderer/core/testing/data/add-frame-in-unload-subframe.html
new file mode 100644
index 00000000000..a037c299757
--- /dev/null
+++ b/chromium/third_party/blink/renderer/core/testing/data/add-frame-in-unload-subframe.html
@@ -0,0 +1,6 @@
+<!DOCTYPE html>
+<script>
+window.addEventListener('unload', () => {
+ window.top.document.body.appendChild(document.createElement('iframe'));
+});
+</script>
diff --git a/chromium/third_party/blink/renderer/core/testing/data/composited_selection_bounds_basic_rtl.html b/chromium/third_party/blink/renderer/core/testing/data/composited_selection_bounds_basic_rtl.html
new file mode 100644
index 00000000000..fa1998166d9
--- /dev/null
+++ b/chromium/third_party/blink/renderer/core/testing/data/composited_selection_bounds_basic_rtl.html
@@ -0,0 +1,24 @@
+<style>
+ @font-face {
+ font-family: ahem;
+ src: url(Ahem.ttf);
+ }
+ * {
+ font-family: ahem;
+ }
+ body {
+ direction: rtl;
+ }
+</style>
+<span id="text">
+ &#x202E;The quick brown fox jumped over the lazy dog.
+</span>
+<script>
+ var range = document.createRange();
+ var textNode = document.getElementById("text").firstChild;
+ range.setStart(textNode, 10);
+ range.setEnd(textNode, 25);
+ document.getSelection().addRange(range);
+
+ window.expectedResult = [document, 584, 8, 584, 20, document, 404, 8, 404, 20];
+</script>
diff --git a/chromium/third_party/blink/renderer/core/testing/data/composited_selection_bounds_vertical_lr_rtl.html b/chromium/third_party/blink/renderer/core/testing/data/composited_selection_bounds_vertical_lr_rtl.html
new file mode 100644
index 00000000000..e3188ab769f
--- /dev/null
+++ b/chromium/third_party/blink/renderer/core/testing/data/composited_selection_bounds_vertical_lr_rtl.html
@@ -0,0 +1,25 @@
+<style>
+ @font-face {
+ font-family: ahem;
+ src: url(Ahem.ttf);
+ }
+ * {
+ font-family: ahem;
+ }
+ body {
+ direction: rtl;
+ -webkit-writing-mode: vertical-lr;
+ }
+</style>
+<span id="text">
+ &#x202E;The quick brown fox jumped over the lazy dog.
+</span>
+<script>
+ var range = document.createRange();
+ var textNode = document.getElementById("text").firstChild;
+ range.setStart(textNode, 10);
+ range.setEnd(textNode, 25);
+ document.getSelection().addRange(range);
+
+ window.expectedResult = [document, 20, 424, 8, 424, document, 8, 244, 20, 244];
+</script>
diff --git a/chromium/third_party/blink/renderer/core/testing/data/composited_selection_bounds_vertical_rl_rtl.html b/chromium/third_party/blink/renderer/core/testing/data/composited_selection_bounds_vertical_rl_rtl.html
new file mode 100644
index 00000000000..0aa385479b1
--- /dev/null
+++ b/chromium/third_party/blink/renderer/core/testing/data/composited_selection_bounds_vertical_rl_rtl.html
@@ -0,0 +1,25 @@
+<style>
+ @font-face {
+ font-family: ahem;
+ src: url(Ahem.ttf);
+ }
+ * {
+ font-family: ahem;
+ }
+ body {
+ direction: rtl;
+ -webkit-writing-mode: vertical-rl;
+ }
+</style>
+<span id="text">
+ &#x202E;The quick brown fox jumped over the lazy dog.
+</span>
+<script>
+ var range = document.createRange();
+ var textNode = document.getElementById("text").firstChild;
+ range.setStart(textNode, 10);
+ range.setEnd(textNode, 25);
+ document.getSelection().addRange(range);
+
+ window.expectedResult = [document, 620, 424, 632, 424, document, 632, 244, 620, 244];
+</script>
diff --git a/chromium/third_party/blink/renderer/core/testing/data/display_none_frame.html b/chromium/third_party/blink/renderer/core/testing/data/display_none_frame.html
new file mode 100644
index 00000000000..e2b58e67908
--- /dev/null
+++ b/chromium/third_party/blink/renderer/core/testing/data/display_none_frame.html
@@ -0,0 +1,5 @@
+<html style="display:none;">
+ <body>
+ <p>This text is inside an invisible document.</p>
+ </body>
+</html>
diff --git a/chromium/third_party/blink/renderer/core/testing/data/prerender/multiple_prerenders.html b/chromium/third_party/blink/renderer/core/testing/data/prerender/multiple_prerenders.html
index faa70844040..de16538faa7 100644
--- a/chromium/third_party/blink/renderer/core/testing/data/prerender/multiple_prerenders.html
+++ b/chromium/third_party/blink/renderer/core/testing/data/prerender/multiple_prerenders.html
@@ -1,22 +1,8 @@
<html>
- <head>
- <script>
- function log(message)
- {
- var item = document.createElement("li");
- item.appendChild(document.createTextNode(message));
- document.getElementById("console").appendChild(item);
- }
-
- </script>
-
- </head>
+ <head></head>
<body>
- <ul id=console>
- </ul>
-
- <link id="firstPrerender" rel=prerender href="http://first-prerender.com/"/>
- <link id="secondPrerender" rel=prerender href="http://second-prerender.com/"/>
+ <link id="firstPrerender" rel=prerender href="/first"/>
+ <link id="secondPrerender" rel=prerender href="/second"/>
<p id="emptyParagraph"></p>
@@ -42,26 +28,11 @@
link.parentElement.removeChild(link);
}
- firstPrerender.addEventListener('webkitprerenderstart', function() { log("first_webkitprerenderstart"); }, false);
- firstPrerender.addEventListener('webkitprerenderstop', function() { log("first_webkitprerenderstop"); }, false);
- firstPrerender.addEventListener('webkitprerenderload', function() { log("first_webkitprerenderload"); }, false);
- firstPrerender.addEventListener('webkitprerenderdomcontentloaded', function() { log("first_webkitprerenderdomcontentloaded"); }, false);
-
- secondPrerender.addEventListener('webkitprerenderstart', function() { log("second_webkitprerenderstart"); }, false);
- secondPrerender.addEventListener('webkitprerenderstop', function() { log("second_webkitprerenderstop"); }, false);
- secondPrerender.addEventListener('webkitprerenderload', function() { log("second_webkitprerenderload"); }, false);
- secondPrerender.addEventListener('webkitprerenderdomcontentloaded', function() { log("second_webkitprerenderdomcontentloaded"); }, false);
-
function addThirdPrerender()
{
var emptyParagraph = document.getElementById("emptyParagraph");
- emptyParagraph.innerHTML = '<link id="thirdPrerender" rel=prerender href="http://third-prererender.com/"/>';
+ emptyParagraph.innerHTML = '<link id="thirdPrerender" rel=prerender href="/third"/>';
var thirdPrerender = document.getElementById('thirdPrerender');
-
- thirdPrerender.addEventListener('webkitprerenderstart', function() { log("third_webkitprerenderstart"); }, false);
- thirdPrerender.addEventListener('webkitprerenderstop', function() { log("third_webkitprerenderstop"); }, false);
- thirdPrerender.addEventListener('webkitprerenderload', function() { log("third_webkitprerenderload"); }, false);
- thirdPrerender.addEventListener('webkitprerenderdomcontentloaded', function() { log("third_webkitprerenderdomcontentloaded"); }, false);
}
</script>
</body>
diff --git a/chromium/third_party/blink/renderer/core/testing/data/prerender/single_prerender.html b/chromium/third_party/blink/renderer/core/testing/data/prerender/single_prerender.html
index 00d42c01269..9d89474ff6e 100644
--- a/chromium/third_party/blink/renderer/core/testing/data/prerender/single_prerender.html
+++ b/chromium/third_party/blink/renderer/core/testing/data/prerender/single_prerender.html
@@ -1,19 +1,7 @@
<html>
- <head>
- <script>
- function log(message)
- {
- var item = document.createElement("li");
- item.appendChild(document.createTextNode(message));
- document.getElementById("console").appendChild(item);
- }
- </script>
- </head>
+ <head></head>
<body>
- <ul id=console>
- </ul>
-
- <link id="theprerender" rel=prerender href="http://prerender.com/"/>
+ <link id="theprerender" rel=prerender href="/prerender"/>
<script>
var prerender = document.getElementById('theprerender');
@@ -27,19 +15,14 @@
function mutateTarget()
{
var link = document.getElementById('theprerender');
- link.href = "http://mutated.com/";
+ link.href = "/mutated";
}
function mutateRel()
{
var link = document.getElementById('theprerender');
- link.rel = "something-else";
+ link.rel = "/something-else";
}
-
- prerender.addEventListener('webkitprerenderstart', function() { log("webkitprerenderstart"); }, false);
- prerender.addEventListener('webkitprerenderstop', function() { log("webkitprerenderstop"); }, false);
- prerender.addEventListener('webkitprerenderload', function() { log("webkitprerenderload"); }, false);
- prerender.addEventListener('webkitprerenderdomcontentloaded', function() { log("webkitprerenderdomcontentloaded"); }, false);
</script>
</body>
</html>
diff --git a/chromium/third_party/blink/renderer/core/testing/dictionary_test.cc b/chromium/third_party/blink/renderer/core/testing/dictionary_test.cc
index 15f6ecf7d97..f8e211610d2 100644
--- a/chromium/third_party/blink/renderer/core/testing/dictionary_test.cc
+++ b/chromium/third_party/blink/renderer/core/testing/dictionary_test.cc
@@ -66,8 +66,10 @@ void DictionaryTest::set(const InternalDictionary* testing_dictionary) {
enum_or_null_member_ = testing_dictionary->enumOrNullMember();
if (testing_dictionary->hasElementMember())
element_member_ = testing_dictionary->elementMember();
- if (testing_dictionary->hasElementOrNullMember())
+ if (testing_dictionary->hasElementOrNullMember()) {
element_or_null_member_ = testing_dictionary->elementOrNullMember();
+ has_element_or_null_member_ = true;
+ }
if (testing_dictionary->hasObjectMember())
object_member_ = testing_dictionary->objectMember();
object_or_null_member_with_default_ =
@@ -75,7 +77,9 @@ void DictionaryTest::set(const InternalDictionary* testing_dictionary) {
if (testing_dictionary->hasDoubleOrStringMember())
double_or_string_member_ = testing_dictionary->doubleOrStringMember();
if (testing_dictionary->hasDoubleOrStringSequenceMember()) {
- double_or_string_sequence_member_ =
+ double_or_string_sequence_or_null_member_ =
+ MakeGarbageCollected<HeapVector<DoubleOrString>>();
+ *double_or_string_sequence_or_null_member_ =
testing_dictionary->doubleOrStringSequenceMember();
}
// eventTargetOrNullMember has a default null value.
@@ -149,10 +153,12 @@ void DictionaryTest::Reset() {
enum_member_with_default_ = String();
enum_or_null_member_ = base::nullopt;
element_member_ = nullptr;
- element_or_null_member_.reset();
+ element_or_null_member_.Clear();
+ has_element_or_null_member_ = false;
object_member_ = ScriptValue();
object_or_null_member_with_default_ = ScriptValue();
double_or_string_member_ = DoubleOrString();
+ double_or_string_sequence_or_null_member_ = nullptr;
event_target_or_null_member_ = nullptr;
derived_string_member_ = base::nullopt;
derived_string_member_with_default_ = String();
@@ -211,15 +217,15 @@ void DictionaryTest::GetInternals(InternalDictionary* dict) {
dict->setEnumOrNullMember(enum_or_null_member_.value());
if (element_member_)
dict->setElementMember(element_member_);
- if (element_or_null_member_.has_value())
- dict->setElementOrNullMember(element_or_null_member_.value());
+ if (has_element_or_null_member_)
+ dict->setElementOrNullMember(element_or_null_member_);
dict->setObjectMember(object_member_);
dict->setObjectOrNullMemberWithDefault(object_or_null_member_with_default_);
if (!double_or_string_member_.IsNull())
dict->setDoubleOrStringMember(double_or_string_member_);
- if (double_or_string_sequence_member_) {
+ if (double_or_string_sequence_or_null_member_) {
dict->setDoubleOrStringSequenceMember(
- double_or_string_sequence_member_.value());
+ *double_or_string_sequence_or_null_member_);
}
dict->setEventTargetOrNullMember(event_target_or_null_member_);
dict->setInternalEnumOrInternalEnumSequenceMember(
@@ -251,7 +257,7 @@ void DictionaryTest::Trace(Visitor* visitor) const {
visitor->Trace(element_or_null_member_);
visitor->Trace(object_member_);
visitor->Trace(object_or_null_member_with_default_);
- visitor->Trace(double_or_string_sequence_member_);
+ visitor->Trace(double_or_string_sequence_or_null_member_);
visitor->Trace(event_target_or_null_member_);
visitor->Trace(any_member_);
visitor->Trace(callback_function_member_);
diff --git a/chromium/third_party/blink/renderer/core/testing/dictionary_test.h b/chromium/third_party/blink/renderer/core/testing/dictionary_test.h
index 1840a361d37..5bbd24c53a3 100644
--- a/chromium/third_party/blink/renderer/core/testing/dictionary_test.h
+++ b/chromium/third_party/blink/renderer/core/testing/dictionary_test.h
@@ -56,6 +56,8 @@ class DictionaryTest : public ScriptWrappable {
// Some members are not wrapped with Optional because:
// - |longMemberWithDefault| has a non-null default value
// - String and PtrTypes can express whether they are null
+ // - base::Optional does not work with GarbageCollected types when used on
+ // heap.
base::Optional<int> long_member_;
base::Optional<int> long_member_with_clamp_;
base::Optional<int> long_member_with_enforce_range_;
@@ -82,11 +84,12 @@ class DictionaryTest : public ScriptWrappable {
base::Optional<String> enum_or_null_member_;
#endif
Member<Element> element_member_;
- base::Optional<Member<Element>> element_or_null_member_;
+ Member<Element> element_or_null_member_;
+ bool has_element_or_null_member_ = false;
ScriptValue object_member_;
ScriptValue object_or_null_member_with_default_;
DoubleOrString double_or_string_member_;
- base::Optional<HeapVector<DoubleOrString>> double_or_string_sequence_member_;
+ Member<HeapVector<DoubleOrString>> double_or_string_sequence_or_null_member_;
Member<EventTarget> event_target_or_null_member_;
base::Optional<String> derived_string_member_;
String derived_string_member_with_default_;
diff --git a/chromium/third_party/blink/renderer/core/testing/dummy_modulator.cc b/chromium/third_party/blink/renderer/core/testing/dummy_modulator.cc
index 876b7cb4c82..de225c91f58 100644
--- a/chromium/third_party/blink/renderer/core/testing/dummy_modulator.cc
+++ b/chromium/third_party/blink/renderer/core/testing/dummy_modulator.cc
@@ -6,6 +6,7 @@
#include "third_party/blink/renderer/bindings/core/v8/module_record.h"
#include "third_party/blink/renderer/bindings/core/v8/script_value.h"
+#include "third_party/blink/renderer/core/loader/modulescript/module_script_creation_params.h"
#include "third_party/blink/renderer/core/script/module_record_resolver.h"
namespace blink {
@@ -27,7 +28,7 @@ class EmptyModuleRecordResolver final : public ModuleRecordResolver {
return nullptr;
}
- v8::Local<v8::Module> Resolve(const String& specifier,
+ v8::Local<v8::Module> Resolve(const ModuleRequest& module_request,
v8::Local<v8::Module> referrer,
ExceptionState&) override {
NOTREACHED();
@@ -74,6 +75,7 @@ base::SingleThreadTaskRunner* DummyModulator::TaskRunner() {
}
void DummyModulator::FetchTree(const KURL&,
+ ModuleType,
ResourceFetcher*,
mojom::blink::RequestContextType,
network::mojom::RequestDestination,
@@ -100,7 +102,7 @@ void DummyModulator::FetchDescendantsForInlineScript(
NOTREACHED();
}
-ModuleScript* DummyModulator::GetFetchedModuleScript(const KURL&) {
+ModuleScript* DummyModulator::GetFetchedModuleScript(const KURL&, ModuleType) {
NOTREACHED();
return nullptr;
}
@@ -116,7 +118,7 @@ bool DummyModulator::HasValidContext() {
return true;
}
-void DummyModulator::ResolveDynamically(const String&,
+void DummyModulator::ResolveDynamically(const ModuleRequest& module_request,
const KURL&,
const ReferrerScriptInfo&,
ScriptPromiseResolver*) {
@@ -137,12 +139,13 @@ void DummyModulator::RegisterImportMap(const ImportMap*,
NOTREACHED();
}
-bool DummyModulator::IsAcquiringImportMaps() const {
+Modulator::AcquiringImportMapsState
+DummyModulator::GetAcquiringImportMapsState() const {
NOTREACHED();
- return true;
+ return AcquiringImportMapsState::kAcquiring;
}
-void DummyModulator::ClearIsAcquiringImportMaps() {
+void DummyModulator::SetAcquiringImportMapsState(AcquiringImportMapsState) {
NOTREACHED();
}
@@ -169,9 +172,32 @@ Vector<ModuleRequest> DummyModulator::ModuleRequestsFromModuleRecord(
return Vector<ModuleRequest>();
}
+ModuleType DummyModulator::ModuleTypeFromRequest(
+ const ModuleRequest& module_request) const {
+ String module_type_string = module_request.GetModuleTypeString();
+ if (module_type_string.IsNull()) {
+ // Per https://github.com/whatwg/html/pull/5883, if no type assertion is
+ // provided then the import should be treated as a JavaScript module.
+ return ModuleType::kJavaScript;
+ } else if (module_type_string == "json") {
+ // Per https://github.com/whatwg/html/pull/5658, a "json" type assertion
+ // indicates that the import should be treated as a JSON module script.
+ return ModuleType::kJSON;
+ } else if (module_type_string == "css") {
+ // Per https://github.com/whatwg/html/pull/4898, a "css" type assertion
+ // indicates that the import should be treated as a CSS module script.
+ return ModuleType::kCSS;
+ } else {
+ // Per https://github.com/whatwg/html/pull/5883, if an unsupported type
+ // assertion is provided then the import should be treated as an error
+ // similar to an invalid module specifier.
+ return ModuleType::kInvalid;
+ }
+}
+
ModuleScriptFetcher* DummyModulator::CreateModuleScriptFetcher(
ModuleScriptCustomFetchType,
- util::PassKey<ModuleScriptLoader> pass_key) {
+ base::PassKey<ModuleScriptLoader> pass_key) {
NOTREACHED();
return nullptr;
}
diff --git a/chromium/third_party/blink/renderer/core/testing/dummy_modulator.h b/chromium/third_party/blink/renderer/core/testing/dummy_modulator.h
index 19f1523b75c..13a7f2ae8fb 100644
--- a/chromium/third_party/blink/renderer/core/testing/dummy_modulator.h
+++ b/chromium/third_party/blink/renderer/core/testing/dummy_modulator.h
@@ -40,6 +40,7 @@ class DummyModulator : public Modulator {
bool ImportMapsEnabled() const override;
void FetchTree(const KURL&,
+ ModuleType,
ResourceFetcher*,
mojom::blink::RequestContextType context_type,
network::mojom::RequestDestination destination,
@@ -57,10 +58,10 @@ class DummyModulator : public Modulator {
mojom::blink::RequestContextType context_type,
network::mojom::RequestDestination destination,
ModuleTreeClient*) override;
- ModuleScript* GetFetchedModuleScript(const KURL&) override;
+ ModuleScript* GetFetchedModuleScript(const KURL&, ModuleType) override;
KURL ResolveModuleSpecifier(const String&, const KURL&, String*) override;
bool HasValidContext() override;
- void ResolveDynamically(const String& specifier,
+ void ResolveDynamically(const ModuleRequest& module_request,
const KURL&,
const ReferrerScriptInfo&,
ScriptPromiseResolver*) override;
@@ -68,17 +69,19 @@ class DummyModulator : public Modulator {
ScriptValue CreateSyntaxError(const String& message) const override;
void RegisterImportMap(const ImportMap*,
ScriptValue error_to_rethrow) override;
- bool IsAcquiringImportMaps() const override;
- void ClearIsAcquiringImportMaps() override;
+ AcquiringImportMapsState GetAcquiringImportMapsState() const override;
+ void SetAcquiringImportMapsState(AcquiringImportMapsState) override;
ModuleImportMeta HostGetImportMetaProperties(
v8::Local<v8::Module>) const override;
const ImportMap* GetImportMapForTest() const override;
ScriptValue InstantiateModule(v8::Local<v8::Module>, const KURL&) override;
Vector<ModuleRequest> ModuleRequestsFromModuleRecord(
v8::Local<v8::Module>) override;
+ ModuleType ModuleTypeFromRequest(
+ const ModuleRequest& module_request) const override;
ModuleScriptFetcher* CreateModuleScriptFetcher(
ModuleScriptCustomFetchType,
- util::PassKey<ModuleScriptLoader>) override;
+ base::PassKey<ModuleScriptLoader>) override;
void ProduceCacheModuleTreeTopLevel(ModuleScript*) override;
Member<ModuleRecordResolver> resolver_;
diff --git a/chromium/third_party/blink/renderer/core/testing/dummy_page_holder.cc b/chromium/third_party/blink/renderer/core/testing/dummy_page_holder.cc
index 84b56a35610..07c2ea23f5a 100644
--- a/chromium/third_party/blink/renderer/core/testing/dummy_page_holder.cc
+++ b/chromium/third_party/blink/renderer/core/testing/dummy_page_holder.cc
@@ -33,7 +33,10 @@
#include <memory>
#include "base/memory/ptr_util.h"
+#include "third_party/blink/public/common/tokens/tokens.h"
#include "third_party/blink/public/mojom/frame/policy_container.mojom-blink.h"
+#include "third_party/blink/public/platform/scheduler/web_agent_group_scheduler.h"
+#include "third_party/blink/public/platform/scheduler/web_thread_scheduler.h"
#include "third_party/blink/public/platform/web_url_loader_mock_factory.h"
#include "third_party/blink/renderer/core/core_initializer.h"
#include "third_party/blink/renderer/core/frame/local_dom_window.h"
@@ -44,6 +47,8 @@
#include "third_party/blink/renderer/core/loader/empty_clients.h"
#include "third_party/blink/renderer/platform/heap/heap.h"
#include "third_party/blink/renderer/platform/loader/testing/web_url_loader_factory_with_mock.h"
+#include "third_party/blink/renderer/platform/scheduler/public/thread.h"
+#include "third_party/blink/renderer/platform/scheduler/public/thread_scheduler.h"
#include "third_party/blink/renderer/platform/wtf/assertions.h"
namespace blink {
@@ -69,13 +74,15 @@ DummyPageHolder::DummyPageHolder(
LocalFrameClient* local_frame_client,
base::OnceCallback<void(Settings&)> setting_overrider,
const base::TickClock* clock)
- : enable_mock_scrollbars_(true) {
+ : enable_mock_scrollbars_(true),
+ agent_group_scheduler_(
+ Thread::MainThread()->Scheduler()->CreateAgentGroupScheduler()) {
Page::PageClients page_clients;
if (!page_clients_argument)
FillWithEmptyClients(page_clients);
else
page_clients.chrome_client = page_clients_argument->chrome_client;
- page_ = Page::CreateNonOrdinary(page_clients);
+ page_ = Page::CreateNonOrdinary(page_clients, *agent_group_scheduler_);
Settings& settings = page_->GetSettings();
if (setting_overrider)
std::move(setting_overrider).Run(settings);
@@ -84,23 +91,14 @@ DummyPageHolder::DummyPageHolder(
if (!local_frame_client_)
local_frame_client_ = MakeGarbageCollected<DummyLocalFrameClient>();
- mojo::PendingAssociatedRemote<mojom::blink::PolicyContainerHost>
- stub_policy_container_remote;
- ignore_result(
- stub_policy_container_remote.InitWithNewEndpointAndPassReceiver());
-
// Create new WindowAgentFactory as this page will be isolated from others.
frame_ = MakeGarbageCollected<LocalFrame>(
local_frame_client_.Get(), *page_,
/* FrameOwner* */ nullptr, /* Frame* parent */ nullptr,
/* Frame* previous_sibling */ nullptr,
- FrameInsertType::kInsertInConstructor, base::UnguessableToken::Create(),
+ FrameInsertType::kInsertInConstructor, LocalFrameToken(),
/* WindowAgentFactory* */ nullptr,
- /* InterfaceRegistry* */ nullptr,
- std::make_unique<PolicyContainer>(
- std::move(stub_policy_container_remote),
- mojom::blink::PolicyContainerDocumentPolicies::New()),
- clock);
+ /* InterfaceRegistry* */ nullptr, /* policy_container */ nullptr, clock);
frame_->SetView(
MakeGarbageCollected<LocalFrameView>(*frame_, initial_view_size));
frame_->View()->GetPage()->GetVisualViewport().SetSize(initial_view_size);
diff --git a/chromium/third_party/blink/renderer/core/testing/dummy_page_holder.h b/chromium/third_party/blink/renderer/core/testing/dummy_page_holder.h
index be7505bb55a..c0994380565 100644
--- a/chromium/third_party/blink/renderer/core/testing/dummy_page_holder.h
+++ b/chromium/third_party/blink/renderer/core/testing/dummy_page_holder.h
@@ -99,6 +99,7 @@ class DummyPageHolder {
CrossThreadPersistent<LocalFrame> frame_;
Persistent<LocalFrameClient> local_frame_client_;
+ std::unique_ptr<scheduler::WebAgentGroupScheduler> agent_group_scheduler_;
DISALLOW_COPY_AND_ASSIGN(DummyPageHolder);
};
diff --git a/chromium/third_party/blink/renderer/core/testing/fake_local_frame_host.cc b/chromium/third_party/blink/renderer/core/testing/fake_local_frame_host.cc
index d24d6cab43f..77c2f0d7a33 100644
--- a/chromium/third_party/blink/renderer/core/testing/fake_local_frame_host.cc
+++ b/chromium/third_party/blink/renderer/core/testing/fake_local_frame_host.cc
@@ -25,7 +25,9 @@ void FakeLocalFrameHost::EnterFullscreen(
void FakeLocalFrameHost::ExitFullscreen() {}
-void FakeLocalFrameHost::FullscreenStateChanged(bool is_fullscreen) {}
+void FakeLocalFrameHost::FullscreenStateChanged(
+ bool is_fullscreen,
+ mojom::blink::FullscreenOptionsPtr options) {}
void FakeLocalFrameHost::RegisterProtocolHandler(const WTF::String& scheme,
const ::blink::KURL& url,
@@ -175,6 +177,11 @@ void FakeLocalFrameHost::ShowPopupMenu(
bool right_aligned,
bool allow_multiple_selection) {}
+void FakeLocalFrameHost::ShowContextMenu(
+ mojo::PendingAssociatedRemote<mojom::blink::ContextMenuClient>
+ context_menu_client,
+ const blink::UntrustworthyContextMenuParams& params) {}
+
void FakeLocalFrameHost::DidLoadResourceFromMemoryCache(
const KURL& url,
const WTF::String& http_method,
@@ -182,30 +189,41 @@ void FakeLocalFrameHost::DidLoadResourceFromMemoryCache(
network::mojom::blink::RequestDestination request_destination) {}
void FakeLocalFrameHost::DidChangeFrameOwnerProperties(
- const base::UnguessableToken& child_frame_token,
+ const blink::FrameToken& child_frame_token,
mojom::blink::FrameOwnerPropertiesPtr frame_owner_properties) {}
void FakeLocalFrameHost::DidChangeOpener(
- const base::Optional<base::UnguessableToken>& opener_frame) {}
+ const base::Optional<LocalFrameToken>& opener_frame) {}
void FakeLocalFrameHost::DidChangeCSPAttribute(
- const base::UnguessableToken& child_frame_token,
+ const blink::FrameToken& child_frame_token,
network::mojom::blink::ContentSecurityPolicyPtr) {}
void FakeLocalFrameHost::DidChangeFramePolicy(
- const base::UnguessableToken& child_frame_token,
+ const blink::FrameToken& child_frame_token,
const FramePolicy& frame_policy) {}
-void FakeLocalFrameHost::BindPolicyContainer(
- mojo::PendingAssociatedReceiver<mojom::blink::PolicyContainerHost>
- receiver) {}
-
void FakeLocalFrameHost::CapturePaintPreviewOfSubframe(
const gfx::Rect& clip_rect,
const base::UnguessableToken& guid) {}
+void FakeLocalFrameHost::SetModalCloseListener(
+ mojo::PendingRemote<mojom::blink::ModalCloseListener>) {}
+
void FakeLocalFrameHost::Detach() {}
+void FakeLocalFrameHost::GetKeepAliveHandleFactory(
+ mojo::PendingReceiver<mojom::blink::KeepAliveHandleFactory> receiver) {}
+
+void FakeLocalFrameHost::DidAddMessageToConsole(
+ mojom::ConsoleMessageLevel log_level,
+ const WTF::String& message,
+ int32_t line_no,
+ const WTF::String& source_id,
+ const WTF::String& untrusted_stack_trace) {}
+
+void FakeLocalFrameHost::FrameSizeChanged(const gfx::Size& frame_size) {}
+
void FakeLocalFrameHost::BindFrameHostReceiver(
mojo::ScopedInterfaceEndpointHandle handle) {
receiver_.Bind(mojo::PendingAssociatedReceiver<mojom::blink::LocalFrameHost>(
diff --git a/chromium/third_party/blink/renderer/core/testing/fake_local_frame_host.h b/chromium/third_party/blink/renderer/core/testing/fake_local_frame_host.h
index 84b55274873..4f6b1c7b33b 100644
--- a/chromium/third_party/blink/renderer/core/testing/fake_local_frame_host.h
+++ b/chromium/third_party/blink/renderer/core/testing/fake_local_frame_host.h
@@ -8,6 +8,8 @@
#include "mojo/public/cpp/bindings/associated_receiver_set.h"
#include "mojo/public/cpp/bindings/pending_associated_receiver.h"
#include "third_party/blink/public/common/associated_interfaces/associated_interface_provider.h"
+#include "third_party/blink/public/common/context_menu_data/untrustworthy_context_menu_params.h"
+#include "third_party/blink/public/mojom/context_menu/context_menu.mojom-blink.h"
#include "third_party/blink/public/mojom/favicon/favicon_url.mojom-blink.h"
#include "third_party/blink/public/mojom/frame/frame.mojom-blink.h"
#include "third_party/blink/public/mojom/frame/policy_container.mojom-blink.h"
@@ -27,7 +29,9 @@ class FakeLocalFrameHost : public mojom::blink::LocalFrameHost {
void EnterFullscreen(mojom::blink::FullscreenOptionsPtr options,
EnterFullscreenCallback callback) override;
void ExitFullscreen() override;
- void FullscreenStateChanged(bool is_fullscreen) override;
+ void FullscreenStateChanged(
+ bool is_fullscreen,
+ mojom::blink::FullscreenOptionsPtr options) override;
void RegisterProtocolHandler(const WTF::String& scheme,
const ::blink::KURL& url,
bool user_gesture) override;
@@ -111,28 +115,41 @@ class FakeLocalFrameHost : public mojom::blink::LocalFrameHost {
Vector<mojom::blink::MenuItemPtr> menu_items,
bool right_aligned,
bool allow_multiple_selection) override;
+ void ShowContextMenu(
+ mojo::PendingAssociatedRemote<mojom::blink::ContextMenuClient>
+ context_menu_client,
+ const blink::UntrustworthyContextMenuParams& params) override;
void DidLoadResourceFromMemoryCache(
const KURL& url,
const WTF::String& http_method,
const WTF::String& mime_type,
network::mojom::blink::RequestDestination request_destination) override;
void DidChangeFrameOwnerProperties(
- const base::UnguessableToken& child_frame_token,
+ const blink::FrameToken& child_frame_token,
mojom::blink::FrameOwnerPropertiesPtr frame_owner_properties) override;
void DidChangeOpener(
- const base::Optional<base::UnguessableToken>& opener_frame) override;
- void DidChangeCSPAttribute(const base::UnguessableToken& child_frame_token,
+ const base::Optional<LocalFrameToken>& opener_frame) override;
+ void DidChangeCSPAttribute(const blink::FrameToken& child_frame_token,
network::mojom::blink::ContentSecurityPolicyPtr
parsed_csp_attribute) override;
- void DidChangeFramePolicy(const base::UnguessableToken& child_frame_token,
+ void DidChangeFramePolicy(const blink::FrameToken& child_frame_token,
const FramePolicy& frame_policy) override;
- void BindPolicyContainer(
- mojo::PendingAssociatedReceiver<mojom::blink::PolicyContainerHost>
- receiver) override;
void CapturePaintPreviewOfSubframe(
const gfx::Rect& clip_rect,
const base::UnguessableToken& guid) override;
+ void SetModalCloseListener(
+ mojo::PendingRemote<mojom::blink::ModalCloseListener>) override;
void Detach() override;
+ void GetKeepAliveHandleFactory(
+ mojo::PendingReceiver<mojom::blink::KeepAliveHandleFactory> receiver)
+ override;
+ void DidAddMessageToConsole(
+ mojom::blink::ConsoleMessageLevel log_level,
+ const WTF::String& message,
+ int32_t line_no,
+ const WTF::String& source_id,
+ const WTF::String& untrusted_stack_trace) override;
+ void FrameSizeChanged(const gfx::Size& frame_size) override;
private:
void BindFrameHostReceiver(mojo::ScopedInterfaceEndpointHandle handle);
diff --git a/chromium/third_party/blink/renderer/core/testing/fake_remote_frame_host.cc b/chromium/third_party/blink/renderer/core/testing/fake_remote_frame_host.cc
index 67e82050b35..a4d2140015e 100644
--- a/chromium/third_party/blink/renderer/core/testing/fake_remote_frame_host.cc
+++ b/chromium/third_party/blink/renderer/core/testing/fake_remote_frame_host.cc
@@ -17,8 +17,8 @@ void FakeRemoteFrameHost::SetInheritedEffectiveTouchAction(
cc::TouchAction touch_action) {}
void FakeRemoteFrameHost::UpdateRenderThrottlingStatus(bool is_throttled,
- bool subtree_throttled) {
-}
+ bool subtree_throttled,
+ bool display_locked) {}
void FakeRemoteFrameHost::VisibilityChanged(
mojom::blink::FrameVisibility visibility) {}
@@ -34,14 +34,14 @@ void FakeRemoteFrameHost::CapturePaintPreviewOfCrossProcessSubframe(
void FakeRemoteFrameHost::SetIsInert(bool inert) {}
void FakeRemoteFrameHost::DidChangeOpener(
- const base::Optional<base::UnguessableToken>& opener_frame_token) {}
+ const base::Optional<LocalFrameToken>& opener_frame_token) {}
void FakeRemoteFrameHost::AdvanceFocus(
blink::mojom::FocusType focus_type,
- const base::UnguessableToken& source_frame_token) {}
+ const LocalFrameToken& source_frame_token) {}
void FakeRemoteFrameHost::RouteMessageEvent(
- const base::Optional<base::UnguessableToken>& source_frame_token,
+ const base::Optional<LocalFrameToken>& source_frame_token,
const String& source_origin,
const String& target_origin,
BlinkTransferableMessage message) {}
@@ -52,7 +52,11 @@ void FakeRemoteFrameHost::PrintCrossProcessSubframe(const gfx::Rect& rect,
void FakeRemoteFrameHost::Detach() {}
void FakeRemoteFrameHost::UpdateViewportIntersection(
- blink::mojom::blink::ViewportIntersectionStatePtr intersection_state) {}
+ blink::mojom::blink::ViewportIntersectionStatePtr intersection_state,
+ const base::Optional<FrameVisualProperties>& visual_properties) {}
+
+void FakeRemoteFrameHost::SynchronizeVisualProperties(
+ const blink::FrameVisualProperties& properties) {}
void FakeRemoteFrameHost::BindFrameHostReceiver(
mojo::ScopedInterfaceEndpointHandle handle) {
diff --git a/chromium/third_party/blink/renderer/core/testing/fake_remote_frame_host.h b/chromium/third_party/blink/renderer/core/testing/fake_remote_frame_host.h
index 3b8c60293d1..91a1d719ee4 100644
--- a/chromium/third_party/blink/renderer/core/testing/fake_remote_frame_host.h
+++ b/chromium/third_party/blink/renderer/core/testing/fake_remote_frame_host.h
@@ -10,6 +10,7 @@
#include "mojo/public/cpp/bindings/associated_receiver_set.h"
#include "mojo/public/cpp/bindings/pending_associated_receiver.h"
#include "third_party/blink/public/common/associated_interfaces/associated_interface_provider.h"
+#include "third_party/blink/public/common/frame/frame_visual_properties.h"
#include "third_party/blink/public/mojom/frame/frame.mojom-blink.h"
#include "third_party/blink/renderer/core/messaging/blink_transferable_message.h"
@@ -26,7 +27,8 @@ class FakeRemoteFrameHost : public mojom::blink::RemoteFrameHost {
void Init(blink::AssociatedInterfaceProvider* provider);
void SetInheritedEffectiveTouchAction(cc::TouchAction touch_action) override;
void UpdateRenderThrottlingStatus(bool is_throttled,
- bool subtree_throttled) override;
+ bool subtree_throttled,
+ bool display_locked) override;
void VisibilityChanged(mojom::blink::FrameVisibility visibility) override;
void DidFocusFrame() override;
void CheckCompleted() override;
@@ -35,11 +37,11 @@ class FakeRemoteFrameHost : public mojom::blink::RemoteFrameHost {
const base::UnguessableToken& guid) override;
void SetIsInert(bool inert) override;
void DidChangeOpener(
- const base::Optional<base::UnguessableToken>& opener_frame) override;
+ const base::Optional<LocalFrameToken>& opener_frame) override;
void AdvanceFocus(blink::mojom::FocusType focus_type,
- const base::UnguessableToken& source_frame_token) override;
+ const LocalFrameToken& source_frame_token) override;
void RouteMessageEvent(
- const base::Optional<base::UnguessableToken>& source_frame_token,
+ const base::Optional<LocalFrameToken>& source_frame_token,
const String& source_origin,
const String& target_origin,
BlinkTransferableMessage message) override;
@@ -47,8 +49,11 @@ class FakeRemoteFrameHost : public mojom::blink::RemoteFrameHost {
int document_cookie) override;
void Detach() override;
void UpdateViewportIntersection(
- blink::mojom::blink::ViewportIntersectionStatePtr intersection_state)
- override;
+ blink::mojom::blink::ViewportIntersectionStatePtr intersection_state,
+ const base::Optional<FrameVisualProperties>& visual_properties) override;
+
+ void SynchronizeVisualProperties(
+ const blink::FrameVisualProperties& properties) override;
private:
void BindFrameHostReceiver(mojo::ScopedInterfaceEndpointHandle handle);
diff --git a/chromium/third_party/blink/renderer/core/testing/fake_web_plugin.h b/chromium/third_party/blink/renderer/core/testing/fake_web_plugin.h
index 93d00dad31f..cf5e751cfa0 100644
--- a/chromium/third_party/blink/renderer/core/testing/fake_web_plugin.h
+++ b/chromium/third_party/blink/renderer/core/testing/fake_web_plugin.h
@@ -55,10 +55,10 @@ class FakeWebPlugin : public WebPlugin {
void Destroy() override;
bool CanProcessDrag() const override { return false; }
void UpdateAllLifecyclePhases(blink::DocumentUpdateReason) override {}
- void Paint(cc::PaintCanvas*, const WebRect&) override {}
- void UpdateGeometry(const WebRect& client_rect,
- const WebRect& clip_rect,
- const WebRect& window_clip_rect,
+ void Paint(cc::PaintCanvas*, const gfx::Rect&) override {}
+ void UpdateGeometry(const gfx::Rect& client_rect,
+ const gfx::Rect& clip_rect,
+ const gfx::Rect& window_clip_rect,
bool is_visible) override {}
void UpdateFocus(bool, mojom::blink::FocusType) override {}
void UpdateVisibility(bool) override {}
diff --git a/chromium/third_party/blink/renderer/core/testing/internal_settings.cc b/chromium/third_party/blink/renderer/core/testing/internal_settings.cc
index 99aebc4f3a4..bb4fc83e71b 100644
--- a/chromium/third_party/blink/renderer/core/testing/internal_settings.cc
+++ b/chromium/third_party/blink/renderer/core/testing/internal_settings.cc
@@ -57,13 +57,16 @@
namespace blink {
+using mojom::blink::HoverType;
+using mojom::blink::PointerType;
+
InternalSettings::Backup::Backup(Settings* settings)
: original_csp_(RuntimeEnabledFeatures::
ExperimentalContentSecurityPolicyFeaturesEnabled()),
original_editing_behavior_(settings->GetEditingBehaviorType()),
- original_text_autosizing_enabled_(settings->TextAutosizingEnabled()),
+ original_text_autosizing_enabled_(settings->GetTextAutosizingEnabled()),
original_text_autosizing_window_size_override_(
- settings->TextAutosizingWindowSizeOverride()),
+ settings->GetTextAutosizingWindowSizeOverride()),
original_accessibility_font_scale_factor_(
settings->GetAccessibilityFontScaleFactor()),
original_media_type_override_(settings->GetMediaTypeOverride()),
@@ -121,7 +124,7 @@ void InternalSettings::ResetToConsistentState() {
backup_.RestoreTo(GetSettings());
backup_ = Backup(GetSettings());
backup_.original_text_autosizing_enabled_ =
- GetSettings()->TextAutosizingEnabled();
+ GetSettings()->GetTextAutosizingEnabled();
InternalSettingsGenerated::resetToConsistentState();
}
@@ -373,11 +376,11 @@ void InternalSettings::setAvailablePointerTypes(
String token = split_token.StripWhiteSpace();
if (token == "coarse") {
- pointer_types |= ui::POINTER_TYPE_COARSE;
+ pointer_types |= static_cast<int>(PointerType::kPointerCoarseType);
} else if (token == "fine") {
- pointer_types |= ui::POINTER_TYPE_FINE;
+ pointer_types |= static_cast<int>(PointerType::kPointerFineType);
} else if (token == "none") {
- pointer_types |= ui::POINTER_TYPE_NONE;
+ pointer_types |= static_cast<int>(PointerType::kPointerNone);
} else {
exception_state.ThrowDOMException(
DOMExceptionCode::kSyntaxError,
@@ -418,13 +421,13 @@ void InternalSettings::setPrimaryPointerType(const String& pointer,
InternalSettingsGuardForSettings();
String token = pointer.StripWhiteSpace();
- ui::PointerType type = ui::POINTER_TYPE_NONE;
+ PointerType type = PointerType::kPointerNone;
if (token == "coarse") {
- type = ui::POINTER_TYPE_COARSE;
+ type = PointerType::kPointerCoarseType;
} else if (token == "fine") {
- type = ui::POINTER_TYPE_FINE;
+ type = PointerType::kPointerFineType;
} else if (token == "none") {
- type = ui::POINTER_TYPE_NONE;
+ type = PointerType::kPointerNone;
} else {
exception_state.ThrowDOMException(
DOMExceptionCode::kSyntaxError,
@@ -448,9 +451,9 @@ void InternalSettings::setAvailableHoverTypes(const String& types,
for (const String& split_token : tokens) {
String token = split_token.StripWhiteSpace();
if (token == "none") {
- hover_types |= ui::HOVER_TYPE_NONE;
+ hover_types |= static_cast<int>(HoverType::kHoverNone);
} else if (token == "hover") {
- hover_types |= ui::HOVER_TYPE_HOVER;
+ hover_types |= static_cast<int>(HoverType::kHoverHoverType);
} else {
exception_state.ThrowDOMException(
DOMExceptionCode::kSyntaxError,
@@ -467,11 +470,11 @@ void InternalSettings::setPrimaryHoverType(const String& type,
InternalSettingsGuardForSettings();
String token = type.StripWhiteSpace();
- ui::HoverType hover_type = ui::HOVER_TYPE_NONE;
+ HoverType hover_type = HoverType::kHoverNone;
if (token == "none") {
- hover_type = ui::HOVER_TYPE_NONE;
+ hover_type = HoverType::kHoverNone;
} else if (token == "hover") {
- hover_type = ui::HOVER_TYPE_HOVER;
+ hover_type = HoverType::kHoverHoverType;
} else {
exception_state.ThrowDOMException(
DOMExceptionCode::kSyntaxError,
diff --git a/chromium/third_party/blink/renderer/core/testing/internals.cc b/chromium/third_party/blink/renderer/core/testing/internals.cc
index eb3d6363d82..955af860a40 100644
--- a/chromium/third_party/blink/renderer/core/testing/internals.cc
+++ b/chromium/third_party/blink/renderer/core/testing/internals.cc
@@ -26,11 +26,15 @@
#include "third_party/blink/renderer/core/testing/internals.h"
+#include <atomic>
#include <memory>
+#include <utility>
#include "base/macros.h"
#include "base/optional.h"
+#include "base/process/process_handle.h"
#include "cc/layers/picture_layer.h"
+#include "cc/trees/layer_tree_host.h"
#include "gpu/command_buffer/client/gles2_interface.h"
#include "third_party/blink/public/common/widget/device_emulation_params.h"
#include "third_party/blink/public/mojom/devtools/inspector_issue.mojom-blink.h"
@@ -58,7 +62,6 @@
#include "third_party/blink/renderer/core/dom/pseudo_element.h"
#include "third_party/blink/renderer/core/dom/range.h"
#include "third_party/blink/renderer/core/dom/shadow_root.h"
-#include "third_party/blink/renderer/core/dom/shadow_root_v0.h"
#include "third_party/blink/renderer/core/dom/static_node_list.h"
#include "third_party/blink/renderer/core/dom/tree_scope.h"
#include "third_party/blink/renderer/core/editing/drag_caret.h"
@@ -102,7 +105,6 @@
#include "third_party/blink/renderer/core/html/forms/html_select_element.h"
#include "third_party/blink/renderer/core/html/forms/html_text_area_element.h"
#include "third_party/blink/renderer/core/html/forms/text_control_inner_elements.h"
-#include "third_party/blink/renderer/core/html/html_content_element.h"
#include "third_party/blink/renderer/core/html/html_iframe_element.h"
#include "third_party/blink/renderer/core/html/html_image_element.h"
#include "third_party/blink/renderer/core/html/media/html_media_element.h"
@@ -139,6 +141,13 @@
#include "third_party/blink/renderer/core/scroll/programmatic_scroll_animator.h"
#include "third_party/blink/renderer/core/scroll/scroll_animator_base.h"
#include "third_party/blink/renderer/core/scroll/scrollbar_theme.h"
+#include "third_party/blink/renderer/core/streams/readable_stream.h"
+#include "third_party/blink/renderer/core/streams/readable_stream_default_controller_with_script_scope.h"
+#include "third_party/blink/renderer/core/streams/readable_stream_transferring_optimizer.h"
+#include "third_party/blink/renderer/core/streams/underlying_sink_base.h"
+#include "third_party/blink/renderer/core/streams/underlying_source_base.h"
+#include "third_party/blink/renderer/core/streams/writable_stream.h"
+#include "third_party/blink/renderer/core/streams/writable_stream_transferring_optimizer.h"
#include "third_party/blink/renderer/core/style_property_shorthand.h"
#include "third_party/blink/renderer/core/svg/svg_image_element.h"
#include "third_party/blink/renderer/core/svg_names.h"
@@ -223,6 +232,373 @@ class UseCounterHelperObserverImpl final : public UseCounterHelper::Observer {
DISALLOW_COPY_AND_ASSIGN(UseCounterHelperObserverImpl);
};
+class TestReadableStreamSource : public UnderlyingSourceBase {
+ public:
+ class Generator;
+
+ using Reply = CrossThreadOnceFunction<void(std::unique_ptr<Generator>)>;
+ using OptimizerCallback =
+ CrossThreadOnceFunction<void(scoped_refptr<base::SingleThreadTaskRunner>,
+ Reply)>;
+
+ enum class Type {
+ kWithNullOptimizer,
+ kWithPerformNullOptimizer,
+ kWithObservableOptimizer,
+ kWithPerfectOptimizer,
+ };
+
+ class Generator final {
+ USING_FAST_MALLOC(Generator);
+
+ public:
+ explicit Generator(int max_count) : max_count_(max_count) {}
+
+ base::Optional<int> Generate() {
+ if (count_ >= max_count_) {
+ return base::nullopt;
+ }
+ ++count_;
+ return current_++;
+ }
+
+ void Add(int n) { current_ += n; }
+
+ private:
+ friend class Optimizer;
+
+ int current_ = 0;
+ int count_ = 0;
+ const int max_count_;
+ };
+
+ class Optimizer final : public ReadableStreamTransferringOptimizer {
+ USING_FAST_MALLOC(Optimizer);
+
+ public:
+ Optimizer(scoped_refptr<base::SingleThreadTaskRunner> task_runner,
+ OptimizerCallback callback,
+ Type type)
+ : task_runner_(std::move(task_runner)),
+ callback_(std::move(callback)),
+ type_(type) {}
+
+ UnderlyingSourceBase* PerformInProcessOptimization(
+ ScriptState* script_state) override;
+
+ private:
+ scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
+ OptimizerCallback callback_;
+ const Type type_;
+ };
+
+ TestReadableStreamSource(ScriptState* script_state, Type type)
+ : UnderlyingSourceBase(script_state), type_(type) {}
+
+ ScriptPromise Start(ScriptState* script_state) override {
+ if (generator_) {
+ return ScriptPromise::CastUndefined(script_state);
+ }
+ resolver_ = MakeGarbageCollected<ScriptPromiseResolver>(script_state);
+ return resolver_->Promise();
+ }
+
+ ScriptPromise pull(ScriptState* script_state) override {
+ if (!generator_) {
+ return ScriptPromise::CastUndefined(script_state);
+ }
+
+ const auto result = generator_->Generate();
+ if (!result) {
+ Controller()->Close();
+ return ScriptPromise::CastUndefined(script_state);
+ }
+ Controller()->Enqueue(*result);
+ return ScriptPromise::CastUndefined(script_state);
+ }
+
+ std::unique_ptr<ReadableStreamTransferringOptimizer>
+ CreateTransferringOptimizer(ScriptState* script_state) {
+ switch (type_) {
+ case Type::kWithNullOptimizer:
+ return nullptr;
+ case Type::kWithPerformNullOptimizer:
+ return std::make_unique<ReadableStreamTransferringOptimizer>();
+ case Type::kWithObservableOptimizer:
+ case Type::kWithPerfectOptimizer:
+ ExecutionContext* context = ExecutionContext::From(script_state);
+ return std::make_unique<Optimizer>(
+ context->GetTaskRunner(TaskType::kInternalDefault),
+ CrossThreadBindOnce(&TestReadableStreamSource::Detach,
+ WrapCrossThreadWeakPersistent(this)),
+ type_);
+ }
+ }
+
+ void Attach(std::unique_ptr<Generator> generator) {
+ if (type_ == Type::kWithObservableOptimizer) {
+ generator->Add(100);
+ }
+ generator_ = std::move(generator);
+ if (resolver_) {
+ resolver_->Resolve();
+ }
+ }
+
+ void Detach(scoped_refptr<base::SingleThreadTaskRunner> task_runner,
+ Reply reply) {
+ Controller()->Close();
+ PostCrossThreadTask(
+ *task_runner, FROM_HERE,
+ CrossThreadBindOnce(std::move(reply), std::move(generator_)));
+ }
+
+ void Trace(Visitor* visitor) const override {
+ visitor->Trace(resolver_);
+ UnderlyingSourceBase::Trace(visitor);
+ }
+
+ private:
+ const Type type_;
+ std::unique_ptr<Generator> generator_;
+ Member<ScriptPromiseResolver> resolver_;
+};
+
+UnderlyingSourceBase*
+TestReadableStreamSource::Optimizer::PerformInProcessOptimization(
+ ScriptState* script_state) {
+ TestReadableStreamSource* source =
+ MakeGarbageCollected<TestReadableStreamSource>(script_state, type_);
+ ExecutionContext* context = ExecutionContext::From(script_state);
+
+ Reply reply = CrossThreadBindOnce(&TestReadableStreamSource::Attach,
+ WrapCrossThreadPersistent(source));
+
+ PostCrossThreadTask(
+ *task_runner_, FROM_HERE,
+ CrossThreadBindOnce(std::move(callback_),
+ context->GetTaskRunner(TaskType::kInternalDefault),
+ std::move(reply)));
+ return source;
+}
+
+class TestWritableStreamSink final : public UnderlyingSinkBase {
+ public:
+ class InternalSink;
+
+ using Reply = CrossThreadOnceFunction<void(std::unique_ptr<InternalSink>)>;
+ using OptimizerCallback =
+ CrossThreadOnceFunction<void(scoped_refptr<base::SingleThreadTaskRunner>,
+ Reply)>;
+ enum class Type {
+ kWithNullOptimizer,
+ kWithPerformNullOptimizer,
+ kWithObservableOptimizer,
+ kWithPerfectOptimizer,
+ };
+
+ class InternalSink final {
+ USING_FAST_MALLOC(InternalSink);
+
+ public:
+ InternalSink(scoped_refptr<base::SingleThreadTaskRunner> task_runner,
+ CrossThreadOnceFunction<void(std::string)> success_callback,
+ CrossThreadOnceFunction<void()> error_callback)
+ : task_runner_(std::move(task_runner)),
+ success_callback_(std::move(success_callback)),
+ error_callback_(std::move(error_callback)) {}
+
+ void Append(const std::string& s) { result_.append(s); }
+ void Close() {
+ PostCrossThreadTask(
+ *task_runner_, FROM_HERE,
+ CrossThreadBindOnce(std::move(success_callback_), result_));
+ }
+ void Abort() {
+ PostCrossThreadTask(*task_runner_, FROM_HERE, std::move(error_callback_));
+ }
+
+ // We don't use WTF::String because this object can be accessed from
+ // multiple threads.
+ std::string result_;
+
+ scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
+ CrossThreadOnceFunction<void(std::string)> success_callback_;
+ CrossThreadOnceFunction<void()> error_callback_;
+ };
+
+ class Optimizer final : public WritableStreamTransferringOptimizer {
+ USING_FAST_MALLOC(Optimizer);
+
+ public:
+ Optimizer(
+ scoped_refptr<base::SingleThreadTaskRunner> task_runner,
+ OptimizerCallback callback,
+ scoped_refptr<base::RefCountedData<std::atomic_bool>> optimizer_flag,
+ Type type)
+ : task_runner_(std::move(task_runner)),
+ callback_(std::move(callback)),
+ optimizer_flag_(std::move(optimizer_flag)),
+ type_(type) {}
+
+ UnderlyingSinkBase* PerformInProcessOptimization(
+ ScriptState* script_state) override;
+
+ private:
+ scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
+ OptimizerCallback callback_;
+ scoped_refptr<base::RefCountedData<std::atomic_bool>> optimizer_flag_;
+ const Type type_;
+ };
+
+ explicit TestWritableStreamSink(ScriptState* script_state, Type type)
+ : type_(type),
+ optimizer_flag_(
+ base::MakeRefCounted<base::RefCountedData<std::atomic_bool>>(
+ base::in_place,
+ false)) {}
+
+ ScriptPromise start(ScriptState* script_state,
+ WritableStreamDefaultController*,
+ ExceptionState&) override {
+ if (internal_sink_) {
+ return ScriptPromise::CastUndefined(script_state);
+ }
+ start_resolver_ = MakeGarbageCollected<ScriptPromiseResolver>(script_state);
+ return start_resolver_->Promise();
+ }
+ ScriptPromise write(ScriptState* script_state,
+ ScriptValue chunk,
+ WritableStreamDefaultController*,
+ ExceptionState&) override {
+ DCHECK(internal_sink_);
+ internal_sink_->Append(
+ ToCoreString(chunk.V8Value()
+ ->ToString(script_state->GetContext())
+ .ToLocalChecked())
+ .Utf8());
+ return ScriptPromise::CastUndefined(script_state);
+ }
+ ScriptPromise close(ScriptState* script_state, ExceptionState&) override {
+ DCHECK(internal_sink_);
+ closed_ = true;
+ if (!optimizer_flag_->data.load()) {
+ // The normal closure case.
+ internal_sink_->Close();
+ return ScriptPromise::CastUndefined(script_state);
+ }
+
+ // When the optimizer is active, we need to detach `internal_sink_` and
+ // pass it to the optimizer (i.e., the sink in the destination realm).
+ if (detached_) {
+ PostCrossThreadTask(
+ *reply_task_runner_, FROM_HERE,
+ CrossThreadBindOnce(std::move(reply_), std::move(internal_sink_)));
+ }
+ return ScriptPromise::CastUndefined(script_state);
+ }
+ ScriptPromise abort(ScriptState* script_state,
+ ScriptValue reason,
+ ExceptionState&) override {
+ return ScriptPromise::CastUndefined(script_state);
+ }
+
+ void Attach(std::unique_ptr<InternalSink> internal_sink) {
+ DCHECK(!internal_sink_);
+
+ if (type_ == Type::kWithObservableOptimizer) {
+ internal_sink->Append("A");
+ }
+
+ internal_sink_ = std::move(internal_sink);
+ if (start_resolver_) {
+ start_resolver_->Resolve();
+ }
+ }
+
+ void Detach(scoped_refptr<base::SingleThreadTaskRunner> task_runner,
+ Reply reply) {
+ detached_ = true;
+
+ // We need to wait for the close signal before actually detaching
+ // `internal_sink_`.
+ if (closed_) {
+ PostCrossThreadTask(
+ *task_runner, FROM_HERE,
+ CrossThreadBindOnce(std::move(reply), std::move(internal_sink_)));
+ } else {
+ reply_ = std::move(reply);
+ reply_task_runner_ = std::move(task_runner);
+ }
+ }
+
+ std::unique_ptr<WritableStreamTransferringOptimizer>
+ CreateTransferringOptimizer(ScriptState* script_state) {
+ DCHECK(internal_sink_);
+
+ if (type_ == Type::kWithNullOptimizer) {
+ return nullptr;
+ }
+
+ ExecutionContext* context = ExecutionContext::From(script_state);
+ return std::make_unique<Optimizer>(
+ context->GetTaskRunner(TaskType::kInternalDefault),
+ CrossThreadBindOnce(&TestWritableStreamSink::Detach,
+ WrapCrossThreadWeakPersistent(this)),
+ optimizer_flag_, type_);
+ }
+
+ void Trace(Visitor* visitor) const override {
+ visitor->Trace(start_resolver_);
+ UnderlyingSinkBase::Trace(visitor);
+ }
+
+ static void Resolve(ScriptPromiseResolver* resolver, std::string result) {
+ resolver->Resolve(String::FromUTF8(result));
+ }
+ static void Reject(ScriptPromiseResolver* resolver) {
+ ScriptState* script_state = resolver->GetScriptState();
+ ScriptState::Scope scope(script_state);
+ resolver->Reject(
+ V8ThrowException::CreateTypeError(script_state->GetIsolate(), "error"));
+ }
+
+ private:
+ const Type type_;
+ // `optimizer_flag_` is always non_null. The flag referenced is false
+ // initially, and set atomically when the associated optimizer is activated.
+ scoped_refptr<base::RefCountedData<std::atomic_bool>> optimizer_flag_;
+ std::unique_ptr<InternalSink> internal_sink_;
+ Member<ScriptPromiseResolver> start_resolver_;
+ bool closed_ = false;
+ bool detached_ = false;
+ Reply reply_;
+ scoped_refptr<base::SingleThreadTaskRunner> reply_task_runner_;
+};
+
+UnderlyingSinkBase*
+TestWritableStreamSink::Optimizer::PerformInProcessOptimization(
+ ScriptState* script_state) {
+ if (type_ == Type::kWithPerformNullOptimizer) {
+ return nullptr;
+ }
+ TestWritableStreamSink* sink =
+ MakeGarbageCollected<TestWritableStreamSink>(script_state, type_);
+
+ // Set the flag atomically, to notify that this optimizer is active.
+ optimizer_flag_->data.store(true);
+
+ ExecutionContext* context = ExecutionContext::From(script_state);
+ Reply reply = CrossThreadBindOnce(&TestWritableStreamSink::Attach,
+ WrapCrossThreadPersistent(sink));
+ PostCrossThreadTask(
+ *task_runner_, FROM_HERE,
+ CrossThreadBindOnce(std::move(callback_),
+ context->GetTaskRunner(TaskType::kInternalDefault),
+ std::move(reply)));
+ return sink;
+}
+
} // namespace
static base::Optional<DocumentMarker::MarkerType> MarkerTypeFrom(
@@ -503,8 +879,7 @@ ScriptPromise Internals::getResourcePriority(ScriptState* script_state,
DCHECK(document);
auto callback = WTF::Bind(&Internals::ResolveResourcePriority,
- WTF::Passed(WrapPersistent(this)),
- WTF::Passed(WrapPersistent(resolver)));
+ WrapPersistent(this), WrapPersistent(resolver));
ResourceFetcher::AddPriorityObserverForTesting(resource_url,
std::move(callback));
@@ -532,19 +907,6 @@ String Internals::getResourceHeader(const String& url,
return resource->GetResourceRequest().HttpHeaderField(AtomicString(header));
}
-bool Internals::isValidContentSelect(Element* insertion_point,
- ExceptionState& exception_state) {
- DCHECK(insertion_point);
- if (!insertion_point->IsV0InsertionPoint()) {
- exception_state.ThrowDOMException(DOMExceptionCode::kInvalidAccessError,
- "The element is not an insertion point.");
- return false;
- }
-
- auto* html_content_element = DynamicTo<HTMLContentElement>(insertion_point);
- return html_content_element && html_content_element->IsSelectValid();
-}
-
Node* Internals::treeScopeRootNode(Node* node) {
DCHECK(node);
return &node->GetTreeScope().RootNode();
@@ -598,7 +960,8 @@ void Internals::pauseAnimations(double pause_time,
return;
GetFrame()->View()->UpdateAllLifecyclePhasesForTest();
- GetFrame()->GetDocument()->Timeline().PauseAnimationsForTesting(pause_time);
+ GetFrame()->GetDocument()->Timeline().PauseAnimationsForTesting(
+ AnimationTimeDelta::FromSecondsD(pause_time));
}
bool Internals::isCompositedAnimation(Animation* animation) {
@@ -635,30 +998,6 @@ void Internals::advanceImageAnimation(Element* image,
image_data->AdvanceAnimationForTesting();
}
-bool Internals::hasShadowInsertionPoint(const Node* root,
- ExceptionState& exception_state) const {
- DCHECK(root);
- if (!IsA<ShadowRoot>(root)) {
- exception_state.ThrowDOMException(
- DOMExceptionCode::kInvalidAccessError,
- "The node argument is not a shadow root.");
- return false;
- }
- return To<ShadowRoot>(root)->V0().ContainsShadowElements();
-}
-
-bool Internals::hasContentElement(const Node* root,
- ExceptionState& exception_state) const {
- DCHECK(root);
- if (!IsA<ShadowRoot>(root)) {
- exception_state.ThrowDOMException(
- DOMExceptionCode::kInvalidAccessError,
- "The node argument is not a shadow root.");
- return false;
- }
- return To<ShadowRoot>(root)->V0().ContainsContentElements();
-}
-
uint32_t Internals::countElementShadow(const Node* root,
ExceptionState& exception_state) const {
DCHECK(root);
@@ -798,8 +1137,6 @@ String Internals::shadowRootType(const Node* root,
switch (shadow_root->GetType()) {
case ShadowRootType::kUserAgent:
return String("UserAgentShadowRoot");
- case ShadowRootType::V0:
- return String("V0ShadowRoot");
case ShadowRootType::kOpen:
return String("OpenShadowRoot");
case ShadowRootType::kClosed:
@@ -2989,6 +3326,15 @@ void Internals::forceCompositingUpdate(Document* document,
document->GetFrame()->View()->UpdateAllLifecyclePhasesForTest();
}
+void Internals::setForcedColorsAndDarkPreferredColorScheme(Document* document) {
+ DCHECK(document);
+ ColorSchemeHelper color_scheme_helper(*document);
+ color_scheme_helper.SetPreferredColorScheme(
+ mojom::blink::PreferredColorScheme::kDark);
+ color_scheme_helper.SetForcedColors(*document, ForcedColors::kActive);
+ document->GetFrame()->View()->UpdateAllLifecyclePhasesForTest();
+}
+
void Internals::setShouldRevealPassword(Element* element,
bool reveal,
ExceptionState& exception_state) {
@@ -3005,25 +3351,16 @@ void Internals::setShouldRevealPassword(Element* element,
namespace {
-class AddOneFunction : public ScriptFunction {
+class AddOneFunction : public NewScriptFunction::Callable {
public:
- static v8::Local<v8::Function> CreateFunction(ScriptState* script_state) {
- AddOneFunction* self = MakeGarbageCollected<AddOneFunction>(script_state);
- return self->BindToV8Function();
- }
-
- explicit AddOneFunction(ScriptState* script_state)
- : ScriptFunction(script_state) {}
-
- private:
- ScriptValue Call(ScriptValue value) override {
+ ScriptValue Call(ScriptState* script_state, ScriptValue value) override {
v8::Local<v8::Value> v8_value = value.V8Value();
DCHECK(v8_value->IsNumber());
int32_t int_value =
static_cast<int32_t>(v8_value.As<v8::Integer>()->Value());
return ScriptValue(
- GetScriptState()->GetIsolate(),
- v8::Integer::New(GetScriptState()->GetIsolate(), int_value + 1));
+ script_state->GetIsolate(),
+ v8::Integer::New(script_state->GetIsolate(), int_value + 1));
}
};
@@ -3047,7 +3384,8 @@ ScriptPromise Internals::createRejectedPromise(ScriptState* script_state,
ScriptPromise Internals::addOneToPromise(ScriptState* script_state,
ScriptPromise promise) {
- return promise.Then(AddOneFunction::CreateFunction(script_state));
+ return promise.Then(MakeGarbageCollected<NewScriptFunction>(
+ script_state, MakeGarbageCollected<AddOneFunction>()));
}
ScriptPromise Internals::promiseCheck(ScriptState* script_state,
@@ -3193,8 +3531,14 @@ String Internals::selectedTextForClipboard() {
void Internals::setVisualViewportOffset(int x, int y) {
if (!GetFrame())
return;
+ FloatPoint offset(x, y);
- GetFrame()->GetPage()->GetVisualViewport().SetLocation(FloatPoint(x, y));
+ // `setVisualViewportOffset()` inputs are in physical pixels, but
+ // `SetLocation()` gets positions in DIPs when --use-zoom-for-dsf disabled.
+ GetFrame()->GetPage()->GetVisualViewport().SetLocation(
+ Platform::Current()->IsUseZoomForDSFEnabled()
+ ? offset
+ : offset.ScaledBy(1 / GetFrame()->DevicePixelRatio()));
}
bool Internals::isUseCounted(Document* document, uint32_t feature) {
@@ -3206,13 +3550,13 @@ bool Internals::isUseCounted(Document* document, uint32_t feature) {
bool Internals::isCSSPropertyUseCounted(Document* document,
const String& property_name) {
return document->IsPropertyCounted(
- unresolvedCSSPropertyID(document->GetExecutionContext(), property_name));
+ UnresolvedCSSPropertyID(document->GetExecutionContext(), property_name));
}
bool Internals::isAnimatedCSSPropertyUseCounted(Document* document,
const String& property_name) {
return document->IsAnimatedPropertyCounted(
- unresolvedCSSPropertyID(document->GetExecutionContext(), property_name));
+ UnresolvedCSSPropertyID(document->GetExecutionContext(), property_name));
}
void Internals::clearUseCounter(Document* document, uint32_t feature) {
@@ -3246,7 +3590,7 @@ Vector<String> Internals::getCSSPropertyShorthands() const {
Vector<String> Internals::getCSSPropertyAliases() const {
Vector<String> result;
for (CSSPropertyID alias : kCSSPropertyAliasList) {
- DCHECK(isPropertyAlias(alias));
+ DCHECK(IsPropertyAlias(alias));
result.push_back(CSSUnresolvedProperty::GetAliasProperty(alias)
->GetPropertyNameString());
}
@@ -3395,10 +3739,6 @@ bool Internals::isTrackingOcclusionForIFrame(HTMLIFrameElement* iframe) const {
return remote_frame->View()->NeedsOcclusionTracking();
}
-void Internals::DisableFrequencyCappingForOverlayPopupDetection() const {
- OverlayInterstitialAdDetector::DisableFrequencyCappingForTesting();
-}
-
void Internals::addEmbedderCustomElementName(const AtomicString& name,
ExceptionState& exception_state) {
CustomElement::AddEmbedderCustomElementNameForTesting(name, exception_state);
@@ -3475,10 +3815,8 @@ String Internals::getAgentId(DOMWindow* window) {
if (!window->IsLocalDOMWindow())
return String();
- // Sounds like there's no notion of "process ID" in Blink, but the main
- // thread's thread ID serves for that purpose.
- PlatformThreadId process_id = Thread::MainThread()->ThreadId();
-
+ // Create a unique id from the process id and the address of the agent.
+ const base::ProcessId process_id = base::GetCurrentProcId();
uintptr_t agent_address =
reinterpret_cast<uintptr_t>(To<LocalDOMWindow>(window)->GetAgent());
@@ -3522,4 +3860,81 @@ void Internals::setIsAdSubframe(HTMLIFrameElement* iframe,
: blink::mojom::AdFrameType::kRootAd);
}
+ReadableStream* Internals::createReadableStream(
+ ScriptState* script_state,
+ int32_t queue_size,
+ const String& optimizer,
+ ExceptionState& exception_state) {
+ TestReadableStreamSource::Type type;
+ if (optimizer.IsEmpty()) {
+ type = TestReadableStreamSource::Type::kWithNullOptimizer;
+ } else if (optimizer == "perform-null") {
+ type = TestReadableStreamSource::Type::kWithPerformNullOptimizer;
+ } else if (optimizer == "observable") {
+ type = TestReadableStreamSource::Type::kWithObservableOptimizer;
+ } else if (optimizer == "perfect") {
+ type = TestReadableStreamSource::Type::kWithPerformNullOptimizer;
+ } else {
+ exception_state.ThrowRangeError(
+ "The \"optimizer\" parameter is not correctly set.");
+ return nullptr;
+ }
+ auto* source =
+ MakeGarbageCollected<TestReadableStreamSource>(script_state, type);
+ source->Attach(std::make_unique<TestReadableStreamSource::Generator>(10));
+ return ReadableStream::CreateWithCountQueueingStrategy(
+ script_state, source, queue_size,
+ source->CreateTransferringOptimizer(script_state));
+}
+
+ScriptValue Internals::createWritableStreamAndSink(
+ ScriptState* script_state,
+ int32_t queue_size,
+ const String& optimizer,
+ ExceptionState& exception_state) {
+ TestWritableStreamSink::Type type;
+ if (optimizer.IsEmpty()) {
+ type = TestWritableStreamSink::Type::kWithNullOptimizer;
+ } else if (optimizer == "perform-null") {
+ type = TestWritableStreamSink::Type::kWithPerformNullOptimizer;
+ } else if (optimizer == "observable") {
+ type = TestWritableStreamSink::Type::kWithObservableOptimizer;
+ } else if (optimizer == "perfect") {
+ type = TestWritableStreamSink::Type::kWithPerfectOptimizer;
+ } else {
+ exception_state.ThrowRangeError(
+ "The \"optimizer\" parameter is not correctly set.");
+ return ScriptValue();
+ }
+
+ ExecutionContext* context = ExecutionContext::From(script_state);
+ auto* resolver = MakeGarbageCollected<ScriptPromiseResolver>(script_state);
+ auto internal_sink = std::make_unique<TestWritableStreamSink::InternalSink>(
+ context->GetTaskRunner(TaskType::kInternalDefault),
+ CrossThreadBindOnce(&TestWritableStreamSink::Resolve,
+ WrapCrossThreadPersistent(resolver)),
+ CrossThreadBindOnce(&TestWritableStreamSink::Reject,
+ WrapCrossThreadPersistent(resolver)));
+ auto* sink = MakeGarbageCollected<TestWritableStreamSink>(script_state, type);
+
+ sink->Attach(std::move(internal_sink));
+ auto* stream = WritableStream::CreateWithCountQueueingStrategy(
+ script_state, sink, queue_size,
+ sink->CreateTransferringOptimizer(script_state));
+
+ v8::Local<v8::Object> object = v8::Object::New(script_state->GetIsolate());
+ object
+ ->Set(script_state->GetContext(),
+ V8String(script_state->GetIsolate(), "stream"),
+ ToV8(stream, script_state))
+
+ .Check();
+ object
+ ->Set(script_state->GetContext(),
+ V8String(script_state->GetIsolate(), "sink"),
+ ToV8(resolver->Promise(), script_state))
+ .Check();
+ return ScriptValue(script_state->GetIsolate(), object);
+}
+
} // namespace blink
diff --git a/chromium/third_party/blink/renderer/core/testing/internals.h b/chromium/third_party/blink/renderer/core/testing/internals.h
index 96de90eb180..c89c13ba5f3 100644
--- a/chromium/third_party/blink/renderer/core/testing/internals.h
+++ b/chromium/third_party/blink/renderer/core/testing/internals.h
@@ -31,6 +31,7 @@
#include "third_party/blink/renderer/bindings/core/v8/script_value.h"
#include "third_party/blink/renderer/core/css/css_computed_style_declaration.h"
#include "third_party/blink/renderer/core/page/scrolling/scrolling_coordinator.h"
+#include "third_party/blink/renderer/core/testing/color_scheme_helper.h"
#include "third_party/blink/renderer/platform/bindings/exception_state.h"
#include "third_party/blink/renderer/platform/bindings/script_state.h"
#include "third_party/blink/renderer/platform/bindings/script_wrappable.h"
@@ -72,6 +73,7 @@ class Node;
class OriginTrialsTest;
class Page;
class Range;
+class ReadableStream;
class RecordTest;
class ScriptPromiseResolver;
class ScrollState;
@@ -122,8 +124,6 @@ class Internals final : public ScriptWrappable {
ShadowRoot* shadowRoot(Element* host);
String shadowRootType(const Node*, ExceptionState&) const;
- bool hasShadowInsertionPoint(const Node*, ExceptionState&) const;
- bool hasContentElement(const Node*, ExceptionState&) const;
uint32_t countElementShadow(const Node*, ExceptionState&) const;
const AtomicString& shadowPseudoId(Element*);
@@ -138,7 +138,6 @@ class Internals final : public ScriptWrappable {
// animation update for CSS and advance the SMIL timeline by one frame.
void advanceImageAnimation(Element* image, ExceptionState&);
- bool isValidContentSelect(Element* insertion_point, ExceptionState&);
Node* treeScopeRootNode(Node*);
Node* parentTreeScope(Node*);
uint16_t compareTreeScopePosition(const Node*,
@@ -472,6 +471,8 @@ class Internals final : public ScriptWrappable {
void forceCompositingUpdate(Document*, ExceptionState&);
+ void setForcedColorsAndDarkPreferredColorScheme(Document* document);
+
void setShouldRevealPassword(Element*, bool, ExceptionState&);
ScriptPromise createResolvedPromise(ScriptState*, ScriptValue);
@@ -596,8 +597,6 @@ class Internals final : public ScriptWrappable {
bool isSiteIsolated(HTMLIFrameElement* iframe) const;
bool isTrackingOcclusionForIFrame(HTMLIFrameElement* iframe) const;
- void DisableFrequencyCappingForOverlayPopupDetection() const;
-
void addEmbedderCustomElementName(const AtomicString& name, ExceptionState&);
LocalFrame* GetFrame() const;
@@ -614,6 +613,16 @@ class Internals final : public ScriptWrappable {
void setIsAdSubframe(HTMLIFrameElement* iframe,
ExceptionState& exception_state);
+ ReadableStream* createReadableStream(ScriptState* script_state,
+ int32_t queueSize,
+ const String& optimizer,
+ ExceptionState&);
+
+ ScriptValue createWritableStreamAndSink(ScriptState* script_state,
+ int32_t queueSize,
+ const String& optimizer,
+ ExceptionState&);
+
private:
Document* ContextDocument() const;
Vector<String> IconURLs(Document*, int icon_types_mask) const;
diff --git a/chromium/third_party/blink/renderer/core/testing/internals.idl b/chromium/third_party/blink/renderer/core/testing/internals.idl
index db1171d7e2f..af4e47d1c01 100644
--- a/chromium/third_party/blink/renderer/core/testing/internals.idl
+++ b/chromium/third_party/blink/renderer/core/testing/internals.idl
@@ -56,11 +56,8 @@
Node effectiveRootScroller(Document document);
[RaisesException] DOMString shadowRootType(Node root);
- [RaisesException] boolean hasShadowInsertionPoint(Node root);
- [RaisesException] boolean hasContentElement(Node root);
[RaisesException] unsigned long countElementShadow(Node Root);
DOMString shadowPseudoId(Element element);
- [RaisesException] boolean isValidContentSelect(Element contentElement);
Node treeScopeRootNode(Node node);
Node parentTreeScope(Node node);
[RaisesException] unsigned short compareTreeScopePosition(Node treeScope1, Node treeScope2);
@@ -298,6 +295,8 @@
[RaisesException] void forceCompositingUpdate(Document document);
+ void setForcedColorsAndDarkPreferredColorScheme(Document document);
+
[RaisesException] void setShouldRevealPassword(Element element, boolean reveal);
[CallWith=ScriptState] Promise<any> createResolvedPromise(any value);
@@ -415,11 +414,6 @@
// instances that track visibility.
boolean isTrackingOcclusionForIFrame(HTMLIFrameElement iframe);
- // Disable the frequency capping for overlay popup detection. This
- // eliminates the need to for waitings in web tests to trigger a detection
- // event.
- void DisableFrequencyCappingForOverlayPopupDetection();
-
// Declare that the given |name| is in use by the embedder via the custom
// element mechanism.
[RaisesException] void addEmbedderCustomElementName(DOMString name);
@@ -451,4 +445,9 @@
void generateTestReport(DOMString message);
[RaisesException] void setIsAdSubframe(HTMLIFrameElement iframe);
+
+ [RaisesException, CallWith=ScriptState] ReadableStream createReadableStream(long queueSize, DOMString optimizer);
+ // The return value consists of a WritableStream (.stream) and a promise of
+ // a sink object (.sink).
+ [RaisesException, CallWith=ScriptState] any createWritableStreamAndSink(long queueSize, DOMString optimizer);
};
diff --git a/chromium/third_party/blink/renderer/core/testing/intersection_observer_test_helper.h b/chromium/third_party/blink/renderer/core/testing/intersection_observer_test_helper.h
new file mode 100644
index 00000000000..785bb0fa0cf
--- /dev/null
+++ b/chromium/third_party/blink/renderer/core/testing/intersection_observer_test_helper.h
@@ -0,0 +1,61 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef THIRD_PARTY_BLINK_RENDERER_CORE_TESTING_INTERSECTION_OBSERVER_TEST_HELPER_H_
+#define THIRD_PARTY_BLINK_RENDERER_CORE_TESTING_INTERSECTION_OBSERVER_TEST_HELPER_H_
+
+#include "third_party/blink/renderer/core/intersection_observer/intersection_observer_delegate.h"
+#include "third_party/blink/renderer/core/intersection_observer/intersection_observer_entry.h"
+
+namespace blink {
+
+class TestIntersectionObserverDelegate : public IntersectionObserverDelegate {
+ public:
+ explicit TestIntersectionObserverDelegate(Document& document)
+ : document_(document), call_count_(0) {}
+ // TODO(szager): Add tests for the synchronous delivery code path. There is
+ // already some indirect coverage by unit tests exercising features that rely
+ // on it, but we should have some direct coverage in here.
+ LocalFrameUkmAggregator::MetricId GetUkmMetricId() const override {
+ return LocalFrameUkmAggregator::kJavascriptIntersectionObserver;
+ }
+ IntersectionObserver::DeliveryBehavior GetDeliveryBehavior() const override {
+ return IntersectionObserver::kPostTaskToDeliver;
+ }
+ void Deliver(const HeapVector<Member<IntersectionObserverEntry>>& entries,
+ IntersectionObserver&) override {
+ call_count_++;
+ entries_.AppendVector(entries);
+ }
+ ExecutionContext* GetExecutionContext() const override {
+ return document_->GetExecutionContext();
+ }
+ int CallCount() const { return call_count_; }
+ int EntryCount() const { return entries_.size(); }
+ const IntersectionObserverEntry* LastEntry() const { return entries_.back(); }
+ void Clear() {
+ entries_.clear();
+ call_count_ = 0;
+ }
+ PhysicalRect LastIntersectionRect() const {
+ if (entries_.IsEmpty())
+ return PhysicalRect();
+ const IntersectionGeometry& geometry = entries_.back()->GetGeometry();
+ return geometry.IntersectionRect();
+ }
+
+ void Trace(Visitor* visitor) const override {
+ IntersectionObserverDelegate::Trace(visitor);
+ visitor->Trace(document_);
+ visitor->Trace(entries_);
+ }
+
+ private:
+ Member<Document> document_;
+ HeapVector<Member<IntersectionObserverEntry>> entries_;
+ int call_count_;
+};
+} // namespace blink
+
+#endif // THIRD_PARTY_BLINK_RENDERER_CORE_TESTING_INTERSECTION_OBSERVER_TEST_HELPER_H_
diff --git a/chromium/third_party/blink/renderer/core/testing/mock_clipboard_host.cc b/chromium/third_party/blink/renderer/core/testing/mock_clipboard_host.cc
index 120840e69ac..4cc25246733 100644
--- a/chromium/third_party/blink/renderer/core/testing/mock_clipboard_host.cc
+++ b/chromium/third_party/blink/renderer/core/testing/mock_clipboard_host.cc
@@ -100,6 +100,11 @@ void MockClipboardHost::ReadImage(mojom::ClipboardBuffer clipboard_buffer,
std::move(callback).Run(image_);
}
+void MockClipboardHost::ReadFiles(mojom::ClipboardBuffer clipboard_buffer,
+ ReadFilesCallback callback) {
+ std::move(callback).Run(mojom::blink::ClipboardFiles::New());
+}
+
void MockClipboardHost::ReadCustomData(mojom::ClipboardBuffer clipboard_buffer,
const String& type,
ReadCustomDataCallback callback) {
diff --git a/chromium/third_party/blink/renderer/core/testing/mock_clipboard_host.h b/chromium/third_party/blink/renderer/core/testing/mock_clipboard_host.h
index 7df1da1b2e8..b725a7ee672 100644
--- a/chromium/third_party/blink/renderer/core/testing/mock_clipboard_host.h
+++ b/chromium/third_party/blink/renderer/core/testing/mock_clipboard_host.h
@@ -43,6 +43,8 @@ class MockClipboardHost : public mojom::blink::ClipboardHost {
ReadRtfCallback callback) override;
void ReadImage(mojom::ClipboardBuffer clipboard_buffer,
ReadImageCallback callback) override;
+ void ReadFiles(mojom::ClipboardBuffer clipboard_buffer,
+ ReadFilesCallback callback) override;
void ReadCustomData(mojom::ClipboardBuffer clipboard_buffer,
const String& type,
ReadCustomDataCallback callback) override;
diff --git a/chromium/third_party/blink/renderer/core/testing/mock_function_scope.cc b/chromium/third_party/blink/renderer/core/testing/mock_function_scope.cc
new file mode 100644
index 00000000000..998ac45fb17
--- /dev/null
+++ b/chromium/third_party/blink/renderer/core/testing/mock_function_scope.cc
@@ -0,0 +1,66 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "third_party/blink/renderer/core/testing/mock_function_scope.h"
+#include "third_party/blink/renderer/bindings/core/v8/script_function.h"
+#include "third_party/blink/renderer/bindings/core/v8/script_value.h"
+#include "third_party/blink/renderer/platform/bindings/script_state.h"
+#include "third_party/blink/renderer/platform/bindings/v8_binding.h"
+#include "third_party/blink/renderer/platform/heap/heap_allocator.h"
+
+namespace blink {
+
+MockFunctionScope::MockFunctionScope(ScriptState* script_state)
+ : script_state_(script_state) {}
+
+MockFunctionScope::~MockFunctionScope() {
+ v8::MicrotasksScope::PerformCheckpoint(script_state_->GetIsolate());
+ for (MockFunction* mock_function : mock_functions_) {
+ testing::Mock::VerifyAndClearExpectations(mock_function);
+ }
+}
+
+v8::Local<v8::Function> MockFunctionScope::ExpectCall(String* captor) {
+ mock_functions_.push_back(
+ MakeGarbageCollected<MockFunction>(script_state_, captor));
+ EXPECT_CALL(*mock_functions_.back(), Call(testing::_));
+ return mock_functions_.back()->Bind();
+}
+
+v8::Local<v8::Function> MockFunctionScope::ExpectCall() {
+ mock_functions_.push_back(MakeGarbageCollected<MockFunction>(script_state_));
+ EXPECT_CALL(*mock_functions_.back(), Call(testing::_));
+ return mock_functions_.back()->Bind();
+}
+
+v8::Local<v8::Function> MockFunctionScope::ExpectNoCall() {
+ mock_functions_.push_back(MakeGarbageCollected<MockFunction>(script_state_));
+ EXPECT_CALL(*mock_functions_.back(), Call(testing::_)).Times(0);
+ return mock_functions_.back()->Bind();
+}
+
+ACTION_P2(SaveValueIn, script_state, captor) {
+ *captor = ToCoreString(
+ arg0.V8Value()->ToString(script_state->GetContext()).ToLocalChecked());
+}
+
+MockFunctionScope::MockFunction::MockFunction(ScriptState* script_state)
+ : ScriptFunction(script_state) {
+ ON_CALL(*this, Call(testing::_)).WillByDefault(testing::ReturnArg<0>());
+}
+
+MockFunctionScope::MockFunction::MockFunction(ScriptState* script_state,
+ String* captor)
+ : ScriptFunction(script_state) {
+ ON_CALL(*this, Call(testing::_))
+ .WillByDefault(
+ testing::DoAll(SaveValueIn(WrapPersistent(script_state), captor),
+ testing::ReturnArg<0>()));
+}
+
+v8::Local<v8::Function> MockFunctionScope::MockFunction::Bind() {
+ return BindToV8Function();
+}
+
+} // namespace blink
diff --git a/chromium/third_party/blink/renderer/core/testing/mock_function_scope.h b/chromium/third_party/blink/renderer/core/testing/mock_function_scope.h
new file mode 100644
index 00000000000..e575c5c8d87
--- /dev/null
+++ b/chromium/third_party/blink/renderer/core/testing/mock_function_scope.h
@@ -0,0 +1,46 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef THIRD_PARTY_BLINK_RENDERER_CORE_TESTING_MOCK_FUNCTION_SCOPE_H_
+#define THIRD_PARTY_BLINK_RENDERER_CORE_TESTING_MOCK_FUNCTION_SCOPE_H_
+
+#include "testing/gmock/include/gmock/gmock.h"
+#include "third_party/blink/renderer/bindings/core/v8/script_function.h"
+#include "third_party/blink/renderer/platform/heap/persistent.h"
+#include "third_party/blink/renderer/platform/wtf/allocator/allocator.h"
+#include "third_party/blink/renderer/platform/wtf/vector.h"
+
+namespace blink {
+
+class ScriptState;
+class ScriptValue;
+
+class MockFunctionScope {
+ STACK_ALLOCATED();
+
+ public:
+ explicit MockFunctionScope(ScriptState*);
+ ~MockFunctionScope();
+
+ v8::Local<v8::Function> ExpectCall();
+ v8::Local<v8::Function> ExpectCall(String* captor);
+ v8::Local<v8::Function> ExpectNoCall();
+
+ private:
+ class MockFunction : public ScriptFunction {
+ public:
+ explicit MockFunction(ScriptState*);
+ // TODO(http://crbug.com/1159794): add other convenience methods that allow
+ // the test case to capture non-String values.
+ MockFunction(ScriptState*, String* captor);
+ v8::Local<v8::Function> Bind();
+ MOCK_METHOD1(Call, ScriptValue(ScriptValue));
+ };
+
+ ScriptState* script_state_;
+ Vector<Persistent<MockFunction>> mock_functions_;
+};
+
+} // namespace blink
+#endif // THIRD_PARTY_BLINK_RENDERER_CORE_TESTING_MOCK_FUNCTION_SCOPE_H_
diff --git a/chromium/third_party/blink/renderer/core/testing/mock_policy_container_host.cc b/chromium/third_party/blink/renderer/core/testing/mock_policy_container_host.cc
index 5c40b997035..16fb0903df5 100644
--- a/chromium/third_party/blink/renderer/core/testing/mock_policy_container_host.cc
+++ b/chromium/third_party/blink/renderer/core/testing/mock_policy_container_host.cc
@@ -15,4 +15,11 @@ void MockPolicyContainerHost::FlushForTesting() {
receiver_.FlushForTesting();
}
+void MockPolicyContainerHost::BindWithNewEndpoint(
+ mojo::PendingAssociatedReceiver<mojom::blink::PolicyContainerHost>
+ receiver) {
+ receiver.EnableUnassociatedUsage();
+ receiver_.Bind(std::move(receiver));
+}
+
} // namespace blink
diff --git a/chromium/third_party/blink/renderer/core/testing/mock_policy_container_host.h b/chromium/third_party/blink/renderer/core/testing/mock_policy_container_host.h
index 7f34a984e59..c2ededd4975 100644
--- a/chromium/third_party/blink/renderer/core/testing/mock_policy_container_host.h
+++ b/chromium/third_party/blink/renderer/core/testing/mock_policy_container_host.h
@@ -18,12 +18,26 @@ class MockPolicyContainerHost : public mojom::blink::PolicyContainerHost {
SetReferrerPolicy,
(network::mojom::ReferrerPolicy),
(override));
+ MOCK_METHOD(
+ void,
+ IssueKeepAliveHandle,
+ (mojo::PendingReceiver<mojom::blink::PolicyContainerHostKeepAliveHandle>),
+ (override));
MockPolicyContainerHost() = default;
+ // Wrapper around AssociatedReceiver::BindNewEndpointAndPassDedicatedRemote.
mojo::PendingAssociatedRemote<mojom::blink::PolicyContainerHost>
BindNewEndpointAndPassDedicatedRemote();
+
+ // Wrapper around AssociatedReceiver::FlushForTesting.
void FlushForTesting();
+ // This does the same as BindNewEndpointAndPassDedicatedRemote, but allows the
+ // remote to be created first and the receiver to be passed in.
+ void BindWithNewEndpoint(
+ mojo::PendingAssociatedReceiver<mojom::blink::PolicyContainerHost>
+ receiver);
+
private:
mojo::AssociatedReceiver<mojom::blink::PolicyContainerHost> receiver_{this};
};
diff --git a/chromium/third_party/blink/renderer/core/testing/module_test_base.cc b/chromium/third_party/blink/renderer/core/testing/module_test_base.cc
index 9ddbd8dcc19..13b07bf4f11 100644
--- a/chromium/third_party/blink/renderer/core/testing/module_test_base.cc
+++ b/chromium/third_party/blink/renderer/core/testing/module_test_base.cc
@@ -3,12 +3,39 @@
// found in the LICENSE file.
#include "third_party/blink/renderer/core/testing/module_test_base.h"
+#include "third_party/blink/renderer/bindings/core/v8/module_record.h"
#include "third_party/blink/renderer/bindings/core/v8/script_function.h"
#include "third_party/blink/renderer/bindings/core/v8/script_promise.h"
+#include "third_party/blink/renderer/bindings/core/v8/script_source_location_type.h"
#include "third_party/blink/renderer/bindings/core/v8/script_value.h"
+#include "third_party/blink/renderer/core/loader/modulescript/module_script_creation_params.h"
+#include "third_party/blink/renderer/platform/bindings/exception_state.h"
+#include "third_party/blink/renderer/platform/loader/fetch/script_fetch_options.h"
namespace blink {
+v8::Local<v8::Module> ModuleTestBase::CompileModule(
+ v8::Isolate* isolate,
+ const char* source,
+ const KURL& url,
+ ExceptionState& exception_state) {
+ return CompileModule(isolate, String(source), url, exception_state);
+}
+
+v8::Local<v8::Module> ModuleTestBase::CompileModule(
+ v8::Isolate* isolate,
+ String source,
+ const KURL& url,
+ ExceptionState& exception_state) {
+ ModuleScriptCreationParams params(
+ /*source_url=*/url, /*base_url=*/url,
+ ScriptSourceLocationType::kExternalFile, ModuleType::kJavaScript,
+ ParkableString(source.Impl()), nullptr);
+ return ModuleRecord::Compile(isolate, params, ScriptFetchOptions(),
+ TextPosition::MinimumPosition(),
+ exception_state);
+}
+
void ParametrizedModuleTestBase::SetUp(bool use_top_level_await) {
if (use_top_level_await) {
feature_list_.InitAndEnableFeature(features::kTopLevelAwait);
@@ -78,7 +105,7 @@ v8::Local<v8::Value> ParametrizedModuleTestBase::GetResult(
}
ScriptPromise script_promise = result.GetPromise(script_state);
- v8::Local<v8::Promise> promise = script_promise.V8Value().As<v8::Promise>();
+ v8::Local<v8::Promise> promise = script_promise.V8Promise();
if (promise->State() == v8::Promise::kFulfilled) {
return promise->Result();
}
@@ -106,7 +133,7 @@ v8::Local<v8::Value> ParametrizedModuleTestBase::GetException(
ScriptEvaluationResult::ResultType::kSuccess);
ScriptPromise script_promise = result.GetPromise(script_state);
- v8::Local<v8::Promise> promise = script_promise.V8Value().As<v8::Promise>();
+ v8::Local<v8::Promise> promise = script_promise.V8Promise();
if (promise->State() == v8::Promise::kRejected) {
return promise->Result();
}
diff --git a/chromium/third_party/blink/renderer/core/testing/module_test_base.h b/chromium/third_party/blink/renderer/core/testing/module_test_base.h
index a9762b90a97..91b017ea9fd 100644
--- a/chromium/third_party/blink/renderer/core/testing/module_test_base.h
+++ b/chromium/third_party/blink/renderer/core/testing/module_test_base.h
@@ -9,12 +9,28 @@
#include "base/test/scoped_feature_list.h"
#include "third_party/blink/public/common/features.h"
#include "third_party/blink/renderer/bindings/core/v8/script_evaluation_result.h"
+#include "third_party/blink/renderer/platform/bindings/exception_state.h"
+#include "third_party/blink/renderer/platform/weborigin/kurl.h"
#include "v8/include/v8.h"
namespace blink {
+class ModuleTestBase {
+ public:
+ static v8::Local<v8::Module> CompileModule(
+ v8::Isolate*,
+ const char*,
+ const KURL&,
+ ExceptionState& state = DummyExceptionStateForTesting().ReturnThis());
+ static v8::Local<v8::Module> CompileModule(
+ v8::Isolate*,
+ String,
+ const KURL&,
+ ExceptionState& state = DummyExceptionStateForTesting().ReturnThis());
+};
+
// Helper used to enable or disable top-level await in parametrized tests.
-class ParametrizedModuleTestBase {
+class ParametrizedModuleTestBase : public ModuleTestBase {
protected:
void SetUp(bool use_top_level_await);
void TearDown() {}
diff --git a/chromium/third_party/blink/renderer/core/testing/null_execution_context.cc b/chromium/third_party/blink/renderer/core/testing/null_execution_context.cc
index 5545bde85a4..1130e90eace 100644
--- a/chromium/third_party/blink/renderer/core/testing/null_execution_context.cc
+++ b/chromium/third_party/blink/renderer/core/testing/null_execution_context.cc
@@ -43,7 +43,8 @@ scoped_refptr<base::SingleThreadTaskRunner> NullExecutionContext::GetTaskRunner(
return Thread::Current()->GetTaskRunner();
}
-BrowserInterfaceBrokerProxy& NullExecutionContext::GetBrowserInterfaceBroker() {
+const BrowserInterfaceBrokerProxy&
+NullExecutionContext::GetBrowserInterfaceBroker() const {
return GetEmptyBrowserInterfaceBroker();
}
diff --git a/chromium/third_party/blink/renderer/core/testing/null_execution_context.h b/chromium/third_party/blink/renderer/core/testing/null_execution_context.h
index 24c97bb9e47..e7bc27c16d9 100644
--- a/chromium/third_party/blink/renderer/core/testing/null_execution_context.h
+++ b/chromium/third_party/blink/renderer/core/testing/null_execution_context.h
@@ -52,7 +52,7 @@ class NullExecutionContext : public GarbageCollected<NullExecutionContext>,
void CountUse(mojom::WebFeature) override {}
- BrowserInterfaceBrokerProxy& GetBrowserInterfaceBroker() override;
+ const BrowserInterfaceBrokerProxy& GetBrowserInterfaceBroker() const override;
ExecutionContextToken GetExecutionContextToken() const final {
return token_;
diff --git a/chromium/third_party/blink/renderer/core/testing/page_test_base.cc b/chromium/third_party/blink/renderer/core/testing/page_test_base.cc
index cd07e256f18..2926376ada6 100644
--- a/chromium/third_party/blink/renderer/core/testing/page_test_base.cc
+++ b/chromium/third_party/blink/renderer/core/testing/page_test_base.cc
@@ -201,8 +201,8 @@ void PageTestBase::InsertStyleElement(const std::string& style_rules) {
void PageTestBase::NavigateTo(const KURL& url,
const WTF::HashMap<String, String>& headers) {
- auto params =
- WebNavigationParams::CreateWithHTMLBuffer(SharedBuffer::Create(), url);
+ auto params = WebNavigationParams::CreateWithHTMLBufferForTesting(
+ SharedBuffer::Create(), url);
for (const auto& header : headers)
params->response.SetHttpHeaderField(header.key, header.value);
diff --git a/chromium/third_party/blink/renderer/core/testing/scoped_fake_ukm_recorder.cc b/chromium/third_party/blink/renderer/core/testing/scoped_fake_ukm_recorder.cc
new file mode 100644
index 00000000000..ccaf85049e5
--- /dev/null
+++ b/chromium/third_party/blink/renderer/core/testing/scoped_fake_ukm_recorder.cc
@@ -0,0 +1,53 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "third_party/blink/renderer/core/testing/scoped_fake_ukm_recorder.h"
+
+#include "mojo/public/cpp/bindings/pending_receiver.h"
+#include "services/metrics/public/mojom/ukm_interface.mojom-blink.h"
+#include "third_party/blink/public/common/thread_safe_browser_interface_broker_proxy.h"
+#include "third_party/blink/public/platform/platform.h"
+#include "third_party/blink/renderer/platform/wtf/functional.h"
+#include "third_party/blink/renderer/platform/wtf/std_lib_extras.h"
+
+namespace blink {
+
+ScopedFakeUkmRecorder::ScopedFakeUkmRecorder()
+ : recorder_(std::make_unique<ukm::TestUkmRecorder>()) {
+ Platform::Current()->GetBrowserInterfaceBroker()->SetBinderForTesting(
+ ukm::mojom::UkmRecorderInterface::Name_,
+ WTF::BindRepeating(
+ [](ScopedFakeUkmRecorder* interface,
+ mojo::ScopedMessagePipeHandle handle) {
+ interface->SetHandle(std::move(handle));
+ },
+ WTF::Unretained(this)));
+}
+
+ScopedFakeUkmRecorder::~ScopedFakeUkmRecorder() {
+ Platform::Current()->GetBrowserInterfaceBroker()->SetBinderForTesting(
+ ukm::mojom::UkmRecorderInterface::Name_, {});
+}
+
+void ScopedFakeUkmRecorder::AddEntry(ukm::mojom::UkmEntryPtr entry) {
+ recorder_->AddEntry(std::move(entry));
+}
+
+void ScopedFakeUkmRecorder::UpdateSourceURL(int64_t source_id,
+ const std::string& url) {
+ recorder_->UpdateSourceURL(source_id, GURL(url));
+}
+
+void ScopedFakeUkmRecorder::ResetRecorder() {
+ recorder_ = std::make_unique<ukm::TestUkmRecorder>();
+}
+
+void ScopedFakeUkmRecorder::SetHandle(mojo::ScopedMessagePipeHandle handle) {
+ receiver_ =
+ std::make_unique<mojo::Receiver<ukm::mojom::UkmRecorderInterface>>(
+ this, mojo::PendingReceiver<ukm::mojom::UkmRecorderInterface>(
+ std::move(handle)));
+}
+
+} // namespace blink
diff --git a/chromium/third_party/blink/renderer/core/testing/scoped_fake_ukm_recorder.h b/chromium/third_party/blink/renderer/core/testing/scoped_fake_ukm_recorder.h
new file mode 100644
index 00000000000..c7423756c41
--- /dev/null
+++ b/chromium/third_party/blink/renderer/core/testing/scoped_fake_ukm_recorder.h
@@ -0,0 +1,42 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef THIRD_PARTY_BLINK_RENDERER_CORE_TESTING_SCOPED_FAKE_UKM_RECORDER_H_
+#define THIRD_PARTY_BLINK_RENDERER_CORE_TESTING_SCOPED_FAKE_UKM_RECORDER_H_
+
+#include "components/ukm/test_ukm_recorder.h"
+#include "mojo/public/cpp/bindings/receiver.h"
+
+namespace blink {
+
+// Class used to mock the UKM recorder living in the browser process and being
+// served UKM events over Mojo. When instantiated, this class will register
+// itself as the Mojo interface for the UkmRecorderInterface in the
+// BrowserInterfaceBroker. It will then forward UKM logging events to a
+// TestUkmRecorder instance it owns and make it available for validation.
+// Consumers of this class should make sure to instantiate it before any other
+// instance takes a dependency on that mojo interface.
+class ScopedFakeUkmRecorder : public ukm::mojom::UkmRecorderInterface {
+ public:
+ explicit ScopedFakeUkmRecorder();
+ ~ScopedFakeUkmRecorder() override;
+
+ // ukm::mojom::UkmRecorderInterface:
+ void AddEntry(ukm::mojom::UkmEntryPtr entry) override;
+ void UpdateSourceURL(int64_t source_id, const std::string& url) override;
+
+ void ResetRecorder();
+
+ ukm::TestUkmRecorder* recorder() { return recorder_.get(); }
+
+ private:
+ void SetHandle(mojo::ScopedMessagePipeHandle handle);
+
+ std::unique_ptr<mojo::Receiver<ukm::mojom::UkmRecorderInterface>> receiver_;
+ std::unique_ptr<ukm::TestUkmRecorder> recorder_;
+};
+
+} // namespace blink
+
+#endif // THIRD_PARTY_BLINK_RENDERER_CORE_TESTING_SCOPED_FAKE_UKM_RECORDER_H_
diff --git a/chromium/third_party/blink/renderer/core/testing/scoped_mock_overlay_scrollbars.h b/chromium/third_party/blink/renderer/core/testing/scoped_mock_overlay_scrollbars.h
index 4ae0ef4ba8e..44bbb12eea5 100644
--- a/chromium/third_party/blink/renderer/core/testing/scoped_mock_overlay_scrollbars.h
+++ b/chromium/third_party/blink/renderer/core/testing/scoped_mock_overlay_scrollbars.h
@@ -68,7 +68,7 @@ class ScopedMockOverlayScrollbars {
// platform independent.
if (use_mock_overlay_scrollbars_)
return true;
-#if defined(OS_ANDROID) || BUILDFLAG(IS_ASH)
+#if defined(OS_ANDROID) || BUILDFLAG(IS_CHROMEOS_ASH)
// Non-overlay scrollbar is not supported on Android and ChromeOS.
return false;
#else
diff --git a/chromium/third_party/blink/renderer/core/testing/sim/sim_canvas.cc b/chromium/third_party/blink/renderer/core/testing/sim/sim_canvas.cc
index 29217bb4175..ca14a3522f7 100644
--- a/chromium/third_party/blink/renderer/core/testing/sim/sim_canvas.cc
+++ b/chromium/third_party/blink/renderer/core/testing/sim/sim_canvas.cc
@@ -68,23 +68,25 @@ void SimCanvas::onDrawPath(const SkPath& path, const SkPaint& paint) {
SkCanvas::onDrawPath(path, paint);
}
-void SimCanvas::onDrawImage(const SkImage* image,
- SkScalar left,
- SkScalar top,
- const SkPaint* paint) {
+void SimCanvas::onDrawImage2(const SkImage* image,
+ SkScalar left,
+ SkScalar top,
+ const SkSamplingOptions& sampling,
+ const SkPaint* paint) {
DrawScope scope;
AddCommand(CommandType::kImage);
- SkCanvas::onDrawImage(image, left, top, paint);
+ SkCanvas::onDrawImage2(image, left, top, sampling, paint);
}
-void SimCanvas::onDrawImageRect(const SkImage* image,
- const SkRect* src,
- const SkRect& dst,
- const SkPaint* paint,
- SrcRectConstraint constraint) {
+void SimCanvas::onDrawImageRect2(const SkImage* image,
+ const SkRect& src,
+ const SkRect& dst,
+ const SkSamplingOptions& sampling,
+ const SkPaint* paint,
+ SrcRectConstraint constraint) {
DrawScope scope;
AddCommand(CommandType::kImage);
- SkCanvas::onDrawImageRect(image, src, dst, paint, constraint);
+ SkCanvas::onDrawImageRect2(image, src, dst, sampling, paint, constraint);
}
void SimCanvas::onDrawTextBlob(const SkTextBlob* blob,
diff --git a/chromium/third_party/blink/renderer/core/testing/sim/sim_canvas.h b/chromium/third_party/blink/renderer/core/testing/sim/sim_canvas.h
index eaf713f1552..5e58a1ac595 100644
--- a/chromium/third_party/blink/renderer/core/testing/sim/sim_canvas.h
+++ b/chromium/third_party/blink/renderer/core/testing/sim/sim_canvas.h
@@ -57,12 +57,17 @@ class SimCanvas : public SkCanvas {
void onDrawPath(const SkPath&, const SkPaint&) override;
// Image
- void onDrawImage(const SkImage*, SkScalar, SkScalar, const SkPaint*) override;
- void onDrawImageRect(const SkImage*,
- const SkRect* src,
- const SkRect& dst,
- const SkPaint*,
- SrcRectConstraint) override;
+ void onDrawImage2(const SkImage*,
+ SkScalar,
+ SkScalar,
+ const SkSamplingOptions&,
+ const SkPaint*) override;
+ void onDrawImageRect2(const SkImage*,
+ const SkRect& src,
+ const SkRect& dst,
+ const SkSamplingOptions&,
+ const SkPaint*,
+ SrcRectConstraint) override;
// Text
void onDrawTextBlob(const SkTextBlob*,
diff --git a/chromium/third_party/blink/renderer/core/testing/sim/sim_compositor.cc b/chromium/third_party/blink/renderer/core/testing/sim/sim_compositor.cc
index 92f9ed5276d..7dfb166b4f0 100644
--- a/chromium/third_party/blink/renderer/core/testing/sim/sim_compositor.cc
+++ b/chromium/third_party/blink/renderer/core/testing/sim/sim_compositor.cc
@@ -6,7 +6,6 @@
#include "cc/test/fake_layer_tree_frame_sink.h"
#include "cc/trees/render_frame_metadata_observer.h"
-#include "third_party/blink/public/platform/web_rect.h"
#include "third_party/blink/renderer/core/exported/web_view_impl.h"
#include "third_party/blink/renderer/core/frame/local_frame.h"
#include "third_party/blink/renderer/core/frame/local_frame_view.h"
@@ -37,20 +36,18 @@ void SimCompositor::SetWebView(
SimCanvas::Commands SimCompositor::BeginFrame(double time_delta_in_seconds,
bool raster) {
DCHECK(web_view_);
- DCHECK(!layer_tree_host()->defer_main_frame_update());
+ DCHECK(!LayerTreeHost()->defer_main_frame_update());
// Verify that the need for a BeginMainFrame has been registered, and would
// have caused the compositor to schedule one if we were using its scheduler.
DCHECK(NeedsBeginFrame());
DCHECK_GT(time_delta_in_seconds, 0);
- ClearAnimationScheduled();
-
last_frame_time_ += base::TimeDelta::FromSecondsD(time_delta_in_seconds);
SimCanvas::Commands commands;
paint_commands_ = &commands;
- layer_tree_host()->CompositeForTest(last_frame_time_, raster);
+ LayerTreeHost()->CompositeForTest(last_frame_time_, raster);
paint_commands_ = nullptr;
return commands;
@@ -81,4 +78,12 @@ void SimCompositor::DidBeginMainFrame() {
*paint_commands_ = PaintFrame();
}
+void SimCompositor::SetLayerTreeHost(cc::LayerTreeHost* layer_tree_host) {
+ layer_tree_host_ = layer_tree_host;
+}
+
+cc::LayerTreeHost* SimCompositor::LayerTreeHost() const {
+ return layer_tree_host_;
+}
+
} // namespace blink
diff --git a/chromium/third_party/blink/renderer/core/testing/sim/sim_compositor.h b/chromium/third_party/blink/renderer/core/testing/sim/sim_compositor.h
index d0c070124c9..464d853b364 100644
--- a/chromium/third_party/blink/renderer/core/testing/sim/sim_compositor.h
+++ b/chromium/third_party/blink/renderer/core/testing/sim/sim_compositor.h
@@ -24,10 +24,10 @@ class WebViewImpl;
// only part of the layer was invalid.
//
// Note: This also does not support compositor driven animations.
-class SimCompositor final : public frame_test_helpers::TestWebWidgetClient {
+class SimCompositor final {
public:
SimCompositor();
- ~SimCompositor() override;
+ ~SimCompositor();
// When the compositor asks for a main frame, this WebViewImpl will have its
// lifecycle updated and be painted.
@@ -39,6 +39,9 @@ class SimCompositor final : public frame_test_helpers::TestWebWidgetClient {
// available on the WebViewImpl as well.
void SetWebView(WebViewImpl&, frame_test_helpers::TestWebViewClient&);
+ // Set the LayerTreeHost that the compositor is associated with.
+ void SetLayerTreeHost(cc::LayerTreeHost*);
+
// Executes the BeginMainFrame processing steps, an approximation of what
// cc::ThreadProxy::BeginMainFrame would do.
// If time is not specified a 60Hz frame rate time progression is used.
@@ -52,36 +55,38 @@ class SimCompositor final : public frame_test_helpers::TestWebWidgetClient {
// Helpers to query the state of the compositor from tests.
//
// Returns true if a main frame has been requested from blink, until the
- // BeginFrame() step occurs. The AnimationScheduled() checks if an explicit
- // requet for BeginFrame() was made, vs an implicit one by making changes
- // to the compositor's state.
+ // BeginFrame() step occurs.
bool NeedsBeginFrame() const {
- return AnimationScheduled() ||
- layer_tree_host()->RequestedMainFramePendingForTesting();
+ return LayerTreeHost()->RequestedMainFramePendingForTesting();
}
// Returns true if commits are deferred in the compositor. Since these tests
// use synchronous compositing through BeginFrame(), the deferred state has no
// real effect.
bool DeferMainFrameUpdate() const {
- return layer_tree_host()->defer_main_frame_update();
+ return LayerTreeHost()->defer_main_frame_update();
}
// Returns true if a selection is set on the compositor.
bool HasSelection() const {
- return layer_tree_host()->selection() != cc::LayerSelection();
+ return LayerTreeHost()->selection() != cc::LayerSelection();
}
// Returns the background color set on the compositor.
- SkColor background_color() { return layer_tree_host()->background_color(); }
+ SkColor background_color() const {
+ return LayerTreeHost()->background_color();
+ }
base::TimeTicks LastFrameTime() const { return last_frame_time_; }
+ // Called when the begin frame occured.
+ void DidBeginMainFrame();
+
+ cc::LayerTreeHost* LayerTreeHost() const;
+
private:
SimCanvas::Commands PaintFrame();
- // TestWebWidgetClient overrides:
- void DidBeginMainFrame() override;
-
WebViewImpl* web_view_ = nullptr;
frame_test_helpers::TestWebViewClient* test_web_view_client_ = nullptr;
+ cc::LayerTreeHost* layer_tree_host_ = nullptr;
base::TimeTicks last_frame_time_;
diff --git a/chromium/third_party/blink/renderer/core/testing/sim/sim_test.cc b/chromium/third_party/blink/renderer/core/testing/sim/sim_test.cc
index df31ecd701d..8654d3ee26f 100644
--- a/chromium/third_party/blink/renderer/core/testing/sim/sim_test.cc
+++ b/chromium/third_party/blink/renderer/core/testing/sim/sim_test.cc
@@ -47,13 +47,18 @@ void SimTest::SetUp() {
std::make_unique<frame_test_helpers::TestWebFrameClient>();
web_view_client_ = std::make_unique<frame_test_helpers::TestWebViewClient>();
page_ = std::make_unique<SimPage>();
- web_view_helper_ = std::make_unique<frame_test_helpers::WebViewHelper>();
+ web_view_helper_ =
+ std::make_unique<frame_test_helpers::WebViewHelper>(base::BindRepeating(
+ &SimTest::CreateTestWebFrameWidget, base::Unretained(this)));
- web_view_helper_->Initialize(web_frame_client_.get(), web_view_client_.get(),
- compositor_.get());
+ web_view_helper_->Initialize(web_frame_client_.get(), web_view_client_.get());
compositor_->SetWebView(WebView(), *web_view_client_);
page_->SetPage(WebView().GetPage());
local_frame_root_ = WebView().MainFrameImpl();
+ compositor_->SetLayerTreeHost(
+ local_frame_root_->FrameWidgetImpl()->LayerTreeHostForTesting());
+
+ WebView().MainFrameViewWidget()->Resize(gfx::Size(300, 200));
}
void SimTest::TearDown() {
@@ -83,10 +88,11 @@ void SimTest::InitializeRemote() {
page_->SetPage(WebView().GetPage());
web_frame_client_ =
std::make_unique<frame_test_helpers::TestWebFrameClient>();
- local_frame_root_ = frame_test_helpers::CreateLocalChild(
+ local_frame_root_ = web_view_helper_->CreateLocalChild(
*WebView().MainFrame()->ToWebRemoteFrame(), "local_frame_root",
- WebFrameOwnerProperties(), nullptr, web_frame_client_.get(),
- compositor_.get());
+ WebFrameOwnerProperties(), nullptr, web_frame_client_.get());
+ compositor_->SetLayerTreeHost(
+ local_frame_root_->FrameWidgetImpl()->LayerTreeHostForTesting());
}
void SimTest::LoadURL(const String& url_string) {
@@ -128,14 +134,14 @@ frame_test_helpers::TestWebViewClient& SimTest::WebViewClient() {
return *web_view_client_;
}
-frame_test_helpers::TestWebWidgetClient& SimTest::WebWidgetClient() {
- return *compositor_;
-}
-
frame_test_helpers::TestWebFrameClient& SimTest::WebFrameClient() {
return *web_frame_client_;
}
+SimWebFrameWidget& SimTest::GetWebFrameWidget() {
+ return *static_cast<SimWebFrameWidget*>(local_frame_root_->FrameWidgetImpl());
+}
+
SimCompositor& SimTest::Compositor() {
return *compositor_;
}
@@ -144,4 +150,51 @@ Vector<String>& SimTest::ConsoleMessages() {
return web_frame_client_->ConsoleMessages();
}
+SimWebFrameWidget* SimTest::CreateSimWebFrameWidget(
+ base::PassKey<WebLocalFrame> pass_key,
+ CrossVariantMojoAssociatedRemote<mojom::blink::FrameWidgetHostInterfaceBase>
+ frame_widget_host,
+ CrossVariantMojoAssociatedReceiver<mojom::blink::FrameWidgetInterfaceBase>
+ frame_widget,
+ CrossVariantMojoAssociatedRemote<mojom::blink::WidgetHostInterfaceBase>
+ widget_host,
+ CrossVariantMojoAssociatedReceiver<mojom::blink::WidgetInterfaceBase>
+ widget,
+ scoped_refptr<base::SingleThreadTaskRunner> task_runner,
+ const viz::FrameSinkId& frame_sink_id,
+ bool hidden,
+ bool never_composited,
+ bool is_for_child_local_root,
+ bool is_for_nested_main_frame,
+ SimCompositor* compositor) {
+ return MakeGarbageCollected<SimWebFrameWidget>(
+ compositor, std::move(pass_key), std::move(frame_widget_host),
+ std::move(frame_widget), std::move(widget_host), std::move(widget),
+ std::move(task_runner), frame_sink_id, hidden, never_composited,
+ is_for_child_local_root, is_for_nested_main_frame);
+}
+
+frame_test_helpers::TestWebFrameWidget* SimTest::CreateTestWebFrameWidget(
+ base::PassKey<WebLocalFrame> pass_key,
+ CrossVariantMojoAssociatedRemote<mojom::blink::FrameWidgetHostInterfaceBase>
+ frame_widget_host,
+ CrossVariantMojoAssociatedReceiver<mojom::blink::FrameWidgetInterfaceBase>
+ frame_widget,
+ CrossVariantMojoAssociatedRemote<mojom::blink::WidgetHostInterfaceBase>
+ widget_host,
+ CrossVariantMojoAssociatedReceiver<mojom::blink::WidgetInterfaceBase>
+ widget,
+ scoped_refptr<base::SingleThreadTaskRunner> task_runner,
+ const viz::FrameSinkId& frame_sink_id,
+ bool hidden,
+ bool never_composited,
+ bool is_for_child_local_root,
+ bool is_for_nested_main_frame) {
+ return CreateSimWebFrameWidget(
+ std::move(pass_key), std::move(frame_widget_host),
+ std::move(frame_widget), std::move(widget_host), std::move(widget),
+ std::move(task_runner), frame_sink_id, hidden, never_composited,
+ is_for_child_local_root, is_for_nested_main_frame, compositor_.get());
+}
+
} // namespace blink
diff --git a/chromium/third_party/blink/renderer/core/testing/sim/sim_test.h b/chromium/third_party/blink/renderer/core/testing/sim/sim_test.h
index 1d5d8ffb211..cb301f5edbf 100644
--- a/chromium/third_party/blink/renderer/core/testing/sim/sim_test.h
+++ b/chromium/third_party/blink/renderer/core/testing/sim/sim_test.h
@@ -11,6 +11,7 @@
#include "third_party/blink/renderer/core/testing/sim/sim_compositor.h"
#include "third_party/blink/renderer/core/testing/sim/sim_network.h"
#include "third_party/blink/renderer/core/testing/sim/sim_page.h"
+#include "third_party/blink/renderer/core/testing/sim/sim_web_frame_widget.h"
namespace blink {
@@ -43,13 +44,50 @@ class SimTest : public testing::Test {
WebLocalFrameImpl& MainFrame();
WebLocalFrameImpl& LocalFrameRoot();
frame_test_helpers::TestWebViewClient& WebViewClient();
- frame_test_helpers::TestWebWidgetClient& WebWidgetClient();
frame_test_helpers::TestWebFrameClient& WebFrameClient();
+ SimWebFrameWidget& GetWebFrameWidget();
SimCompositor& Compositor();
Vector<String>& ConsoleMessages();
+ // Creates a SimWebFrameWidget. Subclasses can override this if the
+ // wish to create their own.
+ virtual SimWebFrameWidget* CreateSimWebFrameWidget(
+ base::PassKey<WebLocalFrame> pass_key,
+ CrossVariantMojoAssociatedRemote<
+ mojom::blink::FrameWidgetHostInterfaceBase> frame_widget_host,
+ CrossVariantMojoAssociatedReceiver<mojom::blink::FrameWidgetInterfaceBase>
+ frame_widget,
+ CrossVariantMojoAssociatedRemote<mojom::blink::WidgetHostInterfaceBase>
+ widget_host,
+ CrossVariantMojoAssociatedReceiver<mojom::blink::WidgetInterfaceBase>
+ widget,
+ scoped_refptr<base::SingleThreadTaskRunner> task_runner,
+ const viz::FrameSinkId& frame_sink_id,
+ bool hidden,
+ bool never_composited,
+ bool is_for_child_local_root,
+ bool is_for_nested_main_frame,
+ SimCompositor* compositor);
+
private:
+ frame_test_helpers::TestWebFrameWidget* CreateTestWebFrameWidget(
+ base::PassKey<WebLocalFrame> pass_key,
+ CrossVariantMojoAssociatedRemote<
+ mojom::blink::FrameWidgetHostInterfaceBase> frame_widget_host,
+ CrossVariantMojoAssociatedReceiver<mojom::blink::FrameWidgetInterfaceBase>
+ frame_widget,
+ CrossVariantMojoAssociatedRemote<mojom::blink::WidgetHostInterfaceBase>
+ widget_host,
+ CrossVariantMojoAssociatedReceiver<mojom::blink::WidgetInterfaceBase>
+ widget,
+ scoped_refptr<base::SingleThreadTaskRunner> task_runner,
+ const viz::FrameSinkId& frame_sink_id,
+ bool hidden,
+ bool never_composited,
+ bool is_for_child_local_root,
+ bool is_for_nested_main_frame);
+
// These are unique_ptrs in order to destroy them in TearDown. Subclasses
// may override Platform::Current() and these must shutdown before the
// subclass destructor.
diff --git a/chromium/third_party/blink/renderer/core/testing/sim/sim_web_frame_widget.cc b/chromium/third_party/blink/renderer/core/testing/sim/sim_web_frame_widget.cc
new file mode 100644
index 00000000000..5edf4296655
--- /dev/null
+++ b/chromium/third_party/blink/renderer/core/testing/sim/sim_web_frame_widget.cc
@@ -0,0 +1,18 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "third_party/blink/renderer/core/testing/sim/sim_web_frame_widget.h"
+
+#include "third_party/blink/renderer/core/testing/sim/sim_compositor.h"
+
+namespace blink {
+
+void SimWebFrameWidget::DidBeginMainFrame() {
+ // Notify the SimCompositor before calling the super, as the
+ // overriden method will advance the lifecycle.
+ sim_compositor_->DidBeginMainFrame();
+ frame_test_helpers::TestWebFrameWidget::DidBeginMainFrame();
+}
+
+} // namespace blink
diff --git a/chromium/third_party/blink/renderer/core/testing/sim/sim_web_frame_widget.h b/chromium/third_party/blink/renderer/core/testing/sim/sim_web_frame_widget.h
new file mode 100644
index 00000000000..1c80a306f59
--- /dev/null
+++ b/chromium/third_party/blink/renderer/core/testing/sim/sim_web_frame_widget.h
@@ -0,0 +1,30 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef THIRD_PARTY_BLINK_RENDERER_CORE_TESTING_SIM_SIM_WEB_FRAME_WIDGET_H_
+#define THIRD_PARTY_BLINK_RENDERER_CORE_TESTING_SIM_SIM_WEB_FRAME_WIDGET_H_
+
+#include "third_party/blink/renderer/core/frame/frame_test_helpers.h"
+
+namespace blink {
+
+class SimCompositor;
+
+class SimWebFrameWidget : public frame_test_helpers::TestWebFrameWidget {
+ public:
+ template <typename... Args>
+ SimWebFrameWidget(SimCompositor* compositor, Args&&... args)
+ : frame_test_helpers::TestWebFrameWidget(std::forward<Args>(args)...),
+ sim_compositor_(compositor) {}
+
+ // WidgetBaseClient overrides.
+ void DidBeginMainFrame() override;
+
+ private:
+ SimCompositor* const sim_compositor_;
+};
+
+} // namespace blink
+
+#endif // THIRD_PARTY_BLINK_RENDERER_CORE_TESTING_SIM_SIM_WEB_FRAME_WIDGET_H_
diff --git a/chromium/third_party/blink/renderer/core/testing/wait_for_event.cc b/chromium/third_party/blink/renderer/core/testing/wait_for_event.cc
index 405cc582410..479a05f86b2 100644
--- a/chromium/third_party/blink/renderer/core/testing/wait_for_event.cc
+++ b/chromium/third_party/blink/renderer/core/testing/wait_for_event.cc
@@ -3,7 +3,7 @@
// found in the LICENSE file.
#include "third_party/blink/renderer/core/testing/wait_for_event.h"
-#include "third_party/blink/renderer/platform/heap/thread_state_scopes.h"
+#include "third_party/blink/renderer/platform/heap/heap_test_utilities.h"
#include "third_party/blink/renderer/core/dom/element.h"
@@ -12,7 +12,7 @@ namespace blink {
WaitForEvent::WaitForEvent(Element* element, const AtomicString& name)
: element_(element), event_name_(name) {
element_->addEventListener(event_name_, this);
- ThreadState::HeapPointersOnStackScope scan_stack(ThreadState::Current());
+ HeapPointersOnStackScope scan_stack(ThreadState::Current());
run_loop_.Run();
}