2011-02-03 Martin Robinson <mrobinson@igalia.com>
authormrobinson@webkit.org <mrobinson@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 11 Apr 2011 23:23:13 +0000 (23:23 +0000)
committermrobinson@webkit.org <mrobinson@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 11 Apr 2011 23:23:13 +0000 (23:23 +0000)
        Reviewed by Eric Seidel.

        [GTK] The GTK+ DRT needs an implementation of the PlainTextController
        https://bugs.webkit.org/show_bug.cgi?id=53605

        * platform/gtk/Skipped: Unskipped test which is now passing.
2011-02-03  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Eric Seidel.

        [GTK] The GTK+ DRT needs an implementation of the PlainTextController
        https://bugs.webkit.org/show_bug.cgi?id=53605

        Added jsValueToDOMRange to DumpRenderTreeSupportGtk. This static method can convert
        a JSValueRef to a WebKitDOMRange. When it's possible to do this with the public
        API, we can remove this method.

        * WebCoreSupport/DumpRenderTreeSupportGtk.cpp:
        (DumpRenderTreeSupportGtk::jsValueToDOMRange): Added.
        * WebCoreSupport/DumpRenderTreeSupportGtk.h: Added declaration.
2011-02-03  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Eric Seidel.

        [GTK] The GTK+ DRT needs an implementation of the PlainTextController
        https://bugs.webkit.org/show_bug.cgi?id=53605

        Add an implementation of the PlainTextController for the GTK+ DRT.

        * DumpRenderTree/gtk/DumpRenderTree.cpp:
        (addControllerToWindow): Added this helper method.
        (webViewWindowObjectCleared): Use the new helper to add EventSender
        and the PlainTextController to the window object.
        * GNUmakefile.am: Added PlainTextController source files.
        * DumpRenderTree/gtk/PlainTextController.cpp: Added. This will rely
        on DumpRenderTreeSupportGtk to convert a JSValueRef into a WebKitDOMRange
        until that functionality exists somewhere in the WebKitGTK+ stack.
        * DumpRenderTree/gtk/PlainTextController.h: Added.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@83530 268f45cc-cd09-0410-ab3c-d52691b4dbfc

LayoutTests/ChangeLog
LayoutTests/platform/gtk/Skipped
Source/WebKit/gtk/ChangeLog
Source/WebKit/gtk/WebCoreSupport/DumpRenderTreeSupportGtk.cpp
Source/WebKit/gtk/WebCoreSupport/DumpRenderTreeSupportGtk.h
Tools/ChangeLog
Tools/DumpRenderTree/gtk/DumpRenderTree.cpp
Tools/DumpRenderTree/gtk/PlainTextController.cpp [new file with mode: 0644]
Tools/DumpRenderTree/gtk/PlainTextController.h [new file with mode: 0644]
Tools/DumpRenderTree/gtk/TextInputController.cpp
Tools/GNUmakefile.am

index 9e307f7..b644a5a 100644 (file)
@@ -1,3 +1,12 @@
+2011-02-03  Martin Robinson  <mrobinson@igalia.com>
+
+        Reviewed by Eric Seidel.
+
+        [GTK] The GTK+ DRT needs an implementation of the PlainTextController
+        https://bugs.webkit.org/show_bug.cgi?id=53605
+
+        * platform/gtk/Skipped: Unskipped test which is now passing.
+
 2011-04-11  Stephen White  <senorblanco@chromium.org>
 
         Unreviewed; new chromium baselines.
index 848a4e0..dceaac2 100644 (file)
@@ -1305,10 +1305,6 @@ http/tests/security/local-iFrame-from-remote.html
 http/tests/security/local-image-from-remote.html
 http/tests/security/local-user-CSS-from-remote.html
 
-# Need an implementation of PlainTextController
-# https://bugs.webkit.org/show_bug.cgi?id=53605
-editing/text-iterator/basic-iteration.html
-
 # LayoutTestController needs layoutTestController.displayInvalidatedRegion
 # https://bugs.webkit.org/show_bug.cgi?id=54073
 plugins/invalidate_rect.html
index 7c218cb..4d65314 100644 (file)
@@ -1,3 +1,18 @@
+2011-02-03  Martin Robinson  <mrobinson@igalia.com>
+
+        Reviewed by Eric Seidel.
+
+        [GTK] The GTK+ DRT needs an implementation of the PlainTextController
+        https://bugs.webkit.org/show_bug.cgi?id=53605
+
+        Added jsValueToDOMRange to DumpRenderTreeSupportGtk. This static method can convert
+        a JSValueRef to a WebKitDOMRange. When it's possible to do this with the public
+        API, we can remove this method.
+
+        * WebCoreSupport/DumpRenderTreeSupportGtk.cpp:
+        (DumpRenderTreeSupportGtk::jsValueToDOMRange): Added.
+        * WebCoreSupport/DumpRenderTreeSupportGtk.h: Added declaration.
+
 2011-04-11  Mario Sanchez Prada  <msanchez@igalia.com>
 
         Reviewed by Chris Fleizach.
index 7c54f44..cfdeb26 100644 (file)
@@ -42,6 +42,7 @@
 #include "JSElement.h"
 #include "JSLock.h"
 #include "JSNodeList.h"
+#include "JSRange.h"
 #include "JSValue.h"
 #include "NodeList.h"
 #include "PageGroup.h"
@@ -53,6 +54,7 @@
 #include "SecurityOrigin.h"
 #include "Settings.h"
 #include "TextIterator.h"
+#include "WebKitDOMRangePrivate.h"
 #include "WorkerThread.h"
 #include "webkitglobalsprivate.h"
 #include "webkitwebframe.h"
@@ -127,6 +129,20 @@ JSValueRef DumpRenderTreeSupportGtk::nodesFromRect(JSContextRef context, JSValue
     return toRef(exec, toJS(exec, jsDocument->globalObject(), nodes.get()));
 }
 
+WebKitDOMRange* DumpRenderTreeSupportGtk::jsValueToDOMRange(JSContextRef context, JSValueRef value)
+{
+    if (!value)
+        return 0;
+
+    JSLock lock(SilenceAssertionsOnly);
+    ExecState* exec = toJS(context);
+
+    Range* range = toRange(toJS(exec, value));
+    if (!range)
+        return 0;
+    return kit(range);
+}
+
 /**
  * getFrameChildren:
  * @frame: a #WebKitWebFrame
index 907c457..956ad69 100644 (file)
 #define DumpRenderTreeSupportGtk_h
 
 #include "JSStringRef.h"
-#include <webkit/webkitdefines.h>
-
 #include <atk/atk.h>
 #include <glib.h>
 #include <webkit/webkitdefines.h>
-#include <webkit/webkitwebframe.h>
+#include <webkit/webkitdomdefines.h>
 #include <wtf/text/CString.h>
 
 namespace WebKit {
@@ -62,6 +60,7 @@ public:
     static void clearOpener(WebKitWebFrame*);
 
     static JSValueRef shadowRoot(JSContextRef, JSValueRef);
+    static WebKitDOMRange* jsValueToDOMRange(JSContextRef, JSValueRef);
 
     // FIXME: Move these to webkitwebframe.h once their API has been discussed.
     static GSList* getFrameChildren(WebKitWebFrame*);
index b1812fe..547275f 100644 (file)
@@ -1,3 +1,22 @@
+2011-02-03  Martin Robinson  <mrobinson@igalia.com>
+
+        Reviewed by Eric Seidel.
+
+        [GTK] The GTK+ DRT needs an implementation of the PlainTextController
+        https://bugs.webkit.org/show_bug.cgi?id=53605
+
+        Add an implementation of the PlainTextController for the GTK+ DRT.
+
+        * DumpRenderTree/gtk/DumpRenderTree.cpp:
+        (addControllerToWindow): Added this helper method.
+        (webViewWindowObjectCleared): Use the new helper to add EventSender
+        and the PlainTextController to the window object.
+        * GNUmakefile.am: Added PlainTextController source files.
+        * DumpRenderTree/gtk/PlainTextController.cpp: Added. This will rely
+        on DumpRenderTreeSupportGtk to convert a JSValueRef into a WebKitDOMRange
+        until that functionality exists somewhere in the WebKitGTK+ stack.
+        * DumpRenderTree/gtk/PlainTextController.h: Added.
+
 2011-04-11  Yael Aharon  <yael.aharon@nokia.com>
 
         Unreviewed.
index 1eceb19..a281e48 100644 (file)
@@ -39,6 +39,7 @@
 #include "GOwnPtr.h"
 #include "LayoutTestController.h"
 #include "PixelDumpSupport.h"
+#include "PlainTextController.h"
 #include "TextInputController.h"
 #include "WebCoreSupport/DumpRenderTreeSupportGtk.h"
 #include "WorkQueue.h"
@@ -814,6 +815,13 @@ static void webViewOnloadEvent(WebKitWebView* view, WebKitWebFrame* frame, void*
     }
 }
 
+static void addControllerToWindow(JSContextRef context, JSObjectRef windowObject, const char* controllerName, JSValueRef controller)
+{
+    JSStringRef controllerNameStr = JSStringCreateWithUTF8CString(controllerName);
+    JSObjectSetProperty(context, windowObject, controllerNameStr, controller, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete, 0);
+    JSStringRelease(controllerNameStr); 
+}
+
 static void webViewWindowObjectCleared(WebKitWebView* view, WebKitWebFrame* frame, JSGlobalContextRef context, JSObjectRef windowObject, gpointer data)
 {
     JSValueRef exception = 0;
@@ -828,15 +836,9 @@ static void webViewWindowObjectCleared(WebKitWebView* view, WebKitWebFrame* fram
     axController->makeWindowObject(context, windowObject, &exception);
     ASSERT(!exception);
 
-    JSStringRef eventSenderStr = JSStringCreateWithUTF8CString("eventSender");
-    JSValueRef eventSender = makeEventSender(context, !webkit_web_frame_get_parent(frame));
-    JSObjectSetProperty(context, windowObject, eventSenderStr, eventSender, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete, 0);
-    JSStringRelease(eventSenderStr);
-
-    JSStringRef textInputControllerStr = JSStringCreateWithUTF8CString("textInputController");
-    JSValueRef textInputController = makeTextInputController(context);
-    JSObjectSetProperty(context, windowObject, textInputControllerStr, textInputController, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete, 0);
-    JSStringRelease(textInputControllerStr);
+    addControllerToWindow(context, windowObject, "eventSender", makeEventSender(context, !webkit_web_frame_get_parent(frame)));
+    addControllerToWindow(context, windowObject, "plainText", makePlainTextController(context));
+    addControllerToWindow(context, windowObject, "textInputController", makeTextInputController(context));
 }
 
 static gboolean webViewConsoleMessage(WebKitWebView* view, const gchar* message, unsigned int line, const gchar* sourceId, gpointer data)
diff --git a/Tools/DumpRenderTree/gtk/PlainTextController.cpp b/Tools/DumpRenderTree/gtk/PlainTextController.cpp
new file mode 100644 (file)
index 0000000..25e251a
--- /dev/null
@@ -0,0 +1,65 @@
+/*
+ * Copyright (C) 2011 Igalia S.L.
+ *
+ * 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.
+ * 3.  Neither the name of Apple Computer, Inc. ("Apple") nor the names of
+ *     its contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS 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 APPLE OR ITS 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 "PlainTextController.h"
+
+#include "DumpRenderTree.h"
+#include "WebCoreSupport/DumpRenderTreeSupportGtk.h"
+#include <GOwnPtrGtk.h>
+#include <JavaScriptCore/JSObjectRef.h>
+#include <JavaScriptCore/JSRetainPtr.h>
+#include <JavaScriptCore/JSStringRef.h>
+#include <webkit/webkit.h>
+
+static JSValueRef plainTextCallback(JSContextRef context, JSObjectRef function, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
+{
+    g_return_val_if_fail(argumentCount == 1, JSValueMakeUndefined(context));
+    WebKitDOMRange* kitRange = DumpRenderTreeSupportGtk::jsValueToDOMRange(context, arguments[0]);
+    g_return_val_if_fail(kitRange, JSValueMakeUndefined(context));
+
+    GOwnPtr<gchar> text(webkit_dom_range_get_text(kitRange));
+    JSRetainPtr<JSStringRef> jsText(Adopt, JSStringCreateWithUTF8CString(text.get()));
+    return JSValueMakeString(context, jsText.get());
+}
+
+JSObjectRef makePlainTextController(JSContextRef context)
+{
+    static JSStaticFunction staticFunctions[] = {
+        { "plainText", plainTextCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
+        { 0, 0, 0 }
+    };
+
+    static JSClassRef plainTextControllerClass = 0;
+    if (!plainTextControllerClass) {
+        JSClassDefinition classDefinition = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
+        classDefinition.staticFunctions = staticFunctions;
+        plainTextControllerClass = JSClassCreate(&classDefinition);
+    }
+    return JSObjectMake(context, plainTextControllerClass, 0);
+}
diff --git a/Tools/DumpRenderTree/gtk/PlainTextController.h b/Tools/DumpRenderTree/gtk/PlainTextController.h
new file mode 100644 (file)
index 0000000..dadfc13
--- /dev/null
@@ -0,0 +1,37 @@
+/*
+ * Copyright (C) 2011 Igalia S.L.
+ *
+ * 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.
+ * 3.  Neither the name of Apple Computer, Inc. ("Apple") nor the names of
+ *     its contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS 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 APPLE OR ITS 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 PlainTextController_h
+#define PlainTextController_h
+
+typedef const struct OpaqueJSContext* JSContextRef;
+typedef struct OpaqueJSValue* JSObjectRef;
+
+JSObjectRef makePlainTextController(JSContextRef);
+
+#endif
index 7243fdc..d1aa33d 100644 (file)
@@ -36,6 +36,7 @@
 #include <JavaScriptCore/JSRetainPtr.h>
 #include <JavaScriptCore/JSStringRef.h>
 #include <cstring>
+#include <webkit/webkit.h>
 
 static JSValueRef setMarkedTextCallback(JSContextRef context, JSObjectRef function, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
 {
index 07555c4..34052d7 100644 (file)
@@ -84,6 +84,8 @@ Programs_DumpRenderTree_SOURCES = \
        Tools/DumpRenderTree/gtk/GCControllerGtk.cpp \
        Tools/DumpRenderTree/gtk/LayoutTestControllerGtk.cpp \
        Tools/DumpRenderTree/gtk/PixelDumpSupportGtk.cpp \
+       Tools/DumpRenderTree/gtk/PlainTextController.cpp \
+       Tools/DumpRenderTree/gtk/PlainTextController.h \
        Tools/DumpRenderTree/gtk/TextInputController.h \
        Tools/DumpRenderTree/gtk/TextInputController.cpp \
        Tools/DumpRenderTree/gtk/WorkQueueItemGtk.cpp \