Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(220)

Unified Diff: content/renderer/render_frame_impl.cc

Issue 2029423003: OOPIF IME: Renderer Side Changes (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Implemented WebViewImpl::getCompositionCharacterBounds Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/renderer/render_frame_impl.cc
diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc
index e01306b0e421bdcee5d147f4d81dbb7d464c3fd0..4e2ecc8d8edc8c232d6b5c4f1fbf81b2d1f9fa03 100644
--- a/content/renderer/render_frame_impl.cc
+++ b/content/renderer/render_frame_impl.cc
@@ -4390,6 +4390,47 @@ void RenderFrameImpl::WidgetWillClose() {
FOR_EACH_OBSERVER(RenderFrameObserver, observers_, WidgetWillClose());
}
+void RenderFrameImpl::OnImeSetComposition(
+ RenderWidget* render_widget,
+ const base::string16& text,
+ const std::vector<blink::WebCompositionUnderline>& underlines,
+ const gfx::Range& replacement_range,
+ int selection_start,
+ int selection_end) {
+ if (render_widget_ != render_widget)
+ return;
+
+#if defined(ENABLE_PLUGINS)
+ if (focused_pepper_plugin_) {
+ focused_pepper_plugin_->render_frame()->OnImeSetComposition(
+ text, underlines, selection_start, selection_end);
+ return;
+ }
+#endif
+ AdjustReplacementRangeForAccentedCharacters(replacement_range);
+ render_widget_->HandleImeSetComposition(text, underlines, replacement_range,
+ selection_start, selection_end);
+}
+
+void RenderFrameImpl::OnImeConfirmComposition(
+ RenderWidget* render_widget,
+ const base::string16& text,
+ const gfx::Range& replacement_range,
+ bool keep_selection) {
+ if (render_widget_ != render_widget)
+ return;
+#if defined(ENABLE_PLUGINS)
+ if (focused_pepper_plugin_) {
+ focused_pepper_plugin_->render_frame()->OnImeConfirmComposition(
+ text, replacement_range, keep_selection);
+ return;
+ }
+#endif
+ AdjustReplacementRangeForAccentedCharacters(replacement_range);
+ render_widget_->HandleImeConfirmComposition(text, replacement_range,
+ keep_selection);
+}
+
bool RenderFrameImpl::IsMainFrame() {
return is_main_frame_;
}
@@ -4623,6 +4664,20 @@ void RenderFrameImpl::SendDidCommitProvisionalLoad(
navigation_state->set_transition_type(ui::PAGE_TRANSITION_LINK);
}
+void RenderFrameImpl::AdjustReplacementRangeForAccentedCharacters(
+ const gfx::Range& replacement_range) const {
+ if (!replacement_range.IsValid())
+ return;
+
+ if (WebLocalFrame* frame =
+ render_view_->webview()->focusedFrame()->toWebLocalFrame()) {
+ WebRange webrange = WebRange::fromDocumentRange(
+ frame, replacement_range.start(), replacement_range.length());
+ if (!webrange.isNull())
+ frame->selectRange(webrange);
+ }
+}
+
void RenderFrameImpl::didStartLoading(bool to_different_document) {
TRACE_EVENT1("navigation", "RenderFrameImpl::didStartLoading",
"id", routing_id_);
@@ -6132,6 +6187,8 @@ void RenderFrameImpl::PepperFocusChanged(PepperPluginInstanceImpl* instance,
else if (focused_pepper_plugin_ == instance)
focused_pepper_plugin_ = nullptr;
+ GetRenderWidget()->set_focused_pepper_plugin(focused_pepper_plugin_);
+
GetRenderWidget()->UpdateTextInputState(ShowIme::HIDE_IME,
ChangeSource::FROM_NON_IME);
GetRenderWidget()->UpdateSelectionBounds();

Powered by Google App Engine
This is Rietveld 408576698