[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