blob: 2080d5a3d1e77161173485f5aa46ba5d94d0429b [file] [log] [blame]
// Copyright 2016 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_PUBLIC_WEB_WEB_INPUT_METHOD_CONTROLLER_H_
#define THIRD_PARTY_BLINK_PUBLIC_WEB_WEB_INPUT_METHOD_CONTROLLER_H_
#include "third_party/blink/public/platform/web_text_input_info.h"
#include "third_party/blink/public/web/web_widget.h"
#include "ui/base/ime/ime_text_span.h"
namespace gfx {
class Rect;
} // namespace gfx
namespace blink {
class WebRange;
class WebString;
template <typename T>
class WebVector;
class WebInputMethodController {
public:
enum ConfirmCompositionBehavior {
kDoNotKeepSelection,
kKeepSelection,
};
virtual ~WebInputMethodController() = default;
// Called to inform the WebInputMethodController of a new composition text. If
// selectionStart and selectionEnd has the same value, then it indicates the
// input caret position. If the text is empty, then the existing composition
// text will be canceled. |replacementRange| (when not null) is the range in
// current text which should be replaced by |text|. Returns true if the
// composition text was set successfully.
virtual bool SetComposition(const WebString& text,
const WebVector<ui::ImeTextSpan>& ime_text_spans,
const WebRange& replacement_range,
int selection_start,
int selection_end) = 0;
// Called to inform the controller to delete the ongoing composition if any,
// insert |text|, and move the caret according to |relativeCaretPosition|.
// |replacementRange| (when not null) is the range in current text which
// should be replaced by |text|.
virtual bool CommitText(const WebString& text,
const WebVector<ui::ImeTextSpan>& ime_text_spans,
const WebRange& replacement_range,
int relative_caret_position) = 0;
// Called to inform the controller to confirm an ongoing composition.
virtual bool FinishComposingText(
ConfirmCompositionBehavior selection_behavior) = 0;
// Returns information about the current text input of this controller. Note
// that this query can be expensive for long fields, as it returns the
// plain-text representation of the current editable element. Consider using
// the lighter-weight textInputType() when appropriate.
// WebTextInputInfo.flags won't contain Next/Previous flags.
virtual WebTextInputInfo TextInputInfo() { return WebTextInputInfo(); }
// This function returns a combination of
// kWebTextInputFlagHaveNextFocusableElement and
// kWebTextInputFlagHavePreviousFocusableElement This is splitted from
// TextInputInfo() due to expensive operations involved.
virtual int ComputeWebTextInputNextPreviousFlags() { return 0; }
// Returns the type of current text input of this controller.
virtual WebTextInputType TextInputType() { return kWebTextInputTypeNone; }
// Fetch the current selection range of this frame.
virtual WebRange GetSelectionOffsets() const = 0;
// Fetches the character range of the current composition, also called the
// "marked range."
virtual WebRange CompositionRange() { return WebRange(); }
// Populate |bounds| with the composition character bounds for the ongoing
// composition. Returns false if there is no focused input or any ongoing
// composition.
virtual bool GetCompositionCharacterBounds(WebVector<gfx::Rect>& bounds) {
return false;
}
// Populate |control_bounds| and |selection_bounds| with the bounds fetched
// from the active EditContext. If there isn't any active |EditContext|, then
// these bounds are empty.
virtual void GetLayoutBounds(gfx::Rect* control_bounds,
gfx::Rect* selection_bounds) = 0;
// Returns true if the inputPanelPolicy flag is set as manual in
// |EditContext|, which indicates that the software input panel(Virtual
// Keyboard) shouldn't come up on focus of the EditControl.
virtual bool IsVirtualKeyboardPolicyManual() const = 0;
// Returns true if there is an active |EditContext|.
virtual bool IsEditContextActive() const = 0;
// Returns whether show()/hide() API is called from virtualkeyboard or not.
virtual ui::mojom::VirtualKeyboardVisibilityRequest
GetLastVirtualKeyboardVisibilityRequest() const = 0;
// Sets the VirtualKeyboard visibility request(show/hide/none).
virtual void SetVirtualKeyboardVisibilityRequest(
ui::mojom::VirtualKeyboardVisibilityRequest vk_visibility_request) = 0;
};
} // namespace blink
#endif