Clean up ChunkedUpdateDrawingAreaProxy
[WebKit-https.git] / Tools / DumpRenderTree / mac / EditingDelegate.mm
1 /*
2  * Copyright (C) 2005, 2006 Apple Computer, Inc.  All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  *
8  * 1.  Redistributions of source code must retain the above copyright
9  *     notice, this list of conditions and the following disclaimer. 
10  * 2.  Redistributions in binary form must reproduce the above copyright
11  *     notice, this list of conditions and the following disclaimer in the
12  *     documentation and/or other materials provided with the distribution. 
13  * 3.  Neither the name of Apple Computer, Inc. ("Apple") nor the names of
14  *     its contributors may be used to endorse or promote products derived
15  *     from this software without specific prior written permission. 
16  *
17  * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
18  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
19  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
20  * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
21  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
22  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
23  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
24  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27  */
28  
29 #import "config.h"
30 #import "EditingDelegate.h"
31
32 #import "DumpRenderTree.h"
33 #import "LayoutTestController.h"
34 #import <WebKit/WebKit.h>
35
36 @interface DOMNode (dumpPath)
37 - (NSString *)dumpPath;
38 @end
39
40 @implementation DOMNode (dumpPath)
41 - (NSString *)dumpPath
42 {
43     DOMNode *parent = [self parentNode];
44     NSString *str = [NSString stringWithFormat:@"%@", [self nodeName]];
45     if (parent != nil) {
46         str = [str stringByAppendingString:@" > "];
47         str = [str stringByAppendingString:[parent dumpPath]];
48     }
49     return str;
50 }
51 @end
52
53 @interface DOMRange (dump)
54 - (NSString *)dump;
55 @end
56
57 @implementation DOMRange (dump)
58 - (NSString *)dump
59 {
60     return [NSString stringWithFormat:@"range from %ld of %@ to %ld of %@", [self startOffset], [[self startContainer] dumpPath], [self endOffset], [[self endContainer] dumpPath]];
61 }
62 @end
63
64 @implementation EditingDelegate
65
66 - (id)init
67 {
68     self = [super init];
69     if (!self)
70         return nil;
71     acceptsEditing = YES;
72     return self;
73 }
74
75 - (BOOL)webView:(WebView *)webView shouldBeginEditingInDOMRange:(DOMRange *)range
76 {
77     if (!done && gLayoutTestController->dumpEditingCallbacks())
78         printf("EDITING DELEGATE: shouldBeginEditingInDOMRange:%s\n", [[range dump] UTF8String]);
79     return acceptsEditing;
80 }
81
82 - (BOOL)webView:(WebView *)webView shouldEndEditingInDOMRange:(DOMRange *)range
83 {
84     if (!done && gLayoutTestController->dumpEditingCallbacks())
85         printf("EDITING DELEGATE: shouldEndEditingInDOMRange:%s\n", [[range dump] UTF8String]);
86     return acceptsEditing;
87 }
88
89 - (BOOL)webView:(WebView *)webView shouldInsertNode:(DOMNode *)node replacingDOMRange:(DOMRange *)range givenAction:(WebViewInsertAction)action
90 {
91     static const char *insertactionstring[] = {
92         "WebViewInsertActionTyped",
93         "WebViewInsertActionPasted",
94         "WebViewInsertActionDropped",
95     };
96
97     if (!done && gLayoutTestController->dumpEditingCallbacks())
98         printf("EDITING DELEGATE: shouldInsertNode:%s replacingDOMRange:%s givenAction:%s\n", [[node dumpPath] UTF8String], [[range dump] UTF8String], insertactionstring[action]);
99     return acceptsEditing;
100 }
101
102 - (BOOL)webView:(WebView *)webView shouldInsertText:(NSString *)text replacingDOMRange:(DOMRange *)range givenAction:(WebViewInsertAction)action
103 {
104     static const char *insertactionstring[] = {
105         "WebViewInsertActionTyped",
106         "WebViewInsertActionPasted",
107         "WebViewInsertActionDropped",
108     };
109
110     if (!done && gLayoutTestController->dumpEditingCallbacks())
111         printf("EDITING DELEGATE: shouldInsertText:%s replacingDOMRange:%s givenAction:%s\n", [[text description] UTF8String], [[range dump] UTF8String], insertactionstring[action]);
112     return acceptsEditing;
113 }
114
115 - (BOOL)webView:(WebView *)webView shouldDeleteDOMRange:(DOMRange *)range
116 {
117     if (!done && gLayoutTestController->dumpEditingCallbacks())
118         printf("EDITING DELEGATE: shouldDeleteDOMRange:%s\n", [[range dump] UTF8String]);
119     return acceptsEditing;
120 }
121
122 - (BOOL)webView:(WebView *)webView shouldShowDeleteInterfaceForElement:(DOMHTMLElement *)element
123 {
124     return [[element className] isEqualToString:@"needsDeletionUI"];
125 }
126
127 - (BOOL)webView:(WebView *)webView shouldChangeSelectedDOMRange:(DOMRange *)currentRange toDOMRange:(DOMRange *)proposedRange affinity:(NSSelectionAffinity)selectionAffinity stillSelecting:(BOOL)flag
128 {
129     static const char *affinitystring[] = {
130         "NSSelectionAffinityUpstream",
131         "NSSelectionAffinityDownstream"
132     };
133     static const char *boolstring[] = {
134         "FALSE",
135         "TRUE"
136     };
137
138     if (!done && gLayoutTestController->dumpEditingCallbacks())
139         printf("EDITING DELEGATE: shouldChangeSelectedDOMRange:%s toDOMRange:%s affinity:%s stillSelecting:%s\n", [[currentRange dump] UTF8String], [[proposedRange dump] UTF8String], affinitystring[selectionAffinity], boolstring[flag]);
140     return acceptsEditing;
141 }
142
143 - (BOOL)webView:(WebView *)webView shouldApplyStyle:(DOMCSSStyleDeclaration *)style toElementsInDOMRange:(DOMRange *)range
144 {
145     if (!done && gLayoutTestController->dumpEditingCallbacks())
146         printf("EDITING DELEGATE: shouldApplyStyle:%s toElementsInDOMRange:%s\n", [[style description] UTF8String], [[range dump] UTF8String]);
147     return acceptsEditing;
148 }
149
150 - (BOOL)webView:(WebView *)webView shouldChangeTypingStyle:(DOMCSSStyleDeclaration *)currentStyle toStyle:(DOMCSSStyleDeclaration *)proposedStyle
151 {
152     if (!done && gLayoutTestController->dumpEditingCallbacks())
153         printf("EDITING DELEGATE: shouldChangeTypingStyle:%s toStyle:%s\n", [[currentStyle description] UTF8String], [[proposedStyle description] UTF8String]);
154     return acceptsEditing;
155 }
156
157 - (void)webViewDidBeginEditing:(NSNotification *)notification
158 {
159     if (!done && gLayoutTestController->dumpEditingCallbacks())
160         printf("EDITING DELEGATE: webViewDidBeginEditing:%s\n", [[notification name] UTF8String]);
161 }
162
163 - (void)webViewDidChange:(NSNotification *)notification
164 {
165     if (!done && gLayoutTestController->dumpEditingCallbacks())
166         printf("EDITING DELEGATE: webViewDidChange:%s\n", [[notification name] UTF8String]);
167 }
168
169 - (void)webViewDidEndEditing:(NSNotification *)notification
170 {
171     if (!done && gLayoutTestController->dumpEditingCallbacks())
172         printf("EDITING DELEGATE: webViewDidEndEditing:%s\n", [[notification name] UTF8String]);
173 }
174
175 - (void)webViewDidChangeTypingStyle:(NSNotification *)notification
176 {
177     if (!done && gLayoutTestController->dumpEditingCallbacks())
178         printf("EDITING DELEGATE: webViewDidChangeTypingStyle:%s\n", [[notification name] UTF8String]);
179 }
180
181 - (void)webViewDidChangeSelection:(NSNotification *)notification
182 {
183     if (!done && gLayoutTestController->dumpEditingCallbacks())
184         printf("EDITING DELEGATE: webViewDidChangeSelection:%s\n", [[notification name] UTF8String]);
185 }
186
187 - (void)setAcceptsEditing:(BOOL)newAcceptsEditing
188 {
189     acceptsEditing = newAcceptsEditing;
190 }
191
192 @end