WebCore:
authordarin@apple.com <darin@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 12 Mar 2008 05:27:19 +0000 (05:27 +0000)
committerdarin@apple.com <darin@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 12 Mar 2008 05:27:19 +0000 (05:27 +0000)
        Reviewed by Sam.

        - remove all bridge-related things from WebCore except the bridge itself

        * WebCore.base.exp: Removed the bridge and setBridge functions.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::detachFromParent): Removed call to the bridge's
        close method.

        * page/Frame.cpp:
        (WebCore::Frame::~Frame): Removed call to setBridge(0).
        (WebCore::FramePrivate::FramePrivate): Removed initialization of m_bridge.
        * page/Frame.h: Removed setBridge and bridge functions.
        * page/FramePrivate.h: Removed m_bridge pointer.
        * page/mac/FrameMac.mm: Removed setBridge and bridge functions.

        * page/mac/WebCoreFrameBridge.h: Added setWebCoreFrame: method.
        Removed bridgeForDOMDocument: and clearFrame methods.
        * page/mac/WebCoreFrameBridge.mm: Ditto.
        (-[WebCoreFrameBridge close]): Changed to set m_frame to 0 directly.
        (-[WebCoreFrameBridge setWebCoreFrame:]): Added.

WebKit/mac:

        Reviewed by Sam.

        - remove all bridge-related things from WebCore except the bridge itself

        * DOM/WebDOMOperations.mm:
        (-[DOMNode _bridge]): Reimplemented to not use the bridgeForDOMDocument: method.

        * DefaultDelegates/WebDefaultContextMenuDelegate.mm: Removed unneeded include.

        * Plugins/WebPluginController.mm: Ditto.

        * WebCoreSupport/WebFrameBridge.h: Removed unneeded things, including the
        init and close methods. Added a setWebFrame: method.

        * WebCoreSupport/WebFrameBridge.mm:
        (-[WebFrameBridge setWebFrame:]): Added.

        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::frameLoaderDestroyed): Added an assertion.
        (WebFrameLoaderClient::detachedFromParent4): Moved the call to close on the
        bridge here. Soon we will be able to remove this entirely!
        (WebFrameLoaderClient::createFrame): Rewrote this to use the method moved
        into WebFrame from the bridge.

        * WebView/WebFrame.mm:
        (-[WebFramePrivate dealloc]): Added code to release the bridge, because it's
        now owned by the frame.
        (-[WebFramePrivate finalize]): Added this missing method. We'd leak the script
        debugger under GC without this!
        (kit): Rewrote the function that maps from a WebCore::Frame to a WebFrame to
        use WebFrameLoaderClient instead of the bridge.
        (+[WebFrame _createFrameWithPage:frameName:frameView:ownerElement:]): Added.
        This is code that used to live in the bridge's init function.
        (+[WebFrame _createMainFrameWithPage:frameName:frameView:]): Ditto.
        (+[WebFrame WebCore::_createSubframeWithOwnerElement:frameName:frameView:]): Ditto.
        (-[WebFrame _initWithWebFrameView:webView:bridge:]): Retain the bridge, since
        the WebView is now the bridge's owner.
        (-[WebFrame _updateBackground]): Changed this one call site that was calling the
        WebCore::Frame::bridge function directly to use the kit function instead.
        (-[WebFrame dealloc]): Added code to clear the WebFrame pointer in the bridge.
        This code won't last long -- we're eliminating the bridge soon.
        (-[WebFrame finalize]): Ditto.

        * WebView/WebFrameInternal.h: Added a coreFrame backpointer and two new methods
        for creating frames.

        * WebView/WebView.mm:
        (-[WebView _commonInitializationWithFrameName:groupName:]): Rewrote this to use
        the method moved into WebFrame from the bridge. Gets rid of the unpleasant idiom
        where we have to allocate a WebFrameBridge and then immediately release it.

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

19 files changed:
WebCore/ChangeLog
WebCore/WebCore.base.exp
WebCore/loader/FrameLoader.cpp
WebCore/page/Frame.cpp
WebCore/page/Frame.h
WebCore/page/FramePrivate.h
WebCore/page/mac/FrameMac.mm
WebCore/page/mac/WebCoreFrameBridge.h
WebCore/page/mac/WebCoreFrameBridge.mm
WebKit/mac/ChangeLog
WebKit/mac/DOM/WebDOMOperations.mm
WebKit/mac/DefaultDelegates/WebDefaultContextMenuDelegate.mm
WebKit/mac/Plugins/WebPluginController.mm
WebKit/mac/WebCoreSupport/WebFrameBridge.h
WebKit/mac/WebCoreSupport/WebFrameBridge.mm
WebKit/mac/WebCoreSupport/WebFrameLoaderClient.mm
WebKit/mac/WebView/WebFrame.mm
WebKit/mac/WebView/WebFrameInternal.h
WebKit/mac/WebView/WebView.mm

index 15b927d..bb936b0 100644 (file)
@@ -1,5 +1,30 @@
 2008-03-11  Darin Adler  <darin@apple.com>
 
+        Reviewed by Sam.
+
+        - remove all bridge-related things from WebCore except the bridge itself
+
+        * WebCore.base.exp: Removed the bridge and setBridge functions.
+
+        * loader/FrameLoader.cpp:
+        (WebCore::FrameLoader::detachFromParent): Removed call to the bridge's
+        close method.
+
+        * page/Frame.cpp:
+        (WebCore::Frame::~Frame): Removed call to setBridge(0).
+        (WebCore::FramePrivate::FramePrivate): Removed initialization of m_bridge.
+        * page/Frame.h: Removed setBridge and bridge functions.
+        * page/FramePrivate.h: Removed m_bridge pointer.
+        * page/mac/FrameMac.mm: Removed setBridge and bridge functions.
+
+        * page/mac/WebCoreFrameBridge.h: Added setWebCoreFrame: method.
+        Removed bridgeForDOMDocument: and clearFrame methods.
+        * page/mac/WebCoreFrameBridge.mm: Ditto.
+        (-[WebCoreFrameBridge close]): Changed to set m_frame to 0 directly.
+        (-[WebCoreFrameBridge setWebCoreFrame:]): Added.
+
+2008-03-11  Darin Adler  <darin@apple.com>
+
         - restored some code I removed in the Range change; this code can't go
           until the rest of the Range fix is in
 
index 0025da2..ab69551 100644 (file)
@@ -406,7 +406,6 @@ __ZN7WebCore5Frame21setProhibitsScrollingEb
 __ZN7WebCore5Frame26dashboardRegionsDictionaryEv
 __ZN7WebCore5Frame29cleanupScriptObjectsForPluginEPv
 __ZN7WebCore5Frame4initEv
-__ZN7WebCore5Frame9setBridgeEP18WebCoreFrameBridge
 __ZN7WebCore5FrameC1EPNS_4PageEPNS_21HTMLFrameOwnerElementEPNS_17FrameLoaderClientE
 __ZN7WebCore5Image10getNSImageEv
 __ZN7WebCore5Image20loadPlatformResourceEPKc
@@ -668,7 +667,6 @@ __ZNK7WebCore5Frame37baseWritingDirectionForSelectionStartEv
 __ZNK7WebCore5Frame4pageEv
 __ZNK7WebCore5Frame4treeEv
 __ZNK7WebCore5Frame4viewEv
-__ZNK7WebCore5Frame6bridgeEv
 __ZNK7WebCore5Frame6editorEv
 __ZNK7WebCore5Frame6loaderEv
 __ZNK7WebCore5Frame8documentEv
index 61992d5..603c2b8 100644 (file)
@@ -3200,9 +3200,6 @@ void FrameLoader::detachFromParent()
         m_frame->setView(0);
         m_frame->pageDestroyed();
     }
-#if PLATFORM(MAC)
-    [m_frame->bridge() close];
-#endif
     m_client->detachedFromParent4();
 }
 
index 0d75dad..20712b9 100644 (file)
@@ -155,11 +155,6 @@ Frame::~Frame()
 {
     setView(0);
     loader()->clearRecordedFormValues();
-
-#if PLATFORM(MAC)
-    setBridge(0);
-#endif
-    
     loader()->cancelAndClear();
     
     // FIXME: We should not be doing all this work inside the destructor
@@ -1887,7 +1882,6 @@ FramePrivate::FramePrivate(Page* page, Frame* parent, Frame* thisFrame, HTMLFram
 #endif
 #if PLATFORM(MAC)
     , m_windowScriptObject(nil)
-    , m_bridge(nil)
 #endif
 {
 }
index 41dfdda..2510f87 100644 (file)
@@ -48,14 +48,12 @@ namespace KJS {
 
 #if PLATFORM(MAC)
 #ifdef __OBJC__
-@class WebCoreFrameBridge;
 @class WebScriptObject;
 #else
 class NSArray;
 class NSDictionary;
 class NSMutableDictionary;
 class NSString;
-class WebCoreFrameBridge;
 class WebScriptObject;
 typedef int NSWritingDirection;
 #endif
@@ -87,11 +85,6 @@ public:
     
     void init();
 
-#if PLATFORM(MAC)    
-    void setBridge(WebCoreFrameBridge*);
-    WebCoreFrameBridge* bridge() const;
-#endif
-
     Page* page() const;
     HTMLFrameOwnerElement* ownerElement() const;
 
index 0582ef9..34695d2 100644 (file)
@@ -45,10 +45,8 @@ namespace KJS {
 
 #if PLATFORM(MAC)
 #ifdef __OBJC__
-@class WebCoreFrameBridge;
 @class WebScriptObject;
 #else
-class WebCoreFrameBridge;
 class WebScriptObject;
 #endif
 #endif
@@ -129,7 +127,6 @@ namespace WebCore {
 #endif
 #if PLATFORM(MAC)
         RetainPtr<WebScriptObject> m_windowScriptObject;
-        WebCoreFrameBridge* m_bridge;
 #endif
     };
 }
index f6bb972..6c977cd 100644 (file)
@@ -82,7 +82,6 @@
 #import "SystemTime.h"
 #import "TextResourceDecoder.h"
 #import "UserStyleSheetLoader.h"
-#import "WebCoreFrameBridge.h"
 #import "WebCoreViewFactory.h"
 #import "WebDashboardRegion.h"
 #import "WebScriptObjectPrivate.h"
@@ -114,27 +113,6 @@ namespace WebCore {
 using namespace EventNames;
 using namespace HTMLNames;
 
-void Frame::setBridge(WebCoreFrameBridge* bridge)
-{ 
-    if (d->m_bridge == bridge)
-        return;
-
-    if (!bridge) {
-        [d->m_bridge clearFrame];
-        HardRelease(d->m_bridge);
-        d->m_bridge = nil;
-        return;
-    }
-    HardRetain(bridge);
-    HardRelease(d->m_bridge);
-    d->m_bridge = bridge;
-}
-
-WebCoreFrameBridge* Frame::bridge() const
-{
-    return d->m_bridge;
-}
-
 // Either get cached regexp or build one that matches any of the labels.
 // The regexp we build is of the form:  (STR1|STR2|STRN)
 RegularExpression* regExpForLabels(NSArray* labels)
index f9f2fd5..fc0a7ad 100644 (file)
     BOOL _closed;
 }
 
+- (void)setWebCoreFrame:(WebCore::Frame*)webCoreFrame;
 - (WebCore::Frame*)_frame; // underscore to prevent conflict with -[NSView frame]
 
-+ (WebCoreFrameBridge *)bridgeForDOMDocument:(DOMDocument *)document;
-
 - (id)init;
 - (void)close;
 
-- (void)clearFrame;
-
 - (NSURL *)baseURL;
 
 - (void)forceLayoutAdjustingViewSize:(BOOL)adjustSizeFlag;
index 0abc4a8..3524f50 100644 (file)
@@ -215,13 +215,6 @@ static NSAppleEventDescriptor* aeDescFromJSValue(ExecState* exec, JSValue* jsVal
 
 @implementation WebCoreFrameBridge
 
-static inline WebCoreFrameBridge *bridge(Frame *frame)
-{
-    if (!frame)
-        return nil;
-    return frame->bridge();
-}
-
 - (NSString *)domain
 {
     Document *doc = m_frame->document();
@@ -230,11 +223,6 @@ static inline WebCoreFrameBridge *bridge(Frame *frame)
     return nil;
 }
 
-+ (WebCoreFrameBridge *)bridgeForDOMDocument:(DOMDocument *)document
-{
-    return bridge([document _document]->frame());
-}
-
 - (id)init
 {
     static bool initializedKJS;
@@ -267,7 +255,7 @@ static inline WebCoreFrameBridge *bridge(Frame *frame)
 
 - (void)close
 {
-    [self clearFrame];
+    m_frame = 0;
     _closed = YES;
 }
 
@@ -285,11 +273,6 @@ static inline WebCoreFrameBridge *bridge(Frame *frame)
     }
 }
 
-- (void)clearFrame
-{
-    m_frame = 0;
-}
-
 - (NSString *)_stringWithDocumentTypeStringAndMarkupString:(NSString *)markupString
 {
     return m_frame->documentTypeString() + markupString;
@@ -1179,6 +1162,11 @@ static HTMLFormElement *formElementFromDOMElement(DOMElement *element)
 
 // -------------------
 
+- (void)setWebCoreFrame:(Frame*)webCoreFrame
+{
+    m_frame = webCoreFrame;
+}
+
 - (Frame*)_frame
 {
     return m_frame;
index df17a22..f9b7ec2 100644 (file)
@@ -1,5 +1,58 @@
 2008-03-11  Darin Adler  <darin@apple.com>
 
+        Reviewed by Sam.
+
+        - remove all bridge-related things from WebCore except the bridge itself
+
+        * DOM/WebDOMOperations.mm:
+        (-[DOMNode _bridge]): Reimplemented to not use the bridgeForDOMDocument: method.
+
+        * DefaultDelegates/WebDefaultContextMenuDelegate.mm: Removed unneeded include.
+
+        * Plugins/WebPluginController.mm: Ditto.
+
+        * WebCoreSupport/WebFrameBridge.h: Removed unneeded things, including the
+        init and close methods. Added a setWebFrame: method.
+
+        * WebCoreSupport/WebFrameBridge.mm:
+        (-[WebFrameBridge setWebFrame:]): Added.
+
+        * WebCoreSupport/WebFrameLoaderClient.mm:
+        (WebFrameLoaderClient::frameLoaderDestroyed): Added an assertion.
+        (WebFrameLoaderClient::detachedFromParent4): Moved the call to close on the
+        bridge here. Soon we will be able to remove this entirely!
+        (WebFrameLoaderClient::createFrame): Rewrote this to use the method moved
+        into WebFrame from the bridge.
+
+        * WebView/WebFrame.mm:
+        (-[WebFramePrivate dealloc]): Added code to release the bridge, because it's
+        now owned by the frame.
+        (-[WebFramePrivate finalize]): Added this missing method. We'd leak the script
+        debugger under GC without this!
+        (kit): Rewrote the function that maps from a WebCore::Frame to a WebFrame to
+        use WebFrameLoaderClient instead of the bridge.
+        (+[WebFrame _createFrameWithPage:frameName:frameView:ownerElement:]): Added.
+        This is code that used to live in the bridge's init function.
+        (+[WebFrame _createMainFrameWithPage:frameName:frameView:]): Ditto.
+        (+[WebFrame WebCore::_createSubframeWithOwnerElement:frameName:frameView:]): Ditto.
+        (-[WebFrame _initWithWebFrameView:webView:bridge:]): Retain the bridge, since
+        the WebView is now the bridge's owner.
+        (-[WebFrame _updateBackground]): Changed this one call site that was calling the
+        WebCore::Frame::bridge function directly to use the kit function instead.
+        (-[WebFrame dealloc]): Added code to clear the WebFrame pointer in the bridge.
+        This code won't last long -- we're eliminating the bridge soon.
+        (-[WebFrame finalize]): Ditto.
+
+        * WebView/WebFrameInternal.h: Added a coreFrame backpointer and two new methods
+        for creating frames.
+
+        * WebView/WebView.mm:
+        (-[WebView _commonInitializationWithFrameName:groupName:]): Rewrote this to use
+        the method moved into WebFrame from the bridge. Gets rid of the unpleasant idiom
+        where we have to allocate a WebFrameBridge and then immediately release it.
+
+2008-03-11  Darin Adler  <darin@apple.com>
+
         Reviewed by Anders.
 
         - remove code depending on the bridge to get from an NSView to a WebCore::Frame
index ace21c3..5cfdfd2 100644 (file)
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-#import <WebKit/WebDOMOperationsPrivate.h>
-
+#import "WebDOMOperationsPrivate.h"
+
+#import "WebArchiver.h"
+#import "WebDataSourcePrivate.h"
+#import "WebFrameBridge.h"
+#import "WebFrameInternal.h"
+#import "WebFramePrivate.h"
+#import "WebKitNSStringExtras.h"
+#import <JavaScriptCore/Assertions.h>
+#import <WebCore/Document.h>
 #import <WebKit/DOMExtensions.h>
 #import <WebKit/DOMHTML.h>
-#import <JavaScriptCore/Assertions.h>
-#import <WebKit/WebFrameBridge.h>
-#import <WebKit/WebDataSourcePrivate.h>
-#import <WebKit/WebFramePrivate.h>
-#import <WebKit/WebKitNSStringExtras.h>
-#import <WebKit/WebArchiver.h>
 
 #if ENABLE(SVG)
 #import <WebKit/DOMSVG.h>
 #endif
 
+using namespace WebCore;
+
 @implementation DOMNode (WebDOMNodeOperations)
 
 - (WebFrameBridge *)_bridge
 {
-    return (WebFrameBridge *)[WebFrameBridge bridgeForDOMDocument:[self ownerDocument]];
+    Document* document = core(self)->document();
+    if (!document)
+        return nil;
+    Frame* frame = document->frame();
+    if (!frame)
+        return nil;
+    return [kit(frame) _bridge];
 }
 
 - (WebArchive *)webArchive
index 1624856..d82e059 100644 (file)
@@ -49,7 +49,6 @@
 #import <WebCore/Frame.h>
 #import <WebCore/FrameLoader.h>
 #import <WebCore/KURL.h>
-#import <WebCore/WebCoreFrameBridge.h>
 #import <WebKit/DOM.h>
 #import <WebKit/DOMPrivate.h>
 
index 9e9ec19..363911f 100644 (file)
@@ -34,7 +34,6 @@
 #import <WebCore/FrameLoader.h>
 #import <WebCore/ResourceRequest.h>
 #import <WebCore/PlatformString.h>
-#import <WebCore/WebCoreFrameBridge.h>
 #import <WebCore/DocumentLoader.h>
 #import <WebKit/WebDataSourceInternal.h>
 #import <WebKit/WebFrameBridge.h>
index a6afd98..070111f 100644 (file)
 
 #import <WebCore/WebCoreFrameBridge.h>
 
-namespace WebCore {
-    class HTMLFrameOwnerElement;
-    class Page;
-}
-
 @class WebFrame;
-@class WebFrameView;
 
 @interface WebFrameBridge : WebCoreFrameBridge {
 @public
-    WebFrame *_frame;
+    WebFrame *_webFrame;
 }
-- (id)initMainFrameWithPage:(WebCore::Page*)page frameName:(const WebCore::String&)name frameView:(WebFrameView *)frameView;
-- (id)initSubframeWithOwnerElement:(WebCore::HTMLFrameOwnerElement*)ownerElement frameName:(const WebCore::String&)name frameView:(WebFrameView *)frameView;
-- (void)close;
+- (void)setWebFrame:(WebFrame *)webFrame;
 - (WebFrame *)webFrame;
 @end
index 15b0f86..9d90581 100644 (file)
 
 #import "WebFrameBridge.h"
 
-#import "WebFrameInternal.h"
-#import "WebFrameLoaderClient.h"
-#import "WebKitStatisticsPrivate.h"
-#import "WebView.h"
-#import <WebCore/Frame.h>
-#import <WebCore/FrameTree.h>
-#import <WebCore/HTMLFrameOwnerElement.h>
-
-using namespace WebCore;
+#import "WebFrame.h"
 
 @implementation WebFrameBridge
 
-- (void)finishInitializingWithPage:(Page*)page frameName:(const String&)name frameView:(WebFrameView *)frameView ownerElement:(HTMLFrameOwnerElement*)ownerElement
-{
-    ++WebBridgeCount;
-
-    WebView *webView = kit(page);
-
-    _frame = [[WebFrame alloc] _initWithWebFrameView:frameView webView:webView bridge:self];
-
-    m_frame = new Frame(page, ownerElement, new WebFrameLoaderClient(_frame));
-    m_frame->setBridge(self);
-    m_frame->tree()->setName(name);
-    m_frame->init();
-
-    [self setTextSizeMultiplier:[webView textSizeMultiplier]];
-}
-
-- (id)initMainFrameWithPage:(Page*)page frameName:(const String&)name frameView:(WebFrameView *)frameView
-{
-    self = [super init];
-    [self finishInitializingWithPage:page frameName:name frameView:frameView ownerElement:0];
-    return self;
-}
-
-- (id)initSubframeWithOwnerElement:(HTMLFrameOwnerElement*)ownerElement frameName:(const String&)name frameView:(WebFrameView *)frameView
+- (void)setWebFrame:(WebFrame *)webFrame;
 {
-    self = [super init];
-    [self finishInitializingWithPage:ownerElement->document()->frame()->page() frameName:name frameView:frameView ownerElement:ownerElement];
-    return self;
+    _webFrame = webFrame;
 }
 
 - (WebFrame *)webFrame
 {
-    return _frame;
-}
-
-- (void)close
-{
-    [super close];
-    if (!_frame)
-        return;
-    --WebBridgeCount;
-    [_frame release];
-    _frame = nil;
+    return _webFrame;
 }
 
 @end
index 35edeb0..c8b1887 100644 (file)
 #import <WebCore/ResourceLoader.h>
 #import <WebCore/ResourceRequest.h>
 #import <WebCore/SharedBuffer.h>
-#import <WebCore/WebCoreFrameBridge.h>
 #import <WebCore/WebCoreObjCExtras.h>
 #import <WebCore/Widget.h>
 #import <WebKit/DOMElement.h>
@@ -146,6 +145,7 @@ WebFrameLoaderClient::WebFrameLoaderClient(WebFrame *webFrame)
 
 void WebFrameLoaderClient::frameLoaderDestroyed()
 {
+    ASSERT(!m_webFrame->_private->bridge);
     delete this;
 }
 
@@ -212,6 +212,7 @@ void WebFrameLoaderClient::detachedFromParent3()
 
 void WebFrameLoaderClient::detachedFromParent4()
 {
+    [m_webFrame->_private->bridge close];
     m_webFrame->_private->bridge = nil;
 }
 
@@ -1133,24 +1134,23 @@ PassRefPtr<Frame> WebFrameLoaderClient::createFrame(const KURL& url, const Strin
     [childView _setMarginWidth:marginWidth];
     [childView _setMarginHeight:marginHeight];
 
-    WebFrameBridge *newBridge = [[WebFrameBridge alloc] initSubframeWithOwnerElement:ownerElement frameName:name frameView:childView];
+    RefPtr<Frame> newCoreFrame = [WebFrame _createSubframeWithOwnerElement:ownerElement frameName:name frameView:childView];
+
     [childView release];
 
-    if (!newBridge)
+    if (!newCoreFrame)
         return 0;
 
-    [m_webFrame.get() _addChild:[newBridge webFrame]];
-    [newBridge release];
+    WebFrame *newFrame = kit(newCoreFrame.get());
 
-    RefPtr<Frame> newFrame = [newBridge _frame];
-    
-    [m_webFrame.get() _loadURL:url referrer:referrer intoChild:kit(newFrame.get())];
+    [m_webFrame.get() _addChild:newFrame];    
+    [m_webFrame.get() _loadURL:url referrer:referrer intoChild:newFrame];
 
     // The frame's onload handler may have removed it from the document.
-    if (!newFrame->tree()->parent())
+    if (!newCoreFrame->tree()->parent())
         return 0;
 
-    return newFrame.get();
+    return newCoreFrame.release();
 
     END_BLOCK_OBJC_EXCEPTIONS;
 
index 5382429..e2cd079 100644 (file)
@@ -136,13 +136,21 @@ NSString *WebPageCacheDocumentViewKey = @"WebPageCacheDocumentViewKey";
 
 - (void)dealloc
 {
+    [bridge release];
     [webFrameView release];
-    
+
     delete scriptDebugger;
 
     [super dealloc];
 }
 
+- (void)finalize
+{
+    delete scriptDebugger;
+
+    [super finalize];
+}
+
 - (void)setWebFrameView:(WebFrameView *)v 
 { 
     [v retain];
@@ -237,11 +245,6 @@ EditableLinkBehavior core(WebKitEditableLinkBehavior editableLinkBehavior)
 
 @implementation WebFrame (WebInternal)
 
-static inline WebFrame *frame(WebCoreFrameBridge *bridge)
-{
-    return ((WebFrameBridge *)bridge)->_frame;
-}
-
 Frame* core(WebFrame *frame)
 {
     if (!frame)
@@ -255,7 +258,7 @@ Frame* core(WebFrame *frame)
 
 WebFrame *kit(Frame* frame)
 {
-    return frame ? ((WebFrameBridge *)frame->bridge())->_frame : nil;
+    return frame ? static_cast<WebFrameLoaderClient*>(frame->loader()->client())->webFrame() : nil;
 }
 
 Page* core(WebView *webView)
@@ -276,6 +279,37 @@ WebView *getWebView(WebFrame *webFrame)
     return kit(coreFrame->page());
 }
 
++ (PassRefPtr<Frame>)_createFrameWithPage:(Page*)page frameName:(const String&)name frameView:(WebFrameView *)frameView ownerElement:(HTMLFrameOwnerElement*)ownerElement
+{
+    ++WebBridgeCount;
+
+    WebView *webView = kit(page);
+
+    WebFrameBridge *bridge = [[WebFrameBridge alloc] init];
+    WebFrame *frame = [[self alloc] _initWithWebFrameView:frameView webView:webView bridge:bridge];
+    RefPtr<Frame> coreFrame = new Frame(page, ownerElement, new WebFrameLoaderClient(frame));
+    [frame release];
+    [bridge setWebCoreFrame:coreFrame.get()];
+    [bridge release];
+
+    coreFrame->tree()->setName(name);
+    coreFrame->init();
+
+    [bridge setTextSizeMultiplier:[webView textSizeMultiplier]];
+
+    return coreFrame.release();
+}
+
++ (void)_createMainFrameWithPage:(Page*)page frameName:(const String&)name frameView:(WebFrameView *)frameView
+{
+    [self _createFrameWithPage:page frameName:name frameView:frameView ownerElement:0];
+}
+
++ (PassRefPtr<WebCore::Frame>)_createSubframeWithOwnerElement:(HTMLFrameOwnerElement*)ownerElement frameName:(const String&)name frameView:(WebFrameView *)frameView
+{
+    return [self _createFrameWithPage:ownerElement->document()->frame()->page() frameName:name frameView:frameView ownerElement:ownerElement];
+}
+
 /*
     In the case of saving state about a page with frames, we store a tree of items that mirrors the frame tree.  
     The item that was the target of the user's navigation is designated as the "targetItem".  
@@ -389,7 +423,7 @@ WebView *getWebView(WebFrame *webFrame)
         return nil;
 
     _private = [[WebFramePrivate alloc] init];
-    _private->bridge = bridge;
+    _private->bridge = [bridge retain];
 
     if (fv) {
         [_private setWebFrameView:fv];
@@ -420,8 +454,8 @@ WebView *getWebView(WebFrame *webFrame)
 
     Frame* coreFrame = core(self);
     for (Frame* frame = coreFrame; frame; frame = frame->tree()->traverseNext(coreFrame)) {
-        WebFrameBridge *bridge = (WebFrameBridge *)frame->bridge();
-        WebFrame *webFrame = [bridge webFrame];
+        WebFrame *webFrame = kit(frame);
+        WebFrameBridge *bridge = [webFrame _bridge];
         // Never call setDrawsBackground:YES here on the scroll view or the background color will
         // flash between pages loads. setDrawsBackground:YES will be called in _frameLoadCompleted.
         if (!drawsBackground)
@@ -675,7 +709,7 @@ static inline WebDataSource *dataSource(DocumentLoader* loader)
 
 - (void)dealloc
 {
-    ASSERT(_private->bridge == nil);
+    [_private->bridge setWebFrame:nil];
     [_private release];
     --WebFrameCount;
     [super dealloc];
@@ -683,7 +717,7 @@ static inline WebDataSource *dataSource(DocumentLoader* loader)
 
 - (void)finalize
 {
-    ASSERT(_private->bridge == nil);
+    [_private->bridge setWebFrame:nil];
     --WebFrameCount;
     [super finalize];
 }
index 6973f2a..f8d5241 100644 (file)
@@ -57,6 +57,7 @@ namespace WebCore {
     class FrameLoader;
     class HistoryItem;
     class HTMLElement;
+    class HTMLFrameOwnerElement;
     class Node;
     class Page;
     class Range;
@@ -94,6 +95,7 @@ WebView *getWebView(WebFrame *webFrame);
 
 @interface WebFramePrivate : NSObject {
 @public
+    WebCore::Frame* coreFrame;
     WebFrameView *webFrameView;
     WebFrameBridge *bridge;
     WebScriptDebugger* scriptDebugger;
@@ -107,6 +109,9 @@ struct WebCoreHistoryItem;
 
 @interface WebFrame (WebInternal)
 
++ (void)_createMainFrameWithPage:(WebCore::Page*)page frameName:(const WebCore::String&)name frameView:(WebFrameView *)frameView;
++ (PassRefPtr<WebCore::Frame>)_createSubframeWithOwnerElement:(WebCore::HTMLFrameOwnerElement*)ownerElement frameName:(const WebCore::String&)name frameView:(WebFrameView *)frameView;
+
 - (void)_updateBackground;
 - (void)_setInternalLoadDelegate:(id)internalLoadDelegate;
 - (id)_internalLoadDelegate;
index 202bccf..794f0c6 100644 (file)
 #import <WebCore/SelectionController.h>
 #import <WebCore/Settings.h>
 #import <WebCore/TextResourceDecoder.h>
-#import <WebCore/WebCoreFrameBridge.h>
 #import <WebCore/WebCoreObjCExtras.h>
 #import <WebCore/WebCoreTextRenderer.h>
 #import <WebCore/WebCoreView.h>
@@ -1819,7 +1818,7 @@ WebFrameLoadDelegateImplementationCache* WebViewGetFrameLoadDelegateImplementati
     WebKitInitializeDatabasesIfNecessary();
 
     _private->page = new Page(new WebChromeClient(self), new WebContextMenuClient(self), new WebEditorClient(self), new WebDragClient(self), new WebInspectorClient(self));
-    [[[WebFrameBridge alloc] initMainFrameWithPage:_private->page frameName:frameName frameView:frameView] release];
+    [WebFrame _createMainFrameWithPage:_private->page frameName:frameName frameView:frameView];
 
 #ifndef BUILDING_ON_TIGER
     if (WebKitLinkedOnOrAfter(WEBKIT_FIRST_VERSION_WITH_LOADING_DURING_COMMON_RUNLOOP_MODES))