[webkit-changes] cvs commit: WebKit/WebView.subproj WebControllerSets.h WebControllerSets.m WebFrame.m WebFramePrivate.h WebView.m WebViewPrivate.h

Maciej mjs at opensource.apple.com
Tue Dec 20 12:41:58 PST 2005


mjs         05/12/20 12:41:58

  Modified:    .        ChangeLog
               WebCoreSupport.subproj WebBridge.m
               WebView.subproj WebControllerSets.h WebControllerSets.m
                        WebFrame.m WebFramePrivate.h WebView.m
                        WebViewPrivate.h
  Log:
          Reviewed by Darin.
  
  	- push more of frame lookup and management from WebView to
  	WebFrame, this is in preparation for shifting this to WebCore
  
          * WebCoreSupport.subproj/WebBridge.m:
          (-[WebBridge closeWindowSoon]): Adjust for change to WebFrameNamespaces
          (-[WebBridge runModal]): ditto
          * WebView.subproj/WebControllerSets.h:
          * WebView.subproj/WebControllerSets.m:
          (+[WebFrameNamespaces addFrame:toNamespace:]): This now operates in terms
  	of WebFrames (expected to be the main frame) not WebViews.
          (+[WebFrameNamespaces framesInNamespace:]): Ditto.
          * WebView.subproj/WebFrame.m:
          (-[WebFrame _setFrameNamespace:]): Set self, not WebView.
          (-[WebFrame _shouldAllowAccessFrom:]): Moved this code above use
  	to avoid prototyping the method.
          (-[WebFrame _descendantFrameNamed:sourceFrame:]): Ditto.
          (-[WebFrame _frameInAnyWindowNamed:sourceFrame:]): Copied logic
  	over from WebView.
          (-[WebFrame findFrameNamed:]): Do it all here, don't call WebView.
          * WebView.subproj/WebFramePrivate.h:
          * WebView.subproj/WebView.m:
          * WebView.subproj/WebViewPrivate.h:
  
  Revision  Changes    Path
  1.3418    +27 -0     WebKit/ChangeLog
  
  Index: ChangeLog
  ===================================================================
  RCS file: /cvs/root/WebKit/ChangeLog,v
  retrieving revision 1.3417
  retrieving revision 1.3418
  diff -u -r1.3417 -r1.3418
  --- ChangeLog	20 Dec 2005 18:47:11 -0000	1.3417
  +++ ChangeLog	20 Dec 2005 20:41:41 -0000	1.3418
  @@ -1,3 +1,30 @@
  +2005-12-20  Maciej Stachowiak  <mjs at apple.com>
  +
  +        Reviewed by Darin.
  +
  +	- push more of frame lookup and management from WebView to
  +	WebFrame, this is in preparation for shifting this to WebCore
  +
  +        * WebCoreSupport.subproj/WebBridge.m:
  +        (-[WebBridge closeWindowSoon]): Adjust for change to WebFrameNamespaces
  +        (-[WebBridge runModal]): ditto
  +        * WebView.subproj/WebControllerSets.h:
  +        * WebView.subproj/WebControllerSets.m:
  +        (+[WebFrameNamespaces addFrame:toNamespace:]): This now operates in terms
  +	of WebFrames (expected to be the main frame) not WebViews.
  +        (+[WebFrameNamespaces framesInNamespace:]): Ditto.
  +        * WebView.subproj/WebFrame.m:
  +        (-[WebFrame _setFrameNamespace:]): Set self, not WebView.
  +        (-[WebFrame _shouldAllowAccessFrom:]): Moved this code above use
  +	to avoid prototyping the method.
  +        (-[WebFrame _descendantFrameNamed:sourceFrame:]): Ditto.
  +        (-[WebFrame _frameInAnyWindowNamed:sourceFrame:]): Copied logic
  +	over from WebView.
  +        (-[WebFrame findFrameNamed:]): Do it all here, don't call WebView.
  +        * WebView.subproj/WebFramePrivate.h:
  +        * WebView.subproj/WebView.m:
  +        * WebView.subproj/WebViewPrivate.h:
  +
   2005-12-20  Geoffrey Garen  <ggaren at apple.com>
   
           Reviewed by adele.
  
  
  
  1.380     +5 -7      WebKit/WebCoreSupport.subproj/WebBridge.m
  
  Index: WebBridge.m
  ===================================================================
  RCS file: /cvs/root/WebKit/WebCoreSupport.subproj/WebBridge.m,v
  retrieving revision 1.379
  retrieving revision 1.380
  diff -u -r1.379 -r1.380
  --- WebBridge.m	20 Dec 2005 18:47:15 -0000	1.379
  +++ WebBridge.m	20 Dec 2005 20:41:52 -0000	1.380
  @@ -368,10 +368,8 @@
       // This approach is an inherent limitation of not making a close execute immediately
       // after a call to window.close.
       
  -    [WebFrameNamespaces removeWebView:parentWebView fromFrameNamespace:[parentWebView groupName]];
  -
  +    [parentWebView setGroupName:nil];
       [parentWebView stopLoading:self];
  -    
       [parentWebView performSelector:@selector(_closeWindow) withObject:nil afterDelay:0.0];
   }
   
  @@ -1722,11 +1720,11 @@
       // Defer callbacks in all the other views in this group, so we don't try to run JavaScript
       // in a way that could interact with this view.
       NSMutableArray *deferredWebViews = [NSMutableArray array];
  -    NSString *setName = [webView groupName];
  -    if (setName) {
  -        NSEnumerator *enumerator = [WebFrameNamespaces webViewsInFrameNamespace:setName];
  +    NSString *namespace = [webView groupName];
  +    if (namespace) {
  +        NSEnumerator *enumerator = [WebFrameNamespaces framesInNamespace:namespace];
           WebView *otherWebView;
  -        while ((otherWebView = [enumerator nextObject]) != nil) {
  +        while ((otherWebView = [[enumerator nextObject] webView]) != nil) {
               if (otherWebView != webView && ![otherWebView defersCallbacks]) {
                   [otherWebView setDefersCallbacks:YES];
                   [deferredWebViews addObject:otherWebView];
  
  
  
  1.8       +4 -4      WebKit/WebView.subproj/WebControllerSets.h
  
  Index: WebControllerSets.h
  ===================================================================
  RCS file: /cvs/root/WebKit/WebView.subproj/WebControllerSets.h,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- WebControllerSets.h	8 Dec 2005 18:33:56 -0000	1.7
  +++ WebControllerSets.h	20 Dec 2005 20:41:54 -0000	1.8
  @@ -28,10 +28,10 @@
   
   #import <Foundation/Foundation.h>
   
  - at class WebView;
  + at class WebFrame;
   
   @interface WebFrameNamespaces : NSObject
  -+ (void)addWebView:(WebView *)webView toFrameNamespace:(NSString *)name;
  -+ (void)removeWebView:(WebView *)webView fromFrameNamespace:(NSString *)name;
  -+ (NSEnumerator *)webViewsInFrameNamespace:(NSString *)name;
  ++ (void)addFrame:(WebFrame *)frame toNamespace:(NSString *)name;
  ++ (void)removeFrame:(WebFrame *)frame fromNamespace:(NSString *)name;
  ++ (NSEnumerator *)framesInNamespace:(NSString *)name;
   @end
  
  
  
  1.8       +5 -5      WebKit/WebView.subproj/WebControllerSets.m
  
  Index: WebControllerSets.m
  ===================================================================
  RCS file: /cvs/root/WebKit/WebView.subproj/WebControllerSets.m,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- WebControllerSets.m	20 Dec 2005 08:32:55 -0000	1.7
  +++ WebControllerSets.m	20 Dec 2005 20:41:54 -0000	1.8
  @@ -41,7 +41,7 @@
   
   NSMutableDictionary *namespaces = nil;
   
  -+(void)addWebView:(WebView *)webView toFrameNamespace:(NSString *)name
  ++(void)addFrame:(WebFrame *)frame toNamespace:(NSString *)name
   {
       if (!name)
           return;
  @@ -57,10 +57,10 @@
   	CFRelease(namespace);
       }
       
  -    CFSetSetValue(namespace, webView);
  +    CFSetSetValue(namespace, frame);
   }
   
  -+(void)removeWebView:(WebView *)webView fromFrameNamespace:(NSString *)name
  ++(void)removeFrame:(WebFrame *)frame fromNamespace:(NSString *)name
   {
       if (!name)
           return;
  @@ -70,13 +70,13 @@
       if (!namespace)
   	return;
   
  -    CFSetRemoveValue(namespace, webView);
  +    CFSetRemoveValue(namespace, frame);
   
       if (CFSetGetCount(namespace) == 0)
   	[namespaces removeObjectForKey:name];
   }
   
  -+(NSEnumerator *)webViewsInFrameNamespace:(NSString *)name;
  ++(NSEnumerator *)framesInNamespace:(NSString *)name;
   {
       if (!name)
   	return [[[NSEnumerator alloc] init] autorelease];
  
  
  
  1.260     +97 -74    WebKit/WebView.subproj/WebFrame.m
  
  Index: WebFrame.m
  ===================================================================
  RCS file: /cvs/root/WebKit/WebView.subproj/WebFrame.m,v
  retrieving revision 1.259
  retrieving revision 1.260
  diff -u -r1.259 -r1.260
  --- WebFrame.m	20 Dec 2005 10:08:04 -0000	1.259
  +++ WebFrame.m	20 Dec 2005 20:41:54 -0000	1.260
  @@ -575,76 +575,6 @@
       return [_private->bridge isFrameSet];
   }
   
  -- (BOOL)_shouldAllowAccessFrom:(WebFrame *)source
  -{
  -    // if no source frame, allow access
  -    if (source == nil) {
  -        return YES;
  -    }
  -
  -    //   - allow access if the two frames are in the same window
  -    if ([self webView] == [source webView]) {
  -        return YES;
  -    }
  -
  -    //   - allow if the request is made from a local file.
  -    NSString *sourceDomain = [[source _bridge] domain];
  -    if ([sourceDomain length] == 0) {
  -        return YES;
  -    }
  -
  -    //   - allow access if this frame or one of its ancestors
  -    //     has the same origin as source
  -    WebFrame *ancestor = self;
  -    while (ancestor != nil) {
  -        NSString *ancestorDomain = [[ancestor _bridge] domain];
  -        if (ancestorDomain != nil && [sourceDomain _webkit_isCaseInsensitiveEqualToString:ancestorDomain]) {
  -            return YES;
  -        }
  -        ancestor = [ancestor parentFrame];
  -    }
  -
  -    //   - allow access if this frame is a toplevel window and the source
  -    //     can access its opener. Note that we only allow one level of
  -    //     recursion here.
  -    if ([self parentFrame] == nil) {
  -        NSString *openerDomain = [[[self _bridge] opener] domain];
  -        if (openerDomain != nil && [sourceDomain _webkit_isCaseInsensitiveEqualToString:openerDomain]) {
  -            return YES;
  -        }
  -    }
  -
  -    // otherwise deny access
  -    return NO;
  -}
  -
  -
  -- (WebFrame *)_descendantFrameNamed:(NSString *)name sourceFrame:(WebFrame *)source
  -{
  -    // for security reasons, we do not want to even make frames visible to frames that
  -    // can't access them 
  -    if ([[self name] isEqualToString: name] && [self _shouldAllowAccessFrom:source]) {
  -        return self;
  -    }
  -
  -    // It's OK to use the internal version of getting the child
  -    // frames, since we know this method won't change the set of
  -    // frames
  -    NSArray *children = [self _internalChildFrames];
  -    WebFrame *frame;
  -    unsigned i;
  -
  -    for (i = 0; i < [children count]; i++){
  -        frame = [children objectAtIndex: i];
  -        frame = [frame _descendantFrameNamed:name sourceFrame:source];
  -        if (frame){
  -            return frame;
  -        }
  -    }
  -
  -    return nil;
  -}
  -
   - (void)_detachChildren
   {
       // Note we have to be careful to remove the kids as we detach each one,
  @@ -2864,11 +2794,11 @@
       ASSERT(self == [[self webView] mainFrame]);
   
       if (namespace != _private->frameNamespace){
  -        [WebFrameNamespaces removeWebView:[self webView] fromFrameNamespace:_private->frameNamespace];
  +        [WebFrameNamespaces removeFrame:self fromNamespace:_private->frameNamespace];
           namespace = [namespace copy];
           [_private->frameNamespace release];
           _private->frameNamespace = namespace;
  -        [WebFrameNamespaces addWebView:[self webView] toFrameNamespace:_private->frameNamespace];
  +        [WebFrameNamespaces addFrame:self toNamespace:_private->frameNamespace];
       }
   }
   
  @@ -3133,6 +3063,99 @@
       [newDataSource release];
   }
   
  +
  +- (BOOL)_shouldAllowAccessFrom:(WebFrame *)source
  +{
  +    // if no source frame, allow access
  +    if (source == nil) {
  +        return YES;
  +    }
  +
  +    //   - allow access if the two frames are in the same window
  +    if ([self webView] == [source webView]) {
  +        return YES;
  +    }
  +
  +    //   - allow if the request is made from a local file.
  +    NSString *sourceDomain = [[source _bridge] domain];
  +    if ([sourceDomain length] == 0) {
  +        return YES;
  +    }
  +
  +    //   - allow access if this frame or one of its ancestors
  +    //     has the same origin as source
  +    WebFrame *ancestor = self;
  +    while (ancestor != nil) {
  +        NSString *ancestorDomain = [[ancestor _bridge] domain];
  +        if (ancestorDomain != nil && [sourceDomain _webkit_isCaseInsensitiveEqualToString:ancestorDomain]) {
  +            return YES;
  +        }
  +        ancestor = [ancestor parentFrame];
  +    }
  +
  +    //   - allow access if this frame is a toplevel window and the source
  +    //     can access its opener. Note that we only allow one level of
  +    //     recursion here.
  +    if ([self parentFrame] == nil) {
  +        NSString *openerDomain = [[[self _bridge] opener] domain];
  +        if (openerDomain != nil && [sourceDomain _webkit_isCaseInsensitiveEqualToString:openerDomain]) {
  +            return YES;
  +        }
  +    }
  +
  +    // otherwise deny access
  +    return NO;
  +}
  +
  +- (WebFrame *)_descendantFrameNamed:(NSString *)name sourceFrame:(WebFrame *)source
  +{
  +    // for security reasons, we do not want to even make frames visible to frames that
  +    // can't access them 
  +    if ([[self name] isEqualToString: name] && [self _shouldAllowAccessFrom:source]) {
  +        return self;
  +    }
  +
  +    // It's OK to use the internal version of getting the child
  +    // frames, since we know this method won't change the set of
  +    // frames
  +    NSArray *children = [self _internalChildFrames];
  +    WebFrame *frame;
  +    unsigned i;
  +
  +    for (i = 0; i < [children count]; i++){
  +        frame = [children objectAtIndex: i];
  +        frame = [frame _descendantFrameNamed:name sourceFrame:source];
  +        if (frame){
  +            return frame;
  +        }
  +    }
  +
  +    return nil;
  +}
  +
  +- (WebFrame *)_frameInAnyWindowNamed:(NSString *)name sourceFrame:(WebFrame *)source
  +{
  +    ASSERT(self == [[self webView] mainFrame]);
  +
  +    // Try this WebView first.
  +    WebFrame *frame = [self _descendantFrameNamed:name sourceFrame:source];
  +
  +    if (frame != nil) {
  +        return frame;
  +    }
  +
  +    // Try other WebViews in the same set
  +    if ([self _frameNamespace] != nil) {
  +        NSEnumerator *enumerator = [WebFrameNamespaces framesInNamespace:[self _frameNamespace]];
  +        WebFrame *searchFrame;
  +        while ((searchFrame = [enumerator nextObject])) {
  +	    frame = [searchFrame _descendantFrameNamed:name sourceFrame:source];
  +        }
  +    }
  +
  +    return frame;
  +}
  +
   - (WebFrame *)findFrameNamed:(NSString *)name
   {
       // First, deal with 'special' names.
  @@ -3157,8 +3180,8 @@
       WebFrame *frame = [self _descendantFrameNamed:name sourceFrame:self];
   
       if (!frame) {
  -        // Search in this WebView then in others.
  -        frame = [[self webView] _findFrameNamed:name sourceFrame:self];
  +        // Search in the main frame for this window then in others.
  +        frame = [[[self webView] mainFrame] _frameInAnyWindowNamed:name sourceFrame:self];
       }
   
       return frame;
  
  
  
  1.164     +0 -1      WebKit/WebView.subproj/WebFramePrivate.h
  
  Index: WebFramePrivate.h
  ===================================================================
  RCS file: /cvs/root/WebKit/WebView.subproj/WebFramePrivate.h,v
  retrieving revision 1.163
  retrieving revision 1.164
  diff -u -r1.163 -r1.164
  --- WebFramePrivate.h	20 Dec 2005 08:32:55 -0000	1.163
  +++ WebFramePrivate.h	20 Dec 2005 20:41:54 -0000	1.164
  @@ -86,7 +86,6 @@
   
   - (void)_setWebView:(WebView *)webView;
   - (void)_setName:(NSString *)name;
  -- (WebFrame *)_descendantFrameNamed:(NSString *)name sourceFrame:(WebFrame *)source;
   - (void)_detachFromParent;
   - (void)_detachChildren;
   - (void)_closeOldDataSources;
  
  
  
  1.320     +0 -26     WebKit/WebView.subproj/WebView.m
  
  Index: WebView.m
  ===================================================================
  RCS file: /cvs/root/WebKit/WebView.subproj/WebView.m,v
  retrieving revision 1.319
  retrieving revision 1.320
  diff -u -r1.319 -r1.320
  --- WebView.m	20 Dec 2005 08:32:56 -0000	1.319
  +++ WebView.m	20 Dec 2005 20:41:54 -0000	1.320
  @@ -709,32 +709,6 @@
       [[self mainFrame] _setName:name];
   }
   
  -- (WebFrame *)_findFrameInThisWindowNamed:(NSString *)name sourceFrame:(WebFrame *)source
  -{
  -    return [[self mainFrame] _descendantFrameNamed:name sourceFrame:(WebFrame *)source];
  -}
  -
  -- (WebFrame *)_findFrameNamed:(NSString *)name sourceFrame:(WebFrame *)source
  -{
  -    // Try this WebView first.
  -    WebFrame *frame = [self _findFrameInThisWindowNamed:name sourceFrame:source];
  -
  -    if (frame != nil) {
  -        return frame;
  -    }
  -
  -    // Try other WebViews in the same set
  -    if ([self groupName] != nil) {
  -        NSEnumerator *enumerator = [WebFrameNamespaces webViewsInFrameNamespace:[self groupName]];
  -        WebView *webView;
  -        while ((webView = [enumerator nextObject]) != nil && frame == nil) {
  -	    frame = [webView _findFrameInThisWindowNamed:name sourceFrame:source];
  -        }
  -    }
  -
  -    return frame;
  -}
  -
   - (WebView *)_openNewWindowWithRequest:(NSURLRequest *)request
   {
       id wd = [self UIDelegate];
  
  
  
  1.153     +0 -2      WebKit/WebView.subproj/WebViewPrivate.h
  
  Index: WebViewPrivate.h
  ===================================================================
  RCS file: /cvs/root/WebKit/WebView.subproj/WebViewPrivate.h,v
  retrieving revision 1.152
  retrieving revision 1.153
  diff -u -r1.152 -r1.153
  --- WebViewPrivate.h	15 Dec 2005 22:17:58 -0000	1.152
  +++ WebViewPrivate.h	20 Dec 2005 20:41:55 -0000	1.153
  @@ -154,8 +154,6 @@
   - (void)setDefersCallbacks:(BOOL)defers;
   
   - (void)_setTopLevelFrameName:(NSString *)name;
  -- (WebFrame *)_findFrameInThisWindowNamed:(NSString *)name sourceFrame:(WebFrame *)source;
  -- (WebFrame *)_findFrameNamed:(NSString *)name sourceFrame:(WebFrame *)source;
   
   - (WebView *)_openNewWindowWithRequest:(NSURLRequest *)request;
   
  
  
  



More information about the webkit-changes mailing list