14576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang/*
24576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang * Copyright (C) 2010 Igalia S.L.
34576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang *
44576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang * Redistribution and use in source and binary forms, with or without
54576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang * modification, are permitted provided that the following conditions
64576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang * are met:
74576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang *
84576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang * 1.  Redistributions of source code must retain the above copyright
94576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang *     notice, this list of conditions and the following disclaimer.
104576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang * 2.  Redistributions in binary form must reproduce the above copyright
114576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang *     notice, this list of conditions and the following disclaimer in the
124576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang *     documentation and/or other materials provided with the distribution.
134576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang * 3.  Neither the name of Apple Computer, Inc. ("Apple") nor the names of
144576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang *     its contributors may be used to endorse or promote products derived
154576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang *     from this software without specific prior written permission.
164576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang *
174576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
184576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
194576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
204576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
214576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
224576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
234576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
244576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
254576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
264576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
274576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang */
284576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang
294576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang#include "config.h"
304576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang#include "EditingCallbacks.h"
314576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang
324576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang#include "CString.h"
334576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang#include "DumpRenderTree.h"
344576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang#include "GOwnPtr.h"
354576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang#include "LayoutTestController.h"
364576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang#include <gtk/gtk.h>
374576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang#include <webkit/webkit.h>
384576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang
394576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wangstatic CString dumpNodePath(WebKitDOMNode* node)
404576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang{
414576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    GOwnPtr<gchar> nodeName(webkit_dom_node_get_node_name(node));
424576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    GString* path = g_string_new(nodeName.get());
434576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang
444576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    WebKitDOMNode* parent = webkit_dom_node_get_parent_node(node);
454576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    while (parent) {
464576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang        GOwnPtr<gchar> parentName(webkit_dom_node_get_node_name(parent));
474576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang
484576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang        g_string_append(path, " > ");
494576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang        g_string_append(path, parentName.get());
504576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang        parent = webkit_dom_node_get_parent_node(parent);
514576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    }
524576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang
534576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    GOwnPtr<gchar> pathBuffer(g_string_free(path, FALSE));
544576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    return pathBuffer.get();
554576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang}
564576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang
574576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wangstatic CString dumpRange(WebKitDOMRange* range)
584576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang{
594576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    if (!range)
604576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang        return "(null)";
614576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang
624576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    GOwnPtr<GError> error1;
634576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    GOwnPtr<GError> error2;
644576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    GOwnPtr<GError> error3;
654576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    GOwnPtr<GError> error4;
664576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    GOwnPtr<gchar> dump(g_strdup_printf("range from %li of %s to %li of %s",
674576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang        webkit_dom_range_get_start_offset(range, &error1.outPtr()),
684576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang        dumpNodePath(webkit_dom_range_get_start_container(range, &error2.outPtr())).data(),
694576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang        webkit_dom_range_get_end_offset(range, &error3.outPtr()),
704576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang        dumpNodePath(webkit_dom_range_get_end_container(range, &error4.outPtr())).data()));
714576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    return dump.get();
724576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang}
734576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang
744576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wangstatic const char* insertActionString(WebKitInsertAction action)
754576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang{
764576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    switch (action) {
774576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    case WEBKIT_INSERT_ACTION_TYPED:
784576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang        return "WebViewInsertActionTyped";
794576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    case WEBKIT_INSERT_ACTION_PASTED:
804576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang        return "WebViewInsertActionPasted";
814576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    case WEBKIT_INSERT_ACTION_DROPPED:
824576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang        return "WebViewInsertActionDropped";
834576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    }
844576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    ASSERT_NOT_REACHED();
854576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    return "WebViewInsertActionTyped";
864576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang}
874576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang
884576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wangstatic const char* selectionAffinityString(WebKitSelectionAffinity affinity)
894576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang{
904576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    switch (affinity) {
914576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    case WEBKIT_SELECTION_AFFINITY_UPSTREAM:
924576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang        return "NSSelectionAffinityUpstream";
934576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    case WEBKIT_SELECTION_AFFINITY_DOWNSTREAM:
944576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang        return "NSSelectionAffinityDownstream";
954576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    }
964576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    ASSERT_NOT_REACHED();
974576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    return "NSSelectionAffinityUpstream";
984576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang}
994576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang
1004576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wanggboolean shouldBeginEditing(WebKitWebView* webView, WebKitDOMRange* range)
1014576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang{
1024576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    if (!done && gLayoutTestController->dumpEditingCallbacks())
1034576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang        printf("EDITING DELEGATE: shouldBeginEditingInDOMRange:%s\n", dumpRange(range).data());
1044576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    return TRUE;
1054576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang}
1064576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang
1074576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wanggboolean shouldEndEditing(WebKitWebView* webView, WebKitDOMRange* range)
1084576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang{
1094576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    if (!done && gLayoutTestController->dumpEditingCallbacks())
1104576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang        printf("EDITING DELEGATE: shouldEndEditingInDOMRange:%s\n", dumpRange(range).data());
1114576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    return TRUE;
1124576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang}
1134576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang
1144576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wanggboolean shouldInsertNode(WebKitWebView* webView, WebKitDOMNode* node, WebKitDOMRange* range, WebKitInsertAction action)
1154576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang{
1164576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    if (!done && gLayoutTestController->dumpEditingCallbacks()) {
1174576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang        printf("EDITING DELEGATE: shouldInsertNode:%s replacingDOMRange:%s givenAction:%s\n",
1184576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang               dumpNodePath(node).data(), dumpRange(range).data(), insertActionString(action));
1194576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    }
1204576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    return TRUE;
1214576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang}
1224576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang
1234576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wanggboolean shouldInsertText(WebKitWebView* webView, const gchar* text, WebKitDOMRange* range, WebKitInsertAction action)
1244576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang{
1254576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    if (!done && gLayoutTestController->dumpEditingCallbacks()) {
1264576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang        printf("EDITING DELEGATE: shouldInsertText:%s replacingDOMRange:%s givenAction:%s\n",
1274576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang               text, dumpRange(range).data(), insertActionString(action));
1284576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    }
1294576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    return TRUE;
1304576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang}
1314576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang
1324576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wanggboolean shouldDeleteRange(WebKitWebView* webView, WebKitDOMRange* range)
1334576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang{
1344576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    if (!done && gLayoutTestController->dumpEditingCallbacks())
1354576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang        printf("EDITING DELEGATE: shouldDeleteDOMRange:%s\n", dumpRange(range).data());
1364576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    return TRUE;
1374576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang}
1384576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang
1394576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wanggboolean shouldShowDeleteInterfaceForElement(WebKitWebView* webView, WebKitDOMHTMLElement* element)
1404576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang{
1414576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    GOwnPtr<gchar> elementClassName(webkit_dom_html_element_get_class_name(element));
1424576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    return g_str_equal(elementClassName.get(), "needsDeletionUI");
1434576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang}
1444576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang
1454576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wanggboolean shouldChangeSelectedRange(WebKitWebView* webView, WebKitDOMRange* fromRange, WebKitDOMRange* toRange, WebKitSelectionAffinity affinity, gboolean stillSelecting)
1464576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang{
1474576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    if (!done && gLayoutTestController->dumpEditingCallbacks()) {
1484576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang        printf("EDITING DELEGATE: shouldChangeSelectedDOMRange:%s toDOMRange:%s affinity:%s stillSelecting:%s\n",
1494576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang               dumpRange(fromRange).data(), dumpRange(toRange).data(), selectionAffinityString(affinity),
1504576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang               stillSelecting ? "TRUE" : "FALSE");
1514576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    }
1524576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    return TRUE;
1534576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang}
1544576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang
1554576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wanggboolean shouldApplyStyle(WebKitWebView* webView, WebKitDOMCSSStyleDeclaration* style, WebKitDOMRange* range)
1564576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang{
1574576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    if (!done && gLayoutTestController->dumpEditingCallbacks()) {
1584576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang        GOwnPtr<gchar> styleText(webkit_dom_css_style_declaration_get_css_text(style));
1594576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang        printf("EDITING DELEGATE: shouldApplyStyle:%s toElementsInDOMRange:%s\n",
1604576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang               styleText.get(), dumpRange(range).data());
1614576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    }
1624576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    return TRUE;
1634576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang}
1644576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang
1654576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wangvoid editingBegan(WebKitWebView*)
1664576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang{
1674576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    if (!done && gLayoutTestController->dumpEditingCallbacks())
1684576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang        printf("EDITING DELEGATE: webViewDidBeginEditing:WebViewDidBeginEditingNotification\n");
1694576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang}
1704576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang
1714576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wangvoid userChangedContents(WebKitWebView*)
1724576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang{
1734576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    if (!done && gLayoutTestController->dumpEditingCallbacks())
1744576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang        printf("EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification\n");
1754576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang}
1764576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang
1774576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wangvoid editingEnded(WebKitWebView*)
1784576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang{
1794576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    if (!done && gLayoutTestController->dumpEditingCallbacks())
1804576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang        printf("EDITING DELEGATE: webViewDidEndEditing:WebViewDidEndEditingNotification\n");
1814576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang}
1824576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang
1834576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wangvoid selectionChanged(WebKitWebView*)
1844576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang{
1854576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    if (!done && gLayoutTestController->dumpEditingCallbacks())
1864576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang        printf("EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification\n");
1874576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang}
1884576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang
1894576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wangvoid connectEditingCallbacks(WebKitWebView* webView)
1904576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang{
1914576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    g_object_connect(G_OBJECT(webView),
1924576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang                     "signal::should-begin-editing", shouldBeginEditing, 0,
1934576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang                     "signal::should-end-editing", shouldEndEditing, 0,
1944576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang                     "signal::should-insert-node", shouldInsertNode, 0,
1954576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang                     "signal::should-insert-text", shouldInsertText, 0,
1964576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang                     "signal::should-delete-range", shouldDeleteRange, 0,
1974576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang                     "signal::should-show-delete-interface-for-element", shouldShowDeleteInterfaceForElement, 0,
1984576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang                     "signal::should-change-selected-range", shouldChangeSelectedRange, 0,
1994576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang                     "signal::should-apply-style", shouldApplyStyle, 0,
2004576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang                     "signal::editing-began", editingBegan, 0,
2014576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang                     "signal::user-changed-contents", userChangedContents, 0,
2024576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang                     "signal::editing-ended", editingEnded, 0,
2034576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang                     "signal::selection-changed", selectionChanged, 0,
2044576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang                     NULL);
2054576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang}
2064576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang
207