Index: Source/web/WebFrameImpl.cpp |
diff --git a/Source/web/WebFrameImpl.cpp b/Source/web/WebFrameImpl.cpp |
index 4fc38f19600ea2535cdb3a57cc34c404476d5486..7453ee2531db3a628d8efabbed6b8deafc433d5b 100644 |
--- a/Source/web/WebFrameImpl.cpp |
+++ b/Source/web/WebFrameImpl.cpp |
@@ -74,6 +74,7 @@ |
#include <algorithm> |
#include "AssociatedURLLoader.h" |
+#include "CompositionUnderlineVectorBuilder.h" |
#include "EventListenerWrapper.h" |
#include "FindInPageCoordinates.h" |
#include "HTMLNames.h" |
@@ -1359,6 +1360,36 @@ void WebFrameImpl::moveCaretSelection(const WebPoint& point) |
frame()->selection().moveTo(position, UserTriggered); |
} |
+bool WebFrameImpl::setEditableSelectionOffsets(int start, int end) |
+{ |
+ return frame()->inputMethodController().setEditableSelectionOffsets(PlainTextRange(start, end)); |
+} |
+ |
+bool WebFrameImpl::setCompositionFromExistingText(int compositionStart, int compositionEnd, const WebVector<WebCompositionUnderline>& underlines) |
+{ |
+ if (!frame()->editor().canEdit()) |
+ return false; |
+ |
+ InputMethodController& inputMethodController = frame()->inputMethodController(); |
+ inputMethodController.cancelComposition(); |
+ |
+ if (compositionStart == compositionEnd) |
+ return true; |
+ |
+ inputMethodController.setCompositionFromExistingText(CompositionUnderlineVectorBuilder(underlines), compositionStart, compositionEnd); |
+ |
+ return true; |
+} |
+ |
+void WebFrameImpl::extendSelectionAndDelete(int before, int after) |
+{ |
+ if (WebPlugin* plugin = focusedPluginIfInputMethodSupported()) { |
+ plugin->extendSelectionAndDelete(before, after); |
+ return; |
+ } |
+ frame()->inputMethodController().extendSelectionAndDelete(before, after); |
+} |
+ |
void WebFrameImpl::setCaretVisible(bool visible) |
{ |
frame()->selection().setCaretVisible(visible); |
@@ -1378,6 +1409,14 @@ VisiblePosition WebFrameImpl::visiblePositionForWindowPoint(const WebPoint& poin |
return VisiblePosition(); |
} |
+WebPlugin* WebFrameImpl::focusedPluginIfInputMethodSupported() |
+{ |
+ WebPluginContainerImpl* container = WebFrameImpl::pluginContainerFromNode(frame(), WebNode(frame()->document()->focusedElement())); |
+ if (container && container->supportsInputMethod()) |
+ return container->plugin(); |
+ return 0; |
+} |
+ |
int WebFrameImpl::printBegin(const WebPrintParams& printParams, const WebNode& constrainToNode) |
{ |
ASSERT(!frame()->document()->isFrameSet()); |