Reviewed by Maciej.
authorthatcher <thatcher@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 31 Jul 2006 06:15:05 +0000 (06:15 +0000)
committerthatcher <thatcher@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 31 Jul 2006 06:15:05 +0000 (06:15 +0000)
        Bug 9686: [Drosera] Need the ability to break into Drosera on Javascript exceptions
        http://bugzilla.opendarwin.org/show_bug.cgi?id=9686

        * Drosera/DebuggerDocument.m:
        (-[WebScriptObject switchToServerNamed:]): Remove as listener before resuming to
        ensure that the server does not try and notify us of events related to the resumption.
        (-[WebScriptObject webView:exceptionWasRaised:sourceId:line:forWebFrame:]): Delegate
        call through to JavaScript.
        * Drosera/debugger.js: Pause debugger when exception is raised.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@15701 268f45cc-cd09-0410-ab3c-d52691b4dbfc

WebKitTools/ChangeLog
WebKitTools/Drosera/DebuggerDocument.m
WebKitTools/Drosera/debugger.js

index c7094ab..b2f8355 100644 (file)
@@ -1,3 +1,17 @@
+2006-07-30  Mark Rowe  <opendarwin.org@bdash.net.nz>
+
+        Reviewed by Maciej.
+
+        Bug 9686: [Drosera] Need the ability to break into Drosera on Javascript exceptions
+        http://bugzilla.opendarwin.org/show_bug.cgi?id=9686
+
+        * Drosera/DebuggerDocument.m:
+        (-[WebScriptObject switchToServerNamed:]): Remove as listener before resuming to
+        ensure that the server does not try and notify us of events related to the resumption.
+        (-[WebScriptObject webView:exceptionWasRaised:sourceId:line:forWebFrame:]): Delegate
+        call through to JavaScript.
+        * Drosera/debugger.js: Pause debugger when exception is raised.
+
 2006-07-29  Mike Emmel  <mike.emmel@gmail.com>
 
         Reviewed by Darin.
index 8d5f063..003f3a6 100644 (file)
@@ -276,8 +276,8 @@ static NSString *DebuggerStepOutToolbarItem = @"DebuggerStepOutToolbarItem";
     if (server) {
         [[NSNotificationCenter defaultCenter] removeObserver:self name:NSConnectionDidDieNotification object:[(NSDistantObject *)server connectionForProxy]];
         if ([[(NSDistantObject *)server connectionForProxy] isValid]) {
-            [self resume];
             [server removeListener:self];
+            [self resume];
         }
     }
 
@@ -641,4 +641,14 @@ static NSString *DebuggerStepOutToolbarItem = @"DebuggerStepOutToolbarItem";
     currentFrame = [[frame caller] retain];
     [old release];
 }
+
+- (void)webView:(WebView *)view exceptionWasRaised:(WebScriptCallFrame *)frame sourceId:(int)sid line:(int)lineno forWebFrame:(WebFrame *)webFrame
+{
+    if (!webViewLoaded)
+        return;
+
+    NSArray *args = [[NSArray alloc] initWithObjects:[NSNumber numberWithInt:sid], [NSNumber numberWithInt:lineno], nil];
+    [[webView windowScriptObject] callWebScriptMethod:@"exceptionWasRaised" withArguments:args];
+    [args release];
+}
 @end
index 18f0d91..87440fc 100644 (file)
@@ -850,6 +850,12 @@ function willLeaveCallFrame(sourceId, line)
         steppingStack--;
 }
 
+function exceptionWasRaised(sourceId, line)
+{
+    pause();
+    willExecuteStatement(sourceId, line);
+}
+
 function showConsoleWindow()
 {
     if (!consoleWindow)