summaryrefslogtreecommitdiff
path: root/chromium/third_party/blink/renderer/core/exported
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@qt.io>2020-10-12 14:27:29 +0200
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2020-10-13 09:35:20 +0000
commitc30a6232df03e1efbd9f3b226777b07e087a1122 (patch)
treee992f45784689f373bcc38d1b79a239ebe17ee23 /chromium/third_party/blink/renderer/core/exported
parent7b5b123ac58f58ffde0f4f6e488bcd09aa4decd3 (diff)
downloadqtwebengine-chromium-85-based.tar.gz
BASELINE: Update Chromium to 85.0.4183.14085-based
Change-Id: Iaa42f4680837c57725b1344f108c0196741f6057 Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
Diffstat (limited to 'chromium/third_party/blink/renderer/core/exported')
-rw-r--r--chromium/third_party/blink/renderer/core/exported/BUILD.gn3
-rw-r--r--chromium/third_party/blink/renderer/core/exported/local_frame_client_impl.cc49
-rw-r--r--chromium/third_party/blink/renderer/core/exported/local_frame_client_impl.h9
-rw-r--r--chromium/third_party/blink/renderer/core/exported/web_dev_tools_agent_impl.cc2
-rw-r--r--chromium/third_party/blink/renderer/core/exported/web_dev_tools_agent_impl.h2
-rw-r--r--chromium/third_party/blink/renderer/core/exported/web_document.cc7
-rw-r--r--chromium/third_party/blink/renderer/core/exported/web_document_loader_impl.cc2
-rw-r--r--chromium/third_party/blink/renderer/core/exported/web_document_loader_impl.h2
-rw-r--r--chromium/third_party/blink/renderer/core/exported/web_document_subresource_filter_test.cc10
-rw-r--r--chromium/third_party/blink/renderer/core/exported/web_dom_message_event.cc53
-rw-r--r--chromium/third_party/blink/renderer/core/exported/web_external_widget_impl.cc106
-rw-r--r--chromium/third_party/blink/renderer/core/exported/web_external_widget_impl.h36
-rw-r--r--chromium/third_party/blink/renderer/core/exported/web_form_element_observer_impl.cc6
-rw-r--r--chromium/third_party/blink/renderer/core/exported/web_form_element_observer_impl.h2
-rw-r--r--chromium/third_party/blink/renderer/core/exported/web_frame_test.cc471
-rw-r--r--chromium/third_party/blink/renderer/core/exported/web_hit_test_result.cc2
-rw-r--r--chromium/third_party/blink/renderer/core/exported/web_input_method_controller_impl.cc21
-rw-r--r--chromium/third_party/blink/renderer/core/exported/web_input_method_controller_impl.h18
-rw-r--r--chromium/third_party/blink/renderer/core/exported/web_navigation_params.cc5
-rw-r--r--chromium/third_party/blink/renderer/core/exported/web_page_popup_impl.cc202
-rw-r--r--chromium/third_party/blink/renderer/core/exported/web_page_popup_impl.h40
-rw-r--r--chromium/third_party/blink/renderer/core/exported/web_performance.cc56
-rw-r--r--chromium/third_party/blink/renderer/core/exported/web_plugin_container_impl.cc18
-rw-r--r--chromium/third_party/blink/renderer/core/exported/web_plugin_container_impl.h2
-rw-r--r--chromium/third_party/blink/renderer/core/exported/web_plugin_container_test.cc3
-rw-r--r--chromium/third_party/blink/renderer/core/exported/web_remote_frame_impl.cc12
-rw-r--r--chromium/third_party/blink/renderer/core/exported/web_remote_frame_impl.h3
-rw-r--r--chromium/third_party/blink/renderer/core/exported/web_savable_resources_test_support.cc19
-rw-r--r--chromium/third_party/blink/renderer/core/exported/web_settings_impl.cc8
-rw-r--r--chromium/third_party/blink/renderer/core/exported/web_settings_impl.h3
-rw-r--r--chromium/third_party/blink/renderer/core/exported/web_shared_worker_impl.cc23
-rw-r--r--chromium/third_party/blink/renderer/core/exported/web_shared_worker_impl.h9
-rw-r--r--chromium/third_party/blink/renderer/core/exported/web_view_impl.cc237
-rw-r--r--chromium/third_party/blink/renderer/core/exported/web_view_impl.h27
-rw-r--r--chromium/third_party/blink/renderer/core/exported/web_view_test.cc140
35 files changed, 1056 insertions, 552 deletions
diff --git a/chromium/third_party/blink/renderer/core/exported/BUILD.gn b/chromium/third_party/blink/renderer/core/exported/BUILD.gn
index f1ed480efe6..e597f828369 100644
--- a/chromium/third_party/blink/renderer/core/exported/BUILD.gn
+++ b/chromium/third_party/blink/renderer/core/exported/BUILD.gn
@@ -62,6 +62,7 @@ blink_core_sources("exported") {
"web_remote_frame_impl.cc",
"web_remote_frame_impl.h",
"web_render_theme.cc",
+ "web_savable_resources_test_support.cc",
"web_scoped_page_pauser.cc",
"web_scoped_window_focus_allowed_indicator.cc",
"web_script_controller.cc",
@@ -86,7 +87,7 @@ blink_core_sources("exported") {
}
deps = [
- "//ui/base/cursor",
+ "//ui/base/cursor:cursor_base",
"//ui/base/cursor/mojom:cursor_type_blink",
]
diff --git a/chromium/third_party/blink/renderer/core/exported/local_frame_client_impl.cc b/chromium/third_party/blink/renderer/core/exported/local_frame_client_impl.cc
index e8cc8ddcd59..adc00866f43 100644
--- a/chromium/third_party/blink/renderer/core/exported/local_frame_client_impl.cc
+++ b/chromium/third_party/blink/renderer/core/exported/local_frame_client_impl.cc
@@ -74,6 +74,7 @@
#include "third_party/blink/renderer/core/frame/local_dom_window.h"
#include "third_party/blink/renderer/core/frame/local_frame_view.h"
#include "third_party/blink/renderer/core/frame/settings.h"
+#include "third_party/blink/renderer/core/frame/web_frame_widget_base.h"
#include "third_party/blink/renderer/core/frame/web_local_frame_impl.h"
#include "third_party/blink/renderer/core/fullscreen/fullscreen.h"
#include "third_party/blink/renderer/core/html/html_frame_element_base.h"
@@ -204,6 +205,20 @@ WebString ConvertToPublic(
return "navigate-to";
case CSPDirectiveName::FrameAncestors:
return "frame-ancestors";
+ case CSPDirectiveName::ImgSrc:
+ return "img-src";
+ case CSPDirectiveName::MediaSrc:
+ return "media-src";
+ case CSPDirectiveName::ObjectSrc:
+ return "object-src";
+ case CSPDirectiveName::ScriptSrc:
+ return "script-src";
+ case CSPDirectiveName::StyleSrc:
+ return "style-src";
+ case CSPDirectiveName::WorkerSrc:
+ return "worker-src";
+ case CSPDirectiveName::ConnectSrc:
+ return "connect-src";
case CSPDirectiveName::Unknown:
NOTREACHED();
return "";
@@ -238,7 +253,7 @@ LocalFrameClientImpl::LocalFrameClientImpl(WebLocalFrameImpl* frame)
LocalFrameClientImpl::~LocalFrameClientImpl() = default;
-void LocalFrameClientImpl::Trace(Visitor* visitor) {
+void LocalFrameClientImpl::Trace(Visitor* visitor) const {
visitor->Trace(web_frame_);
LocalFrameClient::Trace(visitor);
}
@@ -391,13 +406,6 @@ Frame* LocalFrameClientImpl::Opener() const {
return ToCoreFrame(web_frame_->Opener());
}
-void LocalFrameClientImpl::SetOpener(Frame* opener) {
- WebFrame* opener_frame = WebFrame::FromFrame(opener);
- if (web_frame_->Client() && web_frame_->Opener() != opener_frame)
- web_frame_->Client()->DidChangeOpener(opener_frame);
- web_frame_->SetOpener(opener_frame);
-}
-
Frame* LocalFrameClientImpl::Parent() const {
return ToCoreFrame(web_frame_->Parent());
}
@@ -562,7 +570,7 @@ void LocalFrameClientImpl::BeginNavigation(
navigation_info->triggering_event_info = triggering_event_info;
navigation_info->should_check_main_world_content_security_policy =
should_check_main_world_content_security_policy;
- navigation_info->blob_url_token = blob_url_token.PassPipe();
+ navigation_info->blob_url_token = std::move(blob_url_token);
navigation_info->input_start = input_start_time;
if (origin_document && origin_document->GetFrame()) {
navigation_info->initiator_frame =
@@ -943,15 +951,6 @@ void LocalFrameClientImpl::DidChangeName(const String& name) {
web_frame_->Client()->DidChangeName(name);
}
-void LocalFrameClientImpl::DidChangeFramePolicy(
- Frame* child_frame,
- const FramePolicy& frame_policy) {
- if (!web_frame_->Client())
- return;
- web_frame_->Client()->DidChangeFramePolicy(WebFrame::FromFrame(child_frame),
- frame_policy);
-}
-
void LocalFrameClientImpl::DidSetFramePolicyHeaders(
network::mojom::blink::WebSandboxFlags sandbox_flags,
const ParsedFeaturePolicy& feature_policy_header,
@@ -1051,9 +1050,9 @@ String LocalFrameClientImpl::evaluateInInspectorOverlayForTesting(
}
bool LocalFrameClientImpl::HandleCurrentKeyboardEvent() {
- if (web_frame_->Client())
- return web_frame_->Client()->HandleCurrentKeyboardEvent();
- return false;
+ return web_frame_->LocalRoot()
+ ->FrameWidgetImpl()
+ ->HandleCurrentKeyboardEvent();
}
void LocalFrameClientImpl::DidChangeSelection(bool is_selection_empty) {
@@ -1122,6 +1121,14 @@ LocalFrameClientImpl::CreateWorkerContentSettingsClient() {
return web_frame_->Client()->CreateWorkerContentSettingsClient();
}
+std::unique_ptr<media::SpeechRecognitionClient>
+LocalFrameClientImpl::CreateSpeechRecognitionClient(
+ media::SpeechRecognitionClient::OnReadyCallback callback) {
+ DCHECK(web_frame_->Client());
+ return web_frame_->Client()->CreateSpeechRecognitionClient(
+ std::move(callback));
+}
+
void LocalFrameClientImpl::SetMouseCapture(bool capture) {
web_frame_->Client()->SetMouseCapture(capture);
}
diff --git a/chromium/third_party/blink/renderer/core/exported/local_frame_client_impl.h b/chromium/third_party/blink/renderer/core/exported/local_frame_client_impl.h
index cac29c6af0f..23a196c7216 100644
--- a/chromium/third_party/blink/renderer/core/exported/local_frame_client_impl.h
+++ b/chromium/third_party/blink/renderer/core/exported/local_frame_client_impl.h
@@ -54,12 +54,12 @@ class WebLocalFrameImpl;
class WebSpellCheckPanelHostClient;
enum class GlobalObjectReusePolicy;
-class LocalFrameClientImpl final : public LocalFrameClient {
+class CORE_EXPORT LocalFrameClientImpl final : public LocalFrameClient {
public:
explicit LocalFrameClientImpl(WebLocalFrameImpl*);
~LocalFrameClientImpl() override;
- void Trace(Visitor*) override;
+ void Trace(Visitor*) const override;
WebLocalFrameImpl* GetWebFrame() const override;
@@ -87,7 +87,6 @@ class LocalFrameClientImpl final : public LocalFrameClient {
bool HasWebView() const override;
bool InShadowTree() const override;
Frame* Opener() const override;
- void SetOpener(Frame*) override;
Frame* Parent() const override;
Frame* Top() const override;
Frame* NextSibling() const override;
@@ -201,7 +200,6 @@ class LocalFrameClientImpl final : public LocalFrameClient {
bool AllowContentInitiatedDataUrlNavigations(const KURL&) override;
void DidChangeName(const String&) override;
- void DidChangeFramePolicy(Frame* child_frame, const FramePolicy&) override;
void DidSetFramePolicyHeaders(
network::mojom::blink::WebSandboxFlags,
const ParsedFeaturePolicy& fp_header,
@@ -268,6 +266,9 @@ class LocalFrameClientImpl final : public LocalFrameClient {
std::unique_ptr<WebContentSettingsClient> CreateWorkerContentSettingsClient()
override;
+ std::unique_ptr<media::SpeechRecognitionClient> CreateSpeechRecognitionClient(
+ media::SpeechRecognitionClient::OnReadyCallback callback) override;
+
void SetMouseCapture(bool capture) override;
bool UsePrintingLayout() const override;
diff --git a/chromium/third_party/blink/renderer/core/exported/web_dev_tools_agent_impl.cc b/chromium/third_party/blink/renderer/core/exported/web_dev_tools_agent_impl.cc
index 8681f8fc39a..7fdd2692f55 100644
--- a/chromium/third_party/blink/renderer/core/exported/web_dev_tools_agent_impl.cc
+++ b/chromium/third_party/blink/renderer/core/exported/web_dev_tools_agent_impl.cc
@@ -338,7 +338,7 @@ WebDevToolsAgentImpl::WebDevToolsAgentImpl(
WebDevToolsAgentImpl::~WebDevToolsAgentImpl() {}
-void WebDevToolsAgentImpl::Trace(Visitor* visitor) {
+void WebDevToolsAgentImpl::Trace(Visitor* visitor) const {
visitor->Trace(agent_);
visitor->Trace(network_agents_);
visitor->Trace(page_agents_);
diff --git a/chromium/third_party/blink/renderer/core/exported/web_dev_tools_agent_impl.h b/chromium/third_party/blink/renderer/core/exported/web_dev_tools_agent_impl.h
index 78f38f0b9c3..6bde1bb591c 100644
--- a/chromium/third_party/blink/renderer/core/exported/web_dev_tools_agent_impl.h
+++ b/chromium/third_party/blink/renderer/core/exported/web_dev_tools_agent_impl.h
@@ -69,7 +69,7 @@ class CORE_EXPORT WebDevToolsAgentImpl final
WebDevToolsAgentImpl(WebLocalFrameImpl*, bool include_view_agents);
~WebDevToolsAgentImpl() override;
- virtual void Trace(Visitor*);
+ virtual void Trace(Visitor*) const;
DevToolsAgent* GetDevToolsAgent() const { return agent_.Get(); }
void WillBeDestroyed();
diff --git a/chromium/third_party/blink/renderer/core/exported/web_document.cc b/chromium/third_party/blink/renderer/core/exported/web_document.cc
index fa67cdafef0..2a8df3bf4c0 100644
--- a/chromium/third_party/blink/renderer/core/exported/web_document.cc
+++ b/chromium/third_party/blink/renderer/core/exported/web_document.cc
@@ -90,7 +90,7 @@ WebSecurityOrigin WebDocument::GetSecurityOrigin() const {
bool WebDocument::IsSecureContext() const {
const Document* document = ConstUnwrap<Document>();
- return document && document->IsSecureContext();
+ return document && document->GetExecutionContext()->IsSecureContext();
}
WebString WebDocument::Encoding() const {
@@ -233,11 +233,12 @@ void WebDocument::WatchCSSSelectors(const WebVector<WebString>& web_selectors) {
}
network::mojom::ReferrerPolicy WebDocument::GetReferrerPolicy() const {
- return ConstUnwrap<Document>()->GetReferrerPolicy();
+ return ConstUnwrap<Document>()->GetExecutionContext()->GetReferrerPolicy();
}
WebString WebDocument::OutgoingReferrer() {
- return WebString(Unwrap<Document>()->OutgoingReferrer());
+ return WebString(
+ Unwrap<Document>()->GetExecutionContext()->OutgoingReferrer());
}
WebVector<WebDraggableRegion> WebDocument::DraggableRegions() const {
diff --git a/chromium/third_party/blink/renderer/core/exported/web_document_loader_impl.cc b/chromium/third_party/blink/renderer/core/exported/web_document_loader_impl.cc
index 5f0864cc2c8..277bc8b1718 100644
--- a/chromium/third_party/blink/renderer/core/exported/web_document_loader_impl.cc
+++ b/chromium/third_party/blink/renderer/core/exported/web_document_loader_impl.cc
@@ -196,7 +196,7 @@ bool WebDocumentLoaderImpl::IsListingFtpDirectory() const {
return DocumentLoader::IsListingFtpDirectory();
}
-void WebDocumentLoaderImpl::Trace(Visitor* visitor) {
+void WebDocumentLoaderImpl::Trace(Visitor* visitor) const {
DocumentLoader::Trace(visitor);
}
diff --git a/chromium/third_party/blink/renderer/core/exported/web_document_loader_impl.h b/chromium/third_party/blink/renderer/core/exported/web_document_loader_impl.h
index cfef7567b18..16549497a87 100644
--- a/chromium/third_party/blink/renderer/core/exported/web_document_loader_impl.h
+++ b/chromium/third_party/blink/renderer/core/exported/web_document_loader_impl.h
@@ -90,7 +90,7 @@ class CORE_EXPORT WebDocumentLoaderImpl final : public DocumentLoader,
bool HadUserGesture() const override;
bool IsListingFtpDirectory() const override;
- void Trace(Visitor*) override;
+ void Trace(Visitor*) const override;
private:
~WebDocumentLoaderImpl() override;
diff --git a/chromium/third_party/blink/renderer/core/exported/web_document_subresource_filter_test.cc b/chromium/third_party/blink/renderer/core/exported/web_document_subresource_filter_test.cc
index a14aabd78ea..78eb4796198 100644
--- a/chromium/third_party/blink/renderer/core/exported/web_document_subresource_filter_test.cc
+++ b/chromium/third_party/blink/renderer/core/exported/web_document_subresource_filter_test.cc
@@ -36,7 +36,7 @@ class TestDocumentSubresourceFilter : public WebDocumentSubresourceFilter {
queried_subresource_paths_.push_back(resource_path);
}
String resource_string = resource_url.GetString();
- for (const String& suffix : blacklisted_suffixes_) {
+ for (const String& suffix : blocklisted_suffixes_) {
if (resource_string.EndsWith(suffix))
return load_policy_;
}
@@ -51,8 +51,8 @@ class TestDocumentSubresourceFilter : public WebDocumentSubresourceFilter {
bool ShouldLogToConsole() override { return false; }
- void AddToBlacklist(const String& suffix) {
- blacklisted_suffixes_.push_back(suffix);
+ void AddToBlocklist(const String& suffix) {
+ blocklisted_suffixes_.push_back(suffix);
}
const Vector<String>& QueriedSubresourcePaths() const {
@@ -62,7 +62,7 @@ class TestDocumentSubresourceFilter : public WebDocumentSubresourceFilter {
private:
// Using STL types for compatibility with gtest/gmock.
Vector<String> queried_subresource_paths_;
- Vector<String> blacklisted_suffixes_;
+ Vector<String> blocklisted_suffixes_;
LoadPolicy load_policy_;
};
@@ -74,7 +74,7 @@ class SubresourceFilteringWebFrameClient
bool) override {
subresource_filter_ =
new TestDocumentSubresourceFilter(load_policy_for_next_load_);
- subresource_filter_->AddToBlacklist("1x1.png");
+ subresource_filter_->AddToBlocklist("1x1.png");
Frame()->GetDocumentLoader()->SetSubresourceFilter(subresource_filter_);
}
diff --git a/chromium/third_party/blink/renderer/core/exported/web_dom_message_event.cc b/chromium/third_party/blink/renderer/core/exported/web_dom_message_event.cc
index 7b2058b124a..e7ff1a4c527 100644
--- a/chromium/third_party/blink/renderer/core/exported/web_dom_message_event.cc
+++ b/chromium/third_party/blink/renderer/core/exported/web_dom_message_event.cc
@@ -67,61 +67,8 @@ WebDOMMessageEvent::WebDOMMessageEvent(
ports, nullptr /*user_activation*/);
}
-WebDOMMessageEvent::WebDOMMessageEvent(TransferableMessage message,
- const WebString& origin,
- const WebFrame* source_frame,
- const WebDocument& target_document)
- : WebDOMMessageEvent(MessageEvent::Create(),
- message.locked_agent_cluster_id) {
- DOMWindow* window = nullptr;
- if (source_frame)
- window = WebFrame::ToCoreFrame(*source_frame)->DomWindow();
- BlinkTransferableMessage msg = ToBlinkTransferableMessage(std::move(message));
- MessagePortArray* ports = nullptr;
- if (!target_document.IsNull()) {
- Document* core_document = target_document;
- ports = MessagePort::EntanglePorts(*core_document->GetExecutionContext(),
- std::move(msg.ports));
- }
-
- UserActivation* user_activation = nullptr;
- if (msg.user_activation) {
- user_activation = MakeGarbageCollected<UserActivation>(
- msg.user_activation->has_been_active, msg.user_activation->was_active);
- }
-
- // TODO(esprehn): Chromium always passes empty string for lastEventId, is that
- // right?
- Unwrap<MessageEvent>()->initMessageEvent(
- "message", false, false, std::move(msg.message), origin,
- "" /*lastEventId*/, window, ports, user_activation,
- msg.transfer_user_activation, msg.allow_autoplay);
-
- // If the agent cluster id had a value it means this was locked when it
- // was serialized.
- if (locked_agent_cluster_id_.has_value())
- Unwrap<MessageEvent>()->LockToAgentCluster();
-}
-
WebString WebDOMMessageEvent::Origin() const {
return WebString(ConstUnwrap<MessageEvent>()->origin());
}
-TransferableMessage WebDOMMessageEvent::AsMessage() {
- BlinkTransferableMessage msg;
- msg.message = Unwrap<MessageEvent>()->DataAsSerializedScriptValue();
- msg.ports = Unwrap<MessageEvent>()->ReleaseChannels();
- msg.transfer_user_activation =
- Unwrap<MessageEvent>()->transferUserActivation();
- msg.allow_autoplay = Unwrap<MessageEvent>()->allowAutoplay();
- msg.locked_agent_cluster_id = locked_agent_cluster_id_;
- UserActivation* user_activation = Unwrap<MessageEvent>()->userActivation();
- TransferableMessage transferable_msg = ToTransferableMessage(std::move(msg));
- if (user_activation) {
- transferable_msg.user_activation = mojom::UserActivationSnapshot::New(
- user_activation->hasBeenActive(), user_activation->isActive());
- }
- return transferable_msg;
-}
-
} // namespace blink
diff --git a/chromium/third_party/blink/renderer/core/exported/web_external_widget_impl.cc b/chromium/third_party/blink/renderer/core/exported/web_external_widget_impl.cc
index 7ba828c0f6f..9b889b9037f 100644
--- a/chromium/third_party/blink/renderer/core/exported/web_external_widget_impl.cc
+++ b/chromium/third_party/blink/renderer/core/exported/web_external_widget_impl.cc
@@ -6,6 +6,7 @@
#include "cc/trees/layer_tree_host.h"
#include "cc/trees/ukm_manager.h"
+#include "third_party/blink/public/mojom/input/input_handler.mojom-blink.h"
#include "third_party/blink/public/platform/scheduler/web_render_widget_scheduling_state.h"
#include "third_party/blink/renderer/platform/widget/widget_base.h"
@@ -97,6 +98,65 @@ void WebExternalWidgetImpl::SetCursor(const ui::Cursor& cursor) {
widget_base_->SetCursor(cursor);
}
+bool WebExternalWidgetImpl::HandlingInputEvent() {
+ return widget_base_->input_handler().handling_input_event();
+}
+
+void WebExternalWidgetImpl::SetHandlingInputEvent(bool handling) {
+ widget_base_->input_handler().set_handling_input_event(handling);
+}
+
+void WebExternalWidgetImpl::ProcessInputEventSynchronously(
+ const WebCoalescedInputEvent& event,
+ HandledEventCallback callback) {
+ widget_base_->input_handler().HandleInputEvent(event, std::move(callback));
+}
+
+void WebExternalWidgetImpl::UpdateTextInputState() {
+ widget_base_->UpdateTextInputState();
+}
+
+void WebExternalWidgetImpl::UpdateCompositionInfo() {
+ widget_base_->UpdateCompositionInfo(/*immediate_request=*/false);
+}
+
+void WebExternalWidgetImpl::UpdateSelectionBounds() {
+ widget_base_->UpdateSelectionBounds();
+}
+
+void WebExternalWidgetImpl::ShowVirtualKeyboard() {
+ widget_base_->ShowVirtualKeyboard();
+}
+
+void WebExternalWidgetImpl::ForceTextInputStateUpdate() {
+ widget_base_->ForceTextInputStateUpdate();
+}
+
+void WebExternalWidgetImpl::RequestCompositionUpdates(bool immediate_request,
+ bool monitor_updates) {
+ widget_base_->RequestCompositionUpdates(immediate_request, monitor_updates);
+}
+
+void WebExternalWidgetImpl::SetFocus(bool focus) {
+ widget_base_->SetFocus(focus);
+}
+
+bool WebExternalWidgetImpl::HasFocus() {
+ return widget_base_->has_focus();
+}
+
+void WebExternalWidgetImpl::DidOverscrollForTesting(
+ const gfx::Vector2dF& overscroll_delta,
+ const gfx::Vector2dF& accumulated_overscroll,
+ const gfx::PointF& position,
+ const gfx::Vector2dF& velocity) {
+ cc::OverscrollBehavior overscroll_behavior =
+ widget_base_->LayerTreeHost()->overscroll_behavior();
+ widget_base_->input_handler().DidOverscrollFromBlink(
+ overscroll_delta, accumulated_overscroll, position, velocity,
+ overscroll_behavior);
+}
+
void WebExternalWidgetImpl::SetRootLayer(scoped_refptr<cc::Layer> layer) {
widget_base_->LayerTreeHost()->SetNonBlinkManagedRootLayer(layer);
}
@@ -115,4 +175,50 @@ void WebExternalWidgetImpl::DidCommitAndDrawCompositorFrame() {
client_->DidCommitAndDrawCompositorFrame();
}
+bool WebExternalWidgetImpl::WillHandleGestureEvent(
+ const WebGestureEvent& event) {
+ return client_->WillHandleGestureEvent(event);
+}
+
+bool WebExternalWidgetImpl::WillHandleMouseEvent(const WebMouseEvent& event) {
+ return false;
+}
+
+void WebExternalWidgetImpl::ObserveGestureEventAndResult(
+ const WebGestureEvent& gesture_event,
+ const gfx::Vector2dF& unused_delta,
+ const cc::OverscrollBehavior& overscroll_behavior,
+ bool event_processed) {
+ client_->DidHandleGestureScrollEvent(gesture_event, unused_delta,
+ overscroll_behavior, event_processed);
+}
+
+bool WebExternalWidgetImpl::SupportsBufferedTouchEvents() {
+ return client_->SupportsBufferedTouchEvents();
+}
+
+void WebExternalWidgetImpl::QueueSyntheticEvent(
+ std::unique_ptr<blink::WebCoalescedInputEvent>) {}
+
+void WebExternalWidgetImpl::GetWidgetInputHandler(
+ mojo::PendingReceiver<mojom::blink::WidgetInputHandler> request,
+ mojo::PendingRemote<mojom::blink::WidgetInputHandlerHost> host) {
+ client_->GetWidgetInputHandler(std::move(request), std::move(host));
+}
+
+bool WebExternalWidgetImpl::HasCurrentImeGuard(
+ bool request_to_show_virtual_keyboard) {
+ return client_->HasCurrentImeGuard(request_to_show_virtual_keyboard);
+}
+
+void WebExternalWidgetImpl::SendCompositionRangeChanged(
+ const gfx::Range& range,
+ const std::vector<gfx::Rect>& character_bounds) {
+ client_->SendCompositionRangeChanged(range, character_bounds);
+}
+
+void WebExternalWidgetImpl::FocusChanged(bool enabled) {
+ client_->FocusChanged(enabled);
+}
+
} // namespace blink
diff --git a/chromium/third_party/blink/renderer/core/exported/web_external_widget_impl.h b/chromium/third_party/blink/renderer/core/exported/web_external_widget_impl.h
index 7b6ce058a13..61958dffb1f 100644
--- a/chromium/third_party/blink/renderer/core/exported/web_external_widget_impl.h
+++ b/chromium/third_party/blink/renderer/core/exported/web_external_widget_impl.h
@@ -45,6 +45,24 @@ class WebExternalWidgetImpl : public WebExternalWidget,
scheduler::WebRenderWidgetSchedulingState* RendererWidgetSchedulingState()
override;
void SetCursor(const ui::Cursor& cursor) override;
+ bool HandlingInputEvent() override;
+ void SetHandlingInputEvent(bool handling) override;
+ void ProcessInputEventSynchronously(const WebCoalescedInputEvent&,
+ HandledEventCallback) override;
+ void DidOverscrollForTesting(
+ const gfx::Vector2dF& overscroll_delta,
+ const gfx::Vector2dF& accumulated_overscroll,
+ const gfx::PointF& position_in_viewport,
+ const gfx::Vector2dF& velocity_in_viewport) override;
+ void UpdateTextInputState() override;
+ void UpdateCompositionInfo() override;
+ void UpdateSelectionBounds() override;
+ void ShowVirtualKeyboard() override;
+ void ForceTextInputStateUpdate() override;
+ void RequestCompositionUpdates(bool immediate_request,
+ bool monitor_updates) override;
+ bool HasFocus() override;
+ void SetFocus(bool focus) override;
// WebExternalWidget overrides:
void SetRootLayer(scoped_refptr<cc::Layer>) override;
@@ -58,6 +76,24 @@ class WebExternalWidgetImpl : public WebExternalWidget,
void RequestNewLayerTreeFrameSink(
LayerTreeFrameSinkCallback callback) override;
void DidCommitAndDrawCompositorFrame() override;
+ bool WillHandleGestureEvent(const WebGestureEvent& event) override;
+ bool WillHandleMouseEvent(const WebMouseEvent& event) override;
+ void ObserveGestureEventAndResult(
+ const WebGestureEvent& gesture_event,
+ const gfx::Vector2dF& unused_delta,
+ const cc::OverscrollBehavior& overscroll_behavior,
+ bool event_processed) override;
+ bool SupportsBufferedTouchEvents() override;
+ void QueueSyntheticEvent(
+ std::unique_ptr<blink::WebCoalescedInputEvent>) override;
+ void GetWidgetInputHandler(
+ mojo::PendingReceiver<mojom::blink::WidgetInputHandler> request,
+ mojo::PendingRemote<mojom::blink::WidgetInputHandlerHost> host) override;
+ bool HasCurrentImeGuard(bool request_to_show_virtual_keyboard) override;
+ void SendCompositionRangeChanged(
+ const gfx::Range& range,
+ const std::vector<gfx::Rect>& character_bounds) override;
+ void FocusChanged(bool enabled) override;
private:
WebExternalWidgetClient* const client_;
diff --git a/chromium/third_party/blink/renderer/core/exported/web_form_element_observer_impl.cc b/chromium/third_party/blink/renderer/core/exported/web_form_element_observer_impl.cc
index af156496334..c4f6df8a2f8 100644
--- a/chromium/third_party/blink/renderer/core/exported/web_form_element_observer_impl.cc
+++ b/chromium/third_party/blink/renderer/core/exported/web_form_element_observer_impl.cc
@@ -27,7 +27,7 @@ class WebFormElementObserverImpl::ObserverCallback
void Disconnect();
- void Trace(Visitor*) override;
+ void Trace(Visitor*) const override;
private:
Member<HTMLElement> element_;
@@ -98,7 +98,7 @@ void WebFormElementObserverImpl::ObserverCallback::Disconnect() {
}
void WebFormElementObserverImpl::ObserverCallback::Trace(
- blink::Visitor* visitor) {
+ blink::Visitor* visitor) const {
visitor->Trace(element_);
visitor->Trace(parents_);
visitor->Trace(mutation_observer_);
@@ -138,7 +138,7 @@ void WebFormElementObserverImpl::Disconnect() {
self_keep_alive_.Clear();
}
-void WebFormElementObserverImpl::Trace(Visitor* visitor) {
+void WebFormElementObserverImpl::Trace(Visitor* visitor) const {
visitor->Trace(mutation_callback_);
}
diff --git a/chromium/third_party/blink/renderer/core/exported/web_form_element_observer_impl.h b/chromium/third_party/blink/renderer/core/exported/web_form_element_observer_impl.h
index 90c03eeb302..b8ae2bf04a7 100644
--- a/chromium/third_party/blink/renderer/core/exported/web_form_element_observer_impl.h
+++ b/chromium/third_party/blink/renderer/core/exported/web_form_element_observer_impl.h
@@ -29,7 +29,7 @@ class CORE_EXPORT WebFormElementObserverImpl final
// WebFormElementObserver implementation.
void Disconnect() override;
- virtual void Trace(Visitor*);
+ virtual void Trace(Visitor*) const;
private:
class ObserverCallback;
diff --git a/chromium/third_party/blink/renderer/core/exported/web_frame_test.cc b/chromium/third_party/blink/renderer/core/exported/web_frame_test.cc
index 195abffa156..89127f5cf59 100644
--- a/chromium/third_party/blink/renderer/core/exported/web_frame_test.cc
+++ b/chromium/third_party/blink/renderer/core/exported/web_frame_test.cc
@@ -41,6 +41,7 @@
#include "build/build_config.h"
#include "cc/input/overscroll_behavior.h"
#include "cc/layers/picture_layer.h"
+#include "cc/paint/paint_op_buffer.h"
#include "cc/trees/layer_tree_host.h"
#include "cc/trees/scroll_node.h"
#include "mojo/public/cpp/bindings/pending_remote.h"
@@ -82,6 +83,7 @@
#include "third_party/blink/public/web/web_local_frame.h"
#include "third_party/blink/public/web/web_local_frame_client.h"
#include "third_party/blink/public/web/web_navigation_timings.h"
+#include "third_party/blink/public/web/web_print_page_description.h"
#include "third_party/blink/public/web/web_print_params.h"
#include "third_party/blink/public/web/web_range.h"
#include "third_party/blink/public/web/web_remote_frame.h"
@@ -94,6 +96,7 @@
#include "third_party/blink/public/web/web_text_checking_completion.h"
#include "third_party/blink/public/web/web_text_checking_result.h"
#include "third_party/blink/public/web/web_view_client.h"
+#include "third_party/blink/renderer/bindings/core/v8/serialization/serialized_script_value.h"
#include "third_party/blink/renderer/bindings/core/v8/serialization/serialized_script_value_factory.h"
#include "third_party/blink/renderer/bindings/core/v8/serialization/v8_script_value_serializer.h"
#include "third_party/blink/renderer/bindings/core/v8/v8_binding_for_core.h"
@@ -117,6 +120,7 @@
#include "third_party/blink/renderer/core/editing/selection_template.h"
#include "third_party/blink/renderer/core/editing/spellcheck/idle_spell_check_controller.h"
#include "third_party/blink/renderer/core/editing/spellcheck/spell_checker.h"
+#include "third_party/blink/renderer/core/events/message_event.h"
#include "third_party/blink/renderer/core/events/mouse_event.h"
#include "third_party/blink/renderer/core/exported/web_remote_frame_impl.h"
#include "third_party/blink/renderer/core/exported/web_view_impl.h"
@@ -176,6 +180,7 @@
#include "third_party/blink/renderer/platform/loader/fetch/resource_fetcher.h"
#include "third_party/blink/renderer/platform/loader/fetch/resource_fetcher_properties.h"
#include "third_party/blink/renderer/platform/loader/fetch/resource_timing_info.h"
+#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
#include "third_party/blink/renderer/platform/scheduler/public/thread.h"
#include "third_party/blink/renderer/platform/testing/histogram_tester.h"
#include "third_party/blink/renderer/platform/testing/unit_test_helpers.h"
@@ -186,6 +191,7 @@
#include "third_party/blink/renderer/platform/wtf/forward.h"
#include "third_party/blink/renderer/platform/wtf/hash_map.h"
#include "third_party/blink/renderer/platform/wtf/hash_set.h"
+#include "ui/base/ime/mojom/text_input_state.mojom-blink.h"
#include "ui/events/keycodes/dom/dom_key.h"
#include "v8/include/v8.h"
@@ -1122,24 +1128,26 @@ TEST_F(WebFrameTest, PostMessageEvent) {
frame_test_helpers::WebViewHelper web_view_helper;
web_view_helper.InitializeAndLoad(base_url_ + "postmessage_test.html");
- WebSerializedScriptValue data(WebSerializedScriptValue::CreateInvalid());
- WebDOMMessageEvent message(data, "http://origin.com");
auto* frame =
To<LocalFrame>(web_view_helper.GetWebView()->GetPage()->MainFrame());
+ scoped_refptr<SerializedScriptValue> data = SerializedScriptValue::Create();
+ MessageEvent* message_event = MessageEvent::Create(
+ /*ports=*/nullptr, std::move(data), "http://origin.com");
+
// Send a message with the correct origin.
scoped_refptr<SecurityOrigin> correct_origin =
SecurityOrigin::Create(ToKURL(base_url_));
- frame->PostMessageEvent(base::nullopt, g_empty_string,
- correct_origin->ToString(),
- ToBlinkTransferableMessage(message.AsMessage()));
+ frame->PostMessageEvent(
+ base::nullopt, g_empty_string, correct_origin->ToString(),
+ BlinkTransferableMessage::FromMessageEvent(message_event));
// Send another message with incorrect origin.
scoped_refptr<SecurityOrigin> incorrect_origin =
SecurityOrigin::Create(ToKURL(chrome_url_));
- frame->PostMessageEvent(base::nullopt, g_empty_string,
- incorrect_origin->ToString(),
- ToBlinkTransferableMessage(message.AsMessage()));
+ frame->PostMessageEvent(
+ base::nullopt, g_empty_string, incorrect_origin->ToString(),
+ BlinkTransferableMessage::FromMessageEvent(message_event));
// Verify that only the first addition is in the body of the page.
std::string content = WebFrameContentDumper::DumpWebViewAsText(
@@ -4561,6 +4569,11 @@ TEST_F(WebFrameTest, ContextNotificationsIsolatedWorlds) {
ASSERT_NE(web_view_helper.LocalMainFrame()->MainWorldScriptContext(),
v8::Local<v8::Context>::New(isolate, notification->context));
+ // Check that the context we got has the right isolated world id.
+ ASSERT_EQ(isolated_world_id,
+ web_view_helper.LocalMainFrame()->GetScriptContextWorldId(
+ v8::Local<v8::Context>::New(isolate, notification->context)));
+
web_view_helper.Reset();
// We should have gotten three release notifications (one for each of the
@@ -5195,7 +5208,7 @@ TEST_F(WebFrameTest, FindInPageJavaScriptUpdatesDOM) {
EXPECT_TRUE(find_in_page_client.FindResultsAreReady());
// Find in a <div> element.
- options->find_next = true;
+ options->new_session = false;
EXPECT_TRUE(frame->GetFindInPage()->FindInternal(
kFindIdentifier, search_text, *options, false, &active_now));
EXPECT_TRUE(active_now);
@@ -5248,7 +5261,7 @@ TEST_F(WebFrameTest, FindInPageJavaScriptUpdatesDOMProperOrdinal) {
auto options = mojom::blink::FindOptions::New();
options->run_synchronously_for_testing = true;
- options->find_next = false;
+ options->new_session = true;
options->forward = true;
// The first search that will start the scoping process.
frame->GetFindInPage()->Find(kFindIdentifier, search_pattern,
@@ -5259,7 +5272,7 @@ TEST_F(WebFrameTest, FindInPageJavaScriptUpdatesDOMProperOrdinal) {
EXPECT_EQ(2, find_in_page_client.Count());
EXPECT_EQ(1, find_in_page_client.ActiveIndex());
- options->find_next = true;
+ options->new_session = false;
// The second search will jump to the next match without any scoping.
frame->GetFindInPage()->Find(kFindIdentifier, search_pattern,
options->Clone());
@@ -5327,7 +5340,7 @@ TEST_F(WebFrameTest, FindInPageForcedRedoOfFindInPage) {
auto options = mojom::blink::FindOptions::New();
options->run_synchronously_for_testing = true;
- options->find_next = false;
+ options->new_session = true;
options->forward = true;
// First run.
frame->GetFindInPage()->Find(kFindIdentifier, search_pattern,
@@ -5343,7 +5356,7 @@ TEST_F(WebFrameTest, FindInPageForcedRedoOfFindInPage) {
EXPECT_EQ(2, find_in_page_client.Count());
EXPECT_EQ(1, find_in_page_client.ActiveIndex());
- options->find_next = true;
+ options->new_session = false;
options->force = false;
frame->GetFindInPage()->Find(kFindIdentifier, search_pattern,
@@ -5352,7 +5365,7 @@ TEST_F(WebFrameTest, FindInPageForcedRedoOfFindInPage) {
EXPECT_EQ(2, find_in_page_client.Count());
EXPECT_EQ(2, find_in_page_client.ActiveIndex());
- options->find_next = false;
+ options->new_session = true;
options->force = true;
frame->GetFindInPage()->Find(kFindIdentifier, search_pattern,
@@ -5820,24 +5833,24 @@ TEST_F(WebFrameTest, MoveRangeSelectionExtentScollsInputField) {
TEST_F(WebFrameTest, SmartClipData) {
static const char kExpectedClipText[] = "\nPrice 10,000,000won";
static const char kExpectedClipHtml[] =
- "<div id=\"div4\" style=\"padding: 10px; margin: 10px; border: 2px "
- "solid skyblue; float: left; width: 190px; height: 30px; "
- "color: rgb(0, 0, 0); font-family: myahem; font-size: 8px; font-style: "
- "normal; font-variant-ligatures: normal; font-variant-caps: normal; "
- "font-weight: 400; letter-spacing: "
- "normal; orphans: 2; text-align: start; "
- "text-indent: 0px; text-transform: none; white-space: normal; widows: "
- "2; word-spacing: 0px; -webkit-text-stroke-width: 0px; "
- "text-decoration-style: initial; text-decoration-color: initial;\">Air "
- "conditioner</div><div id=\"div5\" style=\"padding: 10px; margin: 10px; "
- "border: 2px solid skyblue; float: left; width: 190px; height: 30px; "
- "color: rgb(0, 0, 0); font-family: myahem; font-size: 8px; font-style: "
- "normal; font-variant-ligatures: normal; font-variant-caps: normal; "
- "font-weight: 400; letter-spacing: normal; orphans: 2; text-align: "
- "start; text-indent: 0px; text-transform: none; white-space: normal; "
- "widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; "
- "text-decoration-style: initial; text-decoration-color: initial;\">Price "
- "10,000,000won</div>";
+ "<div id=\"div4\" style=\"padding: 10px; margin: 10px; border: 2px solid "
+ "skyblue; float: left; width: 190px; height: 30px; color: rgb(0, 0, 0); "
+ "font-family: myahem; font-size: 8px; font-style: normal; "
+ "font-variant-ligatures: normal; font-variant-caps: normal; font-weight: "
+ "400; letter-spacing: normal; orphans: 2; text-align: start; "
+ "text-indent: 0px; text-transform: none; white-space: normal; widows: 2; "
+ "word-spacing: 0px; -webkit-text-stroke-width: 0px; "
+ "text-decoration-thickness: initial; text-decoration-style: initial; "
+ "text-decoration-color: initial;\">Air conditioner</div><div id=\"div5\" "
+ "style=\"padding: 10px; margin: 10px; border: 2px solid skyblue; float: "
+ "left; width: 190px; height: 30px; color: rgb(0, 0, 0); font-family: "
+ "myahem; font-size: 8px; font-style: normal; font-variant-ligatures: "
+ "normal; font-variant-caps: normal; font-weight: 400; letter-spacing: "
+ "normal; orphans: 2; text-align: start; text-indent: 0px; "
+ "text-transform: none; white-space: normal; widows: 2; word-spacing: "
+ "0px; -webkit-text-stroke-width: 0px; text-decoration-thickness: "
+ "initial; text-decoration-style: initial; text-decoration-color: "
+ "initial;\">Price 10,000,000won</div>";
WebString clip_text;
WebString clip_html;
WebRect clip_rect;
@@ -5857,24 +5870,24 @@ TEST_F(WebFrameTest, SmartClipData) {
TEST_F(WebFrameTest, SmartClipDataWithPinchZoom) {
static const char kExpectedClipText[] = "\nPrice 10,000,000won";
static const char kExpectedClipHtml[] =
- "<div id=\"div4\" style=\"padding: 10px; margin: 10px; border: 2px "
- "solid skyblue; float: left; width: 190px; height: 30px; "
- "color: rgb(0, 0, 0); font-family: myahem; font-size: 8px; font-style: "
- "normal; font-variant-ligatures: normal; font-variant-caps: normal; "
- "font-weight: 400; letter-spacing: "
- "normal; orphans: 2; text-align: start; "
- "text-indent: 0px; text-transform: none; white-space: normal; widows: "
- "2; word-spacing: 0px; -webkit-text-stroke-width: 0px; "
- "text-decoration-style: initial; text-decoration-color: initial;\">Air "
- "conditioner</div><div id=\"div5\" style=\"padding: 10px; margin: 10px; "
- "border: 2px solid skyblue; float: left; width: 190px; height: 30px; "
- "color: rgb(0, 0, 0); font-family: myahem; font-size: 8px; font-style: "
- "normal; font-variant-ligatures: normal; font-variant-caps: normal; "
- "font-weight: 400; letter-spacing: normal; orphans: 2; text-align: "
- "start; text-indent: 0px; text-transform: none; white-space: normal; "
- "widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; "
- "text-decoration-style: initial; text-decoration-color: initial;\">Price "
- "10,000,000won</div>";
+ "<div id=\"div4\" style=\"padding: 10px; margin: 10px; border: 2px solid "
+ "skyblue; float: left; width: 190px; height: 30px; color: rgb(0, 0, 0); "
+ "font-family: myahem; font-size: 8px; font-style: normal; "
+ "font-variant-ligatures: normal; font-variant-caps: normal; font-weight: "
+ "400; letter-spacing: normal; orphans: 2; text-align: start; "
+ "text-indent: 0px; text-transform: none; white-space: normal; widows: 2; "
+ "word-spacing: 0px; -webkit-text-stroke-width: 0px; "
+ "text-decoration-thickness: initial; text-decoration-style: initial; "
+ "text-decoration-color: initial;\">Air conditioner</div><div id=\"div5\" "
+ "style=\"padding: 10px; margin: 10px; border: 2px solid skyblue; float: "
+ "left; width: 190px; height: 30px; color: rgb(0, 0, 0); font-family: "
+ "myahem; font-size: 8px; font-style: normal; font-variant-ligatures: "
+ "normal; font-variant-caps: normal; font-weight: 400; letter-spacing: "
+ "normal; orphans: 2; text-align: start; text-indent: 0px; "
+ "text-transform: none; white-space: normal; widows: 2; word-spacing: "
+ "0px; -webkit-text-stroke-width: 0px; text-decoration-thickness: "
+ "initial; text-decoration-style: initial; text-decoration-color: "
+ "initial;\">Price 10,000,000won</div>";
WebString clip_text;
WebString clip_html;
WebRect clip_rect;
@@ -9480,7 +9493,7 @@ class RemoteNavigationClient
bool initiator_frame_has_download_sandbox_flag,
bool blocking_downloads_in_sandbox_enabled,
bool initiator_frame_is_ad,
- mojo::ScopedMessagePipeHandle,
+ CrossVariantMojoRemote<mojom::blink::BlobURLTokenInterfaceBase>,
const base::Optional<WebImpression>& impression) override {
last_request_.CopyFrom(request);
}
@@ -9664,46 +9677,6 @@ TEST_F(WebFrameTest, RemoteFrameInitialCommitType) {
helper.Reset();
}
-class GestureEventTestWebWidgetClient
- : public frame_test_helpers::TestWebWidgetClient {
- public:
- GestureEventTestWebWidgetClient() : did_handle_gesture_event_(false) {}
- ~GestureEventTestWebWidgetClient() override = default;
-
- // frame_test_helpers::TestWebWidgetClient:
- void DidHandleGestureEvent(const WebGestureEvent& event,
- bool event_cancelled) override {
- did_handle_gesture_event_ = true;
- }
- bool DidHandleGestureEvent() const { return did_handle_gesture_event_; }
-
- private:
- bool did_handle_gesture_event_;
-};
-
-TEST_F(WebFrameTest, FrameWidgetTest) {
- frame_test_helpers::WebViewHelper helper;
- helper.InitializeRemote();
-
- GestureEventTestWebWidgetClient child_widget_client;
- WebLocalFrame* child_frame = frame_test_helpers::CreateLocalChild(
- *helper.RemoteMainFrame(), WebString(), WebFrameOwnerProperties(),
- nullptr, nullptr, &child_widget_client);
-
- helper.GetWebView()->Resize(WebSize(1000, 1000));
-
- WebGestureEvent event(WebInputEvent::Type::kGestureTap,
- WebInputEvent::kNoModifiers,
- WebInputEvent::GetStaticTimeStampForTests(),
- WebGestureDevice::kTouchscreen);
- event.SetPositionInWidget(gfx::PointF(20, 20));
- child_frame->FrameWidget()->HandleInputEvent(
- WebCoalescedInputEvent(event, ui::LatencyInfo()));
- EXPECT_TRUE(child_widget_client.DidHandleGestureEvent());
-
- helper.Reset();
-}
-
TEST_F(WebFrameTest, DetachRemoteFrame) {
frame_test_helpers::WebViewHelper helper;
helper.InitializeRemote();
@@ -10012,11 +9985,12 @@ TEST_F(WebFrameTest, PausedPageLoadWithRemoteMainFrame) {
class OverscrollWebWidgetClient
: public frame_test_helpers::TestWebWidgetClient {
public:
- MOCK_METHOD4(DidOverscroll,
+ MOCK_METHOD5(DidOverscroll,
void(const gfx::Vector2dF&,
const gfx::Vector2dF&,
const gfx::PointF&,
- const gfx::Vector2dF&));
+ const gfx::Vector2dF&,
+ cc::OverscrollBehavior));
};
class WebFrameOverscrollTest
@@ -10088,40 +10062,44 @@ TEST_P(WebFrameOverscrollTest,
ScrollBegin(&web_view_helper, -300, -316);
EXPECT_CALL(client,
DidOverscroll(gfx::Vector2dF(8, 16), gfx::Vector2dF(8, 16),
- gfx::PointF(100, 100), gfx::Vector2dF()));
+ gfx::PointF(100, 100), gfx::Vector2dF(),
+ kOverscrollBehaviorAuto));
ScrollUpdate(&web_view_helper, -308, -316);
Mock::VerifyAndClearExpectations(&client);
EXPECT_CALL(client,
DidOverscroll(gfx::Vector2dF(0, 13), gfx::Vector2dF(8, 29),
- gfx::PointF(100, 100), gfx::Vector2dF()));
+ gfx::PointF(100, 100), gfx::Vector2dF(),
+ kOverscrollBehaviorAuto));
ScrollUpdate(&web_view_helper, 0, -13);
Mock::VerifyAndClearExpectations(&client);
EXPECT_CALL(client,
DidOverscroll(gfx::Vector2dF(20, 13), gfx::Vector2dF(28, 42),
- gfx::PointF(100, 100), gfx::Vector2dF()));
+ gfx::PointF(100, 100), gfx::Vector2dF(),
+ kOverscrollBehaviorAuto));
ScrollUpdate(&web_view_helper, -20, -13);
Mock::VerifyAndClearExpectations(&client);
// Overscroll is not reported.
- EXPECT_CALL(client, DidOverscroll(_, _, _, _)).Times(0);
+ EXPECT_CALL(client, DidOverscroll(_, _, _, _, _)).Times(0);
ScrollUpdate(&web_view_helper, 0, 1);
Mock::VerifyAndClearExpectations(&client);
- EXPECT_CALL(client, DidOverscroll(_, _, _, _)).Times(0);
+ EXPECT_CALL(client, DidOverscroll(_, _, _, _, _)).Times(0);
ScrollUpdate(&web_view_helper, 1, 0);
Mock::VerifyAndClearExpectations(&client);
// Overscroll is reported.
EXPECT_CALL(client,
DidOverscroll(gfx::Vector2dF(0, -701), gfx::Vector2dF(0, -701),
- gfx::PointF(100, 100), gfx::Vector2dF()));
+ gfx::PointF(100, 100), gfx::Vector2dF(),
+ kOverscrollBehaviorAuto));
ScrollUpdate(&web_view_helper, 0, 1000);
Mock::VerifyAndClearExpectations(&client);
// Overscroll is not reported.
- EXPECT_CALL(client, DidOverscroll(_, _, _, _)).Times(0);
+ EXPECT_CALL(client, DidOverscroll(_, _, _, _, _)).Times(0);
ScrollEnd(&web_view_helper);
Mock::VerifyAndClearExpectations(&client);
}
@@ -10140,7 +10118,7 @@ TEST_P(WebFrameOverscrollTest,
ScrollBegin(&web_view_helper, 0, -316);
// Scroll the Div to the end.
- EXPECT_CALL(client, DidOverscroll(_, _, _, _)).Times(0);
+ EXPECT_CALL(client, DidOverscroll(_, _, _, _, _)).Times(0);
ScrollUpdate(&web_view_helper, 0, -316);
Mock::VerifyAndClearExpectations(&client);
@@ -10150,7 +10128,8 @@ TEST_P(WebFrameOverscrollTest,
// Now On Scrolling DIV, scroll is bubbled and root layer is over-scrolled.
EXPECT_CALL(client,
DidOverscroll(gfx::Vector2dF(0, 100), gfx::Vector2dF(0, 100),
- gfx::PointF(100, 100), gfx::Vector2dF()));
+ gfx::PointF(100, 100), gfx::Vector2dF(),
+ kOverscrollBehaviorAuto));
ScrollUpdate(&web_view_helper, 0, -100);
ScrollUpdate(&web_view_helper, 0, -100);
Mock::VerifyAndClearExpectations(&client);
@@ -10189,7 +10168,7 @@ TEST_P(WebFrameOverscrollTest, RootLayerOverscrolledOnInnerDivOverScroll) {
ScrollBegin(&web_view_helper, 0, -316);
// Scroll the Div to the end.
- EXPECT_CALL(client, DidOverscroll(_, _, _, _)).Times(0);
+ EXPECT_CALL(client, DidOverscroll(_, _, _, _, _)).Times(0);
ScrollUpdate(&web_view_helper, 0, -316);
Mock::VerifyAndClearExpectations(&client);
@@ -10199,7 +10178,8 @@ TEST_P(WebFrameOverscrollTest, RootLayerOverscrolledOnInnerDivOverScroll) {
// Now On Scrolling DIV, scroll is bubbled and root layer is over-scrolled.
EXPECT_CALL(client,
DidOverscroll(gfx::Vector2dF(0, 50), gfx::Vector2dF(0, 50),
- gfx::PointF(100, 100), gfx::Vector2dF()));
+ gfx::PointF(100, 100), gfx::Vector2dF(),
+ kOverscrollBehaviorAuto));
ScrollUpdate(&web_view_helper, 0, -150);
Mock::VerifyAndClearExpectations(&client);
}
@@ -10217,7 +10197,7 @@ TEST_P(WebFrameOverscrollTest, RootLayerOverscrolledOnInnerIFrameOverScroll) {
ScrollBegin(&web_view_helper, 0, -320);
// Scroll the IFrame to the end.
- EXPECT_CALL(client, DidOverscroll(_, _, _, _)).Times(0);
+ EXPECT_CALL(client, DidOverscroll(_, _, _, _, _)).Times(0);
// This scroll will fully scroll the iframe but will be consumed before being
// counted as overscroll.
@@ -10234,7 +10214,8 @@ TEST_P(WebFrameOverscrollTest, RootLayerOverscrolledOnInnerIFrameOverScroll) {
// Now On Scrolling IFrame, scroll is bubbled and root layer is over-scrolled.
EXPECT_CALL(client,
DidOverscroll(gfx::Vector2dF(0, 50), gfx::Vector2dF(0, 50),
- gfx::PointF(100, 100), gfx::Vector2dF()));
+ gfx::PointF(100, 100), gfx::Vector2dF(),
+ kOverscrollBehaviorAuto));
ScrollUpdate(&web_view_helper, 0, -150);
Mock::VerifyAndClearExpectations(&client);
@@ -10256,32 +10237,34 @@ TEST_P(WebFrameOverscrollTest, ScaledPageRootLayerOverscrolled) {
// The point is (99, 99) because we clamp in the division by 3 to 33 so when
// we go back to viewport coordinates it becomes (99, 99).
ScrollBegin(&web_view_helper, 0, 30);
- EXPECT_CALL(client,
- DidOverscroll(gfx::Vector2dF(0, -30), gfx::Vector2dF(0, -30),
- gfx::PointF(99, 99), gfx::Vector2dF()));
+ EXPECT_CALL(client, DidOverscroll(gfx::Vector2dF(0, -30),
+ gfx::Vector2dF(0, -30), gfx::PointF(99, 99),
+ gfx::Vector2dF(), kOverscrollBehaviorAuto));
ScrollUpdate(&web_view_helper, 0, 30);
Mock::VerifyAndClearExpectations(&client);
- EXPECT_CALL(client,
- DidOverscroll(gfx::Vector2dF(0, -30), gfx::Vector2dF(0, -60),
- gfx::PointF(99, 99), gfx::Vector2dF()));
+ EXPECT_CALL(client, DidOverscroll(gfx::Vector2dF(0, -30),
+ gfx::Vector2dF(0, -60), gfx::PointF(99, 99),
+ gfx::Vector2dF(), kOverscrollBehaviorAuto));
ScrollUpdate(&web_view_helper, 0, 30);
Mock::VerifyAndClearExpectations(&client);
EXPECT_CALL(client,
DidOverscroll(gfx::Vector2dF(-30, -30), gfx::Vector2dF(-30, -90),
- gfx::PointF(99, 99), gfx::Vector2dF()));
+ gfx::PointF(99, 99), gfx::Vector2dF(),
+ kOverscrollBehaviorAuto));
ScrollUpdate(&web_view_helper, 30, 30);
Mock::VerifyAndClearExpectations(&client);
EXPECT_CALL(client,
DidOverscroll(gfx::Vector2dF(-30, 0), gfx::Vector2dF(-60, -90),
- gfx::PointF(99, 99), gfx::Vector2dF()));
+ gfx::PointF(99, 99), gfx::Vector2dF(),
+ kOverscrollBehaviorAuto));
ScrollUpdate(&web_view_helper, 30, 0);
Mock::VerifyAndClearExpectations(&client);
// Overscroll is not reported.
- EXPECT_CALL(client, DidOverscroll(_, _, _, _)).Times(0);
+ EXPECT_CALL(client, DidOverscroll(_, _, _, _, _)).Times(0);
ScrollEnd(&web_view_helper);
Mock::VerifyAndClearExpectations(&client);
}
@@ -10299,49 +10282,52 @@ TEST_P(WebFrameOverscrollTest, NoOverscrollForSmallvalues) {
ScrollBegin(&web_view_helper, 10, 10);
EXPECT_CALL(client,
DidOverscroll(gfx::Vector2dF(-10, -10), gfx::Vector2dF(-10, -10),
- gfx::PointF(100, 100), gfx::Vector2dF()));
+ gfx::PointF(100, 100), gfx::Vector2dF(),
+ kOverscrollBehaviorAuto));
ScrollUpdate(&web_view_helper, 10, 10);
Mock::VerifyAndClearExpectations(&client);
- EXPECT_CALL(client, DidOverscroll(gfx::Vector2dF(0, -0.10),
- gfx::Vector2dF(-10, -10.10),
- gfx::PointF(100, 100), gfx::Vector2dF()));
+ EXPECT_CALL(client,
+ DidOverscroll(gfx::Vector2dF(0, -0.10),
+ gfx::Vector2dF(-10, -10.10), gfx::PointF(100, 100),
+ gfx::Vector2dF(), kOverscrollBehaviorAuto));
ScrollUpdate(&web_view_helper, 0, 0.10);
Mock::VerifyAndClearExpectations(&client);
EXPECT_CALL(client, DidOverscroll(gfx::Vector2dF(-0.10, 0),
gfx::Vector2dF(-10.10, -10.10),
- gfx::PointF(100, 100), gfx::Vector2dF()));
+ gfx::PointF(100, 100), gfx::Vector2dF(),
+ kOverscrollBehaviorAuto));
ScrollUpdate(&web_view_helper, 0.10, 0);
Mock::VerifyAndClearExpectations(&client);
// For residual values overscrollDelta should be reset and DidOverscroll
// shouldn't be called.
- EXPECT_CALL(client, DidOverscroll(_, _, _, _)).Times(0);
+ EXPECT_CALL(client, DidOverscroll(_, _, _, _, _)).Times(0);
ScrollUpdate(&web_view_helper, 0, 0.09);
Mock::VerifyAndClearExpectations(&client);
- EXPECT_CALL(client, DidOverscroll(_, _, _, _)).Times(0);
+ EXPECT_CALL(client, DidOverscroll(_, _, _, _, _)).Times(0);
ScrollUpdate(&web_view_helper, 0.09, 0.09);
Mock::VerifyAndClearExpectations(&client);
- EXPECT_CALL(client, DidOverscroll(_, _, _, _)).Times(0);
+ EXPECT_CALL(client, DidOverscroll(_, _, _, _, _)).Times(0);
ScrollUpdate(&web_view_helper, 0.09, 0);
Mock::VerifyAndClearExpectations(&client);
- EXPECT_CALL(client, DidOverscroll(_, _, _, _)).Times(0);
+ EXPECT_CALL(client, DidOverscroll(_, _, _, _, _)).Times(0);
ScrollUpdate(&web_view_helper, 0, -0.09);
Mock::VerifyAndClearExpectations(&client);
- EXPECT_CALL(client, DidOverscroll(_, _, _, _)).Times(0);
+ EXPECT_CALL(client, DidOverscroll(_, _, _, _, _)).Times(0);
ScrollUpdate(&web_view_helper, -0.09, -0.09);
Mock::VerifyAndClearExpectations(&client);
- EXPECT_CALL(client, DidOverscroll(_, _, _, _)).Times(0);
+ EXPECT_CALL(client, DidOverscroll(_, _, _, _, _)).Times(0);
ScrollUpdate(&web_view_helper, -0.09, 0);
Mock::VerifyAndClearExpectations(&client);
- EXPECT_CALL(client, DidOverscroll(_, _, _, _)).Times(0);
+ EXPECT_CALL(client, DidOverscroll(_, _, _, _, _)).Times(0);
ScrollEnd(&web_view_helper);
Mock::VerifyAndClearExpectations(&client);
}
@@ -10359,14 +10345,15 @@ TEST_P(WebFrameOverscrollTest, OverscrollBehaviorGoesToCompositor) {
WebLocalFrame* mainFrame =
web_view_helper.GetWebView()->MainFrame()->ToWebLocalFrame();
EXPECT_EQ(web_view_helper.GetLayerTreeHost()->overscroll_behavior(),
- cc::OverscrollBehavior());
+ kOverscrollBehaviorAuto);
mainFrame->ExecuteScript(
WebScriptSource(WebString("document.body.style="
"'overscroll-behavior: auto;'")));
ScrollBegin(&web_view_helper, 100, 116);
- EXPECT_CALL(client, DidOverscroll(gfx::Vector2dF(-100, -100),
- gfx::Vector2dF(-100, -100),
- gfx::PointF(100, 100), gfx::Vector2dF()));
+ EXPECT_CALL(client,
+ DidOverscroll(gfx::Vector2dF(-100, -100),
+ gfx::Vector2dF(-100, -100), gfx::PointF(100, 100),
+ gfx::Vector2dF(), kOverscrollBehaviorAuto));
ScrollUpdate(&web_view_helper, 100, 100);
Mock::VerifyAndClearExpectations(&client);
EXPECT_EQ(web_view_helper.GetLayerTreeHost()->overscroll_behavior(),
@@ -10376,9 +10363,10 @@ TEST_P(WebFrameOverscrollTest, OverscrollBehaviorGoesToCompositor) {
WebScriptSource(WebString("document.body.style="
"'overscroll-behavior: contain;'")));
ScrollBegin(&web_view_helper, 100, 116);
- EXPECT_CALL(client, DidOverscroll(gfx::Vector2dF(-100, -100),
- gfx::Vector2dF(-200, -200),
- gfx::PointF(100, 100), gfx::Vector2dF()));
+ EXPECT_CALL(client,
+ DidOverscroll(gfx::Vector2dF(-100, -100),
+ gfx::Vector2dF(-200, -200), gfx::PointF(100, 100),
+ gfx::Vector2dF(), kOverscrollBehaviorContain));
ScrollUpdate(&web_view_helper, 100, 100);
Mock::VerifyAndClearExpectations(&client);
EXPECT_EQ(web_view_helper.GetLayerTreeHost()->overscroll_behavior(),
@@ -10388,9 +10376,10 @@ TEST_P(WebFrameOverscrollTest, OverscrollBehaviorGoesToCompositor) {
WebScriptSource(WebString("document.body.style="
"'overscroll-behavior: none;'")));
ScrollBegin(&web_view_helper, 100, 116);
- EXPECT_CALL(client, DidOverscroll(gfx::Vector2dF(-100, -100),
- gfx::Vector2dF(-300, -300),
- gfx::PointF(100, 100), gfx::Vector2dF()));
+ EXPECT_CALL(client,
+ DidOverscroll(gfx::Vector2dF(-100, -100),
+ gfx::Vector2dF(-300, -300), gfx::PointF(100, 100),
+ gfx::Vector2dF(), kOverscrollBehaviorNone));
ScrollUpdate(&web_view_helper, 100, 100);
Mock::VerifyAndClearExpectations(&client);
EXPECT_EQ(web_view_helper.GetLayerTreeHost()->overscroll_behavior(),
@@ -10422,9 +10411,10 @@ TEST_P(WebFrameOverscrollTest, OnlyMainFrameOverscrollBehaviorHasEffect) {
"'overscroll-behavior: none;'")));
ScrollBegin(&web_view_helper, 100, 116);
- EXPECT_CALL(client, DidOverscroll(gfx::Vector2dF(-100, -100),
- gfx::Vector2dF(-100, -100),
- gfx::PointF(100, 100), gfx::Vector2dF()));
+ EXPECT_CALL(client,
+ DidOverscroll(gfx::Vector2dF(-100, -100),
+ gfx::Vector2dF(-100, -100), gfx::PointF(100, 100),
+ gfx::Vector2dF(), kOverscrollBehaviorAuto));
ScrollUpdate(&web_view_helper, 100, 100);
Mock::VerifyAndClearExpectations(&client);
EXPECT_EQ(web_view_helper.GetLayerTreeHost()->overscroll_behavior(),
@@ -10433,9 +10423,10 @@ TEST_P(WebFrameOverscrollTest, OnlyMainFrameOverscrollBehaviorHasEffect) {
mainFrame->ExecuteScript(
WebScriptSource(WebString("document.body.style="
"'overscroll-behavior: contain;'")));
- EXPECT_CALL(client, DidOverscroll(gfx::Vector2dF(-100, -100),
- gfx::Vector2dF(-200, -200),
- gfx::PointF(100, 100), gfx::Vector2dF()));
+ EXPECT_CALL(client,
+ DidOverscroll(gfx::Vector2dF(-100, -100),
+ gfx::Vector2dF(-200, -200), gfx::PointF(100, 100),
+ gfx::Vector2dF(), kOverscrollBehaviorContain));
ScrollUpdate(&web_view_helper, 100, 100);
Mock::VerifyAndClearExpectations(&client);
EXPECT_EQ(web_view_helper.GetLayerTreeHost()->overscroll_behavior(),
@@ -10458,7 +10449,7 @@ TEST_F(WebFrameTest, MaxFrames) {
WebLocalFrameImpl* frame =
frame_test_helpers::CreateLocalChild(*web_view_helper.RemoteMainFrame());
- while (page->SubframeCount() < Page::kMaxNumberOfFrames) {
+ while (page->SubframeCount() < Page::MaxNumberOfFrames()) {
frame_test_helpers::CreateRemoteChild(*web_view_helper.RemoteMainFrame());
}
auto* iframe = MakeGarbageCollected<HTMLIFrameElement>(
@@ -10606,7 +10597,7 @@ class WebRemoteFrameVisibilityChangeTest : public WebFrameTest {
->MainFrameImpl();
web_view_helper_.Resize(WebSize(640, 480));
remote_frame_host_.Init(
- remote_frame_client_.GetAssociatedInterfaceProvider());
+ remote_frame_client_.GetRemoteAssociatedInterfaces());
web_remote_frame_ = frame_test_helpers::CreateRemote(&remote_frame_client_);
}
@@ -10914,10 +10905,7 @@ class TestLocalFrameHostForSaveImageFromDataURL : public FakeLocalFrameHost {
// FakeLocalFrameHost:
void DownloadURL(mojom::blink::DownloadURLParamsPtr params) override {
- mojo::PendingRemote<mojom::blink::Blob> blob_data_remote(
- std::move(params->data_url_blob), mojom::blink::Blob::Version_);
-
- mojo::Remote<mojom::blink::Blob> blob(std::move(blob_data_remote));
+ mojo::Remote<mojom::blink::Blob> blob(std::move(params->data_url_blob));
mojo::ScopedDataPipeProducerHandle producer_handle;
mojo::ScopedDataPipeConsumerHandle consumer_handle;
auto result =
@@ -12464,19 +12452,19 @@ TEST_F(WebFrameTest, ClearClosedOpener) {
class ShowVirtualKeyboardObserverWidgetClient
: public frame_test_helpers::TestWebWidgetClient {
public:
- ShowVirtualKeyboardObserverWidgetClient()
- : did_show_virtual_keyboard_(false) {}
+ ShowVirtualKeyboardObserverWidgetClient() = default;
~ShowVirtualKeyboardObserverWidgetClient() override = default;
// frame_test_helpers::TestWebWidgetClient:
- void ShowVirtualKeyboardOnElementFocus() override {
- did_show_virtual_keyboard_ = true;
+ void TextInputStateChanged(
+ ui::mojom::blink::TextInputStatePtr state) override {
+ did_show_virtual_keyboard_ |= state->show_ime_if_needed;
}
bool DidShowVirtualKeyboard() const { return did_show_virtual_keyboard_; }
private:
- bool did_show_virtual_keyboard_;
+ bool did_show_virtual_keyboard_ = false;
};
TEST_F(WebFrameTest, ShowVirtualKeyboardOnElementFocus) {
@@ -12499,9 +12487,13 @@ TEST_F(WebFrameTest, ShowVirtualKeyboardOnElementFocus) {
WebScriptSource("window.focus();"
"document.querySelector('input').focus();"));
+ RunPendingTasks();
// Verify that the right WebWidgetClient has been notified.
+#if defined(OS_CHROMEOS)
+ EXPECT_FALSE(web_widget_client.DidShowVirtualKeyboard());
+#else
EXPECT_TRUE(web_widget_client.DidShowVirtualKeyboard());
-
+#endif
web_view_helper.Reset();
}
@@ -12695,8 +12687,7 @@ class TestFallbackWebFrameClient
TestWebFrameClient::BeginNavigation(std::move(info));
return;
}
- Frame()->WillStartNavigation(
- *info, false /* is_history_navigation_in_new_child_frame */);
+ Frame()->WillStartNavigation(*info);
}
private:
@@ -12832,7 +12823,8 @@ static void TestFramePrinting(WebLocalFrameImpl* frame) {
print_params.print_content_area.height = page_size.height;
EXPECT_EQ(1, frame->PrintBegin(print_params, WebNode()));
PaintRecorder recorder;
- frame->PrintPagesForTesting(recorder.beginRecording(IntRect()), page_size);
+ frame->PrintPagesForTesting(recorder.beginRecording(IntRect()), page_size,
+ page_size);
frame->PrintEnd();
}
@@ -12852,6 +12844,90 @@ TEST_F(WebFrameTest, PrintIframeUnderDetached) {
web_view_helper.LocalMainFrame()->FirstChild()->FirstChild()));
}
+namespace {
+
+struct TextRunDOMNodeIdInfo {
+ int glyph_len;
+ DOMNodeId dom_node_id;
+};
+
+// Given a PaintRecord and a starting DOMNodeId, recursively iterate over all of
+// the (nested) paint ops, and populate |text_runs| with the number of glyphs
+// and the DOMNodeId of each text run.
+void RecursiveCollectTextRunDOMNodeIds(
+ sk_sp<const PaintRecord> paint_record,
+ DOMNodeId dom_node_id,
+ std::vector<TextRunDOMNodeIdInfo>* text_runs) {
+ for (cc::PaintOpBuffer::Iterator it(paint_record.get()); it; ++it) {
+ if ((*it)->GetType() == cc::PaintOpType::DrawRecord) {
+ cc::DrawRecordOp* draw_record_op = static_cast<cc::DrawRecordOp*>(*it);
+ RecursiveCollectTextRunDOMNodeIds(draw_record_op->record, dom_node_id,
+ text_runs);
+ } else if ((*it)->GetType() == cc::PaintOpType::SetNodeId) {
+ cc::SetNodeIdOp* set_node_id_op = static_cast<cc::SetNodeIdOp*>(*it);
+ dom_node_id = set_node_id_op->node_id;
+ } else if ((*it)->GetType() == cc::PaintOpType::DrawTextBlob) {
+ cc::DrawTextBlobOp* draw_text_op = static_cast<cc::DrawTextBlobOp*>(*it);
+ SkTextBlob::Iter iter(*draw_text_op->blob);
+ SkTextBlob::Iter::Run run;
+ while (iter.next(&run)) {
+ TextRunDOMNodeIdInfo text_run_info;
+ text_run_info.glyph_len = run.fGlyphCount;
+ text_run_info.dom_node_id = dom_node_id;
+ text_runs->push_back(text_run_info);
+ }
+ }
+ }
+}
+
+} // namespace
+
+TEST_F(WebFrameTest, FirstLetterHasDOMNodeIdWhenPrinting) {
+ // When printing, every DrawText painting op needs to have an associated
+ // DOM Node ID. This test ensures that when the first-letter style is used,
+ // the drawing op for the first letter is correctly associated with the same
+ // DOM Node ID as the following text.
+
+ // Load a web page with two elements containing the text
+ // "Hello" and "World", where "World" has a first-letter style.
+ RegisterMockedHttpURLLoad("first-letter.html");
+ frame_test_helpers::WebViewHelper web_view_helper;
+ web_view_helper.InitializeAndLoad(base_url_ + "first-letter.html");
+
+ // Print the page and capture the PaintRecord.
+ WebPrintParams print_params;
+ WebSize page_size(500, 500);
+ print_params.print_content_area.width = page_size.width;
+ print_params.print_content_area.height = page_size.height;
+ WebLocalFrameImpl* frame = web_view_helper.LocalMainFrame();
+ EXPECT_EQ(1, frame->PrintBegin(print_params, WebNode()));
+ PaintRecorder recorder;
+ frame->PrintPagesForTesting(recorder.beginRecording(IntRect()), page_size,
+ page_size);
+ frame->PrintEnd();
+ sk_sp<PaintRecord> paint_record = recorder.finishRecordingAsPicture();
+
+ // Unpack the paint record and collect info about the text runs.
+ std::vector<TextRunDOMNodeIdInfo> text_runs;
+ RecursiveCollectTextRunDOMNodeIds(paint_record, 0, &text_runs);
+
+ // The first text run should be "Hello".
+ ASSERT_EQ(3U, text_runs.size());
+ EXPECT_EQ(5, text_runs[0].glyph_len);
+ EXPECT_NE(kInvalidDOMNodeId, text_runs[0].dom_node_id);
+
+ // The second text run should be "W", the first letter of "World".
+ EXPECT_EQ(1, text_runs[1].glyph_len);
+ EXPECT_NE(kInvalidDOMNodeId, text_runs[1].dom_node_id);
+
+ // The last text run should be "orld", the rest of "World".
+ EXPECT_EQ(4, text_runs[2].glyph_len);
+ EXPECT_NE(kInvalidDOMNodeId, text_runs[2].dom_node_id);
+
+ // The second and third text runs should have the same DOM Node ID.
+ EXPECT_EQ(text_runs[1].dom_node_id, text_runs[2].dom_node_id);
+}
+
TEST_F(WebFrameTest, ExecuteCommandProducesUserGesture) {
frame_test_helpers::WebViewHelper web_view_helper;
web_view_helper.InitializeAndLoad("about:blank");
@@ -13027,6 +13103,58 @@ TEST_F(WebFrameSimTest, GetPageSizeType) {
}
}
+TEST_F(WebFrameSimTest, PageOrientation) {
+ ScopedNamedPagesForTest named_pages_enabler(true);
+ WebSize page_size(500, 500);
+ WebView().MainFrameWidget()->Resize(page_size);
+
+ SimRequest request("https://example.com/test.html", "text/html");
+ LoadURL("https://example.com/test.html");
+ request.Complete(R"HTML(
+ <!DOCTYPE html>
+ <style>
+ @page upright { page-orientation: upright; }
+ @page clockwise { page-orientation: rotate-right; }
+ @page counter-clockwise { page-orientation: rotate-left; }
+ div { height: 10px; }
+ </style>
+ <!-- First page: -->
+ <div style="page:upright;"></div>
+ <!-- Second page: -->
+ <div style="page:counter-clockwise;"></div>
+ <!-- Third page: -->
+ <div style="page:clockwise;"></div>
+ <div style="page:clockwise;"></div>
+ <!-- Fourth page: -->
+ <div></div>
+ )HTML");
+
+ Compositor().BeginFrame();
+ RunPendingTasks();
+
+ auto* frame = WebView().MainFrame()->ToWebLocalFrame();
+ WebPrintParams print_params;
+ print_params.print_content_area.width = page_size.width;
+ print_params.print_content_area.height = page_size.height;
+ EXPECT_EQ(4, frame->PrintBegin(print_params, WebNode()));
+
+ WebPrintPageDescription description;
+
+ frame->GetPageDescription(0, &description);
+ EXPECT_EQ(description.orientation, PageOrientation::kUpright);
+
+ frame->GetPageDescription(1, &description);
+ EXPECT_EQ(description.orientation, PageOrientation::kRotateLeft);
+
+ frame->GetPageDescription(2, &description);
+ EXPECT_EQ(description.orientation, PageOrientation::kRotateRight);
+
+ frame->GetPageDescription(3, &description);
+ EXPECT_EQ(description.orientation, PageOrientation::kUpright);
+
+ frame->PrintEnd();
+}
+
TEST_F(WebFrameTest, MediaQueriesInLocalFrameInsideRemote) {
frame_test_helpers::WebViewHelper helper;
helper.InitializeRemote();
@@ -13222,4 +13350,31 @@ TEST_F(WebFrameTest, FocusElementCallsFocusedElementChanged) {
EXPECT_TRUE(frame_host.did_notify_);
}
+// Tests that form.submit() cancels any navigations already sent to the browser
+// process.
+TEST_F(WebFrameTest, FormSubmitCancelsNavigation) {
+ frame_test_helpers::TestWebFrameClient web_frame_client;
+ frame_test_helpers::WebViewHelper web_view_helper;
+ web_view_helper.Initialize(&web_frame_client);
+ RegisterMockedHttpURLLoad("foo.html");
+ RegisterMockedHttpURLLoad("bar.html");
+ auto* main_frame = web_view_helper.GetWebView()->MainFrameImpl();
+ auto* local_frame = main_frame->GetFrame();
+ auto* document = local_frame->GetDocument();
+
+ document->documentElement()->setInnerHTML(
+ "<form id=formid action='http://internal.test/bar.html'></form>");
+ ASSERT_FALSE(local_frame->Loader().HasProvisionalNavigation());
+
+ FrameLoadRequest request(document,
+ ResourceRequest("http://internal.test/foo.html"));
+ local_frame->Navigate(request, WebFrameLoadType::kStandard);
+ ASSERT_TRUE(local_frame->Loader().HasProvisionalNavigation());
+
+ main_frame->ExecuteScript(WebScriptSource(WebString("formid.submit()")));
+ EXPECT_FALSE(local_frame->Loader().HasProvisionalNavigation());
+
+ RunPendingTasks();
+}
+
} // namespace blink
diff --git a/chromium/third_party/blink/renderer/core/exported/web_hit_test_result.cc b/chromium/third_party/blink/renderer/core/exported/web_hit_test_result.cc
index a5b6c36bab2..371f23473e6 100644
--- a/chromium/third_party/blink/renderer/core/exported/web_hit_test_result.cc
+++ b/chromium/third_party/blink/renderer/core/exported/web_hit_test_result.cc
@@ -42,7 +42,7 @@ class WebHitTestResultPrivate final
WebHitTestResultPrivate(const HitTestResult&);
WebHitTestResultPrivate(const WebHitTestResultPrivate&);
- void Trace(Visitor* visitor) { visitor->Trace(result_); }
+ void Trace(Visitor* visitor) const { visitor->Trace(result_); }
const HitTestResult& Result() const { return result_; }
private:
diff --git a/chromium/third_party/blink/renderer/core/exported/web_input_method_controller_impl.cc b/chromium/third_party/blink/renderer/core/exported/web_input_method_controller_impl.cc
index 93c945ace72..5b46ed3aaee 100644
--- a/chromium/third_party/blink/renderer/core/exported/web_input_method_controller_impl.cc
+++ b/chromium/third_party/blink/renderer/core/exported/web_input_method_controller_impl.cc
@@ -33,7 +33,7 @@ WebInputMethodControllerImpl::WebInputMethodControllerImpl(
WebInputMethodControllerImpl::~WebInputMethodControllerImpl() = default;
-void WebInputMethodControllerImpl::Trace(Visitor* visitor) {
+void WebInputMethodControllerImpl::Trace(Visitor* visitor) const {
visitor->Trace(web_frame_);
}
@@ -41,9 +41,20 @@ bool WebInputMethodControllerImpl::IsEditContextActive() const {
return GetInputMethodController().GetActiveEditContext();
}
+ui::mojom::VirtualKeyboardVisibilityRequest
+WebInputMethodControllerImpl::GetLastVirtualKeyboardVisibilityRequest() const {
+ return GetInputMethodController().GetLastVirtualKeyboardVisibilityRequest();
+}
+
+void WebInputMethodControllerImpl::SetVirtualKeyboardVisibilityRequest(
+ ui::mojom::VirtualKeyboardVisibilityRequest vk_visibility_request) {
+ GetInputMethodController().SetVirtualKeyboardVisibilityRequest(
+ vk_visibility_request);
+}
+
bool WebInputMethodControllerImpl::SetComposition(
const WebString& text,
- const WebVector<WebImeTextSpan>& ime_text_spans,
+ const WebVector<ui::ImeTextSpan>& ime_text_spans,
const WebRange& replacement_range,
int selection_start,
int selection_end) {
@@ -124,7 +135,7 @@ bool WebInputMethodControllerImpl::FinishComposingText(
bool WebInputMethodControllerImpl::CommitText(
const WebString& text,
- const WebVector<WebImeTextSpan>& ime_text_spans,
+ const WebVector<ui::ImeTextSpan>& ime_text_spans,
const WebRange& replacement_range,
int relative_caret_position) {
LocalFrame::NotifyUserActivation(GetFrame());
@@ -179,11 +190,11 @@ void WebInputMethodControllerImpl::GetLayoutBounds(WebRect* control_bounds,
GetInputMethodController().GetLayoutBounds(control_bounds, selection_bounds);
}
-bool WebInputMethodControllerImpl::IsInputPanelPolicyManual() const {
+bool WebInputMethodControllerImpl::IsVirtualKeyboardPolicyManual() const {
if (IsEditContextActive()) {
return GetInputMethodController()
.GetActiveEditContext()
- ->IsInputPanelPolicyManual();
+ ->IsVirtualKeyboardPolicyManual();
}
return false; // Default should always be automatic.
}
diff --git a/chromium/third_party/blink/renderer/core/exported/web_input_method_controller_impl.h b/chromium/third_party/blink/renderer/core/exported/web_input_method_controller_impl.h
index afb2d962e6d..9d987fe745a 100644
--- a/chromium/third_party/blink/renderer/core/exported/web_input_method_controller_impl.h
+++ b/chromium/third_party/blink/renderer/core/exported/web_input_method_controller_impl.h
@@ -6,12 +6,15 @@
#define THIRD_PARTY_BLINK_RENDERER_CORE_EXPORTED_WEB_INPUT_METHOD_CONTROLLER_IMPL_H_
#include "base/macros.h"
-#include "third_party/blink/public/web/web_ime_text_span.h"
#include "third_party/blink/public/web/web_input_method_controller.h"
#include "third_party/blink/renderer/core/core_export.h"
#include "third_party/blink/renderer/platform/heap/handle.h"
#include "third_party/blink/renderer/platform/wtf/allocator/allocator.h"
+namespace ui {
+struct ImeTextSpan;
+} // namespace ui
+
namespace blink {
class InputMethodController;
@@ -31,12 +34,12 @@ class CORE_EXPORT WebInputMethodControllerImpl
// WebInputMethodController overrides.
bool SetComposition(const WebString& text,
- const WebVector<WebImeTextSpan>& ime_text_spans,
+ const WebVector<ui::ImeTextSpan>& ime_text_spans,
const WebRange& replacement_range,
int selection_start,
int selection_end) override;
bool CommitText(const WebString& text,
- const WebVector<WebImeTextSpan>& ime_text_spans,
+ const WebVector<ui::ImeTextSpan>& ime_text_spans,
const WebRange& replacement_range,
int relative_caret_position) override;
bool FinishComposingText(
@@ -51,10 +54,15 @@ class CORE_EXPORT WebInputMethodControllerImpl
void GetLayoutBounds(WebRect* control_bounds,
WebRect* selection_bounds) override;
- bool IsInputPanelPolicyManual() const override;
+ bool IsVirtualKeyboardPolicyManual() const override;
bool IsEditContextActive() const override;
+ ui::mojom::VirtualKeyboardVisibilityRequest
+ GetLastVirtualKeyboardVisibilityRequest() const override;
+ void SetVirtualKeyboardVisibilityRequest(
+ ui::mojom::VirtualKeyboardVisibilityRequest vk_visibility_request)
+ override;
- void Trace(Visitor*);
+ void Trace(Visitor*) const;
private:
LocalFrame* GetFrame() const;
diff --git a/chromium/third_party/blink/renderer/core/exported/web_navigation_params.cc b/chromium/third_party/blink/renderer/core/exported/web_navigation_params.cc
index b7b31685fa0..8d64cd995ab 100644
--- a/chromium/third_party/blink/renderer/core/exported/web_navigation_params.cc
+++ b/chromium/third_party/blink/renderer/core/exported/web_navigation_params.cc
@@ -129,11 +129,12 @@ WebNavigationParams::PrefetchedSignedExchange::PrefetchedSignedExchange(
const WebString& header_integrity,
const WebURL& inner_url,
const WebURLResponse& inner_response,
- mojo::ScopedMessagePipeHandle loader_factory_handle)
+ CrossVariantMojoRemote<network::mojom::URLLoaderFactoryInterfaceBase>
+ loader_factory)
: outer_url(outer_url),
header_integrity(header_integrity),
inner_url(inner_url),
inner_response(inner_response),
- loader_factory_handle(std::move(loader_factory_handle)) {}
+ loader_factory(std::move(loader_factory)) {}
} // namespace blink
diff --git a/chromium/third_party/blink/renderer/core/exported/web_page_popup_impl.cc b/chromium/third_party/blink/renderer/core/exported/web_page_popup_impl.cc
index 2c6f9c8b977..efb3e76c258 100644
--- a/chromium/third_party/blink/renderer/core/exported/web_page_popup_impl.cc
+++ b/chromium/third_party/blink/renderer/core/exported/web_page_popup_impl.cc
@@ -34,6 +34,7 @@
#include "cc/animation/animation_host.h"
#include "cc/layers/picture_layer.h"
#include "cc/trees/ukm_manager.h"
+#include "third_party/blink/public/mojom/input/input_handler.mojom-blink.h"
#include "third_party/blink/public/platform/scheduler/web_render_widget_scheduling_state.h"
#include "third_party/blink/public/platform/web_float_rect.h"
#include "third_party/blink/public/web/web_view_client.h"
@@ -70,6 +71,7 @@
#include "third_party/blink/renderer/platform/heap/handle.h"
#include "third_party/blink/renderer/platform/heap/heap.h"
#include "third_party/blink/renderer/platform/instrumentation/tracing/trace_event.h"
+#include "third_party/blink/renderer/platform/instrumentation/use_counter.h"
#include "third_party/blink/renderer/platform/keyboard_codes.h"
#include "third_party/blink/renderer/platform/text/text_direction.h"
#include "third_party/blink/renderer/platform/web_test_support.h"
@@ -216,20 +218,17 @@ class PagePopupChromeClient final : public EmptyChromeClient {
void SetToolTip(LocalFrame&,
const String& tooltip_text,
TextDirection dir) override {
- if (popup_->WidgetClient()) {
- popup_->WidgetClient()->SetToolTipText(tooltip_text,
- ToBaseTextDirection(dir));
- }
+ popup_->widget_base_->SetToolTipText(tooltip_text, dir);
}
void InjectGestureScrollEvent(LocalFrame& local_frame,
WebGestureDevice device,
const gfx::Vector2dF& delta,
- ScrollGranularity granularity,
+ ui::ScrollGranularity granularity,
cc::ElementId scrollable_area_element_id,
WebInputEvent::Type injected_type) override {
- popup_->WidgetClient()->InjectGestureScrollEvent(
- device, delta, granularity, scrollable_area_element_id, injected_type);
+ popup_->InjectGestureScrollEvent(device, delta, granularity,
+ scrollable_area_element_id, injected_type);
}
WebPagePopupImpl* popup_;
@@ -314,15 +313,37 @@ void WebPagePopupImpl::Initialize(WebViewImpl* web_view,
ProvideContextFeaturesTo(*page_, std::make_unique<PagePopupFeaturesClient>());
DEFINE_STATIC_LOCAL(Persistent<LocalFrameClient>, empty_local_frame_client,
(MakeGarbageCollected<EmptyLocalFrameClient>()));
+
// Creating new WindowAgentFactory because page popup content is owned by the
- // user agent and should be isolated from the main frame.
+ // user agent and should be isolated from the main frame. However, if we are a
+ // page popup in LayoutTests ensure we use the popup owner's frame for looking
+ // up the Agent so tests can possibly access the document via internals API.
+ WindowAgentFactory* window_agent_factory = nullptr;
+ if (WebTestSupport::IsRunningWebTest()) {
+ Document& owner_document = popup_client_->OwnerElement().GetDocument();
+ window_agent_factory = &owner_document.GetFrame()->window_agent_factory();
+ }
+
auto* frame = MakeGarbageCollected<LocalFrame>(
empty_local_frame_client, *page_,
/* FrameOwner* */ nullptr, base::UnguessableToken::Create(),
- /* WindowAgentFactory* */ nullptr,
+ window_agent_factory,
/* InterfaceRegistry* */ nullptr);
frame->SetPagePopupOwner(popup_client_->OwnerElement());
frame->SetView(MakeGarbageCollected<LocalFrameView>(*frame));
+
+ if (WebTestSupport::IsRunningWebTest()) {
+ // In order for the shared WindowAgentFactory for tests to work correctly,
+ // we need to also copy settings used in WindowAgent selection over to the
+ // popup frame.
+ Settings* owner_settings =
+ popup_client_->OwnerElement().GetDocument().GetFrame()->GetSettings();
+ frame->GetSettings()->SetWebSecurityEnabled(
+ owner_settings->GetWebSecurityEnabled());
+ frame->GetSettings()->SetAllowUniversalAccessFromFileURLs(
+ owner_settings->GetAllowUniversalAccessFromFileURLs());
+ }
+
frame->Init();
frame->View()->SetParentVisible(true);
frame->View()->SetSelfVisible(true);
@@ -368,6 +389,53 @@ void WebPagePopupImpl::SetCursor(const ui::Cursor& cursor) {
widget_base_->SetCursor(cursor);
}
+bool WebPagePopupImpl::HandlingInputEvent() {
+ return widget_base_->input_handler().handling_input_event();
+}
+
+void WebPagePopupImpl::SetHandlingInputEvent(bool handling) {
+ widget_base_->input_handler().set_handling_input_event(handling);
+}
+
+void WebPagePopupImpl::ProcessInputEventSynchronously(
+ const WebCoalescedInputEvent& event,
+ HandledEventCallback callback) {
+ widget_base_->input_handler().HandleInputEvent(event, std::move(callback));
+}
+
+void WebPagePopupImpl::UpdateTextInputState() {
+ widget_base_->UpdateTextInputState();
+}
+
+void WebPagePopupImpl::UpdateCompositionInfo() {
+ widget_base_->UpdateCompositionInfo(/*immediate_request=*/false);
+}
+
+void WebPagePopupImpl::UpdateSelectionBounds() {
+ widget_base_->UpdateSelectionBounds();
+}
+
+void WebPagePopupImpl::ShowVirtualKeyboard() {
+ widget_base_->ShowVirtualKeyboard();
+}
+
+void WebPagePopupImpl::ForceTextInputStateUpdate() {
+ widget_base_->ForceTextInputStateUpdate();
+}
+
+void WebPagePopupImpl::RequestCompositionUpdates(bool immediate_request,
+ bool monitor_updates) {
+ widget_base_->RequestCompositionUpdates(immediate_request, monitor_updates);
+}
+
+void WebPagePopupImpl::SetFocus(bool focus) {
+ widget_base_->SetFocus(focus);
+}
+
+bool WebPagePopupImpl::HasFocus() {
+ return widget_base_->has_focus();
+}
+
void WebPagePopupImpl::SetCompositorVisible(bool visible) {
widget_base_->SetCompositorVisible(visible);
}
@@ -413,6 +481,21 @@ AXObject* WebPagePopupImpl::RootAXObject() {
}
void WebPagePopupImpl::SetWindowRect(const IntRect& rect_in_screen) {
+ if (!closing_) {
+ IntRect owner_window_rect_in_screen = OwnerWindowRectInScreen();
+ Document& document = popup_client_->OwnerElement().GetDocument();
+ if (owner_window_rect_in_screen.Contains(rect_in_screen)) {
+ UseCounter::Count(document,
+ WebFeature::kPopupDoesNotExceedOwnerWindowBounds);
+ } else {
+ WebFeature feature =
+ document.GetFrame()->IsMainFrame()
+ ? WebFeature::kPopupExceedsOwnerWindowBounds
+ : WebFeature::kPopupExceedsOwnerWindowBoundsForIframe;
+ UseCounter::Count(document, feature);
+ }
+ }
+
WidgetClient()->SetWindowRect(rect_in_screen);
}
@@ -496,6 +579,45 @@ void WebPagePopupImpl::DispatchRafAlignedInput(base::TimeTicks frame_time) {
WidgetClient()->DispatchRafAlignedInput(frame_time);
}
+bool WebPagePopupImpl::WillHandleGestureEvent(const WebGestureEvent& event) {
+ return WidgetClient()->WillHandleGestureEvent(event);
+}
+
+bool WebPagePopupImpl::WillHandleMouseEvent(const WebMouseEvent& event) {
+ return WidgetClient()->WillHandleMouseEvent(event);
+}
+
+void WebPagePopupImpl::ObserveGestureEventAndResult(
+ const WebGestureEvent& gesture_event,
+ const gfx::Vector2dF& unused_delta,
+ const cc::OverscrollBehavior& overscroll_behavior,
+ bool event_processed) {
+ WidgetClient()->DidHandleGestureScrollEvent(
+ gesture_event, unused_delta, overscroll_behavior, event_processed);
+}
+
+void WebPagePopupImpl::QueueSyntheticEvent(
+ std::unique_ptr<blink::WebCoalescedInputEvent> event) {
+ WidgetClient()->QueueSyntheticEvent(std::move(event));
+}
+
+void WebPagePopupImpl::GetWidgetInputHandler(
+ mojo::PendingReceiver<mojom::blink::WidgetInputHandler> request,
+ mojo::PendingRemote<mojom::blink::WidgetInputHandlerHost> host) {
+ WidgetClient()->GetWidgetInputHandler(std::move(request), std::move(host));
+}
+
+bool WebPagePopupImpl::HasCurrentImeGuard(
+ bool request_to_show_virtual_keyboard) {
+ return WidgetClient()->HasCurrentImeGuard(request_to_show_virtual_keyboard);
+}
+
+void WebPagePopupImpl::SendCompositionRangeChanged(
+ const gfx::Range& range,
+ const std::vector<gfx::Rect>& character_bounds) {
+ WidgetClient()->SendCompositionRangeChanged(range, character_bounds);
+}
+
WebInputEventResult WebPagePopupImpl::HandleCharEvent(
const WebKeyboardEvent& event) {
if (suppress_next_keypress_event_) {
@@ -509,12 +631,16 @@ WebInputEventResult WebPagePopupImpl::HandleGestureEvent(
const WebGestureEvent& event) {
if (closing_)
return WebInputEventResult::kNotHandled;
- if ((event.GetType() == WebInputEvent::Type::kGestureTap ||
- event.GetType() == WebInputEvent::Type::kGestureTapDown) &&
- !IsViewportPointInWindow(event.PositionInWidget().x(),
- event.PositionInWidget().y())) {
- Cancel();
- return WebInputEventResult::kNotHandled;
+ if (event.GetType() == WebInputEvent::Type::kGestureTap ||
+ event.GetType() == WebInputEvent::Type::kGestureTapDown) {
+ if (!IsViewportPointInWindow(event.PositionInWidget().x(),
+ event.PositionInWidget().y())) {
+ Cancel();
+ return WebInputEventResult::kNotHandled;
+ }
+ CheckScreenPointInOwnerWindowAndCount(
+ event.PositionInScreen(),
+ WebFeature::kPopupGestureTapExceedsOwnerWindowBounds);
}
WebGestureEvent scaled_event =
TransformWebGestureEvent(MainFrame().View(), event);
@@ -524,18 +650,26 @@ WebInputEventResult WebPagePopupImpl::HandleGestureEvent(
void WebPagePopupImpl::HandleMouseDown(LocalFrame& main_frame,
const WebMouseEvent& event) {
if (IsViewportPointInWindow(event.PositionInWidget().x(),
- event.PositionInWidget().y()))
+ event.PositionInWidget().y())) {
+ CheckScreenPointInOwnerWindowAndCount(
+ event.PositionInScreen(),
+ WebFeature::kPopupMouseDownExceedsOwnerWindowBounds);
PageWidgetEventHandler::HandleMouseDown(main_frame, event);
- else
+ } else {
Cancel();
+ }
}
WebInputEventResult WebPagePopupImpl::HandleMouseWheel(
LocalFrame& main_frame,
const WebMouseWheelEvent& event) {
if (IsViewportPointInWindow(event.PositionInWidget().x(),
- event.PositionInWidget().y()))
+ event.PositionInWidget().y())) {
+ CheckScreenPointInOwnerWindowAndCount(
+ event.PositionInScreen(),
+ WebFeature::kPopupMouseWheelExceedsOwnerWindowBounds);
return PageWidgetEventHandler::HandleMouseWheel(main_frame, event);
+ }
Cancel();
return WebInputEventResult::kNotHandled;
}
@@ -569,6 +703,23 @@ bool WebPagePopupImpl::IsViewportPointInWindow(int x, int y) {
.Contains(IntPoint(point_in_window.x, point_in_window.y));
}
+void WebPagePopupImpl::CheckScreenPointInOwnerWindowAndCount(
+ const gfx::PointF& point_in_screen,
+ WebFeature feature) const {
+ if (closing_)
+ return;
+
+ IntRect owner_window_rect = OwnerWindowRectInScreen();
+ if (!owner_window_rect.Contains(point_in_screen.x(), point_in_screen.y()))
+ UseCounter::Count(popup_client_->OwnerElement().GetDocument(), feature);
+}
+
+IntRect WebPagePopupImpl::OwnerWindowRectInScreen() const {
+ LocalFrameView* view = popup_client_->OwnerElement().GetDocument().View();
+ IntRect frame_rect = view->FrameRect();
+ return view->FrameToScreen(frame_rect);
+}
+
WebInputEventResult WebPagePopupImpl::DispatchBufferedTouchEvents() {
if (closing_)
return WebInputEventResult::kNotHandled;
@@ -583,12 +734,13 @@ WebInputEventResult WebPagePopupImpl::HandleInputEvent(
return PageWidgetDelegate::HandleInputEvent(*this, event, &MainFrame());
}
-void WebPagePopupImpl::SetFocus(bool enable) {
+void WebPagePopupImpl::FocusChanged(bool enable) {
if (!page_)
return;
if (enable)
page_->GetFocusController().SetActive(true);
page_->GetFocusController().SetFocused(enable);
+ WidgetClient()->FocusChanged(enable);
}
WebURL WebPagePopupImpl::GetURLForDebugTrace() {
@@ -657,7 +809,7 @@ void WebPagePopupImpl::ClosePopup() {
// because web authors can't listen the events.
EventDispatchForbiddenScope::AllowUserAgentEvents allow_events;
- MainFrame().Loader().StopAllLoaders();
+ MainFrame().Loader().StopAllLoaders(/*abort_client=*/true);
PagePopupController::From(*page_)->ClearPagePopupClient();
DestroyPage();
}
@@ -701,6 +853,16 @@ WebRect WebPagePopupImpl::WindowRectInScreen() const {
return WidgetClient()->WindowRect();
}
+void WebPagePopupImpl::InjectGestureScrollEvent(
+ WebGestureDevice device,
+ const gfx::Vector2dF& delta,
+ ScrollGranularity granularity,
+ cc::ElementId scrollable_area_element_id,
+ WebInputEvent::Type injected_type) {
+ widget_base_->input_handler().InjectGestureScrollEvent(
+ device, delta, granularity, scrollable_area_element_id, injected_type);
+}
+
// WebPagePopup ----------------------------------------------------------------
WebPagePopup* WebPagePopup::Create(
diff --git a/chromium/third_party/blink/renderer/core/exported/web_page_popup_impl.h b/chromium/third_party/blink/renderer/core/exported/web_page_popup_impl.h
index 723cb08faba..1c33fbff637 100644
--- a/chromium/third_party/blink/renderer/core/exported/web_page_popup_impl.h
+++ b/chromium/third_party/blink/renderer/core/exported/web_page_popup_impl.h
@@ -36,6 +36,7 @@
#include "third_party/blink/public/platform/cross_variant_mojo_util.h"
#include "third_party/blink/public/web/web_page_popup.h"
#include "third_party/blink/renderer/core/core_export.h"
+#include "third_party/blink/renderer/core/frame/web_feature_forward.h"
#include "third_party/blink/renderer/core/page/page_popup.h"
#include "third_party/blink/renderer/core/page/page_widget_delegate.h"
#include "third_party/blink/renderer/platform/heap/persistent.h"
@@ -120,6 +121,24 @@ class CORE_EXPORT WebPagePopupImpl final : public WebPagePopup,
void RecordTimeToFirstActivePaint(base::TimeDelta duration) override;
void SetSuppressFrameRequestsWorkaroundFor704763Only(bool) final;
WebInputEventResult DispatchBufferedTouchEvents() override;
+ bool WillHandleGestureEvent(const WebGestureEvent& event) override;
+ bool WillHandleMouseEvent(const WebMouseEvent& event) override;
+ void ObserveGestureEventAndResult(
+ const WebGestureEvent& gesture_event,
+ const gfx::Vector2dF& unused_delta,
+ const cc::OverscrollBehavior& overscroll_behavior,
+ bool event_processed) override;
+ bool SupportsBufferedTouchEvents() override { return true; }
+ void QueueSyntheticEvent(
+ std::unique_ptr<blink::WebCoalescedInputEvent>) override;
+ void GetWidgetInputHandler(
+ mojo::PendingReceiver<mojom::blink::WidgetInputHandler> request,
+ mojo::PendingRemote<mojom::blink::WidgetInputHandlerHost> host) override;
+ bool HasCurrentImeGuard(bool request_to_show_virtual_keyboard) override;
+ void SendCompositionRangeChanged(
+ const gfx::Range& range,
+ const std::vector<gfx::Rect>& character_bounds) override;
+ void FocusChanged(bool enabled) override;
// WebWidget implementation.
// NOTE: The WebWidget may still be used after requesting the popup to be
@@ -135,6 +154,7 @@ class CORE_EXPORT WebPagePopupImpl final : public WebPagePopup,
base::OnceCallback<void()> cleanup_task) override;
WebInputEventResult HandleInputEvent(const WebCoalescedInputEvent&) override;
void SetFocus(bool) override;
+ bool HasFocus() override;
WebURL GetURLForDebugTrace() override;
WebHitTestResult HitTestResultAt(const gfx::PointF&) override { return {}; }
cc::LayerTreeHost* InitializeCompositing(
@@ -144,6 +164,17 @@ class CORE_EXPORT WebPagePopupImpl final : public WebPagePopup,
scheduler::WebRenderWidgetSchedulingState* RendererWidgetSchedulingState()
override;
void SetCursor(const ui::Cursor& cursor) override;
+ bool HandlingInputEvent() override;
+ void SetHandlingInputEvent(bool handling) override;
+ void ProcessInputEventSynchronously(const WebCoalescedInputEvent&,
+ HandledEventCallback) override;
+ void UpdateTextInputState() override;
+ void ForceTextInputStateUpdate() override;
+ void UpdateCompositionInfo() override;
+ void UpdateSelectionBounds() override;
+ void ShowVirtualKeyboard() override;
+ void RequestCompositionUpdates(bool immediate_request,
+ bool monitor_updates) override;
// PageWidgetEventHandler functions
WebInputEventResult HandleCharEvent(const WebKeyboardEvent&) override;
@@ -158,6 +189,9 @@ class CORE_EXPORT WebPagePopupImpl final : public WebPagePopup,
Element* FocusedElement() const;
bool IsViewportPointInWindow(int x, int y);
+ void CheckScreenPointInOwnerWindowAndCount(const gfx::PointF& point_in_screen,
+ WebFeature feature) const;
+ IntRect OwnerWindowRectInScreen() const;
// PagePopup function
AXObject* RootAXObject() override;
@@ -174,6 +208,12 @@ class CORE_EXPORT WebPagePopupImpl final : public WebPagePopup,
WebRect WindowRectInScreen() const;
+ void InjectGestureScrollEvent(WebGestureDevice device,
+ const gfx::Vector2dF& delta,
+ ui::ScrollGranularity granularity,
+ cc::ElementId scrollable_area_element_id,
+ WebInputEvent::Type injected_type);
+
WebPagePopupClient* web_page_popup_client_;
WebViewImpl* web_view_;
// WebPagePopupImpl wraps its own Page that renders the content in the popup.
diff --git a/chromium/third_party/blink/renderer/core/exported/web_performance.cc b/chromium/third_party/blink/renderer/core/exported/web_performance.cc
index e29242e7423..03e5fcc3196 100644
--- a/chromium/third_party/blink/renderer/core/exported/web_performance.cc
+++ b/chromium/third_party/blink/renderer/core/exported/web_performance.cc
@@ -69,6 +69,22 @@ base::TimeTicks WebPerformance::NavigationStartAsMonotonicTime() const {
return private_->timing()->NavigationStartAsMonotonicTime();
}
+WebPerformance::BackForwardCacheRestoreTimings
+WebPerformance::BackForwardCacheRestore() const {
+ PerformanceTiming::BackForwardCacheRestoreTimings restore_timings =
+ private_->timing()->BackForwardCacheRestore();
+
+ WebVector<BackForwardCacheRestoreTiming> timings(restore_timings.size());
+ for (size_t i = 0; i < restore_timings.size(); i++) {
+ timings[i].navigation_start =
+ MillisecondsToSeconds(restore_timings[i].navigation_start);
+ timings[i].first_paint =
+ MillisecondsToSeconds(restore_timings[i].first_paint);
+ timings[i].first_input_delay = restore_timings[i].first_input_delay;
+ }
+ return timings;
+}
+
double WebPerformance::InputForNavigationStart() const {
return MillisecondsToSeconds(private_->timing()->inputStart());
}
@@ -191,6 +207,28 @@ uint64_t WebPerformance::LargestTextPaintSize() const {
return private_->timing()->LargestTextPaintSize();
}
+double WebPerformance::ExperimentalLargestImagePaint() const {
+ return MillisecondsToSeconds(
+ private_->timing()->ExperimentalLargestImagePaint());
+}
+
+uint64_t WebPerformance::ExperimentalLargestImagePaintSize() const {
+ return private_->timing()->ExperimentalLargestImagePaintSize();
+}
+
+double WebPerformance::ExperimentalLargestTextPaint() const {
+ return MillisecondsToSeconds(
+ private_->timing()->ExperimentalLargestTextPaint());
+}
+
+uint64_t WebPerformance::ExperimentalLargestTextPaintSize() const {
+ return private_->timing()->ExperimentalLargestTextPaintSize();
+}
+
+double WebPerformance::FirstEligibleToPaint() const {
+ return MillisecondsToSeconds(private_->timing()->FirstEligibleToPaint());
+}
+
double WebPerformance::FirstInputOrScrollNotifiedTimestamp() const {
return MillisecondsToSeconds(
private_->timing()->FirstInputOrScrollNotifiedTimestamp());
@@ -212,6 +250,19 @@ base::Optional<base::TimeDelta> WebPerformance::LongestInputTimestamp() const {
return private_->timing()->LongestInputTimestamp();
}
+base::Optional<base::TimeDelta> WebPerformance::FirstInputProcessingTime()
+ const {
+ return private_->timing()->FirstInputProcessingTime();
+}
+
+base::Optional<base::TimeDelta> WebPerformance::FirstScrollDelay() const {
+ return private_->timing()->FirstScrollDelay();
+}
+
+base::Optional<base::TimeDelta> WebPerformance::FirstScrollTimestamp() const {
+ return private_->timing()->FirstScrollTimestamp();
+}
+
double WebPerformance::ParseStart() const {
return MillisecondsToSeconds(private_->timing()->ParseStart());
}
@@ -243,6 +294,11 @@ double WebPerformance::ParseBlockedOnScriptExecutionFromDocumentWriteDuration()
->ParseBlockedOnScriptExecutionFromDocumentWriteDuration());
}
+base::Optional<base::TimeTicks> WebPerformance::LastPortalActivatedPaint()
+ const {
+ return private_->timing()->LastPortalActivatedPaint();
+}
+
WebPerformance::WebPerformance(WindowPerformance* performance)
: private_(performance) {}
diff --git a/chromium/third_party/blink/renderer/core/exported/web_plugin_container_impl.cc b/chromium/third_party/blink/renderer/core/exported/web_plugin_container_impl.cc
index 27ea627f185..146d8228c4b 100644
--- a/chromium/third_party/blink/renderer/core/exported/web_plugin_container_impl.cc
+++ b/chromium/third_party/blink/renderer/core/exported/web_plugin_container_impl.cc
@@ -490,14 +490,12 @@ void WebPluginContainerImpl::ReportGeometry() {
}
v8::Local<v8::Object> WebPluginContainerImpl::V8ObjectForElement() {
- LocalFrame* frame = element_->GetDocument().GetFrame();
- if (!frame)
- return v8::Local<v8::Object>();
-
- if (!element_->GetDocument().CanExecuteScripts(kNotAboutToExecuteScript))
+ ExecutionContext* context = element_->GetExecutionContext();
+ if (!context || !context->CanExecuteScripts(kNotAboutToExecuteScript))
return v8::Local<v8::Object>();
- ScriptState* script_state = ToScriptStateForMainWorld(frame);
+ ScriptState* script_state =
+ ToScriptState(context, DOMWrapperWorld::MainWorld());
if (!script_state)
return v8::Local<v8::Object>();
@@ -795,7 +793,7 @@ void WebPluginContainerImpl::SetFrameRect(const IntRect& rect) {
PropagateFrameRects();
}
-void WebPluginContainerImpl::Trace(Visitor* visitor) {
+void WebPluginContainerImpl::Trace(Visitor* visitor) const {
visitor->Trace(element_);
ExecutionContextClient::Trace(visitor);
}
@@ -892,12 +890,6 @@ void WebPluginContainerImpl::HandleKeyboardEvent(KeyboardEvent& event) {
return;
}
- // Give the client a chance to issue edit comamnds.
- WebLocalFrameImpl* web_frame =
- WebLocalFrameImpl::FromFrame(element_->GetDocument().GetFrame());
- if (web_plugin_->SupportsEditCommands())
- web_frame->Client()->HandleCurrentKeyboardEvent();
-
ui::Cursor dummy_cursor;
if (web_plugin_->HandleInputEvent(
WebCoalescedInputEvent(web_event, ui::LatencyInfo()),
diff --git a/chromium/third_party/blink/renderer/core/exported/web_plugin_container_impl.h b/chromium/third_party/blink/renderer/core/exported/web_plugin_container_impl.h
index 8ef5dc8600d..91781374384 100644
--- a/chromium/third_party/blink/renderer/core/exported/web_plugin_container_impl.h
+++ b/chromium/third_party/blink/renderer/core/exported/web_plugin_container_impl.h
@@ -186,7 +186,7 @@ class CORE_EXPORT WebPluginContainerImpl final
void DidFinishLoading();
void DidFailLoading(const ResourceError&);
- void Trace(Visitor*) override;
+ void Trace(Visitor*) const override;
// USING_PRE_FINALIZER does not allow for virtual dispatch from the finalizer
// method. Here we call Dispose() which does the correct virtual dispatch.
void PreFinalize() { Dispose(); }
diff --git a/chromium/third_party/blink/renderer/core/exported/web_plugin_container_test.cc b/chromium/third_party/blink/renderer/core/exported/web_plugin_container_test.cc
index 9fe809420be..871bb4a6454 100644
--- a/chromium/third_party/blink/renderer/core/exported/web_plugin_container_test.cc
+++ b/chromium/third_party/blink/renderer/core/exported/web_plugin_container_test.cc
@@ -1465,7 +1465,8 @@ TEST_F(WebPluginContainerTest, CompositedPluginCAP) {
const auto* plugin =
static_cast<const CompositedPlugin*>(container->Plugin());
- auto paint_controller = std::make_unique<PaintController>();
+ auto paint_controller =
+ std::make_unique<PaintController>(PaintController::kTransient);
paint_controller->UpdateCurrentPaintChunkProperties(
nullptr, PropertyTreeState::Root());
GraphicsContext graphics_context(*paint_controller);
diff --git a/chromium/third_party/blink/renderer/core/exported/web_remote_frame_impl.cc b/chromium/third_party/blink/renderer/core/exported/web_remote_frame_impl.cc
index 733203da2de..053daa4b95d 100644
--- a/chromium/third_party/blink/renderer/core/exported/web_remote_frame_impl.cc
+++ b/chromium/third_party/blink/renderer/core/exported/web_remote_frame_impl.cc
@@ -78,6 +78,7 @@ WebRemoteFrame* WebRemoteFrame::CreateForPortal(
frame_token, portal_element);
}
+// static
WebRemoteFrameImpl* WebRemoteFrameImpl::CreateMainFrame(
WebView* web_view,
WebRemoteFrameClient* client,
@@ -117,7 +118,8 @@ WebRemoteFrameImpl* WebRemoteFrameImpl::CreateForPortal(
Element* element = portal_element;
DCHECK(element->HasTagName(html_names::kPortalTag));
- DCHECK(RuntimeEnabledFeatures::PortalsEnabled(&element->GetDocument()));
+ DCHECK(
+ RuntimeEnabledFeatures::PortalsEnabled(element->GetExecutionContext()));
HTMLPortalElement* portal = static_cast<HTMLPortalElement*>(element);
LocalFrame* host_frame = portal->GetDocument().GetFrame();
frame->InitializeCoreFrame(*host_frame->GetPage(), portal, g_null_atom,
@@ -128,7 +130,7 @@ WebRemoteFrameImpl* WebRemoteFrameImpl::CreateForPortal(
WebRemoteFrameImpl::~WebRemoteFrameImpl() = default;
-void WebRemoteFrameImpl::Trace(Visitor* visitor) {
+void WebRemoteFrameImpl::Trace(Visitor* visitor) const {
visitor->Trace(frame_client_);
visitor->Trace(frame_);
WebFrame::TraceFrames(visitor, this);
@@ -329,12 +331,6 @@ void WebRemoteFrameImpl::UpdateUserActivationState(
GetFrame()->UpdateUserActivationState(update_type);
}
-void WebRemoteFrameImpl::TransferUserActivationFrom(
- blink::WebRemoteFrame* source_frame) {
- GetFrame()->TransferUserActivationFrom(
- To<WebRemoteFrameImpl>(source_frame)->GetFrame());
-}
-
void WebRemoteFrameImpl::SetHadStickyUserActivationBeforeNavigation(
bool value) {
GetFrame()->SetHadStickyUserActivationBeforeNavigation(value);
diff --git a/chromium/third_party/blink/renderer/core/exported/web_remote_frame_impl.h b/chromium/third_party/blink/renderer/core/exported/web_remote_frame_impl.h
index e4ad3dd92ca..e58c2ab9948 100644
--- a/chromium/third_party/blink/renderer/core/exported/web_remote_frame_impl.h
+++ b/chromium/third_party/blink/renderer/core/exported/web_remote_frame_impl.h
@@ -105,7 +105,6 @@ class CORE_EXPORT WebRemoteFrameImpl final
bool IsIgnoredForHitTest() const override;
void UpdateUserActivationState(
mojom::blink::UserActivationUpdateType) override;
- void TransferUserActivationFrom(blink::WebRemoteFrame* source_frame) override;
void SetHadStickyUserActivationBeforeNavigation(bool value) override;
v8::Local<v8::Object> GlobalProxy() const override;
WebRect GetCompositingRect() override;
@@ -120,7 +119,7 @@ class CORE_EXPORT WebRemoteFrameImpl final
static WebRemoteFrameImpl* FromFrame(RemoteFrame&);
- void Trace(Visitor*);
+ void Trace(Visitor*) const;
private:
friend class RemoteFrameClientImpl;
diff --git a/chromium/third_party/blink/renderer/core/exported/web_savable_resources_test_support.cc b/chromium/third_party/blink/renderer/core/exported/web_savable_resources_test_support.cc
new file mode 100644
index 00000000000..dfc5be299f1
--- /dev/null
+++ b/chromium/third_party/blink/renderer/core/exported/web_savable_resources_test_support.cc
@@ -0,0 +1,19 @@
+// Copyright (c) 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/public/web/web_savable_resources_test_support.h"
+
+#include "third_party/blink/public/mojom/frame/frame.mojom-blink.h"
+#include "third_party/blink/public/platform/web_string.h"
+#include "third_party/blink/public/web/web_element.h"
+#include "third_party/blink/renderer/core/frame/savable_resources.h"
+
+namespace blink {
+
+WebString GetSubResourceLinkFromElementForTesting(const WebElement& element) {
+ return WebString(SavableResources::GetSubResourceLinkFromElement(
+ static_cast<Element*>(element)));
+}
+
+} // namespace blink
diff --git a/chromium/third_party/blink/renderer/core/exported/web_settings_impl.cc b/chromium/third_party/blink/renderer/core/exported/web_settings_impl.cc
index f11e51633f3..ed851b476b2 100644
--- a/chromium/third_party/blink/renderer/core/exported/web_settings_impl.cc
+++ b/chromium/third_party/blink/renderer/core/exported/web_settings_impl.cc
@@ -588,10 +588,6 @@ bool WebSettingsImpl::ShrinksViewportContentToFit() const {
return settings_->GetShrinksViewportContentToFit();
}
-void WebSettingsImpl::SetShouldRespectImageOrientation(bool enabled) {
- settings_->SetShouldRespectImageOrientation(enabled);
-}
-
void WebSettingsImpl::SetPictureInPictureEnabled(bool enabled) {
settings_->SetPictureInPictureEnabled(enabled);
}
@@ -784,6 +780,10 @@ void WebSettingsImpl::SetNavigationControls(
settings_->SetNavigationControls(navigation_controls);
}
+void WebSettingsImpl::SetAriaModalPrunesAXTree(bool enabled) {
+ settings_->SetAriaModalPrunesAXTree(enabled);
+}
+
STATIC_ASSERT_ENUM(WebSettings::ImageAnimationPolicy::kAllowed,
kImageAnimationPolicyAllowed);
STATIC_ASSERT_ENUM(WebSettings::ImageAnimationPolicy::kAnimateOnce,
diff --git a/chromium/third_party/blink/renderer/core/exported/web_settings_impl.h b/chromium/third_party/blink/renderer/core/exported/web_settings_impl.h
index c3f38e93e45..2c94bd8a360 100644
--- a/chromium/third_party/blink/renderer/core/exported/web_settings_impl.h
+++ b/chromium/third_party/blink/renderer/core/exported/web_settings_impl.h
@@ -146,7 +146,6 @@ class CORE_EXPORT WebSettingsImpl final : public WebSettings {
UScriptCode = USCRIPT_COMMON) override;
void SetShouldPrintBackgrounds(bool) override;
void SetShouldClearDocumentBackground(bool) override;
- void SetShouldRespectImageOrientation(bool) override;
void SetShowContextMenuOnMouseUp(bool) override;
void SetShrinksViewportContentToFit(bool) override;
void SetSmartInsertDeleteEnabled(bool) override;
@@ -224,6 +223,8 @@ class CORE_EXPORT WebSettingsImpl final : public WebSettings {
void SetPreferredColorScheme(PreferredColorScheme) override;
void SetNavigationControls(NavigationControls) override;
+ void SetAriaModalPrunesAXTree(bool) override;
+
bool RenderVSyncNotificationEnabled() const {
return render_v_sync_notification_enabled_;
}
diff --git a/chromium/third_party/blink/renderer/core/exported/web_shared_worker_impl.cc b/chromium/third_party/blink/renderer/core/exported/web_shared_worker_impl.cc
index 9942e60d41f..dbd47258fc9 100644
--- a/chromium/third_party/blink/renderer/core/exported/web_shared_worker_impl.cc
+++ b/chromium/third_party/blink/renderer/core/exported/web_shared_worker_impl.cc
@@ -31,6 +31,8 @@
#include "third_party/blink/renderer/core/exported/web_shared_worker_impl.h"
#include <memory>
+#include <utility>
+
#include "base/memory/ptr_util.h"
#include "mojo/public/cpp/bindings/pending_remote.h"
#include "services/network/public/mojom/fetch_api.mojom-shared.h"
@@ -39,7 +41,6 @@
#include "third_party/blink/public/mojom/loader/fetch_client_settings_object.mojom-blink.h"
#include "third_party/blink/public/mojom/script/script_type.mojom-blink.h"
#include "third_party/blink/public/mojom/security_context/insecure_request_policy.mojom-blink.h"
-#include "third_party/blink/public/mojom/worker/worker_content_settings_proxy.mojom-blink.h"
#include "third_party/blink/public/platform/modules/service_worker/web_service_worker_network_provider.h"
#include "third_party/blink/public/platform/task_type.h"
#include "third_party/blink/public/platform/web_content_settings_client.h"
@@ -175,8 +176,10 @@ void WebSharedWorkerImpl::StartWorkerContext(
const WebFetchClientSettingsObject& outside_fetch_client_settings_object,
const base::UnguessableToken& appcache_host_id,
const base::UnguessableToken& devtools_worker_token,
- mojo::ScopedMessagePipeHandle content_settings_handle,
- mojo::ScopedMessagePipeHandle browser_interface_broker,
+ CrossVariantMojoRemote<
+ mojom::blink::WorkerContentSettingsProxyInterfaceBase> content_settings,
+ CrossVariantMojoRemote<mojom::blink::BrowserInterfaceBrokerInterfaceBase>
+ browser_interface_broker,
bool pause_worker_context_on_start) {
DCHECK(IsMainThread());
CHECK(constructor_origin.Get()->CanAccessSharedWorkers());
@@ -233,17 +236,13 @@ void WebSharedWorkerImpl::StartWorkerContext(
outside_settings_object->GetHttpsState(),
MakeGarbageCollected<WorkerClients>(),
std::make_unique<SharedWorkerContentSettingsProxy>(
- mojo::PendingRemote<mojom::blink::WorkerContentSettingsProxy>(
- std::move(content_settings_handle), 0u)),
+ std::move(content_settings)),
base::nullopt /* response_address_space */,
nullptr /* origin_trial_tokens */, devtools_worker_token,
std::move(worker_settings), kV8CacheOptionsDefault,
nullptr /* worklet_module_response_map */,
- mojo::PendingRemote<mojom::blink::BrowserInterfaceBroker>(
- std::move(browser_interface_broker),
- mojom::blink::BrowserInterfaceBroker::Version_),
- BeginFrameProviderParams(), nullptr /* parent_feature_policy */,
- base::UnguessableToken());
+ std::move(browser_interface_broker), BeginFrameProviderParams(),
+ nullptr /* parent_feature_policy */, base::UnguessableToken());
reporting_proxy_ = MakeGarbageCollected<SharedWorkerReportingProxy>(
this, ParentExecutionContextTaskRunners::Create());
@@ -293,8 +292,8 @@ void WebSharedWorkerImpl::StartWorkerContext(
}
// We are now ready to inspect worker thread.
- client_->WorkerReadyForInspection(devtools_agent_remote.PassPipe(),
- devtools_agent_host_receiver.PassPipe());
+ client_->WorkerReadyForInspection(std::move(devtools_agent_remote),
+ std::move(devtools_agent_host_receiver));
}
void WebSharedWorkerImpl::TerminateWorkerContext() {
diff --git a/chromium/third_party/blink/renderer/core/exported/web_shared_worker_impl.h b/chromium/third_party/blink/renderer/core/exported/web_shared_worker_impl.h
index 98374fb9031..2a9de264ba1 100644
--- a/chromium/third_party/blink/renderer/core/exported/web_shared_worker_impl.h
+++ b/chromium/third_party/blink/renderer/core/exported/web_shared_worker_impl.h
@@ -40,8 +40,10 @@
#include "services/network/public/mojom/content_security_policy.mojom-blink-forward.h"
#include "services/network/public/mojom/fetch_api.mojom-shared.h"
#include "services/network/public/mojom/ip_address_space.mojom-blink-forward.h"
+#include "third_party/blink/public/mojom/browser_interface_broker.mojom-blink.h"
#include "third_party/blink/public/mojom/script/script_type.mojom-blink.h"
#include "third_party/blink/public/mojom/user_agent/user_agent_metadata.mojom-blink.h"
+#include "third_party/blink/public/mojom/worker/worker_content_settings_proxy.mojom-blink.h"
#include "third_party/blink/public/platform/web_fetch_client_settings_object.h"
#include "third_party/blink/public/web/web_shared_worker_client.h"
#include "third_party/blink/renderer/core/core_export.h"
@@ -84,8 +86,11 @@ class CORE_EXPORT WebSharedWorkerImpl final : public WebSharedWorker {
const WebFetchClientSettingsObject& outside_fetch_client_settings_object,
const base::UnguessableToken& appcache_host_id,
const base::UnguessableToken& devtools_worker_token,
- mojo::ScopedMessagePipeHandle content_settings_handle,
- mojo::ScopedMessagePipeHandle browser_interface_broker,
+ CrossVariantMojoRemote<
+ mojom::blink::WorkerContentSettingsProxyInterfaceBase>
+ ontent_settings,
+ CrossVariantMojoRemote<mojom::blink::BrowserInterfaceBrokerInterfaceBase>
+ browser_interface_broker,
bool pause_worker_context_on_start) override;
void Connect(MessagePortChannel) override;
void TerminateWorkerContext() override;
diff --git a/chromium/third_party/blink/renderer/core/exported/web_view_impl.cc b/chromium/third_party/blink/renderer/core/exported/web_view_impl.cc
index ebebe2f3b21..27adaed62fe 100644
--- a/chromium/third_party/blink/renderer/core/exported/web_view_impl.cc
+++ b/chromium/third_party/blink/renderer/core/exported/web_view_impl.cc
@@ -140,6 +140,7 @@
#include "third_party/blink/renderer/core/paint/compositing/paint_layer_compositor.h"
#include "third_party/blink/renderer/core/paint/first_meaningful_paint_detector.h"
#include "third_party/blink/renderer/core/paint/paint_layer_scrollable_area.h"
+#include "third_party/blink/renderer/core/paint/paint_timing.h"
#include "third_party/blink/renderer/core/paint/paint_timing_detector.h"
#include "third_party/blink/renderer/core/probe/core_probes.h"
#include "third_party/blink/renderer/core/scroll/scrollbar_theme.h"
@@ -489,7 +490,7 @@ WebInputEventResult WebViewImpl::HandleGestureEvent(
}
}
event_result = WebInputEventResult::kHandledSystem;
- MainFrameImpl()->FrameWidgetImpl()->Client()->DidHandleGestureEvent(
+ MainFrameImpl()->FrameWidgetImpl()->DidHandleGestureEvent(
event, event_cancelled);
return event_result;
case WebInputEvent::Type::kGestureScrollBegin:
@@ -504,7 +505,7 @@ WebInputEventResult WebViewImpl::HandleGestureEvent(
->GetFrame()
->GetEventHandler()
.HandleGestureScrollEvent(scaled_event);
- MainFrameImpl()->FrameWidgetImpl()->Client()->DidHandleGestureEvent(
+ MainFrameImpl()->FrameWidgetImpl()->DidHandleGestureEvent(
event, event_cancelled);
return event_result;
default:
@@ -617,8 +618,8 @@ WebInputEventResult WebViewImpl::HandleGestureEvent(
}
default: { NOTREACHED(); }
}
- MainFrameImpl()->FrameWidgetImpl()->Client()->DidHandleGestureEvent(
- event, event_cancelled);
+ MainFrameImpl()->FrameWidgetImpl()->DidHandleGestureEvent(event,
+ event_cancelled);
return event_result;
}
@@ -1592,27 +1593,27 @@ void WebViewImpl::UpdateLifecycle(WebLifecycleUpdate requested_update,
if (LocalFrameView* view = MainFrameImpl()->GetFrameView()) {
LocalFrame* frame = MainFrameImpl()->GetFrame();
- WebWidgetClient* client =
- WebLocalFrameImpl::FromFrame(frame)->FrameWidgetImpl()->Client();
+ WebFrameWidgetBase* frame_widget =
+ WebLocalFrameImpl::FromFrame(frame)->LocalRootFrameWidget();
if (should_dispatch_first_visually_non_empty_layout_ &&
view->IsVisuallyNonEmpty()) {
should_dispatch_first_visually_non_empty_layout_ = false;
// TODO(esprehn): Move users of this callback to something
// better, the heuristic for "visually non-empty" is bad.
- client->DidMeaningfulLayout(WebMeaningfulLayout::kVisuallyNonEmpty);
+ frame_widget->DidMeaningfulLayout(WebMeaningfulLayout::kVisuallyNonEmpty);
}
if (should_dispatch_first_layout_after_finished_parsing_ &&
frame->GetDocument()->HasFinishedParsing()) {
should_dispatch_first_layout_after_finished_parsing_ = false;
- client->DidMeaningfulLayout(WebMeaningfulLayout::kFinishedParsing);
+ frame_widget->DidMeaningfulLayout(WebMeaningfulLayout::kFinishedParsing);
}
if (should_dispatch_first_layout_after_finished_loading_ &&
frame->GetDocument()->IsLoadCompleted()) {
should_dispatch_first_layout_after_finished_loading_ = false;
- client->DidMeaningfulLayout(WebMeaningfulLayout::kFinishedLoading);
+ frame_widget->DidMeaningfulLayout(WebMeaningfulLayout::kFinishedLoading);
}
}
}
@@ -1937,26 +1938,6 @@ bool WebViewImpl::SelectionBounds(WebRect& anchor_web,
return true;
}
-void WebViewImpl::DidAcquirePointerLock() {
- if (MainFrameImpl())
- MainFrameImpl()->FrameWidget()->DidAcquirePointerLock();
-}
-
-void WebViewImpl::DidNotAcquirePointerLock() {
- if (MainFrameImpl())
- MainFrameImpl()->FrameWidget()->DidNotAcquirePointerLock();
-}
-
-void WebViewImpl::DidLosePointerLock() {
- // Make sure that the main frame wasn't swapped-out when the pointer lock is
- // lost. There's a race that can happen when a pointer lock is requested, but
- // the browser swaps out the main frame while the pointer lock request is in
- // progress. This won't be needed once the main frame is refactored to not use
- // the WebViewImpl as its WebWidget.
- if (MainFrameImpl())
- MainFrameImpl()->FrameWidget()->DidLosePointerLock();
-}
-
// WebView --------------------------------------------------------------------
WebSettingsImpl* WebViewImpl::SettingsImpl() {
@@ -2024,6 +2005,16 @@ void WebViewImpl::DidAttachLocalMainFrame() {
}
}
+void WebViewImpl::DidAttachRemoteMainFrame() {
+ DCHECK(!MainFrameImpl());
+
+ RemoteFrame* remote_frame = DynamicTo<RemoteFrame>(GetPage()->MainFrame());
+ DCHECK(remote_frame);
+
+ remote_frame->GetRemoteAssociatedInterfaces()->GetInterface(
+ remote_main_frame_host_remote_.BindNewEndpointAndPassReceiver());
+}
+
void WebViewImpl::DidDetachLocalMainFrame() {
// The WebWidgetClient that generated the |scoped_defer_main_frame_update_|
// for a local main frame is going away.
@@ -2031,6 +2022,10 @@ void WebViewImpl::DidDetachLocalMainFrame() {
local_main_frame_host_remote_.reset();
}
+void WebViewImpl::DidDetachRemoteMainFrame() {
+ remote_main_frame_host_remote_.reset();
+}
+
WebLocalFrame* WebViewImpl::FocusedFrame() {
Frame* frame = FocusedCoreFrame();
// TODO(yabinh): focusedCoreFrame() should always return a local frame, and
@@ -2323,20 +2318,6 @@ double WebViewImpl::SetZoomLevel(double zoom_level) {
return zoom_level_;
}
-float WebViewImpl::TextZoomFactor() {
- return MainFrameImpl()->GetFrame()->TextZoomFactor();
-}
-
-float WebViewImpl::SetTextZoomFactor(float text_zoom_factor) {
- LocalFrame* frame = MainFrameImpl()->GetFrame();
- if (frame->GetWebPluginContainer())
- return 1;
-
- frame->SetTextZoomFactor(text_zoom_factor);
-
- return text_zoom_factor;
-}
-
float WebViewImpl::PageScaleFactor() const {
if (!GetPage())
return 1;
@@ -2402,16 +2383,45 @@ void WebViewImpl::SetZoomFactorForDeviceScaleFactor(
void WebViewImpl::SetPageLifecycleState(
mojom::blink::PageLifecycleStatePtr state,
+ base::Optional<base::TimeTicks> navigation_start,
SetPageLifecycleStateCallback callback) {
Page* page = GetPage();
if (!page)
return;
- if (state->visibility != lifecycle_state_->visibility) {
- SetVisibilityState(state->visibility, /*is_initial_state =*/false);
- }
- if (state->is_frozen != lifecycle_state_->is_frozen) {
- Scheduler()->SetPageFrozen(state->is_frozen);
+ bool storing_in_bfcache = state->is_in_back_forward_cache &&
+ !lifecycle_state_->is_in_back_forward_cache;
+ bool restoring_from_bfcache = !state->is_in_back_forward_cache &&
+ lifecycle_state_->is_in_back_forward_cache;
+ bool hiding_page =
+ (state->visibility != mojom::blink::PageVisibilityState::kVisible) &&
+ (lifecycle_state_->visibility ==
+ mojom::blink::PageVisibilityState::kVisible);
+ bool showing_page =
+ (state->visibility == mojom::blink::PageVisibilityState::kVisible) &&
+ (lifecycle_state_->visibility !=
+ mojom::blink::PageVisibilityState::kVisible);
+ bool freezing_page = state->is_frozen && !lifecycle_state_->is_frozen;
+ bool resuming_page = !state->is_frozen && lifecycle_state_->is_frozen;
+
+ if (hiding_page) {
+ SetVisibilityState(state->visibility, /*is_initial_state=*/false);
+ }
+ if (storing_in_bfcache)
+ DispatchPagehide();
+ if (freezing_page)
+ Scheduler()->SetPageFrozen(true);
+ if (storing_in_bfcache)
+ HookBackForwardCacheEviction(true);
+ if (restoring_from_bfcache)
+ HookBackForwardCacheEviction(false);
+ if (resuming_page)
+ Scheduler()->SetPageFrozen(false);
+ if (restoring_from_bfcache)
+ DispatchPageshow(navigation_start.value());
+ if (showing_page) {
+ SetVisibilityState(mojom::blink::PageVisibilityState::kVisible,
+ /*is_initial_state=*/false);
}
lifecycle_state_ = std::move(state);
@@ -2419,6 +2429,60 @@ void WebViewImpl::SetPageLifecycleState(
std::move(callback).Run();
}
+void WebViewImpl::DispatchPagehide() {
+ for (Frame* frame = GetPage()->MainFrame(); frame;
+ frame = frame->Tree().TraverseNext()) {
+ if (frame->DomWindow() && frame->DomWindow()->IsLocalDOMWindow()) {
+ frame->DomWindow()->ToLocalDOMWindow()->DispatchPagehideEvent(
+ PageTransitionEventPersistence::kPageTransitionEventPersisted);
+ }
+ }
+}
+
+void WebViewImpl::DispatchPageshow(base::TimeTicks navigation_start) {
+ for (Frame* frame = GetPage()->MainFrame(); frame;
+ frame = frame->Tree().TraverseNext()) {
+ auto* local_frame = DynamicTo<LocalFrame>(frame);
+ // Record the metics.
+ if (local_frame && local_frame->View()) {
+ Document* document = local_frame->GetDocument();
+ if (document) {
+ PaintTiming::From(*document).OnRestoredFromBackForwardCache();
+ InteractiveDetector::From(*document)->OnRestoredFromBackForwardCache();
+ }
+ DocumentLoader* loader = local_frame->Loader().GetDocumentLoader();
+ if (loader) {
+ loader->GetTiming().MarkBackForwardCacheRestoreNavigationStart(
+ navigation_start);
+ }
+ }
+ if (frame->DomWindow() && frame->DomWindow()->IsLocalDOMWindow()) {
+ frame->DomWindow()->ToLocalDOMWindow()->DispatchPersistedPageshowEvent(
+ navigation_start);
+ if (frame->IsMainFrame()) {
+ UMA_HISTOGRAM_BOOLEAN(
+ "BackForwardCache.MainFrameHasPageshowListenersOnRestore",
+ frame->DomWindow()->ToLocalDOMWindow()->HasEventListeners(
+ event_type_names::kPageshow));
+ }
+ }
+ }
+}
+
+void WebViewImpl::HookBackForwardCacheEviction(bool hook) {
+ DCHECK(GetPage());
+ for (Frame* frame = GetPage()->MainFrame(); frame;
+ frame = frame->Tree().TraverseNext()) {
+ auto* local_frame = DynamicTo<LocalFrame>(frame);
+ if (!local_frame)
+ continue;
+ if (hook)
+ local_frame->HookBackForwardCacheEviction();
+ else
+ local_frame->RemoveBackForwardCacheEviction();
+ }
+}
+
void WebViewImpl::EnableAutoResizeMode(const WebSize& min_size,
const WebSize& max_size) {
should_auto_resize_ = true;
@@ -2685,6 +2749,16 @@ void WebViewImpl::EnablePreferredSizeChangedMode() {
UpdatePreferredSize();
}
+void WebViewImpl::Focus() {
+ if (GetPage()->MainFrame()->IsLocalFrame()) {
+ DCHECK(local_main_frame_host_remote_);
+ local_main_frame_host_remote_->FocusPage();
+ } else {
+ DCHECK(remote_main_frame_host_remote_);
+ remote_main_frame_host_remote_->FocusPage();
+ }
+}
+
float WebViewImpl::DefaultMinimumPageScaleFactor() const {
return GetPageScaleConstraintsSet().DefaultConstraints().minimum_scale;
}
@@ -2833,15 +2907,6 @@ void WebViewImpl::PerformCustomContextMenuAction(unsigned action) {
}
}
-void WebViewImpl::ShowContextMenu(WebMenuSourceType source_type) {
- if (!MainFrameImpl())
- return;
-
- // If MainFrameImpl() is non-null, then FrameWidget() will also be non-null.
- DCHECK(MainFrameImpl()->FrameWidget());
- MainFrameImpl()->FrameWidget()->ShowContextMenu(source_type);
-}
-
WebURL WebViewImpl::GetURLForDebugTrace() {
WebFrame* main_frame = MainFrame();
if (main_frame->IsWebLocalFrame())
@@ -3349,64 +3414,6 @@ void WebViewImpl::SetPageFrozen(bool frozen) {
Scheduler()->SetPageFrozen(frozen);
}
-void WebViewImpl::PutPageIntoBackForwardCache() {
- DCHECK(GetPage());
-
- SetVisibilityState(mojom::blink::PageVisibilityState::kHidden,
- /*is_initial_state=*/false);
-
- for (Frame* frame = GetPage()->MainFrame(); frame;
- frame = frame->Tree().TraverseNext()) {
- if (frame->DomWindow() && frame->DomWindow()->IsLocalDOMWindow()) {
- frame->DomWindow()->ToLocalDOMWindow()->DispatchPagehideEvent(
- PageTransitionEventPersistence::kPageTransitionEventPersisted);
- }
- }
-
- // Freeze the page.
- Scheduler()->SetPageFrozen(/*frozen =*/true);
- // Hook eviction.
- for (Frame* frame = GetPage()->MainFrame(); frame;
- frame = frame->Tree().TraverseNext()) {
- auto* local_frame = DynamicTo<LocalFrame>(frame);
- if (!local_frame)
- continue;
- local_frame->HookBackForwardCacheEviction();
- }
-}
-
-void WebViewImpl::RestorePageFromBackForwardCache(
- base::TimeTicks navigation_start) {
- DCHECK(GetPage());
-
- // Unhook eviction.
- for (Frame* frame = GetPage()->MainFrame(); frame;
- frame = frame->Tree().TraverseNext()) {
- auto* local_frame = DynamicTo<LocalFrame>(frame);
- if (!local_frame)
- continue;
- local_frame->RemoveBackForwardCacheEviction();
- }
-
- // Resume the page.
- Scheduler()->SetPageFrozen(/*frozen =*/false);
- for (Frame* frame = GetPage()->MainFrame(); frame;
- frame = frame->Tree().TraverseNext()) {
- if (frame->DomWindow() && frame->DomWindow()->IsLocalDOMWindow()) {
- frame->DomWindow()->ToLocalDOMWindow()->DispatchPersistedPageshowEvent(
- navigation_start);
- if (frame->IsMainFrame()) {
- UMA_HISTOGRAM_BOOLEAN(
- "BackForwardCache.MainFrameHasPageshowListenersOnRestore",
- frame->DomWindow()->ToLocalDOMWindow()->HasEventListeners(
- event_type_names::kPageshow));
- }
- }
- }
- SetVisibilityState(mojom::blink::PageVisibilityState::kVisible,
- /*is_initial_state=*/false);
-}
-
WebFrameWidget* WebViewImpl::MainFrameWidget() {
return web_widget_;
}
diff --git a/chromium/third_party/blink/renderer/core/exported/web_view_impl.h b/chromium/third_party/blink/renderer/core/exported/web_view_impl.h
index ae5bf526b8a..e2124434e0d 100644
--- a/chromium/third_party/blink/renderer/core/exported/web_view_impl.h
+++ b/chromium/third_party/blink/renderer/core/exported/web_view_impl.h
@@ -125,6 +125,9 @@ class CORE_EXPORT WebViewImpl final : public WebView,
// WebView methods:
void DidAttachLocalMainFrame() override;
+ void DidDetachLocalMainFrame() override;
+ void DidAttachRemoteMainFrame() override;
+ void DidDetachRemoteMainFrame() override;
void SetPrerendererClient(WebPrerendererClient*) override;
WebSettings* GetSettings() override;
WebString PageEncoding() const override;
@@ -156,8 +159,6 @@ class CORE_EXPORT WebViewImpl final : public WebView,
bool zoom_into_legible_scale) override;
double ZoomLevel() override;
double SetZoomLevel(double) override;
- float TextZoomFactor() override;
- float SetTextZoomFactor(float) override;
float PageScaleFactor() const override;
float MinimumPageScaleFactor() const override;
float MaximumPageScaleFactor() const override;
@@ -176,6 +177,7 @@ class CORE_EXPORT WebViewImpl final : public WebView,
WebSize ContentsPreferredMinimumSize() override;
void UpdatePreferredSize() override;
void EnablePreferredSizeChangedMode() override;
+ void Focus() override;
void SetDeviceScaleFactor(float) override;
void SetZoomFactorForDeviceScaleFactor(float) override;
float ZoomFactorForDeviceScaleFactor() override {
@@ -197,9 +199,6 @@ class CORE_EXPORT WebViewImpl final : public WebView,
WebPagePopupImpl* GetPagePopup() const override { return page_popup_.get(); }
void AcceptLanguagesChanged() override;
void SetPageFrozen(bool frozen) override;
- void PutPageIntoBackForwardCache() override;
- void RestorePageFromBackForwardCache(
- base::TimeTicks navigation_start) override;
WebFrameWidget* MainFrameWidget() override;
void SetBaseBackgroundColor(SkColor) override;
void SetInsidePortal(bool inside_portal) override;
@@ -221,8 +220,13 @@ class CORE_EXPORT WebViewImpl final : public WebView,
// mojom::blink::PageBroadcast method:
void SetPageLifecycleState(mojom::blink::PageLifecycleStatePtr state,
+ base::Optional<base::TimeTicks> navigation_start,
SetPageLifecycleStateCallback callback) override;
+ void DispatchPagehide();
+ void DispatchPageshow(base::TimeTicks navigation_start);
+ void HookBackForwardCacheEviction(bool hook);
+
float DefaultMinimumPageScaleFactor() const;
float DefaultMaximumPageScaleFactor() const;
float ClampPageScaleFactorToLimits(float) const;
@@ -447,10 +451,6 @@ class CORE_EXPORT WebViewImpl final : public WebView,
ViewData& AsView() { return as_view_; }
const ViewData& AsView() const { return as_view_; }
- // Called while the main LocalFrame is being detached. The MainFrameImpl() is
- // still valid until after this method is called.
- void DidDetachLocalMainFrame();
-
// These are temporary methods to allow WebViewFrameWidget to delegate to
// WebViewImpl. We expect to eventually move these out.
void SetSuppressFrameRequestsWorkaroundFor704763Only(bool);
@@ -475,10 +475,6 @@ class CORE_EXPORT WebViewImpl final : public WebView,
void MouseCaptureLost();
void SetFocus(bool enable) override;
bool SelectionBounds(WebRect& anchor, WebRect& focus) const;
- void DidAcquirePointerLock();
- void DidNotAcquirePointerLock();
- void DidLosePointerLock();
- void ShowContextMenu(WebMenuSourceType);
WebURL GetURLForDebugTrace();
void SetPageScaleFactorAndLocation(float scale,
@@ -720,6 +716,11 @@ class CORE_EXPORT WebViewImpl final : public WebView,
mojo::AssociatedRemote<mojom::blink::LocalMainFrameHost>
local_main_frame_host_remote_;
+ // Handle to the remote main frame host. Only valid when the MainFrame is
+ // remote.
+ mojo::AssociatedRemote<mojom::blink::RemoteMainFrameHost>
+ remote_main_frame_host_remote_;
+
// Set when a measurement begins, reset when the measurement is taken.
base::Optional<base::TimeTicks> update_layers_start_time_;
diff --git a/chromium/third_party/blink/renderer/core/exported/web_view_test.cc b/chromium/third_party/blink/renderer/core/exported/web_view_test.cc
index cd29a295327..cbd6c1b384f 100644
--- a/chromium/third_party/blink/renderer/core/exported/web_view_test.cc
+++ b/chromium/third_party/blink/renderer/core/exported/web_view_test.cc
@@ -54,12 +54,12 @@
#include "third_party/blink/public/common/input/web_input_event.h"
#include "third_party/blink/public/common/input/web_keyboard_event.h"
#include "third_party/blink/public/common/page/page_zoom.h"
+#include "third_party/blink/public/common/page/web_drag_operation.h"
#include "third_party/blink/public/mojom/frame/frame_owner_element_type.mojom-blink.h"
#include "third_party/blink/public/mojom/frame/tree_scope_type.mojom-blink.h"
#include "third_party/blink/public/mojom/input/focus_type.mojom-blink.h"
#include "third_party/blink/public/mojom/manifest/display_mode.mojom-shared.h"
#include "third_party/blink/public/platform/web_drag_data.h"
-#include "third_party/blink/public/platform/web_drag_operation.h"
#include "third_party/blink/public/platform/web_size.h"
#include "third_party/blink/public/platform/web_url_loader_mock_factory.h"
#include "third_party/blink/public/public_buildflags.h"
@@ -213,40 +213,6 @@ class AutoResizeWebViewClient : public frame_test_helpers::TestWebViewClient {
TestData test_data_;
};
-class TapHandlingWebWidgetClient
- : public frame_test_helpers::TestWebWidgetClient {
- public:
- // WebWidgetClient overrides.
- void DidHandleGestureEvent(const WebGestureEvent& event,
- bool event_cancelled) override {
- if (event.GetType() == WebInputEvent::Type::kGestureTap) {
- tap_x_ = event.PositionInWidget().x();
- tap_y_ = event.PositionInWidget().y();
- } else if (event.GetType() == WebInputEvent::Type::kGestureLongPress) {
- longpress_x_ = event.PositionInWidget().x();
- longpress_y_ = event.PositionInWidget().y();
- }
- }
-
- // Local methods
- void Reset() {
- tap_x_ = -1;
- tap_y_ = -1;
- longpress_x_ = -1;
- longpress_y_ = -1;
- }
- int TapX() { return tap_x_; }
- int TapY() { return tap_y_; }
- int LongpressX() { return longpress_x_; }
- int LongpressY() { return longpress_y_; }
-
- private:
- int tap_x_;
- int tap_y_;
- int longpress_x_;
- int longpress_y_;
-};
-
class WebViewTest : public testing::Test {
public:
WebViewTest() : base_url_("http://www.test.com/") {}
@@ -624,6 +590,19 @@ TEST_F(WebViewTest, SetBaseBackgroundColorWithColorScheme) {
web_view->SetBaseBackgroundColor(SK_ColorBLUE);
EXPECT_EQ(Color::kBlack, frame_view->BaseBackgroundColor());
+ color_scheme_helper.SetForcedColors(*(web_view->GetPage()),
+ ForcedColors::kActive);
+ UpdateAllLifecyclePhases();
+
+ Color system_background_color = LayoutTheme::GetTheme().SystemColor(
+ CSSValueID::kCanvas, WebColorScheme::kLight);
+ EXPECT_EQ(system_background_color, frame_view->BaseBackgroundColor());
+
+ color_scheme_helper.SetForcedColors(*(web_view->GetPage()),
+ ForcedColors::kNone);
+ UpdateAllLifecyclePhases();
+ EXPECT_EQ(Color::kBlack, frame_view->BaseBackgroundColor());
+
color_scheme_helper.SetPreferredColorScheme(PreferredColorScheme::kLight);
UpdateAllLifecyclePhases();
EXPECT_EQ(Color(0, 0, 255), frame_view->BaseBackgroundColor());
@@ -1186,7 +1165,7 @@ TEST_F(WebViewTest, FinishComposingTextDoesNotAssert) {
// The test requires non-empty composition.
std::string composition_text("hello");
- WebVector<WebImeTextSpan> empty_ime_text_spans;
+ WebVector<ui::ImeTextSpan> empty_ime_text_spans;
active_input_method_controller->SetComposition(
WebString::FromUTF8(composition_text.c_str()), empty_ime_text_spans,
WebRange(), 5, 5);
@@ -1243,7 +1222,7 @@ TEST_F(WebViewTest, FinishComposingTextCursorPositionChange) {
web_view->MainFrameImpl()
->FrameWidget()
->GetActiveWebInputMethodController();
- WebVector<WebImeTextSpan> empty_ime_text_spans;
+ WebVector<ui::ImeTextSpan> empty_ime_text_spans;
active_input_method_controller->SetComposition(
WebString::FromUTF8(composition_text.c_str()), empty_ime_text_spans,
WebRange(), 3, 3);
@@ -1292,7 +1271,7 @@ TEST_F(WebViewTest, SetCompositionForNewCaretPositions) {
->FrameWidget()
->GetActiveWebInputMethodController();
- WebVector<WebImeTextSpan> empty_ime_text_spans;
+ WebVector<ui::ImeTextSpan> empty_ime_text_spans;
active_input_method_controller->CommitText("hello", empty_ime_text_spans,
WebRange(), 0);
@@ -1408,7 +1387,7 @@ TEST_F(WebViewTest, SetCompositionWithEmptyText) {
->FrameWidget()
->GetActiveWebInputMethodController();
- WebVector<WebImeTextSpan> empty_ime_text_spans;
+ WebVector<ui::ImeTextSpan> empty_ime_text_spans;
active_input_method_controller->CommitText("hello", empty_ime_text_spans,
WebRange(), 0);
@@ -1449,7 +1428,7 @@ TEST_F(WebViewTest, CommitTextForNewCaretPositions) {
->FrameWidget()
->GetActiveWebInputMethodController();
- WebVector<WebImeTextSpan> empty_ime_text_spans;
+ WebVector<ui::ImeTextSpan> empty_ime_text_spans;
// Caret is on the left of composing text.
active_input_method_controller->CommitText("ab", empty_ime_text_spans,
@@ -1522,7 +1501,7 @@ TEST_F(WebViewTest, CommitTextWhileComposing) {
->FrameWidget()
->GetActiveWebInputMethodController();
- WebVector<WebImeTextSpan> empty_ime_text_spans;
+ WebVector<ui::ImeTextSpan> empty_ime_text_spans;
active_input_method_controller->SetComposition(
WebString::FromUTF8("abc"), empty_ime_text_spans, WebRange(), 0, 0);
WebTextInputInfo info = active_input_method_controller->TextInputInfo();
@@ -1623,7 +1602,7 @@ TEST_F(WebViewTest, InsertNewLinePlacementAfterFinishComposingText) {
base_url_ + "text_area_populated.html");
web_view->MainFrameImpl()->GetFrame()->SetInitialFocus(false);
- WebVector<WebImeTextSpan> empty_ime_text_spans;
+ WebVector<ui::ImeTextSpan> empty_ime_text_spans;
WebLocalFrameImpl* frame = web_view->MainFrameImpl();
WebInputMethodController* active_input_method_controller =
@@ -1725,11 +1704,11 @@ TEST_F(WebViewTest, SetCompositionFromExistingText) {
WebViewImpl* web_view = web_view_helper_.InitializeAndLoad(
base_url_ + "input_field_populated.html");
web_view->MainFrameImpl()->GetFrame()->SetInitialFocus(false);
- WebVector<WebImeTextSpan> ime_text_spans(static_cast<size_t>(1));
+ WebVector<ui::ImeTextSpan> ime_text_spans(static_cast<size_t>(1));
ime_text_spans[0] =
- WebImeTextSpan(WebImeTextSpan::Type::kComposition, 0, 4,
- ui::mojom::ImeTextSpanThickness::kThin,
- ui::mojom::ImeTextSpanUnderlineStyle::kSolid, 0, 0);
+ ui::ImeTextSpan(ui::ImeTextSpan::Type::kComposition, 0, 4,
+ ui::ImeTextSpan::Thickness::kThin,
+ ui::ImeTextSpan::UnderlineStyle::kSolid, 0, 0);
WebLocalFrameImpl* frame = web_view->MainFrameImpl();
WebInputMethodController* active_input_method_controller =
frame->GetInputMethodController();
@@ -1740,7 +1719,7 @@ TEST_F(WebViewTest, SetCompositionFromExistingText) {
EXPECT_EQ(10, info.selection_end);
EXPECT_EQ(8, info.composition_start);
EXPECT_EQ(12, info.composition_end);
- WebVector<WebImeTextSpan> empty_ime_text_spans;
+ WebVector<ui::ImeTextSpan> empty_ime_text_spans;
frame->SetCompositionFromExistingText(0, 0, empty_ime_text_spans);
info = active_input_method_controller->TextInputInfo();
EXPECT_EQ(4, info.selection_start);
@@ -1754,17 +1733,17 @@ TEST_F(WebViewTest, SetCompositionFromExistingTextInTextArea) {
WebViewImpl* web_view = web_view_helper_.InitializeAndLoad(
base_url_ + "text_area_populated.html");
web_view->MainFrameImpl()->GetFrame()->SetInitialFocus(false);
- WebVector<WebImeTextSpan> ime_text_spans(static_cast<size_t>(1));
+ WebVector<ui::ImeTextSpan> ime_text_spans(static_cast<size_t>(1));
ime_text_spans[0] =
- WebImeTextSpan(WebImeTextSpan::Type::kComposition, 0, 4,
- ui::mojom::ImeTextSpanThickness::kThin,
- ui::mojom::ImeTextSpanUnderlineStyle::kSolid, 0, 0);
+ ui::ImeTextSpan(ui::ImeTextSpan::Type::kComposition, 0, 4,
+ ui::ImeTextSpan::Thickness::kThin,
+ ui::ImeTextSpan::UnderlineStyle::kSolid, 0, 0);
WebLocalFrameImpl* frame = web_view->MainFrameImpl();
WebInputMethodController* active_input_method_controller =
frame->FrameWidget()->GetActiveWebInputMethodController();
frame->SetEditableSelectionOffsets(27, 27);
std::string new_line_text("\n");
- WebVector<WebImeTextSpan> empty_ime_text_spans;
+ WebVector<ui::ImeTextSpan> empty_ime_text_spans;
active_input_method_controller->CommitText(
WebString::FromUTF8(new_line_text.c_str()), empty_ime_text_spans,
WebRange(), 0);
@@ -1797,11 +1776,11 @@ TEST_F(WebViewTest, SetCompositionFromExistingTextInRichText) {
WebViewImpl* web_view = web_view_helper_.InitializeAndLoad(
base_url_ + "content_editable_rich_text.html");
web_view->MainFrameImpl()->GetFrame()->SetInitialFocus(false);
- WebVector<WebImeTextSpan> ime_text_spans(static_cast<size_t>(1));
+ WebVector<ui::ImeTextSpan> ime_text_spans(static_cast<size_t>(1));
ime_text_spans[0] =
- WebImeTextSpan(WebImeTextSpan::Type::kComposition, 0, 4,
- ui::mojom::ImeTextSpanThickness::kThin,
- ui::mojom::ImeTextSpanUnderlineStyle::kSolid, 0, 0);
+ ui::ImeTextSpan(ui::ImeTextSpan::Type::kComposition, 0, 4,
+ ui::ImeTextSpan::Thickness::kThin,
+ ui::ImeTextSpan::UnderlineStyle::kSolid, 0, 0);
WebLocalFrameImpl* frame = web_view->MainFrameImpl();
frame->SetEditableSelectionOffsets(1, 1);
WebDocument document = web_view->MainFrameImpl()->GetDocument();
@@ -1818,7 +1797,7 @@ TEST_F(WebViewTest, SetEditableSelectionOffsetsKeepsComposition) {
std::string composition_text_first("hello ");
std::string composition_text_second("world");
- WebVector<WebImeTextSpan> empty_ime_text_spans;
+ WebVector<ui::ImeTextSpan> empty_ime_text_spans;
WebInputMethodController* active_input_method_controller =
web_view->MainFrameImpl()
->FrameWidget()
@@ -2630,8 +2609,6 @@ TEST_F(WebViewTest, PrintWithXHRInFlight) {
static void DragAndDropURL(WebViewImpl* web_view, const std::string& url) {
WebDragData drag_data;
- drag_data.Initialize();
-
WebDragData::Item item;
item.storage_type = WebDragData::Item::kStorageTypeString;
item.string_type = "text/uri-list";
@@ -2729,33 +2706,6 @@ ExternalDateTimeChooser* WebViewTest::GetExternalDateTimeChooser(
.GetExternalDateTimeChooserForTesting();
}
-TEST_F(WebViewTest, ClientTapHandling) {
- TapHandlingWebWidgetClient client;
- WebView* web_view = web_view_helper_.InitializeAndLoad("about:blank", nullptr,
- nullptr, &client);
- WebGestureEvent event(WebInputEvent::Type::kGestureTap,
- WebInputEvent::kNoModifiers,
- WebInputEvent::GetStaticTimeStampForTests(),
- WebGestureDevice::kTouchscreen);
- event.SetPositionInWidget(gfx::PointF(3, 8));
- web_view->MainFrameWidget()->HandleInputEvent(
- WebCoalescedInputEvent(event, ui::LatencyInfo()));
- RunPendingTasks();
- EXPECT_EQ(3, client.TapX());
- EXPECT_EQ(8, client.TapY());
- client.Reset();
- event.SetType(WebInputEvent::Type::kGestureLongPress);
- event.SetPositionInWidget(gfx::PointF(25, 7));
- web_view->MainFrameWidget()->HandleInputEvent(
- WebCoalescedInputEvent(event, ui::LatencyInfo()));
- RunPendingTasks();
- EXPECT_EQ(25, client.LongpressX());
- EXPECT_EQ(7, client.LongpressY());
-
- // Explicitly reset to break dependency on locally scoped client.
- web_view_helper_.Reset();
-}
-
TEST_F(WebViewTest, ClientTapHandlingNullWebViewClient) {
// Note: this test doesn't use WebViewHelper since WebViewHelper creates an
// internal WebViewClient on demand if the supplied WebViewClient is null.
@@ -3092,7 +3042,7 @@ TEST_F(WebViewTest, FinishComposingTextDoesNotDismissHandles) {
WebInputMethodController* active_input_method_controller =
frame->FrameWidget()->GetActiveWebInputMethodController();
EXPECT_TRUE(TapElementById(WebInputEvent::Type::kGestureTap, target));
- WebVector<WebImeTextSpan> empty_ime_text_spans;
+ WebVector<ui::ImeTextSpan> empty_ime_text_spans;
frame->SetEditableSelectionOffsets(8, 8);
EXPECT_TRUE(active_input_method_controller->SetComposition(
"12345", empty_ime_text_spans, WebRange(), 8, 13));
@@ -3530,7 +3480,7 @@ TEST_F(WebViewTest, LosingFocusDoesNotTriggerAutofillTextChange) {
web_view->MainFrameImpl()->GetFrame()->SetInitialFocus(false);
// Set up a composition that needs to be committed.
- WebVector<WebImeTextSpan> empty_ime_text_spans;
+ WebVector<ui::ImeTextSpan> empty_ime_text_spans;
frame->SetEditableSelectionOffsets(4, 10);
frame->SetCompositionFromExistingText(8, 12, empty_ime_text_spans);
WebTextInputInfo info = frame->GetInputMethodController()->TextInputInfo();
@@ -3574,7 +3524,7 @@ TEST_F(WebViewTest, CompositionNotCancelledByBackspace) {
// Test both input elements.
for (int i = 0; i < 2; ++i) {
// Select composition and do sanity check.
- WebVector<WebImeTextSpan> empty_ime_text_spans;
+ WebVector<ui::ImeTextSpan> empty_ime_text_spans;
frame->SetEditableSelectionOffsets(6, 6);
WebInputMethodController* active_input_method_controller =
frame->FrameWidget()->GetActiveWebInputMethodController();
@@ -3628,7 +3578,7 @@ TEST_F(WebViewTest, FinishComposingTextDoesntTriggerAutofillTextChange) {
// Set up a composition that needs to be committed.
std::string composition_text("testingtext");
- WebVector<WebImeTextSpan> empty_ime_text_spans;
+ WebVector<ui::ImeTextSpan> empty_ime_text_spans;
active_input_method_controller->SetComposition(
WebString::FromUTF8(composition_text.c_str()), empty_ime_text_spans,
WebRange(), 0, composition_text.length());
@@ -3661,7 +3611,7 @@ TEST_F(WebViewTest,
frame->SetAutofillClient(&client);
web_view->MainFrameImpl()->GetFrame()->SetInitialFocus(false);
- WebVector<WebImeTextSpan> empty_ime_text_spans;
+ WebVector<ui::ImeTextSpan> empty_ime_text_spans;
client.ClearChangeCounts();
frame->SetCompositionFromExistingText(8, 12, empty_ime_text_spans);
@@ -3697,7 +3647,7 @@ class ViewCreatingWebViewClient : public frame_test_helpers::TestWebViewClient {
}
// WebWidgetClient methods
- void DidFocus(WebLocalFrame*) override { did_focus_called_ = true; }
+ void DidFocus() override { did_focus_called_ = true; }
bool DidFocusCalled() const { return did_focus_called_; }
WebView* CreatedWebView() const { return web_view_helper_.GetWebView(); }
@@ -4109,6 +4059,7 @@ class FakeFrameWidgetHost : public mojom::blink::FrameWidgetHost {
void AutoscrollStart(const gfx::PointF& position) override {}
void AutoscrollFling(const gfx::Vector2dF& position) override {}
void AutoscrollEnd() override {}
+ void DidFirstVisuallyNonEmptyPaint() override {}
private:
mojo::AssociatedReceiver<mojom::blink::FrameWidgetHost>
@@ -4329,6 +4280,7 @@ TEST_F(WebViewTest, SetHasTouchEventHandlers) {
// Free the webView before the TouchEventHandlerWebViewClient gets freed.
web_view_helper_.Reset();
+ web_view_impl->Close();
}
// This test checks that deleting nodes which have only non-JS-registered touch
@@ -4485,7 +4437,7 @@ TEST_F(WebViewTest, CompositionIsUserGesture) {
EXPECT_TRUE(
frame->FrameWidget()->GetActiveWebInputMethodController()->SetComposition(
WebString::FromUTF8(std::string("hello").c_str()),
- WebVector<WebImeTextSpan>(), WebRange(), 3, 3));
+ WebVector<ui::ImeTextSpan>(), WebRange(), 3, 3));
EXPECT_TRUE(frame->HasTransientUserActivation());
EXPECT_EQ(1, client.TextChanges());
EXPECT_TRUE(frame->HasMarkedText());
@@ -5016,7 +4968,7 @@ TEST_F(WebViewTest, PasswordFieldEditingIsUserGesture) {
frame->SetAutofillClient(&client);
web_view->MainFrameImpl()->GetFrame()->SetInitialFocus(false);
- WebVector<WebImeTextSpan> empty_ime_text_spans;
+ WebVector<ui::ImeTextSpan> empty_ime_text_spans;
EXPECT_EQ(0, client.TextChanges());
EXPECT_TRUE(