Reviewed by Adele.
authormjs <mjs@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 8 Feb 2006 03:01:16 +0000 (03:01 +0000)
committermjs <mjs@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 8 Feb 2006 03:01:16 +0000 (03:01 +0000)
        - remove all remains of old-style frame tree, ChildFrame, ObjectContents and FrameList are all gone

        * WebCore.xcodeproj/project.pbxproj:
        * bridge/BrowserExtension.h:
        * bridge/mac/BrowserExtensionMac.h:
        * bridge/mac/BrowserExtensionMac.mm:
        (WebCore::BrowserExtensionMac::createNewWindow):
        * khtml/ecma/kjs_window.cpp:
        (KJS::createNewWindow):
        (KJS::Window::indexGetter):
        (KJS::Window::getOwnPropertySlot):
        (KJS::WindowFunc::callAsFunction):
        (KJS::FrameArray::getValueProperty):
        (KJS::FrameArray::indexGetter):
        (KJS::FrameArray::nameGetter):
        (KJS::FrameArray::getOwnPropertySlot):
        * kwq/KWQFrame.mm:
        (QFrame::setFrameStyle):
        * page/Frame.cpp:
        (WebCore::Frame::Frame):
        (WebCore::Frame::stopLoading):
        (WebCore::Frame::clear):
        (WebCore::Frame::stopAnimations):
        (WebCore::Frame::checkCompleted):
        (WebCore::Frame::checkEmitLoadEvent):
        (WebCore::Frame::requestFrame):
        (WebCore::Frame::requestObject):
        (WebCore::Frame::loadSubframe):
        (WebCore::Frame::findFrame):
        (WebCore::Frame::frameExists):
        (WebCore::Frame::setZoomFactor):
        (WebCore::Frame::frameNames):
        (WebCore::Frame::frames):
        (WebCore::Frame::childFrameNamed):
        (WebCore::Frame::slotPartRemoved):
        (WebCore::Frame::connectChild):
        (WebCore::Frame::disconnectChild):
        (WebCore::Frame::canCachePage):
        (WebCore::Frame::setPolicyBaseURL):
        (WebCore::Frame::treeNode):
        (WebCore::Frame::frameDetached):
        * page/Frame.h:
        * page/FramePrivate.h:
        * page/FrameTreeNode.h:
        (WebCore::FrameTreeNode::name):
        (WebCore::FrameTreeNode::parent):
        (WebCore::FrameTreeNode::nextSibling):
        (WebCore::FrameTreeNode::previousSibling):
        (WebCore::FrameTreeNode::firstChild):
        (WebCore::FrameTreeNode::lastChild):
        (WebCore::FrameTreeNode::childCount):
        * page/ObjectContents.h: Removed.
        * page/Plugin.h:
        (WebCore::Plugin::view):

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

13 files changed:
WebCore/ChangeLog
WebCore/WebCore.xcodeproj/project.pbxproj
WebCore/bridge/BrowserExtension.h
WebCore/bridge/mac/BrowserExtensionMac.h
WebCore/bridge/mac/BrowserExtensionMac.mm
WebCore/khtml/ecma/kjs_window.cpp
WebCore/kwq/KWQFrame.mm
WebCore/page/Frame.cpp
WebCore/page/Frame.h
WebCore/page/FramePrivate.h
WebCore/page/FrameTreeNode.h
WebCore/page/ObjectContents.h [deleted file]
WebCore/page/Plugin.h

index 28fb1b2214637e4281228495a3cb9aaf10f55278..cf19ed165a329f0b024c9b6a3dc48f2a7c1b2138 100644 (file)
@@ -1,3 +1,62 @@
+2006-02-07  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Adele.
+
+        - remove all remains of old-style frame tree, ChildFrame, ObjectContents and FrameList are all gone
+
+        * WebCore.xcodeproj/project.pbxproj:
+        * bridge/BrowserExtension.h:
+        * bridge/mac/BrowserExtensionMac.h:
+        * bridge/mac/BrowserExtensionMac.mm:
+        (WebCore::BrowserExtensionMac::createNewWindow):
+        * khtml/ecma/kjs_window.cpp:
+        (KJS::createNewWindow):
+        (KJS::Window::indexGetter):
+        (KJS::Window::getOwnPropertySlot):
+        (KJS::WindowFunc::callAsFunction):
+        (KJS::FrameArray::getValueProperty):
+        (KJS::FrameArray::indexGetter):
+        (KJS::FrameArray::nameGetter):
+        (KJS::FrameArray::getOwnPropertySlot):
+        * kwq/KWQFrame.mm:
+        (QFrame::setFrameStyle):
+        * page/Frame.cpp:
+        (WebCore::Frame::Frame):
+        (WebCore::Frame::stopLoading):
+        (WebCore::Frame::clear):
+        (WebCore::Frame::stopAnimations):
+        (WebCore::Frame::checkCompleted):
+        (WebCore::Frame::checkEmitLoadEvent):
+        (WebCore::Frame::requestFrame):
+        (WebCore::Frame::requestObject):
+        (WebCore::Frame::loadSubframe):
+        (WebCore::Frame::findFrame):
+        (WebCore::Frame::frameExists):
+        (WebCore::Frame::setZoomFactor):
+        (WebCore::Frame::frameNames):
+        (WebCore::Frame::frames):
+        (WebCore::Frame::childFrameNamed):
+        (WebCore::Frame::slotPartRemoved):
+        (WebCore::Frame::connectChild):
+        (WebCore::Frame::disconnectChild):
+        (WebCore::Frame::canCachePage):
+        (WebCore::Frame::setPolicyBaseURL):
+        (WebCore::Frame::treeNode):
+        (WebCore::Frame::frameDetached):
+        * page/Frame.h:
+        * page/FramePrivate.h:
+        * page/FrameTreeNode.h:
+        (WebCore::FrameTreeNode::name):
+        (WebCore::FrameTreeNode::parent):
+        (WebCore::FrameTreeNode::nextSibling):
+        (WebCore::FrameTreeNode::previousSibling):
+        (WebCore::FrameTreeNode::firstChild):
+        (WebCore::FrameTreeNode::lastChild):
+        (WebCore::FrameTreeNode::childCount):
+        * page/ObjectContents.h: Removed.
+        * page/Plugin.h:
+        (WebCore::Plugin::view):
+
 2006-02-07  Adele Peterson  <adele@apple.com>
 
         Reviewed by Maciej.
index 3b8b6c96e7ce27c7f91c45b28653b245fa2b24f4..d01662771531dbe00d867a28ccb5e220e76992a1 100644 (file)
@@ -8,7 +8,6 @@
 
 /* Begin PBXBuildFile section */
                1A37F63A0988EE3300D05E90 /* JSCore.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A37F6390988EE3300D05E90 /* JSCore.cpp */; };
-               1A3D8557097647B5002C85D1 /* ObjectContents.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A3D8556097647B4002C85D1 /* ObjectContents.h */; };
                1A69D381085627410009880D /* domparser.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A69D37F085627410009880D /* domparser.h */; };
                1A69D382085627410009880D /* domparser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A69D380085627410009880D /* domparser.cpp */; };
                1ADB5699098827AD0032EEE2 /* JSEvents.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1ADB5698098827AD0032EEE2 /* JSEvents.cpp */; };
 
 /* Begin PBXFileReference section */
                1A37F6390988EE3300D05E90 /* JSCore.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSCore.cpp; sourceTree = "<group>"; };
-               1A3D8556097647B4002C85D1 /* ObjectContents.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = ObjectContents.h; sourceTree = "<group>"; };
                1A69D37F085627410009880D /* domparser.h */ = {isa = PBXFileReference; fileEncoding = 4; indentWidth = 4; lastKnownFileType = sourcecode.c.h; path = domparser.h; sourceTree = "<group>"; tabWidth = 8; usesTabs = 0; };
                1A69D380085627410009880D /* domparser.cpp */ = {isa = PBXFileReference; fileEncoding = 4; indentWidth = 4; lastKnownFileType = sourcecode.cpp.cpp; path = domparser.cpp; sourceTree = "<group>"; tabWidth = 8; usesTabs = 0; };
                1ADB5698098827AD0032EEE2 /* JSEvents.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = JSEvents.cpp; path = bindings/js/JSEvents.cpp; sourceTree = "<group>"; };
                                65A21482097A3F5300B9050A /* FrameTreeNode.cpp */,
                                65CBFEF80974F607001DAC25 /* FrameView.h */,
                                65CBFEF70974F607001DAC25 /* FrameView.cpp */,
-                               1A3D8556097647B4002C85D1 /* ObjectContents.h */,
                                65A21467097A329100B9050A /* Page.h */,
                                65FEA86809833ADE00BED4AB /* Page.cpp */,
                                65D1C1C909932B22000CB324 /* Plugin.h */,
                                FAE0418B09759694000540BE /* RenderSVGImage.h in Headers */,
                                FAE04190097596C9000540BE /* SVGImageLoader.h in Headers */,
                                65CBFEFA0974F607001DAC25 /* FrameView.h in Headers */,
-                               1A3D8557097647B5002C85D1 /* ObjectContents.h in Headers */,
                                A8185F3909765766005826D9 /* DocumentTypeImpl.h in Headers */,
                                A8185F3B09765766005826D9 /* DOMImplementationImpl.h in Headers */,
                                A8185F3D09765766005826D9 /* DocumentFragmentImpl.h in Headers */,
index 0ce3f162491f163af0dd185a95c6eb3312cf50f9..2950b2cbf251f299ec9542d729a795541fbe9e51 100644 (file)
 #include <qobject.h>
 
 class KURL;
-class ObjectContents;
 
 namespace WebCore {
 
+class Frame;
+
 struct URLArgs {
 
     QString frameName;
@@ -98,7 +99,7 @@ public:
     virtual void createNewWindow(const KURL &url, 
                                  const URLArgs &urlArgs, 
                                  const WindowArgs &winArgs, 
-                                 ObjectContents *&part) = 0;
+                                 Frame*& part) = 0;
     
     virtual void setIconURL(const KURL &url) = 0;
     virtual void setTypedIconURL(const KURL &url, const QString &type) = 0;
index e16f6ee63e11d145a5ee1d3b99356134b5c1353f..f5c4e22bc3f056520fb2f1c4cb374191c03b5d14 100644 (file)
@@ -40,10 +40,10 @@ public:
      
     virtual void createNewWindow(const KURL &url, 
                                  const URLArgs &urlArgs = URLArgs());
-    virtual void createNewWindow(const KURL &url,
-                                 const URLArgs &urlArgs, 
-                                 const WindowArgs &winArgs, 
-                                 ObjectContents *&part);
+    virtual void createNewWindow(const KURLurl,
+                                 const URLArgsurlArgs, 
+                                 const WindowArgswinArgs, 
+                                 Frame*& part);
 
     virtual void setIconURL(const KURL &url);
     virtual void setTypedIconURL(const KURL &url, const QString &type);
@@ -59,7 +59,7 @@ private:
      void createNewWindow(const KURL &url, 
                           const URLArgs &urlArgs, 
                           const WindowArgs &winArgs, 
-                          ObjectContents **part);
+                          Frame** part);
 
      MacFrame *m_frame;
 };
index f16772b5a3d8f8aa37b2d099a2c9cfa679cdeb47..9b3978f6b562bf0c3b37493521b35c9fbbcd162a 100644 (file)
@@ -61,7 +61,7 @@ void BrowserExtensionMac::createNewWindow(const KURL &url, const URLArgs &urlArg
 void BrowserExtensionMac::createNewWindow(const KURL &url, 
                                                const URLArgs &urlArgs, 
                                                const WindowArgs &winArgs, 
-                                               ObjectContents *&part)
+                                               Frame*& part)
 {
     createNewWindow(url, urlArgs, winArgs, &part);
 }
@@ -69,7 +69,7 @@ void BrowserExtensionMac::createNewWindow(const KURL &url,
 void BrowserExtensionMac::createNewWindow(const KURL &url, 
                                                const URLArgs &urlArgs, 
                                                const WindowArgs &winArgs, 
-                                               ObjectContents **partResult)
+                                               Frame** partResult)
 { 
     KWQ_BLOCK_EXCEPTIONS;
 
index 2732149c4c28472d3db1cfb1014e2943b55d7193..219389427055dbfa8266577a34020c0e4e95fcef 100644 (file)
@@ -537,8 +537,8 @@ static int intFeature(const HashMap<DOMString, DOMString> &features, const char
 static Frame *createNewWindow(ExecState *exec, Window *openerWindow, const QString &URL,
     const QString &frameName, const WindowArgs &windowArgs, JSValue *dialogArgs)
 {
-    Frame *openerPart = openerWindow->frame();
-    Frame *activePart = Window::retrieveActive(exec)->frame();
+    FrameopenerPart = openerWindow->frame();
+    FrameactivePart = Window::retrieveActive(exec)->frame();
 
     URLArgs uargs;
 
@@ -554,14 +554,13 @@ static Frame *createNewWindow(ExecState *exec, Window *openerWindow, const QStri
     // do an isSafeScript call using the window we create, which can't be done before creating it.
     // We'd have to resolve all those issues to pass the URL instead of "".
 
-    ObjectContents *newPart = 0;
-    openerPart->browserExtension()->createNewWindow("", uargs, windowArgs, newPart);
+    Frame* newFrame = 0;
+    openerPart->browserExtension()->createNewWindow("", uargs, windowArgs, newFrame);
 
-    if (!newPart || !newPart->inherits("Frame"))
+    if (!newFrame)
         return 0;
 
-    Frame *newFrame = static_cast<Frame *>(newPart);
-    Window *newWindow = Window::retrieveWindow(newFrame);
+    Window* newWindow = Window::retrieveWindow(newFrame);
 
     newFrame->setOpener(openerPart);
     newFrame->setOpenedByJS(true);
@@ -908,15 +907,15 @@ JSValue *Window::namedFrameGetter(ExecState *exec, JSObject *originalObject, con
   return retrieve(thisObj->m_frame->findFrame(propertyName.qstring()));
 }
 
-JSValue *Window::indexGetter(ExecState *exec, JSObject *originalObject, const Identifier& propertyName, const PropertySlot& slot)
+JSValue* Window::indexGetter(ExecState* exec, JSObject* originalObject, const Identifier& propertyName, const PropertySlot& slot)
 {
-  Window *thisObj = static_cast<Window *>(slot.slotBase());
+  Window* thisObj = static_cast<Window*>(slot.slotBase());
   
-  QPtrList<ObjectContents> frames = thisObj->m_frame->frames();
-  ObjectContents* frame = frames.at(slot.index());
-  ASSERT(frame && frame->inherits("Frame"));
+  QPtrList<Frame> frames = thisObj->m_frame->frames();
+  Frame* frame = frames.at(slot.index());
+  ASSERT(frame);
 
-  return retrieve(static_cast<Frame*>(frame));
+  return retrieve(frame);
 }
 
 JSValue *Window::namedItemGetter(ExecState *exec, JSObject *originalObject, const Identifier& propertyName, const PropertySlot& slot)
@@ -1006,11 +1005,11 @@ bool Window::getOwnPropertySlot(ExecState *exec, const Identifier& propertyName,
   bool ok;
   unsigned int i = propertyName.toArrayIndex(&ok);
   if (ok) {
-    QPtrList<ObjectContents> frames = m_frame->frames();
+    QPtrList<Frame> frames = m_frame->frames();
     unsigned int len = frames.count();
     if (i < len) {
-      ObjectContents* frame = frames.at(i);
-      if (frame && frame->inherits("Frame")) {
+      Frame* frame = frames.at(i);
+      if (frame) {
         slot.setCustomIndex(this, i, indexGetter);
         return true;
       }
@@ -1638,12 +1637,11 @@ JSValue *WindowFunc::callAsFunction(ExecState *exec, JSObject *thisObj, const Li
       uargs.serviceType = "text/html";
       
       // request window (new or existing if framename is set)
-      ObjectContents* newPart = 0;
+      Frame* newFrame = 0;
       uargs.metaData().set("referrer", activePart->referrer());
-      frame->browserExtension()->createNewWindow("", uargs, windowArgs, newPart);
-      if (!newPart || !newPart->inherits("Frame"))
+      frame->browserExtension()->createNewWindow("", uargs, windowArgs, newFrame);
+      if (!newFrame)
           return jsUndefined();
-      Frame *newFrame = static_cast<Frame*>(newPart);
       newFrame->setOpener(frame);
       newFrame->setOpenedByJS(true);
       
@@ -2017,7 +2015,7 @@ JSValue *FrameArray::getValueProperty(ExecState *exec, int token)
 {
   switch (token) {
   case Length: {
-    QPtrList<ObjectContents> frames = m_frame->frames();
+    QPtrList<Frame> frames = m_frame->frames();
     unsigned int len = frames.count();
     return jsNumber(len);
   }
@@ -2035,7 +2033,7 @@ JSValue *FrameArray::getValueProperty(ExecState *exec, int token)
 JSValue *FrameArray::indexGetter(ExecState *exec, JSObject *originalObject, const Identifier& propertyName, const PropertySlot& slot)
 {
   FrameArray *thisObj = static_cast<FrameArray *>(slot.slotBase());
-  ObjectContents *frame = thisObj->m_frame->frames().at(slot.index());
+  Frame* frame = thisObj->m_frame->frames().at(slot.index());
 
   if (frame && frame->inherits("Frame")) {
     Frame *khtml = static_cast<Frame*>(frame);
@@ -2048,7 +2046,7 @@ JSValue *FrameArray::indexGetter(ExecState *exec, JSObject *originalObject, cons
 JSValue *FrameArray::nameGetter(ExecState *exec, JSObject *originalObject, const Identifier& propertyName, const PropertySlot& slot)
 {
   FrameArray *thisObj = static_cast<FrameArray *>(slot.slotBase());
-  ObjectContents *frame = thisObj->m_frame->findFrame(propertyName.qstring());
+  Frame* frame = thisObj->m_frame->findFrame(propertyName.qstring());
 
   if (frame && frame->inherits("Frame")) {
     Frame *khtml = static_cast<Frame*>(frame);
@@ -2072,7 +2070,7 @@ bool FrameArray::getOwnPropertySlot(ExecState *exec, const Identifier& propertyN
   }
 
   // check for the name or number
-  ObjectContents *frame = m_frame->findFrame(propertyName.qstring());
+  Frame* frame = m_frame->findFrame(propertyName.qstring());
   if (frame) {
     slot.setCustom(this, nameGetter);
     return true;
index a40d4cc3ba35c31efe4be5d0a6ce7164acef3fd8..d1aa1d1b5bef2f07c4a359ad1bc167f809d00747 100644 (file)
@@ -39,7 +39,7 @@ void QFrame::setFrameStyle(int s)
 
     // Tell the other side of the bridge about the frame style change.
     if (isFrameView()) {
-        if (Frame *frame = static_cast<FrameView *>(this)->frame()) {
+        if (Frameframe = static_cast<FrameView *>(this)->frame()) {
             KWQ_BLOCK_EXCEPTIONS;
             [Mac(frame)->bridge() setHasBorder:(s != NoFrame)];
             KWQ_UNBLOCK_EXCEPTIONS;
index a6ec3446195c9050af27bcf2b9481d55e41870e4..c08740a7e42b03ee5754069a1acbcfcf3608832c 100644 (file)
@@ -129,18 +129,6 @@ public:
     CachedCSSStyleSheet* m_cachedSheet;
 };
 
-FrameList::Iterator FrameList::find(const QString& name)
-{
-    Iterator it = begin();
-    Iterator e = end();
-
-    for (; it!=e; ++it)
-        if ((*it).m_frame && (*it).m_frame->treeNode()->name() == name)
-            break;
-
-    return it;
-}
-
 void Frame::init(FrameView* view, RenderPart* ownerRenderer)
 {
   AtomicString::init();
@@ -191,7 +179,10 @@ static FrameCounter frameCounter;
 
 Frame::Frame() 
     : d(0) 
-{ 
+{
+    // FIXME: Frames were originally created with a refcount of 1, leave this
+    // here until we can straighten that out
+    ref();
 #if !NDEBUG
     ++FrameCounter::count;
 #endif
@@ -318,7 +309,7 @@ void Frame::stopLoading(bool sendUnload)
   if (d->m_doc && d->m_doc->tokenizer())
     d->m_doc->tokenizer()->stopParsing();
     
-  if ( d->m_job )
+  if (d->m_job)
   {
     d->m_job->kill();
     d->m_job = 0;
@@ -357,19 +348,8 @@ void Frame::stopLoading(bool sendUnload)
   }
 
   // tell all subframes to stop as well
-  ConstFrameIt it = d->m_frames.begin();
-  ConstFrameIt end = d->m_frames.end();
-  for (; it != end; ++it ) {
-      ObjectContents *part = (*it).m_frame.get();
-      if (part) {
-          Frame *frame = static_cast<Frame *>(part);
-
-          if (frame->inherits("Frame"))
-              frame->stopLoading(sendUnload);
-          else
-              frame->closeURL();
-      }
-  }
+  for (Frame* child = treeNode()->firstChild(); child; child = child->treeNode()->nextSibling())
+      child->stopLoading(sendUnload);
 
   d->m_bPendingChildRedirection = false;
 
@@ -536,15 +516,8 @@ void Frame::clear(bool clearWindowProperties)
   d->m_doc = 0;
   d->m_decoder = 0;
 
-  {
-    ConstFrameIt it = d->m_frames.begin();
-    ConstFrameIt end = d->m_frames.end();
-    for(; it != end; ++it ) {
-      if ((*it).m_frame)
-        disconnectChild(&*it);
-    }
-  }
-  d->m_frames.clear();
+  for (Frame* child = treeNode()->firstChild(); child; child = child->treeNode()->nextSibling())
+      disconnectChild(child);
   d->m_plugins.clear();
 
   d->m_scheduledRedirection = noRedirectionScheduled;
@@ -829,16 +802,11 @@ void Frame::stop()
 
 void Frame::stopAnimations()
 {
-  if ( d->m_doc )
-    d->m_doc->docLoader()->setShowAnimations( KHTMLSettings::KAnimationDisabled );
+  if (d->m_doc)
+      d->m_doc->docLoader()->setShowAnimations(KHTMLSettings::KAnimationDisabled);
 
-  ConstFrameIt it = d->m_frames.begin();
-  ConstFrameIt end = d->m_frames.end();
-  for (; it != end; ++it )
-    if ((*it).m_frame && (*it).m_frame->inherits( "Frame" ) ) {
-      ObjectContents* p = (*it).m_frame.get();
-      static_cast<Frame*>( p )->stopAnimations();
-    }
+  for (Frame* child = treeNode()->firstChild(); child; child = child->treeNode()->nextSibling())
+      child->stopAnimations();
 }
 
 void Frame::gotoAnchor()
@@ -892,27 +860,25 @@ void Frame::slotLoaderRequestDone( DocLoader* dl, CachedObject *obj )
 void Frame::checkCompleted()
 {
   // Any frame that hasn't completed yet ?
-  ConstFrameIt it = d->m_frames.begin();
-  ConstFrameIt end = d->m_frames.end();
-  for (; it != end; ++it)
-    if (!(*it).m_frame->d->m_bComplete)
-      return;
+  for (Frame* child = treeNode()->firstChild(); child; child = child->treeNode()->nextSibling())
+      if (!child->d->m_bComplete)
+          return;
 
   // Have we completed before?
-  if ( d->m_bComplete )
-    return;
+  if (d->m_bComplete)
+      return;
 
   // Are we still parsing?
-  if ( d->m_doc && d->m_doc->parsing() )
-    return;
+  if (d->m_doc && d->m_doc->parsing())
+      return;
 
   // Still waiting for images/scripts from the loader ?
   int requests = 0;
-  if ( d->m_doc && d->m_doc->docLoader() )
-    requests = Cache::loader()->numRequests( d->m_doc->docLoader() );
+  if (d->m_doc && d->m_doc->docLoader())
+      requests = Cache::loader()->numRequests(d->m_doc->docLoader());
 
-  if ( requests > 0 )
-    return;
+  if (requests > 0)
+      return;
 
   // OK, completed.
   // Now do what should be done when we are really completed.
@@ -920,56 +886,44 @@ void Frame::checkCompleted()
 
   checkEmitLoadEvent(); // if we didn't do it before
 
-  if ( d->m_scheduledRedirection != noRedirectionScheduled )
-  {
-    // Do not start redirection for frames here! That action is
-    // deferred until the parent emits a completed signal.
-    if (!treeNode()->parent())
-      startRedirectionTimer();
+  if (d->m_scheduledRedirection != noRedirectionScheduled) {
+      // Do not start redirection for frames here! That action is
+      // deferred until the parent emits a completed signal.
+      if (!treeNode()->parent())
+          startRedirectionTimer();
 
-    emit completed( true );
-  }
-  else
-  {
-    if ( d->m_bPendingChildRedirection )
-      emit completed ( true );
-    else
-      emit completed();
+      emit completed(true);
+  } else {
+      if (d->m_bPendingChildRedirection)
+          emit completed (true);
+      else
+          emit completed();
   }
 }
 
 void Frame::checkEmitLoadEvent()
 {
-  if ( d->m_bLoadEventEmitted || !d->m_doc || d->m_doc->parsing() ) return;
-
-  ConstFrameIt it = d->m_frames.begin();
-  ConstFrameIt end = d->m_frames.end();
-  for (; it != end; ++it)
-    if (!(*it).m_frame->d->m_bComplete) // still got a frame running -> too early
-      return;
+    if (d->m_bLoadEventEmitted || !d->m_doc || d->m_doc->parsing())
+        return;
 
+    for (Frame* child = treeNode()->firstChild(); child; child = child->treeNode()->nextSibling())
+        if (!child->d->m_bComplete) // still got a frame running -> too early
+            return;
 
-  // All frames completed -> set their domain to the frameset's domain
-  // This must only be done when loading the frameset initially (#22039),
-  // not when following a link in a frame (#44162).
-  if (d->m_doc) {
-    DOMString domain = d->m_doc->domain();
-    ConstFrameIt it = d->m_frames.begin();
-    ConstFrameIt end = d->m_frames.end();
-    for (; it != end; ++it ) {
-      ObjectContents *p = (*it).m_frame.get();
-      if (p && p->inherits("Frame")) {
-        Frame* htmlFrame = static_cast<Frame *>(p);
-        if (htmlFrame->d->m_doc)
-          htmlFrame->d->m_doc->setDomain(domain);
-      }
+    // All frames completed -> set their domain to the frameset's domain
+    // This must only be done when loading the frameset initially (#22039),
+    // not when following a link in a frame (#44162).
+    if (d->m_doc) {
+        DOMString domain = d->m_doc->domain();
+        for (Frame* child = treeNode()->firstChild(); child; child = child->treeNode()->nextSibling())
+            if (child->d->m_doc)
+                child->d->m_doc->setDomain(domain);
     }
-  }
 
-  d->m_bLoadEventEmitted = true;
-  d->m_bUnloadEventEmitted = false;
-  if (d->m_doc)
-    d->m_doc->implicitClose();
+    d->m_bLoadEventEmitted = true;
+    d->m_bUnloadEventEmitted = false;
+    if (d->m_doc)
+        d->m_doc->implicitClose();
 }
 
 const KHTMLSettings *Frame::settings() const
@@ -1481,12 +1435,6 @@ DOMString Frame::requestFrameName()
 
 bool Frame::requestFrame(RenderPart* renderer, const QString& _url, const QString& frameName)
 {
-    FrameIt it = d->m_frames.find(frameName);
-    if (it == d->m_frames.end()) {
-        ChildFrame child;
-        it = d->m_frames.append(child);
-    }
-
     // Support for <frame src="javascript:string">
     KURL scriptURL;
     KURL url;
@@ -1496,26 +1444,26 @@ bool Frame::requestFrame(RenderPart* renderer, const QString& _url, const QStrin
     } else
         url = completeURL(_url);
 
-    if ((*it).m_frame) {
+    Frame* frame = childFrameNamed(frameName);
+    if (frame) {
         URLArgs args;
         args.metaData().set("referrer", d->m_referrer);
         args.reload = (d->m_cachePolicy == KIO::CC_Reload) || (d->m_cachePolicy == KIO::CC_Refresh);
-        static_cast<Frame *>((*it).m_frame.get())->openURLRequest(url, args);
-    } else {
-        if (!loadSubframe(&(*it), renderer, url, frameName, d->m_referrer))
-            return false;
-    }
-        
-    if (!scriptURL.isEmpty()) {
-        Frame *newPart = static_cast<Frame *>(&*(*it).m_frame); 
-        newPart->replaceContentsWithScriptResult(scriptURL);
-    }
+        frame->openURLRequest(url, args);
+    } else
+        frame = loadSubframe(renderer, url, frameName, d->m_referrer);
+    
+    if (!frame)
+        return false;
+
+    if (!scriptURL.isEmpty())
+        frame->replaceContentsWithScriptResult(scriptURL);
 
     return true;
 }
 
-bool Frame::requestObject(RenderPart *renderer, const QString &url, const QString &frameName,
-                          const QString &mimeType, const QStringList &paramNames, const QStringList &paramValues)
+bool Frame::requestObject(RenderPart* renderer, const QString& url, const QString& frameName,
+                          const QString& mimeType, const QStringList& paramNames, const QStringList& paramValues)
 {
     KURL completedURL;
     if (!url.isEmpty())
@@ -1525,13 +1473,11 @@ bool Frame::requestObject(RenderPart *renderer, const QString &url, const QStrin
         return true;
     
     bool useFallback;
-    if (shouldUsePlugin(renderer->element(), completedURL, mimeType, renderer->hasFallbackContent(), useFallback)) {
+    if (shouldUsePlugin(renderer->element(), completedURL, mimeType, renderer->hasFallbackContent(), useFallback))
         return loadPlugin(renderer, completedURL, mimeType, paramNames, paramValues, useFallback);
-    } else {
-        ChildFrame child;
-        QValueList<ChildFrame>::Iterator it = d->m_frames.append(child);
-        return loadSubframe(&(*it), renderer, completedURL, frameName, d->m_referrer);
-    }
+
+    // FIXME: ok to always make a new one? when does the old frame get removed?
+    return loadSubframe(renderer, completedURL, frameName, d->m_referrer);
 }
 
 bool Frame::shouldUsePlugin(NodeImpl* element, const KURL& url, const QString& mimeType, bool hasFallback, bool& useFallback)
@@ -1571,24 +1517,20 @@ bool Frame::loadPlugin(RenderPart *renderer, const KURL &url, const QString &mim
     return true;
 }
 
-bool Frame::loadSubframe(ChildFrame* child, RenderPart* renderer, const KURL& url, const QString& name, const DOMString& referrer)
+Frame* Frame::loadSubframe(RenderPart* renderer, const KURL& url, const QString& name, const DOMString& referrer)
 {
     Frame* frame = createFrame(url, name, renderer, referrer);
     if (!frame)  {
         checkEmitLoadEvent();
-        return false;
+        return 0;
     }
-        
-    frame->childBegin();
     
-    if (child->m_frame)
-        disconnectChild(child);
+    frame->childBegin();
     
     if (renderer && frame->view())
         renderer->setWidget(frame->view());
     
-    child->m_frame = frame;
-    connectChild(child);
+    connectChild(frame);
     
     checkEmitLoadEvent();
     
@@ -1603,7 +1545,7 @@ bool Frame::loadSubframe(ChildFrame* child, RenderPart* renderer, const KURL& ur
         frame->checkCompleted();
     }
 
-    return true;
+    return frame;
 }
 
 void Frame::submitFormAgain()
@@ -1741,39 +1683,20 @@ void Frame::slotChildCompleted( bool complete )
 }
 
 
-ChildFrame *Frame::childFrame(const QObject *obj)
+Frame* Frame::findFrame(const QString& f)
 {
-    const ObjectContents *part = static_cast<const ObjectContents *>(obj);
-
-    FrameIt it = d->m_frames.begin();
-    FrameIt end = d->m_frames.end();
-    for (; it != end; ++it )
-      if ((*it).m_frame == part)
-        return &(*it);
-
-    return 0L;
-}
-
-Frame *Frame::findFrame( const QString &f )
-{
-  // ### http://www.w3.org/TR/html4/appendix/notes.html#notes-frames
-  ConstFrameIt it = d->m_frames.find( f );
-  if (it == d->m_frames.end())
-    return 0L;
-  else {
-    ObjectContents *p = (*it).m_frame.get();
-    if (p && p->inherits("Frame"))
-      return (Frame*)p;
-    else
-      return 0L;
-  }
+    // FIXME: this only finds child frames, is it ever appropriate to use this?
+    // ### http://www.w3.org/TR/html4/appendix/notes.html#notes-frames
+    for (Frame* child = treeNode()->firstChild(); child; child = child->treeNode()->nextSibling())
+        if (child->treeNode()->name() == f)
+            return child;
+    return 0;
 }
 
 
 bool Frame::frameExists(const QString& frameName)
 {
-  ConstFrameIt it = d->m_frames.find(frameName);
-    return it != d->m_frames.end();
+    return findFrame(frameName);
 }
 
 int Frame::zoomFactor() const
@@ -1816,26 +1739,22 @@ void Frame::slotDecZoom()
     }
 }
 
-void Frame::setZoomFactor (int percent)
+void Frame::setZoomFactor(int percent)
 {
   
-  if (d->m_zoomFactor == percent) return;
+  if (d->m_zoomFactor == percent)
+      return;
+
   d->m_zoomFactor = percent;
 
-  if(d->m_doc) {
-    d->m_doc->recalcStyle( NodeImpl::Force );
-  }
+  if(d->m_doc)
+      d->m_doc->recalcStyle(NodeImpl::Force);
 
-  ConstFrameIt it = d->m_frames.begin();
-  ConstFrameIt end = d->m_frames.end();
-  for (; it != end; ++it )
-    if ((*it).m_frame && (*it).m_frame->inherits("Frame")) {
-      ObjectContents* p = (*it).m_frame.get();
-      static_cast<Frame*>(p)->setZoomFactor(d->m_zoomFactor);
-    }
+  for (Frame* child = treeNode()->firstChild(); child; child = child->treeNode()->nextSibling())
+      child->setZoomFactor(d->m_zoomFactor);
 
   if (d->m_doc && d->m_doc->renderer() && d->m_doc->renderer()->needsLayout())
-    view()->layout();
+      view()->layout();
 }
 
 void Frame::setJSStatusBarText( const QString &text )
@@ -1894,32 +1813,28 @@ QStringList Frame::frameNames() const
 {
   QStringList res;
 
-  ConstFrameIt it = d->m_frames.begin();
-  ConstFrameIt end = d->m_frames.end();
-  for (; it != end; ++it )
-      res += (*it).m_frame->treeNode()->name().qstring();
+  for (Frame* child = treeNode()->firstChild(); child; child = child->treeNode()->nextSibling())
+      res += child->treeNode()->name().qstring();
 
   return res;
 }
 
-QPtrList<ObjectContents> Frame::frames() const
+QPtrList<Frame> Frame::frames() const
 {
-  QPtrList<ObjectContents> res;
+  QPtrList<Frame> res;
 
-  ConstFrameIt it = d->m_frames.begin();
-  ConstFrameIt end = d->m_frames.end();
-  for (; it != end; ++it )
-      res.append((*it).m_frame.get());
+  for (Frame* child = treeNode()->firstChild(); child; child = child->treeNode()->nextSibling())
+      res.append(child);
 
   return res;
 }
 
-Frame *Frame::childFrameNamed(const QString &name) const
+Frame* Frame::childFrameNamed(const QString& name) const
 {
-  FrameList::Iterator it = d->m_frames.find(name);
-  if (it != d->m_frames.end())
-    return static_cast<Frame *>(&*(*it).m_frame);
-  return NULL;
+    for (Frame* child = treeNode()->firstChild(); child; child = child->treeNode()->nextSibling())
+        if (child->treeNode()->name() == name)
+            return child;
+    return 0;
 }
 
 bool Frame::shouldDragAutoNode(NodeImpl *node, int x, int y) const
@@ -2313,9 +2228,9 @@ JSValue* Frame::executeScript(const QString& filename, int baseLine, NodeImpl* n
   return ret;
 }
 
-void Frame::slotPartRemoved(ObjectContents  *part)
+void Frame::slotPartRemoved(Frame* frame)
 {
-    if (part == d->m_activeFrame)
+    if (frame == d->m_activeFrame)
         d->m_activeFrame = 0;
 }
 
@@ -2738,43 +2653,39 @@ bool Frame::isCharacterSmartReplaceExempt(const QChar &, bool)
     return true;
 }
 
-void Frame::connectChild(const ChildFrame *child) const
+void Frame::connectChild(Frame* frame) const
 {
-    ObjectContents* part = child->m_frame.get();
-    if (part && part->isFrame())
-    {
-        connect( part, SIGNAL( started( KIO::Job *) ),
-                 this, SLOT( slotChildStarted( KIO::Job *) ) );
-        connect( part, SIGNAL( completed() ),
-                 this, SLOT( slotChildCompleted() ) );
-        connect( part, SIGNAL( completed(bool) ),
-                 this, SLOT( slotChildCompleted(bool) ) );
-        connect( part, SIGNAL( setStatusBarText( const QString & ) ),
-                 this, SIGNAL( setStatusBarText( const QString & ) ) );
-        connect( this, SIGNAL( completed() ),
-                 part, SLOT( slotParentCompleted() ) );
-        connect( this, SIGNAL( completed(bool) ),
-                 part, SLOT( slotParentCompleted() ) );
+    if (frame) {
+        connect(frame, SIGNAL(started( KIO::Job *)),
+                this, SLOT(slotChildStarted(KIO::Job*)));
+        connect(frame, SIGNAL(completed()),
+                this, SLOT(slotChildCompleted()));
+        connect(frame, SIGNAL(completed(bool)),
+                this, SLOT( slotChildCompleted(bool) ) );
+        connect(frame, SIGNAL(setStatusBarText(const QString&)),
+                this, SIGNAL(setStatusBarText(const QString&)));
+        connect(this, SIGNAL(completed()),
+                frame, SLOT(slotParentCompleted()));
+        connect(this, SIGNAL(completed(bool)),
+                frame, SLOT(slotParentCompleted()));
     }
 }
 
-void Frame::disconnectChild(const ChildFrame *child) const
+void Frame::disconnectChild(Frame* frame) const
 {
-    ObjectContents *part = child->m_frame.get();
-    if (part && part->isFrame())
-    {
-        disconnect( part, SIGNAL( started( KIO::Job *) ),
-                    this, SLOT( slotChildStarted( KIO::Job *) ) );
-        disconnect( part, SIGNAL( completed() ),
-                    this, SLOT( slotChildCompleted() ) );
-        disconnect( part, SIGNAL( completed(bool) ),
-                    this, SLOT( slotChildCompleted(bool) ) );
-        disconnect( part, SIGNAL( setStatusBarText( const QString & ) ),
-                    this, SIGNAL( setStatusBarText( const QString & ) ) );
-        disconnect( this, SIGNAL( completed() ),
-                    part, SLOT( slotParentCompleted() ) );
-        disconnect( this, SIGNAL( completed(bool) ),
-                    part, SLOT( slotParentCompleted() ) );
+    if (frame) {
+        disconnect(frame, SIGNAL(started(KIO::Job*)),
+                   this, SLOT(slotChildStarted(KIO::Job*)));
+        disconnect(frame, SIGNAL(completed()),
+                   this, SLOT(slotChildCompleted()));
+        disconnect(frame, SIGNAL(completed(bool)),
+                   this, SLOT(slotChildCompleted(bool)));
+        disconnect(frame, SIGNAL(setStatusBarText(const QString&)),
+                   this, SIGNAL(setStatusBarText(const QString&)));
+        disconnect(this, SIGNAL(completed()),
+                   frame, SLOT(slotParentCompleted()));
+        disconnect(this, SIGNAL(completed(bool)),
+                   frame, SLOT(slotParentCompleted()));
     }
 }
 
@@ -3154,7 +3065,7 @@ bool Frame::canCachePage()
     // 3.  The page has no password fields.
     // 4.  The URL for the page is not https.
     // 5.  The page has no applets.
-    if (d->m_frames.count() || d->m_plugins.size() ||
+    if (treeNode()->childCount() || d->m_plugins.size() ||
         treeNode()->parent() ||
         d->m_url.protocol().startsWith("https") || 
         (d->m_doc && (d->m_doc->applets()->length() != 0 ||
@@ -3269,11 +3180,8 @@ void Frame::setPolicyBaseURL(const DOMString &s)
 {
     if (document())
         document()->setPolicyBaseURL(s);
-    ConstFrameIt end = d->m_frames.end();
-    for (ConstFrameIt it = d->m_frames.begin(); it != end; ++it) {
-        ObjectContents *subpart = (*it).m_frame.get();
-        static_cast<Frame *>(subpart)->setPolicyBaseURL(s);
-    }
+    for (Frame* child = treeNode()->firstChild(); child; child = child->treeNode()->nextSibling())
+        child->setPolicyBaseURL(s);
 }
 
 void Frame::forceLayout()
@@ -3602,7 +3510,7 @@ bool Frame::isComplete()
     return d->m_bComplete;
 }
 
-FrameTreeNode *Frame::treeNode()
+FrameTreeNode *Frame::treeNode() const
 {
     return &d->m_treeNode;
 }
@@ -3629,18 +3537,8 @@ void Frame::stopRedirectionTimer()
 void Frame::frameDetached()
 {
     Frame *parent = treeNode()->parent();
-    if (parent) {
-        FrameList& parentFrames = parent->d->m_frames;
-        FrameIt end = parentFrames.end();
-        for (FrameIt it = parentFrames.begin(); it != end; ++it) {
-            ChildFrame &child = *it;
-            if (child.m_frame == this) {
-                parent->disconnectChild(&child);
-                parentFrames.remove(it);
-                break;
-            }
-        }
-    }
+    if (parent)
+        parent->disconnectChild(this);
 }
 
 void Frame::updateBaseURLForEmptyDocument()
index f4286dacbea62e0dde7beb64af9ca40c85684e9d..c4d48eb9ac975c34591bf64d4cd4a26f2ced48fc 100644 (file)
@@ -32,7 +32,7 @@
 #include "Color.h"
 #include "FrameView.h"
 #include "NodeImpl.h"
-#include "ObjectContents.h"
+#include "Shared.h"
 #include "edit_actions.h"
 #include "text_affinity.h"
 #include "text_granularity.h"
@@ -111,8 +111,6 @@ class VisiblePosition;
 class XMLTokenizer;
 class Plugin;
 
-struct ChildFrame;
-
 template <typename T> class Timer;
 
 struct MarkedTextUnderline {
@@ -132,7 +130,7 @@ enum ObjectContentType
     ObjectContentPlugin,
 };
 
-class Frame : public ObjectContents {
+class Frame : public Shared<Frame>, public QObject {
   friend class FrameView;
   friend class KJS::DOMDocument;
   friend class KJS::Selection;
@@ -161,12 +159,7 @@ public:
   Frame();
   virtual ~Frame();
 
-  /**
-   * Opens the specified URL @p url.
-   *
-   * Reimplemented from @ref ObjectContents::openURL .
-   */
-  virtual bool openURL( const KURL &url );
+  virtual bool openURL(const KURL&);
 
   void didExplicitOpen();
 
@@ -589,7 +582,7 @@ public:
    */
   QStringList frameNames() const;
 
-  QPtrList<ObjectContents> frames() const;
+  QPtrList<Frame> frames() const;
 
   Frame *childFrameNamed(const QString &name) const;
 
@@ -603,7 +596,7 @@ public:
    * Not necessarily a direct child of ours, framesets can be nested.
    * Returns "this" if this part isn't a frameset.
    */
-  ObjectContents *currentFrame() const;
+  Frame* currentFrame() const;
 
   /**
    * Returns whether a frame with the specified name is exists or not.
@@ -734,9 +727,6 @@ public:
   
   void selectClosestWordFromMouseEvent(QMouseEvent *mouse, NodeImpl *innerNode, int x, int y);
 
-  /**
-   * Internal empty reimplementation of @ref ObjectContents::openFile .
-   */
   virtual bool openFile();
 
   virtual void urlSelected( const QString &url, int button, int state,
@@ -828,11 +818,11 @@ private slots:
 
   void updateActions();
 
-  void slotPartRemoved( ObjectContents *part );
+  void slotPartRemoved(Frame*);
 
-  void slotActiveFrameChanged( ObjectContents *part );
+  void slotActiveFrameChanged(Frame*);
 
-  void slotChildStarted( KIO::Job *job );
+  void slotChildStarted(KIO::Job*);
 
   void slotChildCompleted();
   void slotChildCompleted( bool );
@@ -881,7 +871,7 @@ private:
   bool shouldUsePlugin(NodeImpl* element, const KURL& url, const QString& mimeType, bool hasFallback, bool& useFallback);
   bool loadPlugin(RenderPart* renderer, const KURL &url, const QString &mimeType, 
                   const QStringList& paramNames, const QStringList& paramValues, bool useFallback);
-  bool loadSubframe(ChildFrame* child, RenderPart* renderer, const KURL& url, const QString& name, const DOMString& referrer);
+  Frame* loadSubframe(RenderPart* renderer, const KURL& url, const QString& name, const DOMString& referrer);
 
 public:
   DOMString requestFrameName();
@@ -898,11 +888,8 @@ public:
   void handleFallbackContent();
 
 private:
-  ChildFrame* childFrame(const QObject*);
-  ChildFrame* recursiveFrameRequest(const KURL&, const URLArgs&, bool callParent = true);
-
-  void connectChild(const ChildFrame *) const;
-  void disconnectChild(const ChildFrame *) const;
+  void connectChild(Frame*) const;
+  void disconnectChild(Frame*) const;
 
   bool checkLinkSecurity(const KURL &linkURL,const QString &message = QString::null, const QString &button = QString::null);
   KJS::JSValue* executeScript(const QString& filename, int baseLine, NodeImpl*, const QString& script);
@@ -1062,7 +1049,7 @@ public:
   KURL url() const;
 
   // split out controller objects
-  FrameTreeNode* treeNode();
+  FrameTreeNode* treeNode() const;
   SelectionController& selection() const;
 };
 
index 1c5eb34213cb9726a0707a00d54834e525df907e..f6ea1aecf5c6a1ae5f97892cfc4d9d345c37b725 100644 (file)
@@ -45,12 +45,7 @@ namespace WebCore
 {
     class Decoder;
 
-    struct ChildFrame
-    {
-        RefPtr<Frame> m_frame;
-    };
-
-class FrameList : public QValueList<ChildFrame>
+class FrameList : public QValueList<RefPtr<Frame> >
 {
 public:
     Iterator find(const QString &name);
@@ -249,7 +244,7 @@ public:
 
   IntPoint m_dragStartPos;
 
-  ObjectContents * m_activeFrame;
+  Frame* m_activeFrame;
   QGuardedPtr<Frame> m_opener;
   bool m_openedByJS;
   bool m_newJSInterpreterExists; // set to 1 by setOpenedByJS, for window.open
index f42dbf4c9a255627e944ca039aba0f593d372556..d43d3d2de69aa74d7922c87634721ec23abb85b3 100644 (file)
@@ -42,16 +42,16 @@ public:
     }
     ~FrameTreeNode();
 
-    DOMString& name() { return m_name; }
+    const DOMString& name() const { return m_name; }
     void setName(const DOMString& name);
-    Frame* parent() { return m_parent; }
+    Frame* parent() const { return m_parent; }
     void setParent(Frame* parent) { m_parent = parent; }
     
-    Frame* nextSibling() { return m_nextSibling.get(); }
-    Frame* previousSibling() { return m_previousSibling; }
-    Frame* firstChild() { return m_firstChild.get(); }
-    Frame* lastChild() { return m_lastChild; }
-    int childCount() { return m_childCount; }
+    Frame* nextSibling() const { return m_nextSibling.get(); }
+    Frame* previousSibling() const { return m_previousSibling; }
+    Frame* firstChild() const { return m_firstChild.get(); }
+    Frame* lastChild() const { return m_lastChild; }
+    int childCount() const { return m_childCount; }
 
     void appendChild(PassRefPtr<Frame> child);
     void removeChild(Frame *child);
diff --git a/WebCore/page/ObjectContents.h b/WebCore/page/ObjectContents.h
deleted file mode 100644 (file)
index 132c032..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright (C) 2003 Apple Computer, Inc.  All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-#ifndef ObjectContents_H
-#define ObjectContents_H
-
-#include "KWQObject.h"
-
-class ObjectContents : public QObject {
-public:
-    ObjectContents()
-        : _ref(1) { }
-    
-    virtual QWidget *view() const = 0;
-
-    void ref() { ++_ref; }
-    void deref() { if (!--_ref) delete this; }
-    
-private:
-
-    unsigned int _ref;
-};
-
-#endif
index 555988d9600a46e4f67dbd8eefdb4af194ecd122..863c5a3fc892c252f49a1d6e4b2e5532e1b6e885 100644 (file)
 #ifndef PLUGIN_H
 #define PLUGIN_H
 
-#include <ObjectContents.h>
+#include "Shared.h"
 
 class QWidget;
 
 namespace WebCore {
 
-class Plugin : public ObjectContents
+class Plugin : public Shared<Plugin>
 {
 public:
     Plugin(QWidget *view) : m_view(view) { }
-    virtual QWidget *view() const { return m_view; }
+    QWidget *view() const { return m_view; }
 
 private:
     QWidget *m_view;