[SCM] WebKit Debian packaging branch, debian/unstable, updated. debian/1.1.15-1-40151-g37bb677

mjs mjs at 268f45cc-cd09-0410-ab3c-d52691b4dbfc
Sat Sep 26 06:37:51 UTC 2009


The following commit has been merged in the debian/unstable branch:
commit 162b6d3f3d3187f606354035c050add47ee4e4fa
Author: mjs <mjs at 268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Tue Sep 10 23:07:48 2002 +0000

    WebCore:
    
    	WebCore part of fix for:
    
    	2952837 - Slide shows on homepage.mac.com don't show pictures, captions
    	2942073 - Deferring [BrowserDocument goToInitialURL] can cause problems
    	3021360 - second window pops up on 'Search' at chrysler.com
    	3030485 - Unexpected new window created with no scroll bars at sony.com
    
    	* kwq/KWQKHTMLPartBrowserExtension.mm:
    	(KHTMLPartBrowserExtension::createNewWindow): Reuse existing
    	frame if possible. Pass frame name when opening a new window.
            * kwq/KWQKHTMLPartImpl.mm:
            (KWQKHTMLPartImpl::bridgeForFrameName): Don't warn when opening a
    	new window. Check non-descendant frames too.
            (KWQKHTMLPartImpl::urlSelected): Pass frame name when opening window.
            * kwq/WebCoreBridge.h: Add frameName argument to openNewWindowWithURL:.
    
    WebKit:
    
    	WebKit part of fix for:
    
    	2952837 - Slide shows on homepage.mac.com don't show pictures, captions
    	2942073 - Deferring [BrowserDocument goToInitialURL] can cause problems
    	3021360 - second window pops up on 'Search' at chrysler.com
    	3030485 - Unexpected new window created with no scroll bars at sony.com
    
    	This is done by adding a concept of named controller sets, so that
    	less browser-like uses of WebKit won't be affected.
    
            * WebCoreSupport.subproj/WebBridge.m:
    	(-[WebBridge openNewWindowWithURL:frameName:]): Pass frameName
    	parameter to controller initializer.
    
            * WebView.subproj/WebController.h:
            * WebView.subproj/WebController.m:
            (-[WebController init]): Pass nil for controllerSetName.
    
            (-[WebController dealloc]):
            (-[WebController frameNamed:]): Check other windows in the same set too.
            * WebView.subproj/WebControllerPrivate.h:
            * WebView.subproj/WebControllerPrivate.m:
            (-[WebControllerPrivate dealloc]):
            (-[WebController _setDefersCallbacks:]):
            (-[WebController _setTopLevelFrameName:]):
            (-[WebController _frameInThisWindowNamed:]):
            * WebView.subproj/WebControllerSets.h: Added.
            * WebView.subproj/WebControllerSets.m: Added.
    	(+[WebControllerSets addController:toSetNamed:]): Method to
    	maintain controller sets.
            (+[WebControllerSets removeController:fromSetNamed:]): Likewise.
            * WebKit.pbproj/project.pbxproj: Add new files.
    
    WebBrowser:
    
    	WebBrowser part of fix for:
    
    	2952837 - Slide shows on homepage.mac.com don't show pictures, captions
    	2942073 - Deferring [BrowserDocument goToInitialURL] can cause problems
    	3021360 - second window pops up on 'Search' at chrysler.com
    	3030485 - Unexpected new window created with no scroll bars at sony.com
    
            * BrowserWebController.m:
            (-[BrowserWebController initWithBrowserDocument:]): Pass
    	controller set name when creating WebController.
    
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@2022 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/WebCore/ChangeLog-2002-12-03 b/WebCore/ChangeLog-2002-12-03
index d282bef..f6d0e07 100644
--- a/WebCore/ChangeLog-2002-12-03
+++ b/WebCore/ChangeLog-2002-12-03
@@ -1,3 +1,21 @@
+2002-09-10  Maciej Stachowiak  <mjs at apple.com>
+
+	WebCore part of fix for:
+
+	2952837 - Slide shows on homepage.mac.com don't show pictures, captions
+	2942073 - Deferring [BrowserDocument goToInitialURL] can cause problems
+	3021360 - second window pops up on 'Search' at chrysler.com
+	3030485 - Unexpected new window created with no scroll bars at sony.com
+
+	* kwq/KWQKHTMLPartBrowserExtension.mm:
+	(KHTMLPartBrowserExtension::createNewWindow): Reuse existing
+	frame if possible. Pass frame name when opening a new window.
+        * kwq/KWQKHTMLPartImpl.mm:
+        (KWQKHTMLPartImpl::bridgeForFrameName): Don't warn when opening a
+	new window. Check non-descendant frames too.
+        (KWQKHTMLPartImpl::urlSelected): Pass frame name when opening window.
+        * kwq/WebCoreBridge.h: Add frameName argument to openNewWindowWithURL:.
+
 2002-09-10  Darin Adler  <darin at apple.com>
 
 	Add back the APPLE_CHANGES for a few frame cases. We need to do some real testing
diff --git a/WebCore/ChangeLog-2003-10-25 b/WebCore/ChangeLog-2003-10-25
index d282bef..f6d0e07 100644
--- a/WebCore/ChangeLog-2003-10-25
+++ b/WebCore/ChangeLog-2003-10-25
@@ -1,3 +1,21 @@
+2002-09-10  Maciej Stachowiak  <mjs at apple.com>
+
+	WebCore part of fix for:
+
+	2952837 - Slide shows on homepage.mac.com don't show pictures, captions
+	2942073 - Deferring [BrowserDocument goToInitialURL] can cause problems
+	3021360 - second window pops up on 'Search' at chrysler.com
+	3030485 - Unexpected new window created with no scroll bars at sony.com
+
+	* kwq/KWQKHTMLPartBrowserExtension.mm:
+	(KHTMLPartBrowserExtension::createNewWindow): Reuse existing
+	frame if possible. Pass frame name when opening a new window.
+        * kwq/KWQKHTMLPartImpl.mm:
+        (KWQKHTMLPartImpl::bridgeForFrameName): Don't warn when opening a
+	new window. Check non-descendant frames too.
+        (KWQKHTMLPartImpl::urlSelected): Pass frame name when opening window.
+        * kwq/WebCoreBridge.h: Add frameName argument to openNewWindowWithURL:.
+
 2002-09-10  Darin Adler  <darin at apple.com>
 
 	Add back the APPLE_CHANGES for a few frame cases. We need to do some real testing
diff --git a/WebCore/ChangeLog-2005-08-23 b/WebCore/ChangeLog-2005-08-23
index d282bef..f6d0e07 100644
--- a/WebCore/ChangeLog-2005-08-23
+++ b/WebCore/ChangeLog-2005-08-23
@@ -1,3 +1,21 @@
+2002-09-10  Maciej Stachowiak  <mjs at apple.com>
+
+	WebCore part of fix for:
+
+	2952837 - Slide shows on homepage.mac.com don't show pictures, captions
+	2942073 - Deferring [BrowserDocument goToInitialURL] can cause problems
+	3021360 - second window pops up on 'Search' at chrysler.com
+	3030485 - Unexpected new window created with no scroll bars at sony.com
+
+	* kwq/KWQKHTMLPartBrowserExtension.mm:
+	(KHTMLPartBrowserExtension::createNewWindow): Reuse existing
+	frame if possible. Pass frame name when opening a new window.
+        * kwq/KWQKHTMLPartImpl.mm:
+        (KWQKHTMLPartImpl::bridgeForFrameName): Don't warn when opening a
+	new window. Check non-descendant frames too.
+        (KWQKHTMLPartImpl::urlSelected): Pass frame name when opening window.
+        * kwq/WebCoreBridge.h: Add frameName argument to openNewWindowWithURL:.
+
 2002-09-10  Darin Adler  <darin at apple.com>
 
 	Add back the APPLE_CHANGES for a few frame cases. We need to do some real testing
diff --git a/WebCore/kwq/KWQKHTMLPart.mm b/WebCore/kwq/KWQKHTMLPart.mm
index d900a0e..2304f1b 100644
--- a/WebCore/kwq/KWQKHTMLPart.mm
+++ b/WebCore/kwq/KWQKHTMLPart.mm
@@ -124,9 +124,11 @@ WebCoreBridge *KWQKHTMLPartImpl::bridgeForFrameName(const QString &frameName)
         }
     } else {
         frame = [_bridge descendantFrameNamed:frameName.getNSString()];
+	if (frame == nil) {
+	    frame = [_bridge frameNamed:frameName.getNSString()];
+	}
         if (frame == nil) {
-            NSLog (@"WARNING: unable to find frame named %@, creating new window with \"_blank\" name. New window will not be named until 2942073 is fixed.\n", frameName.getNSString());
-            frame = [_bridge descendantFrameNamed:@"_blank"];
+	    frame = [bridge() openNewWindowWithURL:nil frameName:frameName.getNSString()];
         }
     }
     
@@ -184,7 +186,7 @@ void KWQKHTMLPartImpl::urlSelected(const QString &url, int button, int state, co
     
     // Open new window on command-click
     if (state & MetaButton) {
-        [_bridge openNewWindowWithURL:cocoaURL];
+        [_bridge openNewWindowWithURL:cocoaURL frameName:nil];
         return;
     }
     
@@ -643,4 +645,4 @@ void KWQKHTMLPartImpl::saveDocumentState()
 void KWQKHTMLPartImpl::restoreDocumentState()
 {
     [_bridge restoreDocumentState];
-}
\ No newline at end of file
+}
diff --git a/WebCore/kwq/KWQKHTMLPartBrowserExtension.mm b/WebCore/kwq/KWQKHTMLPartBrowserExtension.mm
index 6b09089..d4147e4 100644
--- a/WebCore/kwq/KWQKHTMLPartBrowserExtension.mm
+++ b/WebCore/kwq/KWQKHTMLPartBrowserExtension.mm
@@ -57,33 +57,49 @@ void KHTMLPartBrowserExtension::createNewWindow(const KURL &url,
 						const KParts::WindowArgs &winArgs, 
 						KParts::ReadOnlyPart **partResult)
 { 
-    WebCoreBridge *bridge = [m_part->impl->bridge() openNewWindowWithURL:url.getNSURL()];
+    NSString *frameName = urlArgs.frameName.length() == 0 ? nil : urlArgs.frameName.getNSString();
 
+    WebCoreBridge *bridge;
+
+    if (frameName != nil) {
+	bridge = [m_part->impl->bridge() frameNamed:frameName];
+	if (bridge != nil) {
+	    if (!url.isEmpty()) {
+		[bridge openURL:url.getNSURL()];
+	    }
+	    *partResult = [bridge part];
+	    return;
+	}
+    }
+
+    NSURL *cocoaURL = url.isEmpty() ? nil : url.getNSURL();
+    bridge = [m_part->impl->bridge() openNewWindowWithURL:cocoaURL frameName:frameName];
+    
     if (!winArgs.toolBarsVisible) {
 	[bridge setToolbarsVisible:NO];
     }
-
+    
     if (!winArgs.statusBarVisible) {
 	[bridge setStatusBarVisible:NO];
     }
-
+    
     if (!winArgs.scrollbarsVisible) {
 	[bridge setScrollbarsVisible:NO];
     }
-
+    
     if (!winArgs.resizable) {
 	[[bridge window] setShowsResizeIndicator:NO];
     }
-
+    
     if (winArgs.xSet || winArgs.ySet || winArgs.widthSet || winArgs.heightSet) {
-
+	
 	NSRect screenFrame = [[[bridge window] screen] frame];
 	NSRect frame = [[bridge window] frame];
-
+	
 	if (winArgs.xSet) {
 	    frame.origin.x = winArgs.x;
 	}
-
+	
 	if (winArgs.ySet) {
 	    if (winArgs.heightSet) {
 		frame.origin.y = screenFrame.size.height - winArgs.y + frame.size.height - winArgs.height;
@@ -91,7 +107,7 @@ void KHTMLPartBrowserExtension::createNewWindow(const KURL &url,
 		frame.origin.y = screenFrame.size.height - winArgs.y;
 	    }
 	}
-
+	
 	if (winArgs.widthSet) {
 	    frame.size.width = winArgs.width;
 	}
@@ -102,7 +118,7 @@ void KHTMLPartBrowserExtension::createNewWindow(const KURL &url,
 	
 	[bridge setWindowFrame:frame];
     }
-
+    
     [[[bridge window] windowController] showWindow:nil];
 
     *partResult = [bridge part];
diff --git a/WebCore/kwq/KWQKHTMLPartImpl.mm b/WebCore/kwq/KWQKHTMLPartImpl.mm
index d900a0e..2304f1b 100644
--- a/WebCore/kwq/KWQKHTMLPartImpl.mm
+++ b/WebCore/kwq/KWQKHTMLPartImpl.mm
@@ -124,9 +124,11 @@ WebCoreBridge *KWQKHTMLPartImpl::bridgeForFrameName(const QString &frameName)
         }
     } else {
         frame = [_bridge descendantFrameNamed:frameName.getNSString()];
+	if (frame == nil) {
+	    frame = [_bridge frameNamed:frameName.getNSString()];
+	}
         if (frame == nil) {
-            NSLog (@"WARNING: unable to find frame named %@, creating new window with \"_blank\" name. New window will not be named until 2942073 is fixed.\n", frameName.getNSString());
-            frame = [_bridge descendantFrameNamed:@"_blank"];
+	    frame = [bridge() openNewWindowWithURL:nil frameName:frameName.getNSString()];
         }
     }
     
@@ -184,7 +186,7 @@ void KWQKHTMLPartImpl::urlSelected(const QString &url, int button, int state, co
     
     // Open new window on command-click
     if (state & MetaButton) {
-        [_bridge openNewWindowWithURL:cocoaURL];
+        [_bridge openNewWindowWithURL:cocoaURL frameName:nil];
         return;
     }
     
@@ -643,4 +645,4 @@ void KWQKHTMLPartImpl::saveDocumentState()
 void KWQKHTMLPartImpl::restoreDocumentState()
 {
     [_bridge restoreDocumentState];
-}
\ No newline at end of file
+}
diff --git a/WebCore/kwq/WebCoreBridge.h b/WebCore/kwq/WebCoreBridge.h
index 39ac036..9a7f170 100644
--- a/WebCore/kwq/WebCoreBridge.h
+++ b/WebCore/kwq/WebCoreBridge.h
@@ -144,7 +144,7 @@ typedef khtml::RenderPart KHTMLRenderPart;
 
 - (void)loadURL:(NSURL *)URL;
 - (void)postWithURL:(NSURL *)URL data:(NSData *)data;
-- (WebCoreBridge *)openNewWindowWithURL:(NSURL *)URL;
+- (WebCoreBridge *)openNewWindowWithURL:(NSURL *)URL frameName:(NSString *)name;
 
 - (NSString *)userAgentForURL:(NSURL *)URL;
 
diff --git a/WebKit/ChangeLog b/WebKit/ChangeLog
index b06c0fd..aec85e4 100644
--- a/WebKit/ChangeLog
+++ b/WebKit/ChangeLog
@@ -1,3 +1,38 @@
+2002-09-10  Maciej Stachowiak  <mjs at apple.com>
+
+	WebKit part of fix for:
+
+	2952837 - Slide shows on homepage.mac.com don't show pictures, captions
+	2942073 - Deferring [BrowserDocument goToInitialURL] can cause problems
+	3021360 - second window pops up on 'Search' at chrysler.com
+	3030485 - Unexpected new window created with no scroll bars at sony.com
+
+	This is done by adding a concept of named controller sets, so that
+	less browser-like uses of WebKit won't be affected.
+
+        * WebCoreSupport.subproj/WebBridge.m:
+	(-[WebBridge openNewWindowWithURL:frameName:]): Pass frameName
+	parameter to controller initializer.
+	
+        * WebView.subproj/WebController.h:
+        * WebView.subproj/WebController.m:
+        (-[WebController init]): Pass nil for controllerSetName.
+	
+        (-[WebController dealloc]):
+        (-[WebController frameNamed:]): Check other windows in the same set too.
+        * WebView.subproj/WebControllerPrivate.h:
+        * WebView.subproj/WebControllerPrivate.m:
+        (-[WebControllerPrivate dealloc]):
+        (-[WebController _setDefersCallbacks:]):
+        (-[WebController _setTopLevelFrameName:]):
+        (-[WebController _frameInThisWindowNamed:]):
+        * WebView.subproj/WebControllerSets.h: Added.
+        * WebView.subproj/WebControllerSets.m: Added.
+	(+[WebControllerSets addController:toSetNamed:]): Method to
+	maintain controller sets.
+        (+[WebControllerSets removeController:fromSetNamed:]): Likewise.
+        * WebKit.pbproj/project.pbxproj: Add new files.
+
 2002-09-10  Ken Kocienda  <kocienda at apple.com>
 
         Changed API for setting the WebResourceClient for a request/load.
diff --git a/WebKit/ChangeLog-2002-12-03 b/WebKit/ChangeLog-2002-12-03
index b06c0fd..aec85e4 100644
--- a/WebKit/ChangeLog-2002-12-03
+++ b/WebKit/ChangeLog-2002-12-03
@@ -1,3 +1,38 @@
+2002-09-10  Maciej Stachowiak  <mjs at apple.com>
+
+	WebKit part of fix for:
+
+	2952837 - Slide shows on homepage.mac.com don't show pictures, captions
+	2942073 - Deferring [BrowserDocument goToInitialURL] can cause problems
+	3021360 - second window pops up on 'Search' at chrysler.com
+	3030485 - Unexpected new window created with no scroll bars at sony.com
+
+	This is done by adding a concept of named controller sets, so that
+	less browser-like uses of WebKit won't be affected.
+
+        * WebCoreSupport.subproj/WebBridge.m:
+	(-[WebBridge openNewWindowWithURL:frameName:]): Pass frameName
+	parameter to controller initializer.
+	
+        * WebView.subproj/WebController.h:
+        * WebView.subproj/WebController.m:
+        (-[WebController init]): Pass nil for controllerSetName.
+	
+        (-[WebController dealloc]):
+        (-[WebController frameNamed:]): Check other windows in the same set too.
+        * WebView.subproj/WebControllerPrivate.h:
+        * WebView.subproj/WebControllerPrivate.m:
+        (-[WebControllerPrivate dealloc]):
+        (-[WebController _setDefersCallbacks:]):
+        (-[WebController _setTopLevelFrameName:]):
+        (-[WebController _frameInThisWindowNamed:]):
+        * WebView.subproj/WebControllerSets.h: Added.
+        * WebView.subproj/WebControllerSets.m: Added.
+	(+[WebControllerSets addController:toSetNamed:]): Method to
+	maintain controller sets.
+        (+[WebControllerSets removeController:fromSetNamed:]): Likewise.
+        * WebKit.pbproj/project.pbxproj: Add new files.
+
 2002-09-10  Ken Kocienda  <kocienda at apple.com>
 
         Changed API for setting the WebResourceClient for a request/load.
diff --git a/WebKit/WebCoreSupport.subproj/WebBridge.m b/WebKit/WebCoreSupport.subproj/WebBridge.m
index 8801b50..41aaa59 100644
--- a/WebKit/WebCoreSupport.subproj/WebBridge.m
+++ b/WebKit/WebCoreSupport.subproj/WebBridge.m
@@ -87,11 +87,13 @@
     return [newFrame _bridge];
 }
 
-- (WebCoreBridge *)openNewWindowWithURL:(NSURL *)URL
+- (WebCoreBridge *)openNewWindowWithURL:(NSURL *)URL frameName:(NSString *)name
 {
     ASSERT(frame != nil);
 
     WebController *newController = [[[frame controller] windowContext] openNewWindowWithURL:URL];
+    [newController _setTopLevelFrameName:name];
+
     WebFrame *newFrame = [newController mainFrame];
 
     return [newFrame _bridge];
diff --git a/WebKit/WebKit.pbproj/project.pbxproj b/WebKit/WebKit.pbproj/project.pbxproj
index 51dafb3..7076c60 100644
--- a/WebKit/WebKit.pbproj/project.pbxproj
+++ b/WebKit/WebKit.pbproj/project.pbxproj
@@ -272,6 +272,7 @@
 				F528E3EE031E91AD01CA2ACA,
 				931A72D303265920008635CE,
 				93AEB17F032C1735008635CE,
+				6523FAD1032DA06B005EFCFF,
 			);
 			isa = PBXHeadersBuildPhase;
 			runOnlyForDeploymentPostprocessing = 0;
@@ -359,6 +360,7 @@
 				F560BEBF030DAF4401C1A526,
 				F528E3ED031E91AD01CA2ACA,
 				93AEB180032C1735008635CE,
+				6523FAD2032DA06B005EFCFF,
 			);
 			isa = PBXSourcesBuildPhase;
 			runOnlyForDeploymentPostprocessing = 0;
@@ -1095,6 +1097,40 @@
 //392
 //393
 //394
+//650
+//651
+//652
+//653
+//654
+		6523FACF032DA06B005EFCFF = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			path = WebControllerSets.h;
+			refType = 4;
+		};
+		6523FAD0032DA06B005EFCFF = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			path = WebControllerSets.m;
+			refType = 4;
+		};
+		6523FAD1032DA06B005EFCFF = {
+			fileRef = 6523FACF032DA06B005EFCFF;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		6523FAD2032DA06B005EFCFF = {
+			fileRef = 6523FAD0032DA06B005EFCFF;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+//650
+//651
+//652
+//653
+//654
 //930
 //931
 //932
@@ -1188,6 +1224,8 @@
 				F649E40502EE0D1901CA2ACD,
 				354F25FE02EF441D0ACA2ACA,
 				354F25FF02EF441D0ACA2ACA,
+				6523FACF032DA06B005EFCFF,
+				6523FAD0032DA06B005EFCFF,
 			);
 			isa = PBXGroup;
 			name = WebView;
diff --git a/WebKit/WebView.subproj/WebController.h b/WebKit/WebView.subproj/WebController.h
index f998c89..aa12255 100644
--- a/WebKit/WebView.subproj/WebController.h
+++ b/WebKit/WebView.subproj/WebController.h
@@ -142,7 +142,7 @@ extern NSString *WebContextMenuElementFrameKey;
 - init;
 
 // Designated initializer.
-- initWithView: (WebView *)view provisionalDataSource: (WebDataSource *)dataSource;
+- initWithView: (WebView *)view provisionalDataSource: (WebDataSource *)dataSource controllerSetName: (NSString *)name;
 
 - (void)setWindowContext: (id<WebWindowContext>)context;
 - (id<WebWindowContext>)windowContext;
diff --git a/WebKit/WebView.subproj/WebController.m b/WebKit/WebView.subproj/WebController.m
index a5fb18f..3cee138 100644
--- a/WebKit/WebView.subproj/WebController.m
+++ b/WebKit/WebView.subproj/WebController.m
@@ -7,6 +7,7 @@
 
 #import <WebKit/WebBackForwardList.h>
 #import <WebKit/WebController.h>
+#import <WebKit/WebControllerSets.h>
 #import <WebKit/WebControllerPolicyHandler.h>
 #import <WebKit/WebControllerPrivate.h>
 #import <WebKit/WebDataSourcePrivate.h>
@@ -35,15 +36,19 @@ NSString * WebContextMenuElementFrameKey = @"WebContextFrame";
 
 - init
 {
-    return [self initWithView: nil provisionalDataSource: nil];
+    return [self initWithView: nil provisionalDataSource: nil controllerSetName: nil];
 }
 
-- initWithView: (WebView *)view provisionalDataSource: (WebDataSource *)dataSource
+- initWithView: (WebView *)view provisionalDataSource: (WebDataSource *)dataSource controllerSetName: (NSString *)name;
 {
     [super init];
     
     _private = [[WebControllerPrivate alloc] init];
     _private->mainFrame = [[WebFrame alloc] initWithName: @"_top" webView: view provisionalDataSource: dataSource controller: self];
+    _private->controllerSetName = [name retain];
+    if (_private->controllerSetName != nil) {
+	[WebControllerSets addController:self toSetNamed:_private->controllerSetName];
+    }
 
     [self setUseBackForwardList: YES];
     
@@ -54,6 +59,10 @@ NSString * WebContextMenuElementFrameKey = @"WebContextFrame";
 
 - (void)dealloc
 {
+    if (_private->controllerSetName != nil) {
+	[WebControllerSets removeController:self fromSetNamed:_private->controllerSetName];
+    }
+
     --WebControllerCount;
     
     [_private release];
@@ -244,7 +253,23 @@ NSString * WebContextMenuElementFrameKey = @"WebContextFrame";
 
 - (WebFrame *)frameNamed: (NSString *)name
 {
-    return [[self mainFrame] frameNamed: name];
+    // Try this controller first
+    WebFrame *frame = [self _frameInThisWindowNamed:name];
+
+    if (frame != nil) {
+	return frame;
+    }
+
+    // Try other controllers in the same set
+    if (_private->controllerSetName != nil) {
+	NSEnumerator *enumerator = [WebControllerSets controllersInSetNamed:_private->controllerSetName];
+	WebController *controller;
+	while ((controller = [enumerator nextObject]) != nil && frame == nil) {
+	    frame = [controller _frameInThisWindowNamed:name];
+	}
+    }
+
+    return frame;
 }
 
 - (WebFrame *)mainFrame
diff --git a/WebKit/WebView.subproj/WebControllerPrivate.h b/WebKit/WebView.subproj/WebControllerPrivate.h
index a355117..9b0f314 100644
--- a/WebKit/WebView.subproj/WebControllerPrivate.h
+++ b/WebKit/WebView.subproj/WebControllerPrivate.h
@@ -32,6 +32,9 @@
     NSLock *userAgentLock;
     
     BOOL defersCallbacks;
+
+    NSString *controllerSetName;
+    NSString *topLevelFrameName;
 }
 @end
 
@@ -50,4 +53,7 @@
 - (BOOL)_defersCallbacks;
 - (void)_setDefersCallbacks:(BOOL)defers;
 
+- (void)_setTopLevelFrameName:(NSString *)name;
+- (WebFrame *)_frameInThisWindowNamed:(NSString *)name;
+
 @end
diff --git a/WebKit/WebView.subproj/WebControllerPrivate.m b/WebKit/WebView.subproj/WebControllerPrivate.m
index 92da62c..90a35ba 100644
--- a/WebKit/WebView.subproj/WebControllerPrivate.m
+++ b/WebKit/WebView.subproj/WebControllerPrivate.m
@@ -71,6 +71,9 @@
     [userAgentOverride release];
     [userAgentLock release];
     
+    [controllerSetName release];
+    [topLevelFrameName release];
+
     [super dealloc];
 }
 
@@ -220,4 +223,19 @@
     [_private->mainFrame _defersCallbacksChanged];
 }
 
+- (void)_setTopLevelFrameName:(NSString *)name
+{
+    [_private->topLevelFrameName release];
+    _private->topLevelFrameName = [name retain];
+}
+
+- (WebFrame *)_frameInThisWindowNamed:(NSString *)name
+{
+    if ([_private->topLevelFrameName isEqualToString:name]) {
+	return [self mainFrame];
+    } else {
+	return [[self mainFrame] frameNamed:name];
+    }
+}
+
 @end
diff --git a/WebKit/WebView.subproj/WebControllerSets.h b/WebKit/WebView.subproj/WebControllerSets.h
new file mode 100644
index 0000000..25da98d
--- /dev/null
+++ b/WebKit/WebView.subproj/WebControllerSets.h
@@ -0,0 +1,18 @@
+/*	
+        WebControllerSets.h
+	Copyright 2002, Apple Computer, Inc.
+
+*/
+
+#import <Foundation/Foundation.h>
+
+ at class WebController;
+
+ at interface WebControllerSets : NSObject
++(void)addController:(WebController *)controller toSetNamed:(NSString *)name;
++(void)removeController:(WebController *)controller fromSetNamed:(NSString *)name;
++(NSEnumerator *)controllersInSetNamed:(NSString *)name;
+ at end
+
+
+
diff --git a/WebKit/WebView.subproj/WebControllerSets.m b/WebKit/WebView.subproj/WebControllerSets.m
new file mode 100644
index 0000000..d099bf4
--- /dev/null
+++ b/WebKit/WebView.subproj/WebControllerSets.m
@@ -0,0 +1,69 @@
+/*	
+      WebControllerSets.m
+      Copyright 2002, Apple Computer, Inc.
+*/
+
+#import <WebKit/WebControllerSets.h>
+
+static CFSetCallBacks NonRetainingSetCallbacks = {
+0,
+NULL,
+NULL,
+CFCopyDescription,
+CFEqual,
+CFHash
+};
+
+ at implementation WebControllerSets
+
+NSMutableDictionary *sets = nil;
+
++(void)addController:(WebController *)controller toSetNamed: (NSString *)name
+{
+    if (sets == nil) {
+	sets = [[NSMutableDictionary alloc] init];
+    }
+
+    CFMutableSetRef set = (CFMutableSetRef)[sets objectForKey:name];
+
+    if (set == NULL) {
+	set = CFSetCreateMutable(NULL, 0, &NonRetainingSetCallbacks);
+	[sets setObject:(id)set forKey:name];
+	CFRelease(set);
+    }
+
+    
+    CFSetSetValue(set, controller);
+}
+
++(void)removeController:(WebController *)controller fromSetNamed: (NSString *)name
+{
+    CFMutableSetRef set = (CFMutableSetRef)[sets objectForKey:name];
+
+    if (set == NULL) {
+	return;
+    }
+
+    CFSetRemoveValue(set, controller);
+
+    if (CFSetGetCount(set) == 0) {
+	[sets removeObjectForKey:name];
+    }
+}
+
+
++(NSEnumerator *)controllersInSetNamed:(NSString *)name;
+{
+    CFMutableSetRef set = (CFMutableSetRef)[sets objectForKey:name];
+
+    if (set == NULL) {
+	return [[[NSEnumerator alloc] init] autorelease];
+    }
+    
+    return [(NSSet *)set objectEnumerator];
+}
+
+ at end
+
+
+
diff --git a/WebKit/WebView.subproj/WebView.h b/WebKit/WebView.subproj/WebView.h
index f998c89..aa12255 100644
--- a/WebKit/WebView.subproj/WebView.h
+++ b/WebKit/WebView.subproj/WebView.h
@@ -142,7 +142,7 @@ extern NSString *WebContextMenuElementFrameKey;
 - init;
 
 // Designated initializer.
-- initWithView: (WebView *)view provisionalDataSource: (WebDataSource *)dataSource;
+- initWithView: (WebView *)view provisionalDataSource: (WebDataSource *)dataSource controllerSetName: (NSString *)name;
 
 - (void)setWindowContext: (id<WebWindowContext>)context;
 - (id<WebWindowContext>)windowContext;
diff --git a/WebKit/WebView.subproj/WebView.m b/WebKit/WebView.subproj/WebView.m
index a5fb18f..3cee138 100644
--- a/WebKit/WebView.subproj/WebView.m
+++ b/WebKit/WebView.subproj/WebView.m
@@ -7,6 +7,7 @@
 
 #import <WebKit/WebBackForwardList.h>
 #import <WebKit/WebController.h>
+#import <WebKit/WebControllerSets.h>
 #import <WebKit/WebControllerPolicyHandler.h>
 #import <WebKit/WebControllerPrivate.h>
 #import <WebKit/WebDataSourcePrivate.h>
@@ -35,15 +36,19 @@ NSString * WebContextMenuElementFrameKey = @"WebContextFrame";
 
 - init
 {
-    return [self initWithView: nil provisionalDataSource: nil];
+    return [self initWithView: nil provisionalDataSource: nil controllerSetName: nil];
 }
 
-- initWithView: (WebView *)view provisionalDataSource: (WebDataSource *)dataSource
+- initWithView: (WebView *)view provisionalDataSource: (WebDataSource *)dataSource controllerSetName: (NSString *)name;
 {
     [super init];
     
     _private = [[WebControllerPrivate alloc] init];
     _private->mainFrame = [[WebFrame alloc] initWithName: @"_top" webView: view provisionalDataSource: dataSource controller: self];
+    _private->controllerSetName = [name retain];
+    if (_private->controllerSetName != nil) {
+	[WebControllerSets addController:self toSetNamed:_private->controllerSetName];
+    }
 
     [self setUseBackForwardList: YES];
     
@@ -54,6 +59,10 @@ NSString * WebContextMenuElementFrameKey = @"WebContextFrame";
 
 - (void)dealloc
 {
+    if (_private->controllerSetName != nil) {
+	[WebControllerSets removeController:self fromSetNamed:_private->controllerSetName];
+    }
+
     --WebControllerCount;
     
     [_private release];
@@ -244,7 +253,23 @@ NSString * WebContextMenuElementFrameKey = @"WebContextFrame";
 
 - (WebFrame *)frameNamed: (NSString *)name
 {
-    return [[self mainFrame] frameNamed: name];
+    // Try this controller first
+    WebFrame *frame = [self _frameInThisWindowNamed:name];
+
+    if (frame != nil) {
+	return frame;
+    }
+
+    // Try other controllers in the same set
+    if (_private->controllerSetName != nil) {
+	NSEnumerator *enumerator = [WebControllerSets controllersInSetNamed:_private->controllerSetName];
+	WebController *controller;
+	while ((controller = [enumerator nextObject]) != nil && frame == nil) {
+	    frame = [controller _frameInThisWindowNamed:name];
+	}
+    }
+
+    return frame;
 }
 
 - (WebFrame *)mainFrame
diff --git a/WebKit/WebView.subproj/WebViewPrivate.h b/WebKit/WebView.subproj/WebViewPrivate.h
index a355117..9b0f314 100644
--- a/WebKit/WebView.subproj/WebViewPrivate.h
+++ b/WebKit/WebView.subproj/WebViewPrivate.h
@@ -32,6 +32,9 @@
     NSLock *userAgentLock;
     
     BOOL defersCallbacks;
+
+    NSString *controllerSetName;
+    NSString *topLevelFrameName;
 }
 @end
 
@@ -50,4 +53,7 @@
 - (BOOL)_defersCallbacks;
 - (void)_setDefersCallbacks:(BOOL)defers;
 
+- (void)_setTopLevelFrameName:(NSString *)name;
+- (WebFrame *)_frameInThisWindowNamed:(NSString *)name;
+
 @end
diff --git a/WebKit/WebView.subproj/WebViewPrivate.m b/WebKit/WebView.subproj/WebViewPrivate.m
index 92da62c..90a35ba 100644
--- a/WebKit/WebView.subproj/WebViewPrivate.m
+++ b/WebKit/WebView.subproj/WebViewPrivate.m
@@ -71,6 +71,9 @@
     [userAgentOverride release];
     [userAgentLock release];
     
+    [controllerSetName release];
+    [topLevelFrameName release];
+
     [super dealloc];
 }
 
@@ -220,4 +223,19 @@
     [_private->mainFrame _defersCallbacksChanged];
 }
 
+- (void)_setTopLevelFrameName:(NSString *)name
+{
+    [_private->topLevelFrameName release];
+    _private->topLevelFrameName = [name retain];
+}
+
+- (WebFrame *)_frameInThisWindowNamed:(NSString *)name
+{
+    if ([_private->topLevelFrameName isEqualToString:name]) {
+	return [self mainFrame];
+    } else {
+	return [[self mainFrame] frameNamed:name];
+    }
+}
+
 @end

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list