Changeset 3658

Show
Ignore:
Timestamp:
06/06/07 19:39:46 (1 year ago)
Author:
timothy
Message:

Fixes a highly visible crash with JavaScript? plugins when using /reload plugins.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/Plug-Ins/JavaScript Support/JVJavaScriptChatPlugin.h

    r3482 r3658  
    2323 
    2424- (void) setupScriptGlobalsForWebView:(WebView *) webView; 
     25- (void) removeScriptGlobalsForWebView:(WebView *) webView; 
    2526 
    2627- (void) reportErrorForCallFrame:(WebScriptCallFrame *) frame lineNumber:(unsigned int) line; 
  • trunk/Plug-Ins/JavaScript Support/JVJavaScriptChatPlugin.m

    r3634 r3658  
    102102- (void) release { 
    103103        if( ( [self retainCount] - 1 ) == 1 ) 
    104                 [[_webview windowScriptObject] removeWebScriptKey:@"Plugin"]; 
     104                [self performSelector:@selector(removeScriptGlobalsForWebView:) withObject:_webview afterDelay:0]; 
    105105        [super release]; 
    106106} 
     
    236236} 
    237237 
     238- (void) removeScriptGlobalsForWebView:(WebView *) webView { 
     239        if (!webView) 
     240                return; 
     241 
     242        [[webView windowScriptObject] removeWebScriptKey:@"Plugin"]; 
     243        [[webView windowScriptObject] removeWebScriptKey:@"ChatController"]; 
     244        [[webView windowScriptObject] removeWebScriptKey:@"ConnectionsController"]; 
     245        [[webView windowScriptObject] removeWebScriptKey:@"FileTransferController"]; 
     246        [[webView windowScriptObject] removeWebScriptKey:@"BuddyListController"]; 
     247        [[webView windowScriptObject] removeWebScriptKey:@"SpeechController"]; 
     248        [[webView windowScriptObject] removeWebScriptKey:@"NotificationController"]; 
     249        [[webView windowScriptObject] removeWebScriptKey:@"ChatPluginManager"]; 
     250} 
     251 
    238252#pragma mark - 
    239253 
     
    257271        _loading = YES; 
    258272 
    259         id old = _webview; 
    260         _webview = [[WebView allocWithZone:nil] initWithFrame:NSZeroRect]; 
    261         [old release]; 
    262  
    263         [_webview setPolicyDelegate:self]; 
    264         [_webview setFrameLoadDelegate:self]; 
    265         [_webview setUIDelegate:self]; 
    266         if( [_webview respondsToSelector:@selector( setScriptDebugDelegate: )] ) 
    267                 [_webview setScriptDebugDelegate:self]; 
     273        if (!_webview) { 
     274                _webview = [[WebView allocWithZone:nil] initWithFrame:NSZeroRect]; 
     275 
     276                [_webview setPolicyDelegate:self]; 
     277                [_webview setFrameLoadDelegate:self]; 
     278                [_webview setUIDelegate:self]; 
     279                if( [_webview respondsToSelector:@selector( setScriptDebugDelegate: )] ) 
     280                        [_webview setScriptDebugDelegate:self]; 
     281        } else { 
     282                [self removeScriptGlobalsForWebView:_webview]; 
     283        } 
    268284 
    269285        NSString *path = [[NSBundle bundleForClass:[self class]] pathForResource:@"plugin" ofType:@"html"];