- (void)webView:(WebView *)webView didLoadMainResourceForDataSource:(WebDataSource *)dataSource
{
- if (![listeners count])
+ if (![listeners count] || inCallback)
return;
+ inCallback = YES;
+
NSEnumerator *enumerator = [listeners objectEnumerator];
NSDistantObject <WebScriptDebugListener> *listener = nil;
if ([[listener connectionForProxy] isValid])
[listener webView:webView didLoadMainResourceForDataSource:dataSource];
}
+
+ inCallback = NO;
}
- (void)webView:(WebView *)webView didParseSource:(NSString *)source
sourceId:(int)sid
forWebFrame:(WebFrame *)webFrame
{
- if (![listeners count])
+ if (![listeners count] || inCallback)
return;
+ inCallback = YES;
+
NSEnumerator *enumerator = [listeners objectEnumerator];
NSDistantObject <WebScriptDebugListener> *listener = nil;
if ([[listener connectionForProxy] isValid])
[listener webView:webView didParseSource:source baseLineNumber:lineNumber fromURL:url sourceId:sid forWebFrame:webFrame];
}
+
+ inCallback = NO;
}
- (void)webView:(WebView *)webView failedToParseSource:(NSString *)source
withError:(NSError *)error
forWebFrame:(WebFrame *)webFrame
{
- if (![listeners count])
+ if (![listeners count] || inCallback)
return;
+ inCallback = YES;
+
NSEnumerator *enumerator = [listeners objectEnumerator];
NSDistantObject <WebScriptDebugListener> *listener = nil;
if ([[listener connectionForProxy] isValid])
[listener webView:webView failedToParseSource:source baseLineNumber:lineNumber fromURL:url withError:error forWebFrame:webFrame];
}
+
+ inCallback = NO;
}
- (void)webView:(WebView *)webView didEnterCallFrame:(WebScriptCallFrame *)frame
line:(int)lineno
forWebFrame:(WebFrame *)webFrame
{
- if (![listeners count])
+ if (![listeners count] || inCallback)
return;
+ inCallback = YES;
+
NSEnumerator *enumerator = [listeners objectEnumerator];
NSDistantObject <WebScriptDebugListener> *listener = nil;
[listener webView:webView didEnterCallFrame:frame sourceId:sid line:lineno forWebFrame:webFrame];
}
- // check for messages from the listeners, so they can pause immediately
- [[NSRunLoop currentRunLoop] runMode:NSConnectionReplyMode beforeDate:[NSDate distantPast]];
-
[self suspendProcessIfPaused];
+
+ inCallback = NO;
}
- (void)webView:(WebView *)webView willExecuteStatement:(WebScriptCallFrame *)frame
line:(int)lineno
forWebFrame:(WebFrame *)webFrame
{
- if (![listeners count])
+ if (![listeners count] || inCallback)
return;
+ inCallback = YES;
+
NSEnumerator *enumerator = [listeners objectEnumerator];
NSDistantObject <WebScriptDebugListener> *listener = nil;
[listener webView:webView willExecuteStatement:frame sourceId:sid line:lineno forWebFrame:webFrame];
}
- // check for messages from the listeners, so they can pause immediately
- [[NSRunLoop currentRunLoop] runMode:NSConnectionReplyMode beforeDate:[NSDate distantPast]];
-
[self suspendProcessIfPaused];
+
+ inCallback = NO;
}
- (void)webView:(WebView *)webView willLeaveCallFrame:(WebScriptCallFrame *)frame
line:(int)lineno
forWebFrame:(WebFrame *)webFrame
{
- if (![listeners count])
+ if (![listeners count] || inCallback)
return;
+ inCallback = YES;
+
NSEnumerator *enumerator = [listeners objectEnumerator];
NSDistantObject <WebScriptDebugListener> *listener = nil;
[listener webView:webView willLeaveCallFrame:frame sourceId:sid line:lineno forWebFrame:webFrame];
}
- // check for messages from the listeners, so they can pause immediately
- [[NSRunLoop currentRunLoop] runMode:NSConnectionReplyMode beforeDate:[NSDate distantPast]];
-
[self suspendProcessIfPaused];
+
+ inCallback = NO;
}
- (void)webView:(WebView *)webView exceptionWasRaised:(WebScriptCallFrame *)frame
line:(int)lineno
forWebFrame:(WebFrame *)webFrame
{
- if (![listeners count])
+ if (![listeners count] || inCallback)
return;
+ inCallback = YES;
+
NSEnumerator *enumerator = [listeners objectEnumerator];
NSDistantObject <WebScriptDebugListener> *listener = nil;
[listener webView:webView exceptionWasRaised:frame sourceId:sid line:lineno forWebFrame:webFrame];
}
- // check for messages from the listeners, so they can pause immediately
- [[NSRunLoop currentRunLoop] runMode:NSConnectionReplyMode beforeDate:[NSDate distantPast]];
-
[self suspendProcessIfPaused];
+
+ inCallback = NO;
}
@end