Commit 2d7718bc authored by Nate Chapin's avatar Nate Chapin Committed by Commit Bot

Combine NavigatorVirtualKeyobard and VirtualKeyboard

Change-Id: Ifcea842ded0a9337be297e2a1a928f65d244353c
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2493424
Commit-Queue: Nate Chapin <japhet@chromium.org>
Commit-Queue: Kentaro Hara <haraken@chromium.org>
Auto-Submit: Nate Chapin <japhet@chromium.org>
Reviewed-by: default avatarKentaro Hara <haraken@chromium.org>
Cr-Commit-Position: refs/heads/master@{#820072}
parent 20a0375d
...@@ -6,8 +6,6 @@ import("//third_party/blink/renderer/modules/modules.gni") ...@@ -6,8 +6,6 @@ import("//third_party/blink/renderer/modules/modules.gni")
blink_modules_sources("virtualkeyboard") { blink_modules_sources("virtualkeyboard") {
sources = [ sources = [
"navigator_virtual_keyboard.cc",
"navigator_virtual_keyboard.h",
"virtual_keyboard.cc", "virtual_keyboard.cc",
"virtual_keyboard.h", "virtual_keyboard.h",
"virtual_keyboard_geometry_change_event.cc", "virtual_keyboard_geometry_change_event.cc",
......
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "third_party/blink/renderer/modules/virtualkeyboard/navigator_virtual_keyboard.h"
#include "third_party/blink/renderer/modules/virtualkeyboard/virtual_keyboard.h"
namespace blink {
// static
const char NavigatorVirtualKeyboard::kSupplementName[] =
"NavigatorVirtualKeyboard";
NavigatorVirtualKeyboard::NavigatorVirtualKeyboard(Navigator& navigator)
: Supplement<Navigator>(navigator),
virtual_keyboard_(MakeGarbageCollected<VirtualKeyboard>(
GetSupplementable()->GetFrame())) {}
// static
VirtualKeyboard* NavigatorVirtualKeyboard::virtualKeyboard(
Navigator& navigator) {
NavigatorVirtualKeyboard* supplement =
Supplement<Navigator>::From<NavigatorVirtualKeyboard>(navigator);
if (!supplement) {
supplement = MakeGarbageCollected<NavigatorVirtualKeyboard>(navigator);
ProvideTo(navigator, supplement);
}
return supplement->virtual_keyboard_;
}
void NavigatorVirtualKeyboard::Trace(Visitor* visitor) const {
visitor->Trace(virtual_keyboard_);
Supplement<Navigator>::Trace(visitor);
}
} // namespace blink
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef THIRD_PARTY_BLINK_RENDERER_MODULES_VIRTUALKEYBOARD_NAVIGATOR_VIRTUAL_KEYBOARD_H_
#define THIRD_PARTY_BLINK_RENDERER_MODULES_VIRTUALKEYBOARD_NAVIGATOR_VIRTUAL_KEYBOARD_H_
#include "base/macros.h"
#include "third_party/blink/renderer/core/core_export.h"
#include "third_party/blink/renderer/core/frame/navigator.h"
#include "third_party/blink/renderer/platform/heap/handle.h"
#include "third_party/blink/renderer/platform/supplementable.h"
namespace blink {
class VirtualKeyboard;
// Navigator supplement which exposes virtual keyboard related functionality.
class NavigatorVirtualKeyboard final
: public GarbageCollected<NavigatorVirtualKeyboard>,
public Supplement<Navigator> {
public:
static const char kSupplementName[];
static VirtualKeyboard* virtualKeyboard(Navigator&);
explicit NavigatorVirtualKeyboard(Navigator&);
NavigatorVirtualKeyboard(const NavigatorVirtualKeyboard&) = delete;
NavigatorVirtualKeyboard operator=(const NavigatorVirtualKeyboard&) = delete;
void Trace(Visitor*) const override;
private:
Member<VirtualKeyboard> virtual_keyboard_;
};
} // namespace blink
#endif // THIRD_PARTY_BLINK_RENDERER_MODULES_VIRTUALKEYBOARD_NAVIGATOR_VIRTUAL_KEYBOARD_H_
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
// https://github.com/MicrosoftEdge/MSEdgeExplainers/blob/master/VirtualKeyboardAPI/explainer.md // https://github.com/MicrosoftEdge/MSEdgeExplainers/blob/master/VirtualKeyboardAPI/explainer.md
[ [
ImplementedAs=NavigatorVirtualKeyboard, ImplementedAs=VirtualKeyboard,
RuntimeEnabled=VirtualKeyboard RuntimeEnabled=VirtualKeyboard
] partial interface Navigator { ] partial interface Navigator {
[SameObject] readonly attribute VirtualKeyboard virtualKeyboard; [SameObject] readonly attribute VirtualKeyboard virtualKeyboard;
......
...@@ -10,6 +10,7 @@ ...@@ -10,6 +10,7 @@
#include "third_party/blink/renderer/core/editing/ime/input_method_controller.h" #include "third_party/blink/renderer/core/editing/ime/input_method_controller.h"
#include "third_party/blink/renderer/core/frame/local_dom_window.h" #include "third_party/blink/renderer/core/frame/local_dom_window.h"
#include "third_party/blink/renderer/core/frame/local_frame.h" #include "third_party/blink/renderer/core/frame/local_frame.h"
#include "third_party/blink/renderer/core/frame/navigator.h"
#include "third_party/blink/renderer/core/geometry/dom_rect.h" #include "third_party/blink/renderer/core/geometry/dom_rect.h"
#include "third_party/blink/renderer/core/inspector/console_message.h" #include "third_party/blink/renderer/core/inspector/console_message.h"
#include "third_party/blink/renderer/modules/event_target_modules.h" #include "third_party/blink/renderer/modules/event_target_modules.h"
...@@ -19,13 +20,27 @@ ...@@ -19,13 +20,27 @@
namespace blink { namespace blink {
VirtualKeyboard::VirtualKeyboard(LocalFrame* frame) // static
: ExecutionContextClient(frame ? frame->DomWindow()->GetExecutionContext() const char VirtualKeyboard::kSupplementName[] = "VirtualKeyboard";
: nullptr),
VirtualKeyboardOverlayChangedObserver(frame) {} // static
VirtualKeyboard* VirtualKeyboard::virtualKeyboard(Navigator& navigator) {
auto* keyboard = Supplement<Navigator>::From<VirtualKeyboard>(navigator);
if (!keyboard) {
keyboard = MakeGarbageCollected<VirtualKeyboard>(navigator);
ProvideTo(navigator, keyboard);
}
return keyboard;
}
VirtualKeyboard::VirtualKeyboard(Navigator& navigator)
: Supplement<Navigator>(navigator),
VirtualKeyboardOverlayChangedObserver(
navigator.DomWindow() ? navigator.DomWindow()->GetFrame() : nullptr) {
}
ExecutionContext* VirtualKeyboard::GetExecutionContext() const { ExecutionContext* VirtualKeyboard::GetExecutionContext() const {
return ExecutionContextClient::GetExecutionContext(); return GetSupplementable()->DomWindow();
} }
const AtomicString& VirtualKeyboard::InterfaceName() const { const AtomicString& VirtualKeyboard::InterfaceName() const {
...@@ -43,10 +58,10 @@ DOMRect* VirtualKeyboard::boundingRect() const { ...@@ -43,10 +58,10 @@ DOMRect* VirtualKeyboard::boundingRect() const {
} }
void VirtualKeyboard::setOverlaysContent(bool overlays_content) { void VirtualKeyboard::setOverlaysContent(bool overlays_content) {
LocalFrame* frame = GetFrame(); LocalDOMWindow* window = GetSupplementable()->DomWindow();
if (frame && frame->IsMainFrame()) { if (window && window->GetFrame()->IsMainFrame()) {
if (overlays_content != overlays_content_) { if (overlays_content != overlays_content_) {
auto& local_frame_host = frame->GetLocalFrameHostRemote(); auto& local_frame_host = window->GetFrame()->GetLocalFrameHostRemote();
local_frame_host.SetVirtualKeyboardOverlayPolicy(overlays_content); local_frame_host.SetVirtualKeyboardOverlayPolicy(overlays_content);
overlays_content_ = overlays_content; overlays_content_ = overlays_content;
} }
...@@ -63,10 +78,10 @@ void VirtualKeyboard::setOverlaysContent(bool overlays_content) { ...@@ -63,10 +78,10 @@ void VirtualKeyboard::setOverlaysContent(bool overlays_content) {
void VirtualKeyboard::VirtualKeyboardOverlayChanged( void VirtualKeyboard::VirtualKeyboardOverlayChanged(
const gfx::Rect& keyboard_rect) { const gfx::Rect& keyboard_rect) {
bounding_rect_ = DOMRect::FromFloatRect(FloatRect(gfx::RectF(keyboard_rect))); bounding_rect_ = DOMRect::FromFloatRect(FloatRect(gfx::RectF(keyboard_rect)));
LocalFrame* frame = GetFrame(); LocalDOMWindow* window = GetSupplementable()->DomWindow();
if (frame && frame->GetDocument()) { if (window) {
DocumentStyleEnvironmentVariables& vars = DocumentStyleEnvironmentVariables& vars =
frame->GetDocument()->GetStyleEngine().EnsureEnvironmentVariables(); window->document()->GetStyleEngine().EnsureEnvironmentVariables();
vars.SetVariable(UADefinedVariable::kKeyboardInsetTop, vars.SetVariable(UADefinedVariable::kKeyboardInsetTop,
StyleEnvironmentVariables::FormatPx(keyboard_rect.y())); StyleEnvironmentVariables::FormatPx(keyboard_rect.y()));
vars.SetVariable(UADefinedVariable::kKeyboardInsetLeft, vars.SetVariable(UADefinedVariable::kKeyboardInsetLeft,
...@@ -89,9 +104,9 @@ void VirtualKeyboard::VirtualKeyboardOverlayChanged( ...@@ -89,9 +104,9 @@ void VirtualKeyboard::VirtualKeyboardOverlayChanged(
} }
void VirtualKeyboard::show() { void VirtualKeyboard::show() {
LocalFrame* frame = GetFrame(); LocalDOMWindow* window = GetSupplementable()->DomWindow();
if (frame && frame->HasStickyUserActivation()) { if (window && window->GetFrame()->HasStickyUserActivation()) {
frame->GetInputMethodController().SetVirtualKeyboardVisibilityRequest( window->GetInputMethodController().SetVirtualKeyboardVisibilityRequest(
ui::mojom::VirtualKeyboardVisibilityRequest::SHOW); ui::mojom::VirtualKeyboardVisibilityRequest::SHOW);
} else { } else {
GetExecutionContext()->AddConsoleMessage( GetExecutionContext()->AddConsoleMessage(
...@@ -104,9 +119,8 @@ void VirtualKeyboard::show() { ...@@ -104,9 +119,8 @@ void VirtualKeyboard::show() {
} }
void VirtualKeyboard::hide() { void VirtualKeyboard::hide() {
LocalFrame* frame = GetFrame(); if (LocalDOMWindow* window = GetSupplementable()->DomWindow()) {
if (frame) { window->GetInputMethodController().SetVirtualKeyboardVisibilityRequest(
frame->GetInputMethodController().SetVirtualKeyboardVisibilityRequest(
ui::mojom::VirtualKeyboardVisibilityRequest::HIDE); ui::mojom::VirtualKeyboardVisibilityRequest::HIDE);
} }
} }
...@@ -114,7 +128,7 @@ void VirtualKeyboard::hide() { ...@@ -114,7 +128,7 @@ void VirtualKeyboard::hide() {
void VirtualKeyboard::Trace(Visitor* visitor) const { void VirtualKeyboard::Trace(Visitor* visitor) const {
visitor->Trace(bounding_rect_); visitor->Trace(bounding_rect_);
EventTargetWithInlineData::Trace(visitor); EventTargetWithInlineData::Trace(visitor);
ExecutionContextClient::Trace(visitor); Supplement<Navigator>::Trace(visitor);
} }
} // namespace blink } // namespace blink
...@@ -7,9 +7,9 @@ ...@@ -7,9 +7,9 @@
#include "base/macros.h" #include "base/macros.h"
#include "third_party/blink/renderer/core/dom/events/event_target.h" #include "third_party/blink/renderer/core/dom/events/event_target.h"
#include "third_party/blink/renderer/core/execution_context/execution_context_lifecycle_observer.h"
#include "third_party/blink/renderer/core/frame/virtual_keyboard_overlay_changed_observer.h" #include "third_party/blink/renderer/core/frame/virtual_keyboard_overlay_changed_observer.h"
#include "third_party/blink/renderer/platform/bindings/script_wrappable.h" #include "third_party/blink/renderer/platform/bindings/script_wrappable.h"
#include "third_party/blink/renderer/platform/supplementable.h"
namespace gfx { namespace gfx {
class Rect; class Rect;
...@@ -19,17 +19,21 @@ namespace blink { ...@@ -19,17 +19,21 @@ namespace blink {
class DOMRect; class DOMRect;
class ExecutionContext; class ExecutionContext;
class Navigator;
// The VirtualKeyboard API provides control of the on-screen keyboard // The VirtualKeyboard API provides control of the on-screen keyboard
// to JS authors. The VirtualKeyboard object lives in the Navigator. // to JS authors. The VirtualKeyboard object lives in the Navigator.
// It is exposed to JS via a new attribute virtualKeyboard in the Navigator. // It is exposed to JS via a new attribute virtualKeyboard in the Navigator.
class VirtualKeyboard final : public EventTargetWithInlineData, class VirtualKeyboard final : public EventTargetWithInlineData,
public ExecutionContextClient, public Supplement<Navigator>,
public VirtualKeyboardOverlayChangedObserver { public VirtualKeyboardOverlayChangedObserver {
DEFINE_WRAPPERTYPEINFO(); DEFINE_WRAPPERTYPEINFO();
public: public:
explicit VirtualKeyboard(LocalFrame*); static const char kSupplementName[];
static VirtualKeyboard* virtualKeyboard(Navigator&);
explicit VirtualKeyboard(Navigator& navigator);
VirtualKeyboard(const VirtualKeyboard&) = delete; VirtualKeyboard(const VirtualKeyboard&) = delete;
~VirtualKeyboard() override; ~VirtualKeyboard() override;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment