diff --git a/content/browser/browser_plugin/browser_plugin_guest.cc b/content/browser/browser_plugin/browser_plugin_guest.cc index 625a42a95fd54e..8d822a4d22a722 100644 --- a/content/browser/browser_plugin/browser_plugin_guest.cc +++ b/content/browser/browser_plugin/browser_plugin_guest.cc @@ -36,6 +36,7 @@ #include "content/common/browser_plugin/browser_plugin_messages.h" #include "content/common/content_constants_internal.h" #include "content/common/drag_messages.h" +#include "content/common/input/ime_text_span_conversions.h" #include "content/common/input_messages.h" #include "content/common/site_isolation_policy.h" #include "content/common/text_input_state.h" @@ -62,26 +63,15 @@ namespace content { namespace { -ui::ImeTextSpan::Type ConvertWebTypeToUiType(blink::WebImeTextSpan::Type type) { - switch (type) { - case blink::WebImeTextSpan::Type::kComposition: - return ui::ImeTextSpan::Type::kComposition; - case blink::WebImeTextSpan::Type::kSuggestion: - return ui::ImeTextSpan::Type::kSuggestion; - } - - NOTREACHED(); - return ui::ImeTextSpan::Type::kComposition; -} - std::vector ConvertToUiImeTextSpan( const std::vector& ime_text_spans) { std::vector ui_ime_text_spans; for (const auto& ime_text_span : ime_text_spans) { ui_ime_text_spans.emplace_back(ui::ImeTextSpan( - ConvertWebTypeToUiType(ime_text_span.type), ime_text_span.start_offset, - ime_text_span.end_offset, ime_text_span.underline_color, - ime_text_span.thick, ime_text_span.background_color, + ConvertWebImeTextSpanTypeToUiType(ime_text_span.type), + ime_text_span.start_offset, ime_text_span.end_offset, + ime_text_span.underline_color, ime_text_span.thick, + ime_text_span.background_color, ime_text_span.suggestion_highlight_color, ime_text_span.suggestions)); } return ui_ime_text_spans; diff --git a/content/browser/frame_host/input/legacy_ipc_frame_input_handler.cc b/content/browser/frame_host/input/legacy_ipc_frame_input_handler.cc index f6325a92b897f5..cfcaca7b42c9d8 100644 --- a/content/browser/frame_host/input/legacy_ipc_frame_input_handler.cc +++ b/content/browser/frame_host/input/legacy_ipc_frame_input_handler.cc @@ -7,27 +7,11 @@ #include "base/strings/utf_string_conversions.h" #include "content/browser/renderer_host/input/legacy_input_router_impl.h" #include "content/browser/renderer_host/render_widget_host_impl.h" +#include "content/common/input/ime_text_span_conversions.h" #include "content/common/input_messages.h" namespace content { -namespace { - -blink::WebImeTextSpan::Type ConvertUiImeTextSpanTypeToBlinkType( - ui::ImeTextSpan::Type type) { - switch (type) { - case ui::ImeTextSpan::Type::kComposition: - return blink::WebImeTextSpan::Type::kComposition; - case ui::ImeTextSpan::Type::kSuggestion: - return blink::WebImeTextSpan::Type::kSuggestion; - } - - NOTREACHED(); - return blink::WebImeTextSpan::Type::kComposition; -} - -} // namespace - LegacyIPCFrameInputHandler::LegacyIPCFrameInputHandler( RenderFrameHostImpl* frame_host) : frame_host_(frame_host), routing_id_(frame_host->GetRoutingID()) {} @@ -41,7 +25,7 @@ void LegacyIPCFrameInputHandler::SetCompositionFromExistingText( std::vector ime_text_spans; for (const auto& ime_text_span : ui_ime_text_spans) { blink::WebImeTextSpan blink_ime_text_span( - ConvertUiImeTextSpanTypeToBlinkType(ime_text_span.type), + ConvertUiImeTextSpanTypeToWebType(ime_text_span.type), ime_text_span.start_offset, ime_text_span.end_offset, ime_text_span.underline_color, ime_text_span.thick, ime_text_span.background_color, diff --git a/content/browser/renderer_host/input/legacy_ipc_widget_input_handler.cc b/content/browser/renderer_host/input/legacy_ipc_widget_input_handler.cc index 270c3a6e9c7287..e68cd6c32533a2 100644 --- a/content/browser/renderer_host/input/legacy_ipc_widget_input_handler.cc +++ b/content/browser/renderer_host/input/legacy_ipc_widget_input_handler.cc @@ -8,31 +8,19 @@ #include "build/build_config.h" #include "content/browser/renderer_host/input/legacy_input_router_impl.h" #include "content/browser/renderer_host/render_widget_host_impl.h" +#include "content/common/input/ime_text_span_conversions.h" #include "content/common/input_messages.h" namespace content { namespace { -blink::WebImeTextSpan::Type ConvertUiImeTextSpanTypeToBlinkType( - ui::ImeTextSpan::Type type) { - switch (type) { - case ui::ImeTextSpan::Type::kComposition: - return blink::WebImeTextSpan::Type::kComposition; - case ui::ImeTextSpan::Type::kSuggestion: - return blink::WebImeTextSpan::Type::kSuggestion; - } - - NOTREACHED(); - return blink::WebImeTextSpan::Type::kComposition; -} - std::vector ConvertToBlinkImeTextSpan( const std::vector& ui_ime_text_spans) { std::vector ime_text_spans; for (const auto& ime_text_span : ui_ime_text_spans) { ime_text_spans.emplace_back(blink::WebImeTextSpan( - ConvertUiImeTextSpanTypeToBlinkType(ime_text_span.type), + ConvertUiImeTextSpanTypeToWebType(ime_text_span.type), ime_text_span.start_offset, ime_text_span.end_offset, ime_text_span.underline_color, ime_text_span.thick, ime_text_span.background_color, diff --git a/content/common/BUILD.gn b/content/common/BUILD.gn index d0387421f82075..711ef8ec90caca 100644 --- a/content/common/BUILD.gn +++ b/content/common/BUILD.gn @@ -164,6 +164,8 @@ source_set("common") { "input/event_with_latency_info.h", "input/gesture_event_stream_validator.cc", "input/gesture_event_stream_validator.h", + "input/ime_text_span_conversions.cc", + "input/ime_text_span_conversions.h", "input/input_event.cc", "input/input_event.h", "input/input_event_ack.cc", diff --git a/content/common/content_param_traits_macros.h b/content/common/content_param_traits_macros.h index 85612b9184f7cf..afb9838ea3a2ed 100644 --- a/content/common/content_param_traits_macros.h +++ b/content/common/content_param_traits_macros.h @@ -49,7 +49,7 @@ IPC_ENUM_TRAITS_MIN_MAX_VALUE(blink::WebInputEvent::Type, IPC_ENUM_TRAITS_MAX_VALUE(blink::WebPageVisibilityState, blink::kWebPageVisibilityStateLast) IPC_ENUM_TRAITS_MAX_VALUE(blink::WebImeTextSpan::Type, - blink::WebImeTextSpan::Type::kSuggestion) + blink::WebImeTextSpan::Type::kMisspellingSuggestion) IPC_STRUCT_TRAITS_BEGIN(blink::WebImeTextSpan) IPC_STRUCT_TRAITS_MEMBER(type) diff --git a/content/common/input/ime_text_span_conversions.cc b/content/common/input/ime_text_span_conversions.cc new file mode 100644 index 00000000000000..59ef7f35643420 --- /dev/null +++ b/content/common/input/ime_text_span_conversions.cc @@ -0,0 +1,41 @@ +// Copyright 2017 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 "content/common/input/ime_text_span_conversions.h" + +#include "base/logging.h" + +namespace content { + +blink::WebImeTextSpan::Type ConvertUiImeTextSpanTypeToWebType( + ui::ImeTextSpan::Type type) { + switch (type) { + case ui::ImeTextSpan::Type::kComposition: + return blink::WebImeTextSpan::Type::kComposition; + case ui::ImeTextSpan::Type::kSuggestion: + return blink::WebImeTextSpan::Type::kSuggestion; + case ui::ImeTextSpan::Type::kMisspellingSuggestion: + return blink::WebImeTextSpan::Type::kMisspellingSuggestion; + } + + NOTREACHED(); + return blink::WebImeTextSpan::Type::kComposition; +} + +ui::ImeTextSpan::Type ConvertWebImeTextSpanTypeToUiType( + blink::WebImeTextSpan::Type type) { + switch (type) { + case blink::WebImeTextSpan::Type::kComposition: + return ui::ImeTextSpan::Type::kComposition; + case blink::WebImeTextSpan::Type::kSuggestion: + return ui::ImeTextSpan::Type::kSuggestion; + case blink::WebImeTextSpan::Type::kMisspellingSuggestion: + return ui::ImeTextSpan::Type::kMisspellingSuggestion; + } + + NOTREACHED(); + return ui::ImeTextSpan::Type::kComposition; +} + +} // namespace content diff --git a/content/common/input/ime_text_span_conversions.h b/content/common/input/ime_text_span_conversions.h new file mode 100644 index 00000000000000..50d78de2899225 --- /dev/null +++ b/content/common/input/ime_text_span_conversions.h @@ -0,0 +1,20 @@ +// Copyright 2017 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 CONTENT_COMMON_INPUT_IME_TEXT_SPAN_CONVERSIONS_H_ +#define CONTENT_COMMON_INPUT_IME_TEXT_SPAN_CONVERSIONS_H_ + +#include "third_party/WebKit/public/web/WebImeTextSpan.h" +#include "ui/base/ime/ime_text_span.h" + +namespace content { + +blink::WebImeTextSpan::Type ConvertUiImeTextSpanTypeToWebType( + ui::ImeTextSpan::Type type); +ui::ImeTextSpan::Type ConvertWebImeTextSpanTypeToUiType( + blink::WebImeTextSpan::Type type); + +} // namespace content + +#endif // CONTENT_COMMON_INPUT_IME_TEXT_SPAN_CONVERSIONS_H_ diff --git a/content/renderer/input/frame_input_handler_impl.cc b/content/renderer/input/frame_input_handler_impl.cc index 645c45ca48c805..53d5a43d98b8f9 100644 --- a/content/renderer/input/frame_input_handler_impl.cc +++ b/content/renderer/input/frame_input_handler_impl.cc @@ -9,6 +9,7 @@ #include "base/bind.h" #include "base/debug/stack_trace.h" #include "base/logging.h" +#include "content/common/input/ime_text_span_conversions.h" #include "content/renderer/gpu/render_widget_compositor.h" #include "content/renderer/ime_event_guard.h" #include "content/renderer/input/widget_input_handler_manager.h" @@ -20,23 +21,6 @@ namespace content { -namespace { - -blink::WebImeTextSpan::Type ConvertUiImeTextSpanTypeToBlinkType( - ui::ImeTextSpan::Type type) { - switch (type) { - case ui::ImeTextSpan::Type::kComposition: - return blink::WebImeTextSpan::Type::kComposition; - case ui::ImeTextSpan::Type::kSuggestion: - return blink::WebImeTextSpan::Type::kSuggestion; - } - - NOTREACHED(); - return blink::WebImeTextSpan::Type::kComposition; -} - -} // namespace - FrameInputHandlerImpl::FrameInputHandlerImpl( base::WeakPtr render_frame, mojom::FrameInputHandlerRequest request) @@ -99,7 +83,7 @@ void FrameInputHandlerImpl::SetCompositionFromExistingText( std::vector ime_text_spans; for (const auto& ime_text_span : ui_ime_text_spans) { blink::WebImeTextSpan blink_ime_text_span( - ConvertUiImeTextSpanTypeToBlinkType(ime_text_span.type), + ConvertUiImeTextSpanTypeToWebType(ime_text_span.type), ime_text_span.start_offset, ime_text_span.end_offset, ime_text_span.underline_color, ime_text_span.thick, ime_text_span.background_color, diff --git a/content/renderer/input/widget_input_handler_impl.cc b/content/renderer/input/widget_input_handler_impl.cc index 916799e2fbff8e..c32c7510ba3366 100644 --- a/content/renderer/input/widget_input_handler_impl.cc +++ b/content/renderer/input/widget_input_handler_impl.cc @@ -8,6 +8,7 @@ #include "base/bind.h" #include "base/logging.h" +#include "content/common/input/ime_text_span_conversions.h" #include "content/common/input_messages.h" #include "content/renderer/gpu/render_widget_compositor.h" #include "content/renderer/ime_event_guard.h" @@ -24,25 +25,12 @@ namespace content { namespace { -blink::WebImeTextSpan::Type ConvertUiImeTextSpanTypeToBlinkType( - ui::ImeTextSpan::Type type) { - switch (type) { - case ui::ImeTextSpan::Type::kComposition: - return blink::WebImeTextSpan::Type::kComposition; - case ui::ImeTextSpan::Type::kSuggestion: - return blink::WebImeTextSpan::Type::kSuggestion; - } - - NOTREACHED(); - return blink::WebImeTextSpan::Type::kComposition; -} - std::vector ConvertUIImeTextSpansToBlinkImeTextSpans( const std::vector& ui_ime_text_spans) { std::vector ime_text_spans; for (const auto& ime_text_span : ui_ime_text_spans) { blink::WebImeTextSpan blink_ime_text_span( - ConvertUiImeTextSpanTypeToBlinkType(ime_text_span.type), + ConvertUiImeTextSpanTypeToWebType(ime_text_span.type), ime_text_span.start_offset, ime_text_span.end_offset, ime_text_span.underline_color, ime_text_span.thick, ime_text_span.background_color, diff --git a/services/ui/public/interfaces/ime/ime.mojom b/services/ui/public/interfaces/ime/ime.mojom index b8167bfd1acbbc..bc71a91ec6ede0 100644 --- a/services/ui/public/interfaces/ime/ime.mojom +++ b/services/ui/public/interfaces/ime/ime.mojom @@ -60,6 +60,7 @@ struct CandidateWindowEntry { enum ImeTextSpanType { kComposition, kSuggestion, + kMisspellingSuggestion, }; // Represents an underlined segment of text currently composed by IME. diff --git a/services/ui/public/interfaces/ime/ime_struct_traits.cc b/services/ui/public/interfaces/ime/ime_struct_traits.cc index 925a001ed6f1a7..45183679e4ff63 100644 --- a/services/ui/public/interfaces/ime/ime_struct_traits.cc +++ b/services/ui/public/interfaces/ime/ime_struct_traits.cc @@ -75,6 +75,8 @@ EnumTraits::ToMojom( return ui::mojom::ImeTextSpanType::kComposition; case ui::ImeTextSpan::Type::kSuggestion: return ui::mojom::ImeTextSpanType::kSuggestion; + case ui::ImeTextSpan::Type::kMisspellingSuggestion: + return ui::mojom::ImeTextSpanType::kMisspellingSuggestion; } NOTREACHED(); @@ -92,6 +94,9 @@ bool EnumTraits::FromMojom( case ui::mojom::ImeTextSpanType::kSuggestion: *out = ui::ImeTextSpan::Type::kSuggestion; return true; + case ui::mojom::ImeTextSpanType::kMisspellingSuggestion: + *out = ui::ImeTextSpan::Type::kMisspellingSuggestion; + return true; } NOTREACHED(); diff --git a/third_party/WebKit/Source/core/editing/ImeTextSpan.cpp b/third_party/WebKit/Source/core/editing/ImeTextSpan.cpp index e01f79915b2824..6938822da9818f 100644 --- a/third_party/WebKit/Source/core/editing/ImeTextSpan.cpp +++ b/third_party/WebKit/Source/core/editing/ImeTextSpan.cpp @@ -48,6 +48,8 @@ ImeTextSpan::Type ConvertWebTypeToType(WebImeTextSpan::Type type) { return ImeTextSpan::Type::kComposition; case WebImeTextSpan::Type::kSuggestion: return ImeTextSpan::Type::kSuggestion; + case WebImeTextSpan::Type::kMisspellingSuggestion: + return ImeTextSpan::Type::kMisspellingSuggestion; } NOTREACHED(); diff --git a/third_party/WebKit/Source/core/editing/ImeTextSpan.h b/third_party/WebKit/Source/core/editing/ImeTextSpan.h index 1ee97f3c7778a7..9f96087b61e218 100644 --- a/third_party/WebKit/Source/core/editing/ImeTextSpan.h +++ b/third_party/WebKit/Source/core/editing/ImeTextSpan.h @@ -40,7 +40,7 @@ class CORE_EXPORT ImeTextSpan { DISALLOW_NEW_EXCEPT_PLACEMENT_NEW(); public: - enum class Type { kComposition, kSuggestion }; + enum class Type { kComposition, kSuggestion, kMisspellingSuggestion }; ImeTextSpan(Type, unsigned start_offset, diff --git a/third_party/WebKit/public/web/WebImeTextSpan.h b/third_party/WebKit/public/web/WebImeTextSpan.h index 481be8ac65590c..5b77ed4dcaa896 100644 --- a/third_party/WebKit/public/web/WebImeTextSpan.h +++ b/third_party/WebKit/public/web/WebImeTextSpan.h @@ -41,11 +41,15 @@ namespace blink { // setComposition() method. struct WebImeTextSpan { enum class Type { - // Creates a composition marker + // Creates a composition marker. kComposition, // Creates a suggestion marker that isn't cleared after the user picks a - // replacement + // replacement. kSuggestion, + // Creates a suggestion marker that is cleared after the user picks a + // replacement, and will be ignored if added to an element with spell + // checking disabled. + kMisspellingSuggestion, }; WebImeTextSpan() diff --git a/ui/base/ime/ime_text_span.h b/ui/base/ime/ime_text_span.h index 36b77f755ee281..eee554f4fe2994 100644 --- a/ui/base/ime/ime_text_span.h +++ b/ui/base/ime/ime_text_span.h @@ -25,6 +25,10 @@ struct UI_BASE_IME_EXPORT ImeTextSpan { // Creates a suggestion marker that isn't cleared after the user picks a // replacement. kSuggestion, + // Creates a suggestion marker that is cleared after the user picks a + // replacement, and will be ignored if added to an element with spell + // checking disabled. + kMisspellingSuggestion, }; // The default constructor is used by generated Mojo code.