Reviewed by Darin.
[WebKit-https.git] / WebKit / DefaultDelegates / WebScriptDebugServer.m
index 3ab476b298a2b23abe05ce871daa2e68389f1f8f..fde08ebc98e6fbd00ee5d31467ba82177c4d84d3 100644 (file)
@@ -215,9 +215,11 @@ static unsigned listenerCount = 0;
 
 - (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;
 
@@ -225,6 +227,8 @@ static unsigned listenerCount = 0;
         if ([[listener connectionForProxy] isValid])
             [listener webView:webView didLoadMainResourceForDataSource:dataSource];
     }
+
+    inCallback = NO;
 }
 
 - (void)webView:(WebView *)webView       didParseSource:(NSString *)source
@@ -233,9 +237,11 @@ static unsigned listenerCount = 0;
                                                sourceId:(int)sid
                                             forWebFrame:(WebFrame *)webFrame
 {
-    if (![listeners count])
+    if (![listeners count] || inCallback)
         return;
 
+    inCallback = YES;
+
     NSEnumerator *enumerator = [listeners objectEnumerator];
     NSDistantObject <WebScriptDebugListener> *listener = nil;
 
@@ -243,6 +249,8 @@ static unsigned listenerCount = 0;
         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
@@ -251,9 +259,11 @@ static unsigned listenerCount = 0;
                                               withError:(NSError *)error
                                             forWebFrame:(WebFrame *)webFrame
 {
-    if (![listeners count])
+    if (![listeners count] || inCallback)
         return;
 
+    inCallback = YES;
+
     NSEnumerator *enumerator = [listeners objectEnumerator];
     NSDistantObject <WebScriptDebugListener> *listener = nil;
 
@@ -261,6 +271,8 @@ static unsigned listenerCount = 0;
         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
@@ -268,9 +280,11 @@ static unsigned listenerCount = 0;
                                                    line:(int)lineno
                                             forWebFrame:(WebFrame *)webFrame
 {
-    if (![listeners count])
+    if (![listeners count] || inCallback)
         return;
 
+    inCallback = YES;
+
     NSEnumerator *enumerator = [listeners objectEnumerator];
     NSDistantObject <WebScriptDebugListener> *listener = nil;
 
@@ -279,10 +293,9 @@ static unsigned listenerCount = 0;
             [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
@@ -290,9 +303,11 @@ static unsigned listenerCount = 0;
                                                    line:(int)lineno
                                             forWebFrame:(WebFrame *)webFrame
 {
-    if (![listeners count])
+    if (![listeners count] || inCallback)
         return;
 
+    inCallback = YES;
+
     NSEnumerator *enumerator = [listeners objectEnumerator];
     NSDistantObject <WebScriptDebugListener> *listener = nil;
 
@@ -301,10 +316,9 @@ static unsigned listenerCount = 0;
             [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
@@ -312,9 +326,11 @@ static unsigned listenerCount = 0;
                                                    line:(int)lineno
                                             forWebFrame:(WebFrame *)webFrame
 {
-    if (![listeners count])
+    if (![listeners count] || inCallback)
         return;
 
+    inCallback = YES;
+
     NSEnumerator *enumerator = [listeners objectEnumerator];
     NSDistantObject <WebScriptDebugListener> *listener = nil;
 
@@ -323,10 +339,9 @@ static unsigned listenerCount = 0;
             [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
@@ -334,9 +349,11 @@ static unsigned listenerCount = 0;
                                                    line:(int)lineno
                                             forWebFrame:(WebFrame *)webFrame
 {
-    if (![listeners count])
+    if (![listeners count] || inCallback)
         return;
 
+    inCallback = YES;
+
     NSEnumerator *enumerator = [listeners objectEnumerator];
     NSDistantObject <WebScriptDebugListener> *listener = nil;
 
@@ -345,10 +362,9 @@ static unsigned listenerCount = 0;
             [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