Reviewed by Geoff.
[WebKit-https.git] / WebKit / WebView / WebScriptDebugDelegate.m
1 /*
2  * Copyright (C) 2005 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 "WebScriptDebugDelegatePrivate.h"
30 #import "WebScriptDebugServerPrivate.h"
31
32 #import <WebKit/WebFrameBridge.h>
33 #import <WebKit/WebViewInternal.h>
34 #import <WebCore/WebCoreScriptDebugger.h>
35
36
37
38 @interface WebScriptCallFrame (WebScriptDebugDelegateInternal)
39
40 - (WebScriptCallFrame *)_initWithFrame:(WebCoreScriptCallFrame *)frame;
41
42 @end
43
44
45
46 @implementation WebScriptDebugger
47
48 - (WebScriptDebugger *)initWithWebFrame:(WebFrame *)webFrame
49 {
50     if ((self = [super init])) {
51         _webView  = [webFrame webView];
52         _webFrame = webFrame;
53         _debugger = [[WebCoreScriptDebugger alloc] initWithDelegate:self];
54     }
55     return self;
56 }
57
58 - (void)dealloc
59 {
60     [_debugger release];
61     [super dealloc];
62 }
63
64 - (WebScriptObject *)globalObject
65 {
66     return [[_webFrame _bridge] windowScriptObject];
67 }
68
69 - (id)newWrapperForFrame:(WebCoreScriptCallFrame *)frame
70 {
71     return [[WebScriptCallFrame alloc] _initWithFrame:frame];
72 }
73
74 - (void)parsedSource:(NSString *)source fromURL:(NSString *)url sourceId:(int)sid
75 {
76     [[_webView _scriptDebugDelegateForwarder] webView:_webView didParseSource:source fromURL:url sourceId:sid forWebFrame:_webFrame];
77     if ([WebScriptDebugServer listenerCount])
78         [[WebScriptDebugServer sharedScriptDebugServer] webView:_webView didParseSource:source fromURL:url sourceId:sid forWebFrame:_webFrame];
79 }
80
81 - (void)enteredFrame:(WebCoreScriptCallFrame *)frame sourceId:(int)sid line:(int)lineno
82 {
83     [[_webView _scriptDebugDelegateForwarder] webView:_webView didEnterCallFrame:[frame wrapper] sourceId:sid line:lineno forWebFrame:_webFrame];
84     if ([WebScriptDebugServer listenerCount])
85         [[WebScriptDebugServer sharedScriptDebugServer] webView:_webView didEnterCallFrame:[frame wrapper] sourceId:sid line:lineno forWebFrame:_webFrame];
86 }
87
88 - (void)hitStatement:(WebCoreScriptCallFrame *)frame sourceId:(int)sid line:(int)lineno
89 {
90     [[_webView _scriptDebugDelegateForwarder] webView:_webView willExecuteStatement:[frame wrapper] sourceId:sid line:lineno forWebFrame:_webFrame];
91     if ([WebScriptDebugServer listenerCount])
92         [[WebScriptDebugServer sharedScriptDebugServer] webView:_webView willExecuteStatement:[frame wrapper] sourceId:sid line:lineno forWebFrame:_webFrame];
93 }
94
95 - (void)leavingFrame:(WebCoreScriptCallFrame *)frame sourceId:(int)sid line:(int)lineno
96 {
97     [[_webView _scriptDebugDelegateForwarder] webView:_webView willLeaveCallFrame:[frame wrapper] sourceId:sid line:lineno forWebFrame:_webFrame];
98     if ([WebScriptDebugServer listenerCount])
99         [[WebScriptDebugServer sharedScriptDebugServer] webView:_webView willLeaveCallFrame:[frame wrapper] sourceId:sid line:lineno forWebFrame:_webFrame];
100 }
101
102 @end
103
104
105
106 @implementation WebScriptCallFrame (WebScriptDebugDelegateInternal)
107
108 - (WebScriptCallFrame *)_initWithFrame:(WebCoreScriptCallFrame *)frame
109 {
110     if ((self = [super init])) {
111         _private = frame;
112     }
113     return self;
114 }
115
116 @end
117
118
119
120 @implementation WebScriptCallFrame
121
122 - (void) dealloc
123 {
124     [_userInfo release];
125     [super dealloc];
126 }
127
128 - (void)setUserInfo:(id)userInfo
129 {
130     if (userInfo != _userInfo) {
131         [_userInfo release];
132         _userInfo = [userInfo retain];
133     }
134 }
135
136 - (id)userInfo
137 {
138     return _userInfo;
139 }
140
141 - (WebScriptCallFrame *)caller
142 {
143     return [[_private caller] wrapper];
144 }
145
146 - (NSArray *)scopeChain
147 {
148     return [_private scopeChain];
149 }
150
151 - (NSString *)functionName
152 {
153     return [_private functionName];
154 }
155
156 - (id)exception
157 {
158     return [_private exception];
159 }
160
161 - (id)evaluateWebScript:(NSString *)script
162 {
163     return [_private evaluateWebScript:script];
164 }
165
166 @end