Title: [116475] trunk
Revision
116475
Author
[email protected]
Date
2012-05-08 18:32:43 -0700 (Tue, 08 May 2012)

Log Message

[EFL][DRT] Implement TextInputController.
https://bugs.webkit.org/show_bug.cgi?id=78559

Patch by Kangil Han <[email protected]> on 2012-05-08
Reviewed by Martin Robinson.

TextInputController has been created for an input emulation purpose in DRT.
However, not like other ports, EFL doesn't have it.
Therefore, this patch will enable EFL port to have an input emulation in DRT.

Source/WebKit/efl:

* WebCoreSupport/DumpRenderTreeSupportEfl.cpp:
(DumpRenderTreeSupportEfl::setComposition):
(DumpRenderTreeSupportEfl::hasComposition):
(DumpRenderTreeSupportEfl::compositionRange):
(DumpRenderTreeSupportEfl::confirmComposition):
(DumpRenderTreeSupportEfl::firstRectForCharacterRange):
(DumpRenderTreeSupportEfl::selectedRange):
* WebCoreSupport/DumpRenderTreeSupportEfl.h:

Tools:

* DumpRenderTree/efl/CMakeLists.txt:
* DumpRenderTree/efl/DumpRenderTreeChrome.cpp:
(DumpRenderTreeChrome::onWindowObjectCleared):
* DumpRenderTree/efl/TextInputController.cpp: Added.
(setMarkedTextCallback):
(hasMarkedTextCallback):
(markedRangeCallback):
(insertTextCallback):
(unmarkTextCallback):
(firstRectForCharacterRangeCallback):
(selectedRangeCallback):
(makeTextInputController):
* DumpRenderTree/efl/TextInputController.h: Added.

LayoutTests:

* platform/efl/Skipped:

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (116474 => 116475)


--- trunk/LayoutTests/ChangeLog	2012-05-09 00:58:08 UTC (rev 116474)
+++ trunk/LayoutTests/ChangeLog	2012-05-09 01:32:43 UTC (rev 116475)
@@ -1,3 +1,16 @@
+2012-05-08  Kangil Han  <[email protected]>
+
+        [EFL][DRT] Implement TextInputController.
+        https://bugs.webkit.org/show_bug.cgi?id=78559
+
+        Reviewed by Martin Robinson.
+
+        TextInputController has been created for an input emulation purpose in DRT.
+        However, not like other ports, EFL doesn't have it.
+        Therefore, this patch will enable EFL port to have an input emulation in DRT.
+
+        * platform/efl/Skipped:
+
 2012-05-08  Jon Lee  <[email protected]>
 
         Safari warns that it needs to resend the form in an iFrame when going back

Modified: trunk/LayoutTests/platform/efl/Skipped (116474 => 116475)


--- trunk/LayoutTests/platform/efl/Skipped	2012-05-09 00:58:08 UTC (rev 116474)
+++ trunk/LayoutTests/platform/efl/Skipped	2012-05-09 01:32:43 UTC (rev 116475)
@@ -209,26 +209,18 @@
 # EFL's DRT needs a PlainTextController implementation
 editing/text-iterator/basic-iteration.html
 
-# EFL's DRT needs a TextInputController
-editing/input/ime-composition-clearpreedit.html
+# EFL's DRT key down bug
+# https://bugs.webkit.org/show_bug.cgi?id=84710
 editing/input/password-echo-passnode.html
 editing/input/password-echo-passnode2.html
-editing/input/password-echo-passnode3.html
-editing/input/password-echo-textnode.html
+
+# EFL's editor doesn't cancel composition as change of value
+# https://bugs.webkit.org/show_bug.cgi?id=85122
 editing/input/setting-input-value-cancel-ime-composition.html
-editing/inserting/caret-position.html
-editing/inserting/insert-composition-whitespace.html
-editing/selection/5825350-1.html
-editing/selection/5825350-2.html
-editing/selection/mixed-editability-10.html
-editing/selection/move-left-right.html
-fast/dom/tab-in-right-alignment.html
-fast/events/ime-composition-events-001.html
+
+# EFL's textarea and textfield doesn't handle whitespace style
+# https://bugs.webkit.org/show_bug.cgi?id=85123
 fast/forms/cursor-at-editable-content-boundary.html
-fast/forms/input-maxlength-ime-completed.html
-fast/forms/input-maxlength-ime-preedit.html
-fast/text/international/thai-cursor-position.html
-svg/text/caret-in-svg-text.xhtml
 
 # EFL's LayoutTestController does not implement setMediaType
 fast/media/print-restores-previous-mediatype.html
@@ -1794,6 +1786,8 @@
 transitions/move-after-transition.html
 transitions/svg-text-shadow-transition.html
 transitions/svg-transitions.html
+fast/dom/Window/window-properties.html
+fast/dom/prototype-inheritance-2.html
 
 # EFL DRT doesn't fully support http tests yet. These tests make timeout error.
 editing/input/reveal-contenteditable-on-input-vertically.html

Modified: trunk/Source/WebKit/efl/ChangeLog (116474 => 116475)


--- trunk/Source/WebKit/efl/ChangeLog	2012-05-09 00:58:08 UTC (rev 116474)
+++ trunk/Source/WebKit/efl/ChangeLog	2012-05-09 01:32:43 UTC (rev 116475)
@@ -1,3 +1,23 @@
+2012-05-08  Kangil Han  <[email protected]>
+
+        [EFL][DRT] Implement TextInputController.
+        https://bugs.webkit.org/show_bug.cgi?id=78559
+
+        Reviewed by Martin Robinson.
+
+        TextInputController has been created for an input emulation purpose in DRT.
+        However, not like other ports, EFL doesn't have it.
+        Therefore, this patch will enable EFL port to have an input emulation in DRT.
+
+        * WebCoreSupport/DumpRenderTreeSupportEfl.cpp:
+        (DumpRenderTreeSupportEfl::setComposition):
+        (DumpRenderTreeSupportEfl::hasComposition):
+        (DumpRenderTreeSupportEfl::compositionRange):
+        (DumpRenderTreeSupportEfl::confirmComposition):
+        (DumpRenderTreeSupportEfl::firstRectForCharacterRange):
+        (DumpRenderTreeSupportEfl::selectedRange):
+        * WebCoreSupport/DumpRenderTreeSupportEfl.h:
+
 2012-04-23  Raphael Kubo da Costa  <[email protected]>
 
         [EFL] Pass a WTF::String directly from DRT to ewebkit when possible

Modified: trunk/Source/WebKit/efl/WebCoreSupport/DumpRenderTreeSupportEfl.cpp (116474 => 116475)


--- trunk/Source/WebKit/efl/WebCoreSupport/DumpRenderTreeSupportEfl.cpp	2012-05-09 00:58:08 UTC (rev 116474)
+++ trunk/Source/WebKit/efl/WebCoreSupport/DumpRenderTreeSupportEfl.cpp	2012-05-09 01:32:43 UTC (rev 116475)
@@ -43,6 +43,7 @@
 #include <PrintContext.h>
 #include <RenderTreeAsText.h>
 #include <Settings.h>
+#include <TextIterator.h>
 #include <WebKitMutationObserver.h>
 #include <bindings/js/GCController.h>
 #include <history/HistoryItem.h>
@@ -615,3 +616,117 @@
 
     corePage->settings()->setAuthorAndUserStylesEnabled(enabled);
 }
+
+void DumpRenderTreeSupportEfl::setComposition(Evas_Object* ewkView, const char* text, int start, int length)
+{
+    WebCore::Page* page = EWKPrivate::corePage(ewkView);
+    if (!page || !page->focusController() || !page->focusController()->focusedOrMainFrame())
+        return;
+
+    WebCore::Editor* editor = page->focusController()->focusedOrMainFrame()->editor();
+    if (!editor || (!editor->canEdit() && !editor->hasComposition()))
+        return;
+
+    const String compositionString = String::fromUTF8(text);
+    Vector<WebCore::CompositionUnderline> underlines;
+    underlines.append(WebCore::CompositionUnderline(0, compositionString.length(), WebCore::Color(0, 0, 0), false));
+    editor->setComposition(compositionString, underlines, start, start + length);
+}
+
+bool DumpRenderTreeSupportEfl::hasComposition(const Evas_Object* ewkView)
+{
+    const WebCore::Page* page = EWKPrivate::corePage(ewkView);
+    if (!page || !page->focusController() || !page->focusController()->focusedOrMainFrame())
+        return false;
+
+    const WebCore::Editor* editor = page->focusController()->focusedOrMainFrame()->editor();
+    if (!editor)
+        return false;
+
+    return editor->hasComposition();
+}
+
+bool DumpRenderTreeSupportEfl::compositionRange(Evas_Object* ewkView, int* start, int* length)
+{
+    *start = *length = 0;
+
+    WebCore::Page* page = EWKPrivate::corePage(ewkView);
+    if (!page || !page->focusController() || !page->focusController()->focusedOrMainFrame())
+        return false;
+
+    WebCore::Editor* editor = page->focusController()->focusedOrMainFrame()->editor();
+    if (!editor || !editor->hasComposition())
+        return false;
+
+    *start = editor->compositionStart();
+    *length = editor->compositionEnd() - *start;
+    return true;
+}
+
+void DumpRenderTreeSupportEfl::confirmComposition(Evas_Object* ewkView, const char* text)
+{
+    WebCore::Page* page = EWKPrivate::corePage(ewkView);
+    if (!page || !page->focusController() || !page->focusController()->focusedOrMainFrame())
+        return;
+
+    WebCore::Editor* editor = page->focusController()->focusedOrMainFrame()->editor();
+    if (!editor)
+        return;
+
+    if (!editor->hasComposition()) {
+        editor->insertText(String::fromUTF8(text), 0);
+        return;
+    }
+
+    if (text) {
+        editor->confirmComposition(String::fromUTF8(text));
+        return;
+    }
+    editor->confirmComposition();
+}
+
+WebCore::IntRect DumpRenderTreeSupportEfl::firstRectForCharacterRange(Evas_Object* ewkView, int location, int length)
+{
+    WebCore::Page* page = EWKPrivate::corePage(ewkView);
+    if (!page || !page->focusController() || !page->focusController()->focusedOrMainFrame() || !page->focusController()->focusedOrMainFrame()->editor())
+        return WebCore::IntRect();
+
+    if ((location + length < location) && (location + length))
+        length = 0;
+
+    WebCore::Frame* frame = page->focusController()->focusedOrMainFrame();
+    WebCore::Editor* editor = frame->editor();
+
+    RefPtr<WebCore::Range> range = WebCore::TextIterator::rangeFromLocationAndLength(frame->selection()->rootEditableElementOrDocumentElement(), location, length);
+    if (!range)
+        return WebCore::IntRect();
+
+    return editor->firstRectForRange(range.get());
+}
+
+bool DumpRenderTreeSupportEfl::selectedRange(Evas_Object* ewkView, int* start, int* length)
+{
+    if (!(start && length))
+        return false;
+
+    WebCore::Page* page = EWKPrivate::corePage(ewkView);
+    if (!page || !page->focusController() || !page->focusController()->focusedOrMainFrame())
+        return false;
+
+    WebCore::Frame* frame = page->focusController()->focusedOrMainFrame();
+    RefPtr<WebCore::Range> range = frame->selection()->toNormalizedRange().get();
+    if (!range)
+        return false;
+
+    WebCore::Element* selectionRoot = frame->selection()->rootEditableElement();
+    WebCore::Element* scope = selectionRoot ? selectionRoot : frame->document()->documentElement();
+
+    RefPtr<WebCore::Range> testRange = WebCore::Range::create(scope->document(), scope, 0, range->startContainer(), range->startOffset());
+    *start = WebCore::TextIterator::rangeLength(testRange.get());
+
+    WebCore::ExceptionCode ec;
+    testRange->setEnd(range->endContainer(), range->endOffset(), ec);
+    *length = WebCore::TextIterator::rangeLength(testRange.get());
+
+    return true;
+}

Modified: trunk/Source/WebKit/efl/WebCoreSupport/DumpRenderTreeSupportEfl.h (116474 => 116475)


--- trunk/Source/WebKit/efl/WebCoreSupport/DumpRenderTreeSupportEfl.h	2012-05-09 00:58:08 UTC (rev 116474)
+++ trunk/Source/WebKit/efl/WebCoreSupport/DumpRenderTreeSupportEfl.h	2012-05-09 01:32:43 UTC (rev 116475)
@@ -98,6 +98,14 @@
     static void setInteractiveFormValidationEnabled(Evas_Object* ewkView, bool enabled);
     static JSValueRef computedStyleIncludingVisitedInfo(JSContextRef, JSValueRef);
     static void setAuthorAndUserStylesEnabled(Evas_Object* ewkView, bool);
+
+    // TextInputController
+    static void setComposition(Evas_Object*, const char*, int, int);
+    static bool hasComposition(const Evas_Object*);
+    static bool compositionRange(Evas_Object*, int*, int*);
+    static void confirmComposition(Evas_Object*, const char*);
+    static WebCore::IntRect firstRectForCharacterRange(Evas_Object*, int, int);
+    static bool selectedRange(Evas_Object*, int*, int*);
 };
 
 #endif // DumpRenderTreeSupportEfl_h

Modified: trunk/Tools/ChangeLog (116474 => 116475)


--- trunk/Tools/ChangeLog	2012-05-09 00:58:08 UTC (rev 116474)
+++ trunk/Tools/ChangeLog	2012-05-09 01:32:43 UTC (rev 116475)
@@ -1,3 +1,28 @@
+2012-05-08  Kangil Han  <[email protected]>
+
+        [EFL][DRT] Implement TextInputController.
+        https://bugs.webkit.org/show_bug.cgi?id=78559
+
+        Reviewed by Martin Robinson.
+
+        TextInputController has been created for an input emulation purpose in DRT.
+        However, not like other ports, EFL doesn't have it.
+        Therefore, this patch will enable EFL port to have an input emulation in DRT.
+
+        * DumpRenderTree/efl/CMakeLists.txt:
+        * DumpRenderTree/efl/DumpRenderTreeChrome.cpp:
+        (DumpRenderTreeChrome::onWindowObjectCleared):
+        * DumpRenderTree/efl/TextInputController.cpp: Added.
+        (setMarkedTextCallback):
+        (hasMarkedTextCallback):
+        (markedRangeCallback):
+        (insertTextCallback):
+        (unmarkTextCallback):
+        (firstRectForCharacterRangeCallback):
+        (selectedRangeCallback):
+        (makeTextInputController):
+        * DumpRenderTree/efl/TextInputController.h: Added.
+
 2012-04-23  Raphael Kubo da Costa  <[email protected]>
 
         [EFL] Pass a WTF::String directly from DRT to ewebkit when possible

Modified: trunk/Tools/DumpRenderTree/efl/CMakeLists.txt (116474 => 116475)


--- trunk/Tools/DumpRenderTree/efl/CMakeLists.txt	2012-05-09 00:58:08 UTC (rev 116474)
+++ trunk/Tools/DumpRenderTree/efl/CMakeLists.txt	2012-05-09 01:32:43 UTC (rev 116475)
@@ -15,6 +15,7 @@
     ${TOOLS_DIR}/DumpRenderTree/efl/JSStringUtils.cpp
     ${TOOLS_DIR}/DumpRenderTree/efl/LayoutTestControllerEfl.cpp
     ${TOOLS_DIR}/DumpRenderTree/efl/PixelDumpSupportEfl.cpp
+    ${TOOLS_DIR}/DumpRenderTree/efl/TextInputController.cpp
     ${TOOLS_DIR}/DumpRenderTree/efl/WorkQueueItemEfl.cpp
 )
 

Modified: trunk/Tools/DumpRenderTree/efl/DumpRenderTreeChrome.cpp (116474 => 116475)


--- trunk/Tools/DumpRenderTree/efl/DumpRenderTreeChrome.cpp	2012-05-09 00:58:08 UTC (rev 116474)
+++ trunk/Tools/DumpRenderTree/efl/DumpRenderTreeChrome.cpp	2012-05-09 01:32:43 UTC (rev 116475)
@@ -33,6 +33,7 @@
 #include "GCController.h"
 #include "LayoutTestController.h"
 #include "NotImplemented.h"
+#include "TextInputController.h"
 #include "WebCoreSupport/DumpRenderTreeSupportEfl.h"
 #include "WebCoreTestSupport.h"
 #include "WorkQueue.h"
@@ -368,6 +369,12 @@
                         makeEventSender(objectClearedInfo->context, !DumpRenderTreeSupportEfl::frameParent(objectClearedInfo->frame)),
                         kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete, 0);
 
+    JSRetainPtr<JSStringRef> textInputControllerName(JSStringCreateWithUTF8CString("textInputController"));
+    JSObjectSetProperty(objectClearedInfo->context, objectClearedInfo->windowObject,
+                        textInputControllerName.get(),
+                        makeTextInputController(objectClearedInfo->context),
+                        kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete, 0);
+
     WebCoreTestSupport::injectInternalsObject(objectClearedInfo->context);
 }
 

Added: trunk/Tools/DumpRenderTree/efl/TextInputController.cpp (0 => 116475)


--- trunk/Tools/DumpRenderTree/efl/TextInputController.cpp	                        (rev 0)
+++ trunk/Tools/DumpRenderTree/efl/TextInputController.cpp	2012-05-09 01:32:43 UTC (rev 116475)
@@ -0,0 +1,178 @@
+/*
+ * Copyright (C) 2010 Google Inc. All rights reserved.
+ * Copyright (C) 2011 Igalia S.L.
+ * Copyright (C) 2012 Samsung Electronics
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1.  Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ * 2.  Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in the
+ *     documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "TextInputController.h"
+
+#include "DumpRenderTree.h"
+#include "DumpRenderTreeChrome.h"
+#include "WebCoreSupport/DumpRenderTreeSupportEfl.h"
+#include <_javascript_Core/JSObjectRef.h>
+#include <_javascript_Core/JSRetainPtr.h>
+#include <_javascript_Core/JSStringRef.h>
+#include <_javascript_Core/OpaqueJSString.h>
+
+static JSValueRef setMarkedTextCallback(JSContextRef context, JSObjectRef function, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
+{
+    if (!browser->mainView() || argumentCount < 3)
+        return JSValueMakeUndefined(context);
+
+    JSStringRef string = JSValueToStringCopy(context, arguments[0], exception);
+
+    size_t bufferSize = JSStringGetMaximumUTF8CStringSize(string);
+    char* text = new char[bufferSize];
+    JSStringGetUTF8CString(string, text, bufferSize);
+    JSStringRelease(string);
+
+    int start = static_cast<int>(JSValueToNumber(context, arguments[1], exception));
+    int length = static_cast<int>(JSValueToNumber(context, arguments[2], exception));
+
+    DumpRenderTreeSupportEfl::setComposition(browser->mainView(), text, start, length);
+
+    delete[] text;
+    return JSValueMakeUndefined(context);
+}
+
+static JSValueRef hasMarkedTextCallback(JSContextRef context, JSObjectRef function, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
+{
+    if (!browser->mainView())
+        return JSValueMakeUndefined(context);
+
+    return JSValueMakeBoolean(context, DumpRenderTreeSupportEfl::hasComposition(browser->mainView()));
+}
+
+static JSValueRef markedRangeCallback(JSContextRef context, JSObjectRef function, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
+{
+    if (!browser->mainView())
+        return JSValueMakeUndefined(context);
+
+    int start, length;
+    if (!DumpRenderTreeSupportEfl::compositionRange(browser->mainView(), &start, &length))
+        return JSValueMakeUndefined(context);
+
+    JSValueRef arrayValues[2];
+    arrayValues[0] = JSValueMakeNumber(context, start);
+    arrayValues[1] = JSValueMakeNumber(context, length);
+    JSObjectRef arrayObject = JSObjectMakeArray(context, 2, arrayValues, exception);
+    return arrayObject;
+}
+
+static JSValueRef insertTextCallback(JSContextRef context, JSObjectRef function, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
+{
+    if (!browser->mainView() || argumentCount < 1)
+        return JSValueMakeUndefined(context);
+
+    JSStringRef string = JSValueToStringCopy(context, arguments[0], exception);
+
+    size_t bufferSize = JSStringGetMaximumUTF8CStringSize(string);
+    char* text = new char[bufferSize];
+    JSStringGetUTF8CString(string, text, bufferSize);
+    JSStringRelease(string);
+
+    DumpRenderTreeSupportEfl::confirmComposition(browser->mainView(), text);
+
+    delete[] text;
+    return JSValueMakeUndefined(context);
+}
+
+static JSValueRef unmarkTextCallback(JSContextRef context, JSObjectRef function, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
+{
+    if (!browser->mainView())
+        return JSValueMakeUndefined(context);
+
+    DumpRenderTreeSupportEfl::confirmComposition(browser->mainView(), 0);
+    return JSValueMakeUndefined(context);
+}
+
+static JSValueRef firstRectForCharacterRangeCallback(JSContextRef context, JSObjectRef function, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
+{
+    if (!browser->mainView() || argumentCount < 2)
+        return JSValueMakeUndefined(context);
+
+    int location = static_cast<int>(JSValueToNumber(context, arguments[0], exception));
+    int length = static_cast<int>(JSValueToNumber(context, arguments[1], exception));
+
+    WebCore::IntRect rect = DumpRenderTreeSupportEfl::firstRectForCharacterRange(browser->mainView(), location, length);
+
+    JSValueRef arrayValues[4];
+    arrayValues[0] = JSValueMakeNumber(context, rect.x());
+    arrayValues[1] = JSValueMakeNumber(context, rect.y());
+    arrayValues[2] = JSValueMakeNumber(context, rect.width());
+    arrayValues[3] = JSValueMakeNumber(context, rect.height());
+    JSObjectRef arrayObject = JSObjectMakeArray(context, 4, arrayValues, exception);
+    return arrayObject;
+}
+
+static JSValueRef selectedRangeCallback(JSContextRef context, JSObjectRef function, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
+{
+    if (!browser->mainView())
+        return JSValueMakeUndefined(context);
+
+    int start, length;
+    if (!DumpRenderTreeSupportEfl::selectedRange(browser->mainView(), &start, &length))
+        return JSValueMakeUndefined(context);
+
+    JSValueRef arrayValues[2];
+    arrayValues[0] = JSValueMakeNumber(context, start);
+    arrayValues[1] = JSValueMakeNumber(context, length);
+    JSObjectRef arrayObject = JSObjectMakeArray(context, 2, arrayValues, exception);
+    return arrayObject;
+}
+
+static JSStaticFunction staticFunctions[] = {
+    { "setMarkedText", setMarkedTextCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
+    { "hasMarkedText", hasMarkedTextCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
+    { "markedRange", markedRangeCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
+    { "insertText", insertTextCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
+    { "unmarkText", unmarkTextCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
+    { "firstRectForCharacterRange", firstRectForCharacterRangeCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
+    { "selectedRange", selectedRangeCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
+    { 0, 0, 0 }
+};
+
+static JSClassRef getClass(JSContextRef context)
+{
+    static JSClassRef textInputControllerClass = 0;
+
+    if (!textInputControllerClass) {
+        JSClassDefinition classDefinition = {
+                0, 0, 0, 0, 0, 0,
+                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+        classDefinition.staticFunctions = staticFunctions;
+
+        textInputControllerClass = JSClassCreate(&classDefinition);
+    }
+
+    return textInputControllerClass;
+}
+
+JSObjectRef makeTextInputController(JSContextRef context)
+{
+    return JSObjectMake(context, getClass(context), 0);
+}
+

Added: trunk/Tools/DumpRenderTree/efl/TextInputController.h (0 => 116475)


--- trunk/Tools/DumpRenderTree/efl/TextInputController.h	                        (rev 0)
+++ trunk/Tools/DumpRenderTree/efl/TextInputController.h	2012-05-09 01:32:43 UTC (rev 116475)
@@ -0,0 +1,37 @@
+/*
+ * Copyright (C) 2010 Google Inc. All rights reserved.
+ * Copyright (C) 2011 Igalia S.L.
+ * Copyright (C) 2012 Samsung Electronics
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1.  Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ * 2.  Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in the
+ *     documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef TextInputController_h
+#define TextInputController_h
+
+typedef const struct OpaqueJSContext* JSContextRef;
+typedef struct OpaqueJSValue* JSObjectRef;
+
+JSObjectRef makeTextInputController(JSContextRef);
+
+#endif
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to