Reviewed by Maciej
authorlars <lars@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 23 Jan 2007 10:28:38 +0000 (10:28 +0000)
committerlars <lars@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 23 Jan 2007 10:28:38 +0000 (10:28 +0000)
        Make the last remaining pieces of the FrameLoader platform
        independent. Move most of the code over to WebFrameLoaderClient.
        Some smaller cleanups in the WebFrameBridge, and moved some
        platform independent functionality over to the shared code
        in WebCore.

        Add support for Frames to the Qt build and fix some issues
        in the API classes.

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

27 files changed:
WebCore/ChangeLog
WebCore/WebCore.exp
WebCore/WebCore.pro
WebCore/WebCore.xcodeproj/project.pbxproj
WebCore/loader/FrameLoader.cpp
WebCore/loader/FrameLoader.h
WebCore/loader/FrameLoaderClient.h
WebCore/loader/FrameLoaderTypes.h
WebCore/loader/PluginDocument.cpp
WebCore/loader/mac/FrameLoaderMac.mm [deleted file]
WebCore/loader/qt/FrameLoaderQt.cpp [deleted file]
WebCore/page/Frame.cpp
WebCore/page/FrameView.cpp
WebCore/page/qt/FrameQt.cpp
WebCore/platform/graphics/svg/SVGImageEmptyClients.h
WebKit/ChangeLog
WebKit/WebCoreSupport/WebFrameBridge.mm
WebKit/WebCoreSupport/WebFrameLoaderClient.h
WebKit/WebCoreSupport/WebFrameLoaderClient.mm
WebKitQt/Api/qwebframe.cpp
WebKitQt/Api/qwebframe.h
WebKitQt/Api/qwebframe_p.h
WebKitQt/Api/qwebpage.cpp
WebKitQt/Api/qwebpage.h
WebKitQt/ChangeLog
WebKitQt/WebCoreSupport/FrameLoaderClientQt.cpp
WebKitQt/WebCoreSupport/FrameLoaderClientQt.h

index 9ba88b22cd8ffeda88b8d41fce760622a456fc19..48aefe7a9998d594fb101d8992ea89056076bba6 100644 (file)
@@ -1,3 +1,61 @@
+2007-01-23  Lars Knoll <lars@trolltech.com>
+
+        Reviewed by Maciej
+
+        Make the last remaining pieces of the FrameLoader platform 
+        independent. Move most of the code over to WebFrameLoaderClient.
+        Some smaller cleanups in the WebFrameBridge, and moved some
+        platform independent functionality over to the shared code
+        in WebCore.
+        
+        * WebCore.exp:
+        * WebCore.pro:
+        * WebCore.xcodeproj/project.pbxproj:
+        * loader/FrameLoader.cpp:
+        (WebCore::FrameLoader::loadSubframe):
+        (WebCore::FrameLoader::shouldUsePlugin):
+        (WebCore::FrameLoader::loadPlugin):
+        (WebCore::FrameLoader::detachFromParent):
+        (WebCore::FrameLoader::partClearedInBegin):
+        (WebCore::FrameLoader::createJavaAppletWidget):
+        (WebCore::FrameLoader::didChangeTitle):
+        * loader/FrameLoader.h:
+        * loader/FrameLoaderClient.h:
+        * loader/FrameLoaderTypes.h:
+        (WebCore::):
+        * loader/PluginDocument.cpp:
+        (WebCore::PluginTokenizer::writeRawData):
+        * loader/mac/FrameLoaderMac.mm: Removed.
+        * loader/qt/FrameLoaderQt.cpp: Removed.
+        * page/Frame.cpp:
+        (WebCore::Frame::Frame):
+        * page/FrameView.cpp:
+        (WebCore::FrameView::mediaType):
+        * page/qt/FrameQt.cpp:
+        (WebCore::FrameQt::FrameQt):
+        * platform/graphics/svg/SVGImageEmptyClients.h:
+        (WebCore::SVGEmptyFrameLoaderClient::makeRepresentation):
+        (WebCore::SVGEmptyFrameLoaderClient::dispatchDidLoadResourceFromMemoryCache):
+        (WebCore::SVGEmptyFrameLoaderClient::dispatchDidCommitLoad):
+        (WebCore::SVGEmptyFrameLoaderClient::dispatchDidFailLoad):
+        (WebCore::SVGEmptyFrameLoaderClient::dispatchCreatePage):
+        (WebCore::SVGEmptyFrameLoaderClient::dispatchDecidePolicyForNavigationAction):
+        (WebCore::SVGEmptyFrameLoaderClient::dispatchUnableToImplementPolicy):
+        (WebCore::SVGEmptyFrameLoaderClient::revertToProvisionalState):
+        (WebCore::SVGEmptyFrameLoaderClient::setMainDocumentError):
+        (WebCore::SVGEmptyFrameLoaderClient::startDownload):
+        (WebCore::SVGEmptyFrameLoaderClient::committedLoad):
+        (WebCore::SVGEmptyFrameLoaderClient::shouldFallBack):
+        (WebCore::SVGEmptyFrameLoaderClient::willUseArchive):
+        (WebCore::SVGEmptyFrameLoaderClient::createDocumentLoader):
+        (WebCore::SVGEmptyFrameLoaderClient::createFrame):
+        (WebCore::SVGEmptyFrameLoaderClient::createPlugin):
+        (WebCore::SVGEmptyFrameLoaderClient::createJavaAppletWidget):
+        (WebCore::SVGEmptyFrameLoaderClient::objectContentType):
+        (WebCore::SVGEmptyFrameLoaderClient::overrideMediaType):
+        (WebCore::SVGEmptyFrameLoaderClient::redirectDataToPlugin):
+        (WebCore::SVGEmptyFrameLoaderClient::windowObjectCleared):
+
 2007-01-23  Oliver Hunt  <oliver@apple.com>
 
         Reviewed by Adam.
index 81495446198d56f7e42dd8bcc08883360e9949e5..c190131b462306e3a1e730fa35057fbb8ae5e690 100644 (file)
@@ -350,6 +350,9 @@ __ZN7WebCore6String6appendERKS0_
 __ZN7WebCore6StringC1EP8NSString
 __ZN7WebCore6StringC1EPKc
 __ZN7WebCore6StringC1ERKNS_16DeprecatedStringE
+__ZN7WebCore6Widget7setViewEP6NSView
+__ZN7WebCore6WidgetC1EP6NSView
+__ZN7WebCore6WidgetC1Ev
 __ZN7WebCore7IntSizeC1ERK7_NSSize
 __ZN7WebCore7nsColorERKNS_5ColorE
 __ZN7WebCore8Document11completeURLERKNS_16DeprecatedStringE
@@ -433,6 +436,7 @@ __ZN7WebCore9TimerBase5startEdd
 __ZN7WebCore9TimerBaseC2Ev
 __ZN7WebCore9TimerBaseD2Ev
 __ZN7WebCoreeqERKNS_4KURLES2_
+__ZNK7WebCore6Widget7getViewEv
 __ZNK7WebCore10StringImplcvP8NSStringEv
 __ZNK7WebCore11CachedImage5imageEv
 __ZNK7WebCore11ContextMenu19platformDescriptionEv
index 6884e19cfa7a94d053a24d98d88444b11ea5a13a..e38128eb2e3e4eaf8e463cb918d209ce2d3e64a0 100644 (file)
@@ -516,7 +516,6 @@ SOURCES += \
     loader/icon/SQLTransaction.cpp \
     loader/icon/SQLStatement.cpp \
     loader/icon/SQLDatabase.cpp \
-    loader/qt/FrameLoaderQt.cpp \
     loader/qt/DocumentLoaderQt.cpp \
     platform/CString.cpp \
     platform/DragData.cpp \
index 73a6cd839fd3d2f15c4898d463a44bdfecb9274b..99b7c149a73e1eaab91f85d6409637db0a23a300 100644 (file)
                656D373A0ADBA5DE00A4554D /* FormState.h in Headers */ = {isa = PBXBuildFile; fileRef = 656D37220ADBA5DE00A4554D /* FormState.h */; settings = {ATTRIBUTES = (Private, ); }; };
                656D373B0ADBA5DE00A4554D /* FormState.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 656D37230ADBA5DE00A4554D /* FormState.cpp */; };
                656D373C0ADBA5DE00A4554D /* FrameLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 656D37240ADBA5DE00A4554D /* FrameLoader.h */; settings = {ATTRIBUTES = (Private, ); }; };
-               656D373D0ADBA5DE00A4554D /* FrameLoaderMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = 656D37250ADBA5DE00A4554D /* FrameLoaderMac.mm */; };
                656D373E0ADBA5DE00A4554D /* FrameLoaderClient.h in Headers */ = {isa = PBXBuildFile; fileRef = 656D37260ADBA5DE00A4554D /* FrameLoaderClient.h */; settings = {ATTRIBUTES = (Private, ); }; };
                656D373F0ADBA5DE00A4554D /* ResourceLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 656D37270ADBA5DE00A4554D /* ResourceLoader.h */; settings = {ATTRIBUTES = (Private, ); }; };
                656D37410ADBA5DE00A4554D /* MainResourceLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 656D37290ADBA5DE00A4554D /* MainResourceLoader.h */; };
                656D37220ADBA5DE00A4554D /* FormState.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = FormState.h; sourceTree = "<group>"; };
                656D37230ADBA5DE00A4554D /* FormState.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.objcpp; fileEncoding = 30; path = FormState.cpp; sourceTree = "<group>"; };
                656D37240ADBA5DE00A4554D /* FrameLoader.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = FrameLoader.h; sourceTree = "<group>"; };
-               656D37250ADBA5DE00A4554D /* FrameLoaderMac.mm */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.objcpp; fileEncoding = 30; path = FrameLoaderMac.mm; sourceTree = "<group>"; };
                656D37260ADBA5DE00A4554D /* FrameLoaderClient.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = FrameLoaderClient.h; sourceTree = "<group>"; };
                656D37270ADBA5DE00A4554D /* ResourceLoader.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = ResourceLoader.h; sourceTree = "<group>"; };
                656D37290ADBA5DE00A4554D /* MainResourceLoader.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = MainResourceLoader.h; sourceTree = "<group>"; };
                        isa = PBXGroup;
                        children = (
                                656D371F0ADBA5DE00A4554D /* DocumentLoaderMac.mm */,
-                               656D37250ADBA5DE00A4554D /* FrameLoaderMac.mm */,
                                93A1EAA70A563508006960A0 /* ImageDocumentMac.h */,
                                93A1EA9F0A5634C9006960A0 /* ImageDocumentMac.mm */,
                                656D371A0ADBA5DE00A4554D /* LoaderNSURLExtras.h */,
                                656D37350ADBA5DE00A4554D /* WebDataProtocol.mm in Sources */,
                                656D37370ADBA5DE00A4554D /* DocumentLoaderMac.mm in Sources */,
                                656D373B0ADBA5DE00A4554D /* FormState.cpp in Sources */,
-                               656D373D0ADBA5DE00A4554D /* FrameLoaderMac.mm in Sources */,
                                656D37440ADBA5DE00A4554D /* NetscapePlugInStreamLoaderMac.mm in Sources */,
                                0668E1900ADD9640004128E0 /* PopupMenuMac.mm in Sources */,
                                4B3043C90AE0371D00A82647 /* SoundMac.mm in Sources */,
index 949b6ec5eb2bef496cd47e05220f7760d8774d82..f5473e29e06c2abdcfa30c02c88d9820e5ad6697 100644 (file)
@@ -52,6 +52,7 @@
 #include "FrameView.h"
 #include "HistoryItem.h"
 #include "HTMLFormElement.h"
+#include "HTMLFrameElement.h"
 #include "HTMLNames.h"
 #include "HTMLObjectElement.h"
 #include "HTTPParsers.h"
@@ -397,7 +398,23 @@ bool FrameLoader::requestFrame(HTMLFrameOwnerElement* ownerElement, const String
 
 Frame* FrameLoader::loadSubframe(HTMLFrameOwnerElement* ownerElement, const KURL& url, const String& name, const String& referrer)
 {
-    Frame* frame = createFrame(url, name, ownerElement, referrer);
+    bool allowsScrolling = true;
+    int marginWidth = -1;
+    int marginHeight = -1;
+    if (ownerElement->hasTagName(frameTag) || ownerElement->hasTagName(iframeTag)) {
+        HTMLFrameElementBase* o = static_cast<HTMLFrameElementBase*>(ownerElement);
+        allowsScrolling = o->scrollingMode() != ScrollbarAlwaysOff;
+        marginWidth = o->getMarginWidth();
+        marginHeight = o->getMarginHeight();
+    }
+
+    bool hideReferrer;
+    if (!canLoad(url, referrer, hideReferrer))
+        return 0;
+
+    Frame* frame = m_client->createFrame(url, name, ownerElement, hideReferrer ? String() : referrer,
+                                         allowsScrolling, marginWidth, marginHeight);
+
     if (!frame)  {
         checkEmitLoadEvent();
         return 0;
@@ -1334,7 +1351,7 @@ bool FrameLoader::requestObject(RenderPart* renderer, const String& url, const A
 
 bool FrameLoader::shouldUsePlugin(const KURL& url, const String& mimeType, bool hasFallback, bool& useFallback)
 {
-    ObjectContentType objectType = objectContentType(url, mimeType);
+    ObjectContentType objectType = m_client->objectContentType(url, mimeType);
     // If an object's content can't be handled and it has no fallback, let
     // it be handled as a plugin to show the broken plugin icon.
     useFallback = objectType == ObjectContentNone && hasFallback;
@@ -1351,7 +1368,12 @@ bool FrameLoader::loadPlugin(RenderPart* renderer, const KURL& url, const String
         if (renderer->node() && renderer->node()->isElementNode())
             pluginElement = static_cast<Element*>(renderer->node());
 
-        widget = createPlugin(pluginElement, url, paramNames, paramValues, mimeType);
+        bool hideReferrer;
+        if (!canLoad(url, outgoingReferrer(), hideReferrer))
+            return false;
+
+        widget = m_client->createPlugin(pluginElement, url, paramNames, paramValues, mimeType,
+                                        m_frame->document()->isPluginDocument());
         if (widget) {
             renderer->setWidget(widget);
             m_containsPlugIns = true;
@@ -2857,7 +2879,7 @@ void FrameLoader::detachFromParent()
 
     closeURL();
     stopAllLoaders();
-    m_client->detachedFromParent1();
+    saveScrollPositionAndViewStateToItem(currentHistoryItem());
     detachChildren();
     m_client->detachedFromParent2();
     setDocumentLoader(0);
@@ -2869,7 +2891,7 @@ void FrameLoader::detachFromParent()
         m_frame->pageDestroyed();
     }
 #if PLATFORM(MAC)
-    closeBridge();
+    [Mac(m_frame)->bridge() close];
 #endif
     m_client->detachedFromParent4();
 }
@@ -4226,5 +4248,47 @@ String FrameLoader::referrer() const
     return documentLoader()->request().httpReferrer();
 }
 
+void FrameLoader::partClearedInBegin()
+{
+    if (m_frame->settings()->isJavaScriptEnabled())
+        m_client->windowObjectCleared();
+}
+
+Widget* FrameLoader::createJavaAppletWidget(const IntSize& size, Element* element, const HashMap<String, String>& args)
+{
+    String baseURLString;
+    Vector<String> paramNames;
+    Vector<String> paramValues;
+    HashMap<String, String>::const_iterator end = args.end();
+    for (HashMap<String, String>::const_iterator it = args.begin(); it != end; ++it) {
+        if (it->first.lower() == "baseurl")
+            baseURLString = it->second;
+        paramNames.append(it->first);
+        paramValues.append(it->second);
+    }
+    
+    if (baseURLString.isEmpty())
+        baseURLString = m_frame->document()->baseURL();
+    KURL baseURL = completeURL(baseURLString);
+
+    Widget* widget = m_client->createJavaAppletWidget(size, element, baseURL, paramNames, paramValues);
+    if(widget)
+        m_frame->view()->addChild(widget);
+    return widget;
+}
+
+void FrameLoader::didChangeTitle(DocumentLoader* loader)
+{
+    m_client->didChangeTitle(loader);
+
+    // The title doesn't get communicated to the WebView until we are committed.
+    if (loader->isCommitted()) {
+        // Must update the entries in the back-forward list too.
+        // This must go through the WebFrame because it has the right notion of the current b/f item.
+        m_client->setTitle(loader->title(), loader->urlForHistory());
+        m_client->setMainFrameDocumentReady(true); // update observers with new DOMDocument
+        m_client->dispatchDidReceiveTitle(loader->title());
+    }
+}
 
 } // namespace WebCore
index fad0a888a483724ee372664be2bff1243f8c8e3b..109a47d33dbdb1869f7c2cbb0e87b057f31eead4 100644 (file)
@@ -82,10 +82,6 @@ namespace WebCore {
 
     template <typename T> class Timer;
 
-    enum ObjectContentType {
-        ObjectContentNone, ObjectContentImage, ObjectContentFrame, ObjectContentPlugin
-    };
-
     typedef HashSet<RefPtr<ResourceLoader> > ResourceLoaderSet;
 
     bool isBackForwardLoadType(FrameLoadType);
@@ -163,9 +159,6 @@ namespace WebCore {
         // Also not cool.
         void stopLoadingPlugIns();
         void stopLoadingSubresources();
-#if PLATFORM(MAC)
-        void closeBridge();
-#endif
         void cancelMainResourceLoad(const ResourceError&);
         void stopAllLoaders();
         void cancelMainResourceLoad();
@@ -281,7 +274,6 @@ namespace WebCore {
         void urlSelected(const FrameLoadRequest&, Event*);
       
         bool requestFrame(HTMLFrameOwnerElement*, const String& URL, const AtomicString& frameName);
-        Frame* createFrame(const KURL& URL, const String& name, HTMLFrameOwnerElement*, const String& referrer);
         Frame* loadSubframe(HTMLFrameOwnerElement*, const KURL& URL, const String& name, const String& referrer);
 
         void submitForm(const char* action, const String& URL, PassRefPtr<FormData>, const String& target, const String& contentType, const String& boundary, Event*);
@@ -347,8 +339,6 @@ namespace WebCore {
 
         String overrideMediaType() const;
 
-        void redirectDataToPlugin(Widget* pluginWidget);
-
         Frame* opener();
         void setOpener(Frame*);
         bool openedByJavaScript();
@@ -395,13 +385,8 @@ namespace WebCore {
 
         KURL completeURL(const String& URL);
 
-        Widget* createPlugin(Element*, const KURL&, const Vector<String>& paramNames,
-            const Vector<String>& paramValues, const String& mimeType);
-
         void clear(bool clearWindowProperties = true);
 
-        ObjectContentType objectContentType(const KURL& url, const String& mimeType);
-
         void didTellBridgeAboutLoad(const String& URL);
         bool haveToldBridgeAboutLoad(const String& URL);
 
index 2f4a8e3cf1e423c0fc65ddda822e8ec08746682b..97c090de427f2c58496f687092623d6892745db9 100644 (file)
@@ -29,6 +29,7 @@
 #define FrameLoaderClient_h
 
 #include "FrameLoaderTypes.h"
+#include "StringHash.h"
 #include <wtf/Forward.h>
 #include <wtf/Platform.h>
 
@@ -41,6 +42,8 @@ namespace WebCore {
     class Frame;
     class FrameLoader;
     class HistoryItem;
+    class HTMLFrameOwnerElement;
+    class IntSize;
     class KURL;
     class NavigationAction;
     class PageCache;
@@ -50,6 +53,7 @@ namespace WebCore {
     class ResourceRequest;
     class ResourceResponse;
     class String;
+    class Widget;
 
     typedef void (FrameLoader::*FramePolicyFunction)(PolicyAction);
 
@@ -71,7 +75,6 @@ namespace WebCore {
 
         virtual void setCopiesOnScroll() = 0;
 
-        virtual void detachedFromParent1() = 0;
         virtual void detachedFromParent2() = 0;
         virtual void detachedFromParent3() = 0;
         virtual void detachedFromParent4() = 0;
@@ -180,6 +183,18 @@ namespace WebCore {
         virtual void saveDocumentViewToPageCache(PageCache*) = 0;
         virtual bool canCachePage() const = 0;
         virtual void download(ResourceHandle*, const ResourceRequest&, const ResourceResponse&) = 0;
+
+        virtual Frame* createFrame(const KURL& url, const String& name, HTMLFrameOwnerElement* ownerElement,
+                                   const String& referrer, bool allowsScrolling, int marginWidth, int marginHeight) = 0;
+        virtual Widget* createPlugin(Element*, const KURL&, const Vector<String>&, const Vector<String>&, const String&, bool loadManually) = 0;
+        virtual void redirectDataToPlugin(Widget* pluginWidget) = 0;
+        
+        virtual Widget* createJavaAppletWidget(const IntSize&, Element*, const KURL& baseURL, const Vector<String>& paramNames, const Vector<String>& paramValues) = 0;
+
+        virtual ObjectContentType objectContentType(const KURL& url, const String& mimeType) = 0;
+        virtual String overrideMediaType() const = 0;
+
+        virtual void windowObjectCleared() const = 0;
     };
 
 } // namespace WebCore
index 60086fa3ab99fcda9c0a7ec3eaf1bf71422244c2..8c8a9d8ef4ab8d5694144b7fed7b0d0cc0203330 100644 (file)
@@ -66,6 +66,12 @@ namespace WebCore {
         NavigationTypeOther
     };
 
+    enum ObjectContentType {
+        ObjectContentNone,
+        ObjectContentImage,
+        ObjectContentFrame,
+        ObjectContentPlugin
+    };
 }
 
 #endif
index 297294e2d0865d654e282a9f299291e190928e89..76df665cb4aa9de42c1d4ea4fec9132718be65fb 100644 (file)
@@ -27,6 +27,7 @@
 
 #include "Frame.h"
 #include "FrameLoader.h"
+#include "FrameLoaderClient.h"
 #include "Element.h"
 #include "HTMLNames.h"
 #include "RenderWidget.h"
@@ -94,8 +95,9 @@ bool PluginTokenizer::writeRawData(const char* data, int len)
     if (!m_embedElement) {
         createDocumentStructure();
 
-        if (m_doc->frame()->settings()->arePluginsEnabled()) {
-            m_doc->frame()->loader()->redirectDataToPlugin(static_cast<RenderWidget*>(m_embedElement->renderer())->widget());
+        Frame* frame = m_doc->frame();
+        if (frame->settings()->arePluginsEnabled()) {
+            frame->loader()->client()->redirectDataToPlugin(static_cast<RenderWidget*>(m_embedElement->renderer())->widget());
             finish();
         }
         
diff --git a/WebCore/loader/mac/FrameLoaderMac.mm b/WebCore/loader/mac/FrameLoaderMac.mm
deleted file mode 100644 (file)
index 0cf3c83..0000000
+++ /dev/null
@@ -1,215 +0,0 @@
-/*
- * Copyright (C) 2006 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. 
- * 3.  Neither the name of Apple Computer, Inc. ("Apple") nor the names of
- *     its contributors may be used to endorse or promote products derived
- *     from this software without specific prior written permission. 
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "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 OR ITS 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.
- */
-
-#import "config.h"
-#import "FrameLoader.h"
-
-#import "BlockExceptions.h"
-#import "Cache.h"
-#import "Chrome.h"
-#import "DOMElementInternal.h"
-#import "Document.h"
-#import "DocumentLoader.h"
-#import "Event.h"
-#import "FloatRect.h"
-#import "FormDataStreamMac.h"
-#import "FormState.h"
-#import "FrameLoadRequest.h"
-#import "FrameLoaderClient.h"
-#import "FrameMac.h"
-#import "FramePrivate.h"
-#import "FrameTree.h"
-#import "FrameView.h"
-#import "HistoryItem.h"
-#import "HTMLFormElement.h"
-#import "HTMLFrameElement.h"
-#import "HTMLNames.h"
-#import "IconDatabase.h"
-#import "LoaderNSURLExtras.h"
-#import "MainResourceLoader.h"
-#import "NavigationAction.h"
-#import "Page.h"
-#import "PageState.h"
-#import "Plugin.h"
-#import "ResourceError.h"
-#import "ResourceHandle.h"
-#import "ResourceRequest.h"
-#import "ResourceResponse.h"
-#import "SharedBuffer.h"
-#import "Settings.h"
-#import "SubresourceLoader.h"
-#import "SystemTime.h"
-#import "TextResourceDecoder.h"
-#import "WebCoreFrameBridge.h"
-#import "WebCoreSystemInterface.h"
-#import "WebDataProtocol.h"
-#import "Widget.h"
-#import "WindowFeatures.h"
-#import <kjs/JSLock.h>
-#import <wtf/Assertions.h>
-
-namespace WebCore {
-
-using namespace HTMLNames;
-
-void FrameLoader::didChangeTitle(DocumentLoader* loader)
-{
-    m_client->didChangeTitle(loader);
-
-    // The title doesn't get communicated to the WebView until we are committed.
-    if (loader->isCommitted())
-        if (NSURL *urlForHistory = canonicalURL(loader->urlForHistory().getNSURL())) {
-            // Must update the entries in the back-forward list too.
-            // This must go through the WebFrame because it has the right notion of the current b/f item.
-            m_client->setTitle(loader->title(), urlForHistory);
-            m_client->setMainFrameDocumentReady(true); // update observers with new DOMDocument
-            m_client->dispatchDidReceiveTitle(loader->title());
-        }
-}
-
-Frame* FrameLoader::createFrame(const KURL& url, const String& name, HTMLFrameOwnerElement* ownerElement, const String& referrer)
-{
-    BOOL allowsScrolling = YES;
-    int marginWidth = -1;
-    int marginHeight = -1;
-    if (ownerElement->hasTagName(frameTag) || ownerElement->hasTagName(iframeTag)) {
-        HTMLFrameElement* o = static_cast<HTMLFrameElement*>(ownerElement);
-        allowsScrolling = o->scrollingMode() != ScrollbarAlwaysOff;
-        marginWidth = o->getMarginWidth();
-        marginHeight = o->getMarginHeight();
-    }
-
-    BEGIN_BLOCK_OBJC_EXCEPTIONS;
-    
-    return [Mac(m_frame)->bridge() createChildFrameNamed:name
-                                                 withURL:url.getNSURL()
-                                                referrer:referrer 
-                                              ownerElement:ownerElement
-                                         allowsScrolling:allowsScrolling
-                                             marginWidth:marginWidth
-                                            marginHeight:marginHeight];
-
-    END_BLOCK_OBJC_EXCEPTIONS;
-    return 0;
-}
-
-ObjectContentType FrameLoader::objectContentType(const KURL& url, const String& mimeType)
-{
-    BEGIN_BLOCK_OBJC_EXCEPTIONS;
-    return (ObjectContentType)[Mac(m_frame)->bridge() determineObjectFromMIMEType:mimeType URL:url.getNSURL()];
-    END_BLOCK_OBJC_EXCEPTIONS;
-    return ObjectContentNone;
-}
-
-static NSArray* nsArray(const Vector<String>& vector)
-{
-    unsigned len = vector.size();
-    NSMutableArray* array = [NSMutableArray arrayWithCapacity:len];
-    for (unsigned x = 0; x < len; x++)
-        [array addObject:vector[x]];
-    return array;
-}
-
-Widget* FrameLoader::createPlugin(Element* element, const KURL& url,
-    const Vector<String>& paramNames, const Vector<String>& paramValues,
-    const String& mimeType)
-{
-    BEGIN_BLOCK_OBJC_EXCEPTIONS;
-    return new Widget([Mac(m_frame)->bridge() viewForPluginWithURL:url.getNSURL()
-                                  attributeNames:nsArray(paramNames)
-                                  attributeValues:nsArray(paramValues)
-                                  MIMEType:mimeType
-                                  DOMElement:[DOMElement _elementWith:element]
-                                loadManually:m_frame->document()->isPluginDocument()]);
-    END_BLOCK_OBJC_EXCEPTIONS;
-    return 0;
-}
-
-void FrameLoader::redirectDataToPlugin(Widget* pluginWidget)
-{
-    BEGIN_BLOCK_OBJC_EXCEPTIONS;
-    [Mac(m_frame)->bridge() redirectDataToPlugin:pluginWidget->getView()];
-    END_BLOCK_OBJC_EXCEPTIONS;
-}
-
-Widget* FrameLoader::createJavaAppletWidget(const IntSize& size, Element* element, const HashMap<String, String>& args)
-{
-    Widget* result = new Widget;
-    
-    BEGIN_BLOCK_OBJC_EXCEPTIONS;
-    
-    NSMutableArray *attributeNames = [[NSMutableArray alloc] init];
-    NSMutableArray *attributeValues = [[NSMutableArray alloc] init];
-    
-    DeprecatedString baseURLString;
-    HashMap<String, String>::const_iterator end = args.end();
-    for (HashMap<String, String>::const_iterator it = args.begin(); it != end; ++it) {
-        if (it->first.lower() == "baseurl")
-            baseURLString = it->second.deprecatedString();
-        [attributeNames addObject:it->first];
-        [attributeValues addObject:it->second];
-    }
-    
-    if (baseURLString.isEmpty())
-        baseURLString = m_frame->document()->baseURL();
-
-    result->setView([Mac(m_frame)->bridge() viewForJavaAppletWithFrame:NSMakeRect(0, 0, size.width(), size.height())
-                                         attributeNames:attributeNames
-                                        attributeValues:attributeValues
-                                                baseURL:completeURL(baseURLString).getNSURL()
-                                             DOMElement:[DOMElement _elementWith:element]]);
-    [attributeNames release];
-    [attributeValues release];
-    m_frame->view()->addChild(result);
-    
-    END_BLOCK_OBJC_EXCEPTIONS;
-    
-    return result;
-}
-
-void FrameLoader::partClearedInBegin()
-{
-    if (m_frame->settings()->isJavaScriptEnabled())
-        [Mac(m_frame)->bridge() windowObjectCleared];
-}
-
-String FrameLoader::overrideMediaType() const
-{
-    NSString *overrideType = [Mac(m_frame)->bridge() overrideMediaType];
-    if (overrideType)
-        return overrideType;
-    return String();
-}
-
-void FrameLoader::closeBridge()
-{
-    [Mac(m_frame)->bridge() close];
-}
-
-
-}
diff --git a/WebCore/loader/qt/FrameLoaderQt.cpp b/WebCore/loader/qt/FrameLoaderQt.cpp
deleted file mode 100644 (file)
index 8e229dc..0000000
+++ /dev/null
@@ -1,133 +0,0 @@
-/*
- * Copyright (C) 2006 Dirk Mueller <mueller@kde.org>
- * Copyright (C) 2006 Zack Rusin <zack@kde.org>
- * Copyright (C) 2006 George Staikos <staikos@kde.org>
- * Copyright (C) 2006 Simon Hausmann <hausmann@kde.org>
- * Copyright (C) 2006 Rob Buis <buis@kde.org>
- * Copyright (C) 2006 Nikolas Zimmermann <zimmermann@kde.org>
- * Copyright (C) 2006 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.
- */
-
-#include "config.h"
-#include "FrameQt.h"
-
-#include "DOMImplementation.h"
-#include "DOMWindow.h"
-#include "Document.h"
-#include "Document.h"
-#include "EditorClientQt.h"
-#include "Element.h"
-#include "FrameLoadRequest.h"
-#include "FrameLoader.h"
-#include "FramePrivate.h"
-#include "FrameLoaderClientQt.h"
-#include "ResourceLoader.h"
-#include "DocumentLoader.h"
-#include "FrameView.h"
-#include "FormState.h"
-#include "GraphicsContext.h"
-#include "HTMLDocument.h"
-#include "HTMLElement.h"
-#include "HTMLFormElement.h"
-#include "HistoryItem.h"
-#include "JSLock.h"
-#include "MouseEventWithHitTestResults.h"
-#include "Page.h"
-#include "PlatformKeyboardEvent.h"
-#include "PlatformMouseEvent.h"
-#include "PlatformWheelEvent.h"
-#include "Plugin.h"
-#include "RenderLayer.h"
-#include "RenderObject.h"
-#include "RenderWidget.h"
-#include "ResourceHandle.h"
-#include "ResourceHandleInternal.h"
-#include "SelectionController.h"
-#include "Chrome.h"
-#include "Settings.h"
-#include "TypingCommand.h"
-#include "kjs_window.h"
-#include "runtime_root.h"
-
-#include <QScrollArea>
-#include <qdebug.h>
-
-#define notImplemented() qDebug("FIXME: UNIMPLEMENTED: %s:%d (%s)", __FILE__, __LINE__, __FUNCTION__)
-
-namespace WebCore {
-
-
-Frame* FrameLoader::createFrame(const KURL& url, const String& name, HTMLFrameOwnerElement* ownerElement, const String& referrer)
-{
-    notImplemented();
-    return 0;
-}
-
-ObjectContentType FrameLoader::objectContentType(const KURL&, const String& mimeType)
-{
-    notImplemented();
-    return ObjectContentType();
-}
-
-Widget* FrameLoader::createPlugin(Element*, const KURL&, const Vector<String>&, const Vector<String>&, const String&)
-{
-    notImplemented();
-    return 0;
-}
-
-Widget* FrameLoader::createJavaAppletWidget(const IntSize&, Element*, const HashMap<String, String>&)
-{
-    notImplemented();
-    return 0;
-}
-
-String FrameLoader::overrideMediaType() const
-{
-    // no-op
-    return String();
-}
-
-void FrameLoader::partClearedInBegin()
-{
-    if (m_frame->settings()->isJavaScriptEnabled())
-        static_cast<FrameLoaderClientQt*>(m_client)->partClearedInBegin();
-}
-
-void FrameLoader::didChangeTitle(DocumentLoader* loader)
-{
-    notImplemented();
-    m_client->didChangeTitle(loader);
-}
-
-void FrameLoader::redirectDataToPlugin(Widget* pluginWidget)
-{
-    notImplemented();
-}
-
-
-}
-
-// vim: ts=4 sw=4 et
index 1b90a2f062abfe0329d5269980ab7a06e854e4e7..e80099b3d387c891c9dad0b1407d9e9ba8be89c5 100644 (file)
@@ -184,6 +184,8 @@ Frame::Frame(Page* page, HTMLFrameOwnerElement* ownerElement, FrameLoaderClient*
         ownerElement->m_contentFrame = this;
     }
 
+    setSettings(page->settings());
+
 #ifndef NDEBUG
     ++FrameCounter::count;
 #endif
index 7c4b074e783e3e191bcb6d7bd34542f5a82f7eea..f33bc2a12a2f3db8f34e3767a894fc8421ceb74f 100644 (file)
@@ -32,6 +32,7 @@
 #include "FloatRect.h"
 #include "Frame.h"
 #include "FrameLoader.h"
+#include "FrameLoaderClient.h"
 #include "HTMLDocument.h"
 #include "HTMLFrameSetElement.h"
 #include "HTMLNames.h"
@@ -549,7 +550,7 @@ void FrameView::setMediaType(const String& mediaType)
 String FrameView::mediaType() const
 {
     // See if we have an override type.
-    String overrideType = m_frame->loader()->overrideMediaType();
+    String overrideType = m_frame->loader()->client()->overrideMediaType();
     if (!overrideType.isNull())
         return overrideType;
     return d->m_mediaType;
index b572f54399ed74c0bfecbb19d1ebad7cc0d571ba..680927c6b587bbebb4a088f41165dd7c81f20d86 100644 (file)
@@ -103,22 +103,6 @@ FrameQt::FrameQt(Page* page, HTMLFrameOwnerElement* ownerElement,
     : Frame(page, ownerElement, frameLoader)
     , m_bindingRoot(0)
 {
-    Settings* settings = new Settings;
-    settings->setLoadsImagesAutomatically(true);
-    settings->setMinimumFontSize(5);
-    settings->setMinimumLogicalFontSize(5);
-    settings->setShouldPrintBackgrounds(true);
-    settings->setJavaScriptEnabled(true);
-
-    settings->setDefaultFixedFontSize(14);
-    settings->setDefaultFontSize(14);
-    settings->setSerifFontFamily("Times New Roman");
-    settings->setSansSerifFontFamily("Arial");
-    settings->setFixedFontFamily("Courier");
-    settings->setStandardFontFamily("Arial");
-
-    setSettings(settings);
-
     m_client = frameClient;
     m_client->setFrame(this);
 }
index 656e196e896ae2276237ae996ead0e73437b9053..b5ac05000fcf698858fb8d6ccbad96a13a2e6b5d 100644 (file)
@@ -120,9 +120,6 @@ public:
     
     virtual void makeDocumentView() { }
     virtual void makeRepresentation(DocumentLoader*) { }
-#if PLATFORM(MAC)
-    virtual void setDocumentViewFromPageCache(NSDictionary *) { }
-#endif
     virtual void forceLayout() { }
     virtual void forceLayoutForNonHTML() { }
     
@@ -137,14 +134,12 @@ public:
     
     virtual void setCopiesOnScroll() { }
         
-    virtual void detachedFromParent1() { }
     virtual void detachedFromParent2() { }
     virtual void detachedFromParent3() { }
     virtual void detachedFromParent4() { }
     
     virtual void loadedFromPageCache() { }
     
-#if PLATFORM(MAC)
     virtual void download(ResourceHandle*, const ResourceRequest&, const ResourceResponse&) { }
     
     virtual void assignIdentifierToInitialRequest(unsigned long identifier, DocumentLoader*, const ResourceRequest&) { }
@@ -156,7 +151,6 @@ public:
     virtual void dispatchDidFinishLoading(DocumentLoader*, unsigned long identifier) { }
     virtual void dispatchDidFailLoading(DocumentLoader*, unsigned long identifier, const ResourceError&) { }
     virtual bool dispatchDidLoadResourceFromMemoryCache(DocumentLoader*, const ResourceRequest&, const ResourceResponse&, int length) { return false; }
-#endif
     
     virtual void dispatchDidHandleOnloadEvents() { }
     virtual void dispatchDidReceiveServerRedirectForProvisionalLoad() { }
@@ -168,29 +162,21 @@ public:
     virtual void dispatchDidStartProvisionalLoad() { }
     virtual void dispatchDidReceiveTitle(const String& title) { }
     virtual void dispatchDidCommitLoad() { }
-#if PLATFORM(MAC)
     virtual void dispatchDidFailProvisionalLoad(const ResourceError&) { }
     virtual void dispatchDidFailLoad(const ResourceError&) { }
-#endif
     virtual void dispatchDidFinishDocumentLoad() { }
     virtual void dispatchDidFinishLoad() { }
     virtual void dispatchDidFirstLayout() { }
     
-#if PLATFORM(MAC)
     virtual Frame* dispatchCreatePage() { return 0; }
-#endif
     virtual void dispatchShow() { }
     
-#if PLATFORM(MAC)
     virtual void dispatchDecidePolicyForMIMEType(FramePolicyFunction, const String& MIMEType, const ResourceRequest&) { }
     virtual void dispatchDecidePolicyForNewWindowAction(FramePolicyFunction, const NavigationAction&, const ResourceRequest&, const String& frameName) { }
     virtual void dispatchDecidePolicyForNavigationAction(FramePolicyFunction, const NavigationAction&, const ResourceRequest&) { }
-#endif
     virtual void cancelPolicyCheck() { }
     
-#if PLATFORM(MAC)
     virtual void dispatchUnableToImplementPolicy(const ResourceError&) { }
-#endif
 
     virtual void dispatchWillSubmitForm(FramePolicyFunction, PassRefPtr<FormState>) { }
     
@@ -198,9 +184,7 @@ public:
     virtual void clearLoadingFromPageCache(DocumentLoader*) { }
     virtual bool isLoadingFromPageCache(DocumentLoader*) { return 0; }
     virtual void revertToProvisionalState(DocumentLoader*) { }
-#if PLATFORM(MAC)
     virtual void setMainDocumentError(DocumentLoader*, const ResourceError&) { }
-#endif
     virtual void clearUnarchivingState(DocumentLoader*) { }
     
     virtual void willChangeEstimatedProgress() { }
@@ -211,20 +195,15 @@ public:
     
     virtual void setMainFrameDocumentReady(bool) { }
     
-#if PLATFORM(MAC)
     virtual void startDownload(const ResourceRequest&) { }
-#endif
     
     virtual void willChangeTitle(DocumentLoader*) { }
     virtual void didChangeTitle(DocumentLoader*) { }
     
-#if PLATFORM(MAC)
     virtual void committedLoad(DocumentLoader*, const char*, int) { }
-#endif
     virtual void finishedLoading(DocumentLoader*) { }
     virtual void finalSetupForReplace(DocumentLoader*) { }
     
-#if PLATFORM(MAC)
     virtual ResourceError cancelledError(const ResourceRequest&) { return ResourceError(); }
     virtual ResourceError cannotShowURLError(const ResourceRequest&) { return ResourceError(); }
     virtual ResourceError interruptForPolicyChangeError(const ResourceRequest&) { return ResourceError(); }
@@ -233,13 +212,10 @@ public:
     virtual ResourceError fileDoesNotExistError(const ResourceResponse&) { return ResourceError(); }
     
     virtual bool shouldFallBack(const ResourceError&) { return false; }
-#endif
     
     virtual void setDefersLoading(bool) { }
     
-#if PLATFORM(MAC)
     virtual bool willUseArchive(ResourceLoader*, const ResourceRequest&, const KURL& originalURL) const { return false; }
-#endif
     virtual bool isArchiveLoadPending(ResourceLoader*) const { return false; }
     virtual void cancelPendingArchiveLoad(ResourceLoader*) { }
     virtual void clearArchivedResources() { }
@@ -257,9 +233,7 @@ public:
     virtual void didFinishLoad() { }
     virtual void prepareForDataSourceReplacement() { }
     
-#if PLATFORM(MAC)
     virtual PassRefPtr<DocumentLoader> createDocumentLoader(const ResourceRequest& request) { return new DocumentLoader(request); }
-#endif
     virtual void setTitle(const String& title, const KURL&) { }
     
     virtual String userAgent() { return ""; }
@@ -272,6 +246,16 @@ public:
     virtual void saveDocumentViewToPageCache(PageCache*) { }
     virtual bool canCachePage() const { return false; }
 
+    virtual Frame* createFrame(const KURL& url, const String& name, HTMLFrameOwnerElement* ownerElement,
+                               const String& referrer, bool allowsScrolling, int marginWidth, int marginHeight) { return 0; }
+    virtual Widget* createPlugin(Element*, const KURL&, const Vector<String>&, const Vector<String>&, const String&, bool) { return 0; }
+    virtual Widget* createJavaAppletWidget(const IntSize&, Element*, const KURL&, const Vector<String>&, const Vector<String>&) { return 0; }
+    
+    virtual ObjectContentType objectContentType(const KURL& url, const String& mimeType) { return ObjectContentType(); }
+    virtual String overrideMediaType() const { return String(); }
+
+    virtual void redirectDataToPlugin(WebCore::Widget*) {}
+    virtual void windowObjectCleared() const {}
 };
 
 class SVGEmptyEditorClient : public EditorClient {
index 6f3c121a6fa3ee87acf34995bcefc3ff3d7138b2..11156834007b2a20de8ad7b4eea4eefe8327bce7 100644 (file)
@@ -1,3 +1,30 @@
+2007-01-23  Lars Knoll <lars@trolltech.com>
+
+        Reviewed by Maciej
+
+        Make the last remaining pieces of the FrameLoader platform 
+        independent. Move most of the code over to WebFrameLoaderClient.
+        Some smaller cleanups in the WebFrameBridge, and moved some
+        platform independent functionality over to the shared code
+        in WebCore.
+
+        * Webcoresupport/WebFrameBridge.mm:
+        (-[WebFrameBridge finishInitializingWithPage:frameName:frameView:ownerElement:]):
+        (-[WebFrameBridge createChildFrameNamed:withURL:referrer:ownerElement:allowsScrolling:marginWidth:marginHeight:]):
+        (-[WebFrameBridge viewForPluginWithURL:attributeNames:attributeValues:MIMEType:DOMElement:loadManually:]):
+        * WebCoreSupport/WebFrameLoaderClient.h:
+        * WebCoreSupport/WebFrameLoaderClient.mm:
+        (WebFrameLoaderClient::setTitle):
+        (WebFrameLoaderClient::createFrame):
+        (WebFrameLoaderClient::objectContentType):
+        (nsArray):
+        (WebFrameLoaderClient::createPlugin):
+        (WebFrameLoaderClient::redirectDataToPlugin):
+        (nsMutableArray):
+        (WebFrameLoaderClient::createJavaAppletWidget):
+        (WebFrameLoaderClient::overrideMediaType):
+        (WebFrameLoaderClient::windowObjectCleared):
+
 2007-01-23  Oliver Hunt  <oliver@apple.com>
 
         Reviewed by Adam.
index 8a66daa327a34cfe80917e6c1a8b43a075823658..0b65442f267e62978542dcf6e9d7b99fc71d95a0 100644 (file)
@@ -136,7 +136,6 @@ NSString *WebPluginContainerKey =   @"WebPluginContainer";
     m_frame = new FrameMac(page, ownerElement, new WebFrameLoaderClient(_frame));
     m_frame->setBridge(self);
     m_frame->tree()->setName(name);
-    m_frame->setSettings(core(webView)->settings());
     
     [self setTextSizeMultiplier:[webView textSizeMultiplier]];
 
@@ -357,10 +356,6 @@ NSString *WebPluginContainerKey =   @"WebPluginContainer";
                                   marginWidth:(int)width
                                  marginHeight:(int)height
 {
-    bool hideReferrer;
-    if (!m_frame->loader()->canLoad(URL, referrer, hideReferrer))
-        return 0;
-
     ASSERT(_frame);
     
     WebFrameView *childView = [[WebFrameView alloc] initWithFrame:NSMakeRect(0,0,0,0)];
@@ -379,7 +374,7 @@ NSString *WebPluginContainerKey =   @"WebPluginContainer";
 
     RefPtr<Frame> newFrame = [newBridge _frame];
     
-    [_frame _loadURL:URL referrer:(hideReferrer ? String() : referrer) intoChild:kit(newFrame.get())];
+    [_frame _loadURL:URL referrer:referrer intoChild:kit(newFrame.get())];
 
     // The frame's onload handler may have removed it from the document.
     if (!newFrame->tree()->parent())
@@ -506,10 +501,6 @@ NSString *WebPluginContainerKey =   @"WebPluginContainer";
                       DOMElement:(DOMElement *)element
                     loadManually:(BOOL)loadManually
 {
-    bool hideReferrer;
-    if (!m_frame->loader()->canLoad(URL, m_frame->loader()->outgoingReferrer(), hideReferrer))
-        return nil;
-
     ASSERT([attributeNames count] == [attributeValues count]);
 
     WebBasePluginPackage *pluginPackage = nil;
index 10630441b7245b546aa1f637c3b0abb851f23ce0..10ad56748dcd94178f58c89506e6af61fc767ae0 100644 (file)
@@ -71,7 +71,6 @@ private:
 
     virtual void setCopiesOnScroll();
 
-    virtual void detachedFromParent1();
     virtual void detachedFromParent2();
     virtual void detachedFromParent3();
     virtual void detachedFromParent4();
@@ -180,6 +179,20 @@ private:
     virtual PassRefPtr<WebCore::DocumentLoader> createDocumentLoader(const WebCore::ResourceRequest&);
     virtual void setTitle(const WebCore::String& title, const WebCore::KURL&);
 
+    virtual WebCore::Frame* createFrame(const WebCore::KURL& url, const WebCore::String& name, WebCore::HTMLFrameOwnerElement*,
+                                        const WebCore::String& referrer, bool allowsScrolling, int marginWidth, int marginHeight);
+    virtual WebCore::Widget* createPlugin(WebCore::Element*, const WebCore::KURL&, const Vector<WebCore::String>&,
+                                          const Vector<WebCore::String>&, const WebCore::String&, bool);
+    virtual void redirectDataToPlugin(WebCore::Widget* pluginWidget);
+    
+    virtual WebCore::Widget* createJavaAppletWidget(const WebCore::IntSize&, WebCore::Element*, const WebCore::KURL& baseURL,
+                                                    const Vector<WebCore::String>& paramNames, const Vector<WebCore::String>& paramValues);
+    
+    virtual WebCore::ObjectContentType objectContentType(const WebCore::KURL& url, const WebCore::String& mimeType);
+    virtual WebCore::String overrideMediaType() const;
+    
+    virtual void windowObjectCleared() const;
+
     void deliverArchivedResourcesAfterDelay() const;
     bool canUseArchivedResource(NSURLRequest *) const;
     bool canUseArchivedResource(NSURLResponse *) const;
index 18b4e1c1d52f84e1ceecd6edfa8fb2cbd730edcb..32a42a9437dc42b1471d1dda4e84ed0b6d55fc00 100644 (file)
@@ -33,6 +33,7 @@
 #import "WebFrame.h"
 #undef private
 
+#import "DOMElementInternal.h"
 #import "WebBackForwardList.h"
 #import "WebChromeClient.h"
 #import "WebDataSourceInternal.h"
@@ -65,6 +66,7 @@
 #import "WebUIDelegate.h"
 #import "WebViewInternal.h"
 #import <WebCore/AuthenticationMac.h>
+#import <WebCore/BlockExceptions.h>
 #import <WebCore/Chrome.h>
 #import <WebCore/Document.h>
 #import <WebCore/DocumentLoader.h>
@@ -78,6 +80,7 @@
 #import <WebCore/HitTestResult.h>
 #import <WebCore/HTMLFormElement.h>
 #import <WebCore/IconDatabase.h>
+#import <WebCore/LoaderNSURLExtras.h>
 #import <WebCore/MouseEvent.h>
 #import <WebCore/Page.h>
 #import <WebCore/PageCache.h>
@@ -89,6 +92,8 @@
 #import <WebCore/ResourceRequest.h>
 #import <WebCore/WebCoreFrameBridge.h>
 #import <WebCore/WebDataProtocol.h>
+#import <WebCore/Widget.h>
+#import <WebKit/DOMElement.h>
 #import <WebKit/DOMHTMLFormElement.h>
 #import <WebKitSystemInterface.h>
 #import <wtf/PassRefPtr.h>
@@ -205,13 +210,6 @@ void WebFrameLoaderClient::setCopiesOnScroll()
     [[[m_webFrame->_private->webFrameView _scrollView] contentView] setCopiesOnScroll:YES];
 }
 
-void WebFrameLoaderClient::detachedFromParent1()
-{
-    Frame* coreFrame = core(m_webFrame.get());
-    if (coreFrame)
-        coreFrame->loader()->saveScrollPositionAndViewStateToItem(coreFrame->loader()->currentHistoryItem());
-}
-
 void WebFrameLoaderClient::detachedFromParent2()
 {
     [m_webFrame->_private->inspectors makeObjectsPerformSelector:@selector(_webFrameDetached:) withObject:m_webFrame.get()];
@@ -911,8 +909,11 @@ PassRefPtr<DocumentLoader> WebFrameLoaderClient::createDocumentLoader(const Reso
 // Once that task is complete, this will go away
 void WebFrameLoaderClient::setTitle(const String& title, const KURL& URL)
 {
+    NSURL* nsURL = canonicalURL(URL.getNSURL());
+    if(!nsURL)
+        return;
     NSString *titleNSString = title;
-    [[[WebHistory optionalSharedHistory] itemForURL:URL.getNSURL()] setTitle:titleNSString];
+    [[[WebHistory optionalSharedHistory] itemForURL:nsURL] setTitle:titleNSString];
     if (HistoryItem* item = core(m_webFrame.get())->loader()->currentHistoryItem())
         item->setTitle(title);
 }
@@ -1069,6 +1070,96 @@ bool WebFrameLoaderClient::canCachePage() const
     return [[[m_webFrame.get() dataSource] representation] isKindOfClass:[WebHTMLRepresentation class]];
 }
 
+Frame* WebFrameLoaderClient::createFrame(const KURL& url, const String& name, HTMLFrameOwnerElement* ownerElement,
+                                         const String& referrer, bool allowsScrolling, int marginWidth, int marginHeight)
+{
+    WebFrameBridge* bridge = m_webFrame->_private->bridge;
+    BEGIN_BLOCK_OBJC_EXCEPTIONS;
+    
+    return [bridge createChildFrameNamed:name
+                   withURL:url.getNSURL()
+                   referrer:referrer 
+                   ownerElement:ownerElement
+                   allowsScrolling:allowsScrolling
+                   marginWidth:marginWidth
+                   marginHeight:marginHeight];
+
+    END_BLOCK_OBJC_EXCEPTIONS;
+    return 0;
+}
+
+ObjectContentType WebFrameLoaderClient::objectContentType(const KURL& url, const String& mimeType)
+{
+    WebFrameBridge* bridge = m_webFrame->_private->bridge;
+    BEGIN_BLOCK_OBJC_EXCEPTIONS;
+    return (ObjectContentType)[bridge determineObjectFromMIMEType:mimeType URL:url.getNSURL()];
+    END_BLOCK_OBJC_EXCEPTIONS;
+    return ObjectContentNone;
+}
+
+static NSArray* nsArray(const Vector<String>& vector)
+{
+    unsigned len = vector.size();
+    NSMutableArray* array = [NSMutableArray arrayWithCapacity:len];
+    for (unsigned x = 0; x < len; x++)
+        [array addObject:vector[x]];
+    return array;
+}
+
+Widget* WebFrameLoaderClient::createPlugin(Element* element, const KURL& url, const Vector<String>& paramNames,
+                                           const Vector<String>& paramValues, const String& mimeType, bool loadManually)
+{
+    WebFrameBridge* bridge = m_webFrame->_private->bridge;
+
+    BEGIN_BLOCK_OBJC_EXCEPTIONS;
+    return new Widget([bridge viewForPluginWithURL:url.getNSURL()
+                              attributeNames:nsArray(paramNames)
+                              attributeValues:nsArray(paramValues)
+                              MIMEType:mimeType
+                              DOMElement:[DOMElement _elementWith:element]
+                              loadManually:loadManually]);
+    END_BLOCK_OBJC_EXCEPTIONS;
+
+    return 0;
+}
+
+void WebFrameLoaderClient::redirectDataToPlugin(Widget* pluginWidget)
+{
+    BEGIN_BLOCK_OBJC_EXCEPTIONS;
+    [m_webFrame->_private->bridge redirectDataToPlugin:pluginWidget->getView()];
+    END_BLOCK_OBJC_EXCEPTIONS;
+}
+
+WebCore::Widget* WebFrameLoaderClient::createJavaAppletWidget(const IntSize& size, Element* element, const KURL& baseURL, 
+                                                              const Vector<String>& paramNames, const Vector<String>& paramValues)
+{
+    Widget* result = new Widget;
+    
+    BEGIN_BLOCK_OBJC_EXCEPTIONS;
+    WebFrameBridge* bridge = m_webFrame->_private->bridge;
+    result->setView([bridge viewForJavaAppletWithFrame:NSMakeRect(0, 0, size.width(), size.height())
+                            attributeNames:nsArray(paramNames)
+                            attributeValues:nsArray(paramValues)
+                            baseURL:baseURL.getNSURL()
+                            DOMElement:[DOMElement _elementWith:element]]);    
+    END_BLOCK_OBJC_EXCEPTIONS;
+    
+    return result;
+}
+
+String WebFrameLoaderClient::overrideMediaType() const
+{
+    NSString* overrideType = [m_webFrame->_private->bridge overrideMediaType];
+    if (overrideType)
+        return overrideType;
+    return String();
+}
+
+void WebFrameLoaderClient::windowObjectCleared() const
+{
+    [m_webFrame->_private->bridge windowObjectCleared];
+}
+
 @implementation WebFramePolicyListener
 
 - (id)initWithWebCoreFrame:(Frame*)frame
index 89028d531d15c3a5a95554c4950d548ea52b9d52..be93505ff39f0da3f95b63caa90acc11c143cd81 100644 (file)
@@ -30,6 +30,7 @@
 #include "FrameQtClient.h"
 #include "FrameQt.h"
 #include "FrameView.h"
+#include "ResourceRequest.h"
 
 #include "markup.h"
 #include "RenderTreeAsText.h"
 #include "ExecState.h"
 #include "object.h"
 
+#include "wtf/HashMap.h"
 
 using namespace WebCore;
 
-QWebFrame::QWebFrame(QWebPage *parent)
+QWebFrame::QWebFrame(QWebPage *parent, QWebFrameData *frameData)
     : QScrollArea(parent)
     , d(new QWebFramePrivate)
 {
     d->page = parent;
 
     d->frameLoaderClient = new FrameLoaderClientQt();
-    d->frame = new FrameQt(parent->d->page, 0, new FrameQtClient(), d->frameLoaderClient);
-    d->frameLoaderClient->setFrame(this, d->frame);
+    d->frame = new FrameQt(parent->d->page, frameData->ownerElement, new FrameQtClient(), d->frameLoaderClient);
+    d->frameLoaderClient->setFrame(this, d->frame.get());
 
-    d->frameView = new FrameView(d->frame);
+    d->frameView = new FrameView(d->frame.get());
     d->frameView->setScrollArea(this);
-    d->frame->setView(d->frameView);
+    d->frame->setView(d->frameView.get());
+    if (!frameData->url.isEmpty()) {
+        ResourceRequest request(frameData->url, frameData->referrer);
+        d->frame->loader()->load(request, frameData->name);
+    }
 }
 
 
-QWebFrame::QWebFrame(QWebFrame *parent)
+QWebFrame::QWebFrame(QWebFrame *parent, QWebFrameData *frameData)
     : QScrollArea(parent)
     , d(new QWebFramePrivate)
 {
     d->page = parent->d->page;
-//     d->frameLoaderClient = new FrameLoaderClientQt();
-//     d->frame = new FrameQt(page, 0, new FrameQtClient(), frameLoaderClient);
-//     d->frameLoaderClient->setFrame(d->frame);
 
-//     d->frameView = new FrameView(d->frame);
-//     d->frameView->setScrollArea(this);
-//     d->frame->setView(d->frameView);
+    d->frameLoaderClient = new FrameLoaderClientQt();
+    d->frame = new FrameQt(parent->d->page->d->page, frameData->ownerElement, new FrameQtClient(), d->frameLoaderClient);
+    d->frameLoaderClient->setFrame(this, d->frame.get());
+
+    d->frameView = new FrameView(d->frame.get());
+    d->frameView->setScrollArea(this);
+    d->frame->setView(d->frameView.get());
 }
 
 QWebFrame::~QWebFrame()
 {
-    delete d->frame;
+    delete d;
 }
 
 void QWebFrame::addToJSWindowObject(const QByteArray &name, QObject *object)
index eae43f760fd1677cd2d9e52971d82b3bfa19e8a0..b4566f0cf025deacbd16c4e26afe1294cd8301b8 100644 (file)
@@ -31,15 +31,18 @@ class QWebPage;
 namespace WebCore {
     class FrameLoaderClientQt;
 }
+class QWebFrameData;
 
 class QWebFrame : public QScrollArea
 {
     Q_OBJECT
-public:
-    QWebFrame(QWebPage *parent);
-    QWebFrame(QWebFrame *parent);
+protected:
+    QWebFrame(QWebPage *parent, QWebFrameData *frameData);
+    QWebFrame(QWebFrame *parent, QWebFrameData *frameData);
     ~QWebFrame();
 
+public:
+    
     QWebPage *page() const;
 
     void addToJSWindowObject(const QByteArray &name, QObject *object);
index 053f6a8816464a2628f93de0eee62b726a3d2521..4a50387125d5ae4ecb4e497e125ca441ed1a2785 100644 (file)
 #include "qwebframe.h"
 #include "qwebpage_p.h"
 
+#include "KURL.h"
+#include "PlatformString.h"
+#include "FrameView.h"
+#include "wtf/RefPtr.h"
+
 namespace WebCore
 {
     class FrameLoaderClientQt;
     class FrameQt;
     class FrameView;
+    class HTMLFrameOwnerElement;
 }
 class QWebPage;
 
@@ -43,10 +49,22 @@ public:
         , page(0)
         {}
     WebCore::FrameLoaderClientQt *frameLoaderClient;
-    WebCore::FrameQt *frame;
-    WebCore::FrameView *frameView;
+    WTF::RefPtr<WebCore::FrameQt> frame;
+    WTF::RefPtr<WebCore::FrameView> frameView;
     QWebPage *page;
 };
 
+class QWebFrameData
+{
+public:
+    WebCore::KURL url;
+    WebCore::String name;
+    WebCore::HTMLFrameOwnerElement* ownerElement;
+    
+    WebCore::String referrer;
+    bool allowsScrolling;
+    int marginWidth;
+    int marginHeight;    
+};
 
 #endif
index 4e20cad845979d75a0d2e852adcb3c500bf5ee3c..6af9f23e6bf89aff78b1b82a6567e7aff93b529b 100644 (file)
@@ -31,6 +31,7 @@
 #include "ChromeClientQt.h"
 #include "ContextMenuClientQt.h"
 #include "EditorClientQt.h"
+#include "Settings.h"
 #include "Page.h"
 #include "FrameLoader.h"
 #include "KURL.h"
@@ -46,6 +47,20 @@ QWebPagePrivate::QWebPagePrivate(QWebPage *qq)
     editorClient = new EditorClientQt();
     page = new Page(chromeClient, contextMenuClient, editorClient);
 
+    Settings *settings = page->settings();
+    settings->setLoadsImagesAutomatically(true);
+    settings->setMinimumFontSize(5);
+    settings->setMinimumLogicalFontSize(5);
+    settings->setShouldPrintBackgrounds(true);
+    settings->setJavaScriptEnabled(true);
+
+    settings->setDefaultFixedFontSize(14);
+    settings->setDefaultFontSize(14);
+    settings->setSerifFontFamily("Times New Roman");
+    settings->setSansSerifFontFamily("Arial");
+    settings->setFixedFontFamily("Courier");
+    settings->setStandardFontFamily("Arial");
+
     mainFrame = 0;
 }
 
@@ -57,7 +72,12 @@ QWebPagePrivate::~QWebPagePrivate()
 void QWebPagePrivate::createMainFrame()
 {
     if (!mainFrame) {
-        mainFrame = q->createFrame(0);
+        QWebFrameData frameData;
+        frameData.ownerElement = 0;
+        frameData.allowsScrolling = true;
+        frameData.marginWidth = 5;
+        frameData.marginHeight = 5;
+        mainFrame = q->createFrame(0, &frameData);
         layout->addWidget(mainFrame);
     }
 }
@@ -77,11 +97,11 @@ QWebPage::~QWebPage()
     delete d;
 }
 
-QWebFrame *QWebPage::createFrame(QWebFrame *parentFrame)
+QWebFrame *QWebPage::createFrame(QWebFrame *parentFrame, QWebFrameData *frameData)
 {
     if (parentFrame)
-        return new QWebFrame(parentFrame);
-    return new QWebFrame(this);
+        return new QWebFrame(parentFrame, frameData);
+    return new QWebFrame(this, frameData);
 }
 
 void QWebPage::open(const QUrl &url)
index 66ff34ab83c63e1041a97b535d3ad60df4cd102c..b633e681c272ef16dd37f9f9358d67883f7eaca3 100644 (file)
@@ -28,6 +28,11 @@ class QWebFrame;
 class QUrl;
 
 class QWebPagePrivate;
+class QWebFrameData;
+
+namespace WebCore {
+    class FrameLoaderClientQt;
+}
 
 class QWebPage : public QWidget
 {
@@ -36,8 +41,6 @@ public:
     QWebPage(QWidget *parent);
     ~QWebPage();
 
-    virtual QWebFrame *createFrame(QWebFrame *parentFrame);
-    //virtual QWebPage *createPage(...);
 
     void open(const QUrl &url);
 
@@ -65,9 +68,14 @@ signals:
      */
     void loadFinished(QWebFrame *frame);
 
+protected:
+    virtual QWebFrame *createFrame(QWebFrame *parentFrame, QWebFrameData *frameData);
+    //virtual QWebPage *createPage(...);
    
 private:
     friend class QWebFrame;
+    friend class QWebPagePrivate;
+    friend class WebCore::FrameLoaderClientQt;
     QWebPagePrivate *d;
 };
 
index 8b52af39cab2c833c50be80e8e835e053555f17f..990a14c6eb0fb1b4bc0eef418cc1ceb1fb7c6652 100644 (file)
@@ -1,3 +1,33 @@
+2007-01-23  Lars Knoll <lars@trolltech.com>
+
+        Reviewed by Maciej
+
+        Add support for Frames to the Qt build and fix some issues
+        in the API classes.
+
+        * Api/qwebframe.cpp:
+        (QWebFrame::QWebFrame):
+        (QWebFrame::~QWebFrame):
+        * Api/qwebframe.h:
+        * Api/qwebframe_p.h:
+        * Api/qwebpage.cpp:
+        (QWebPagePrivate::QWebPagePrivate):
+        (QWebPagePrivate::createMainFrame):
+        (QWebPage::createFrame):
+        * Api/qwebpage.h:
+        * WebCoreSupport/FrameLoaderClientQt.cpp:
+        (WebCore::FrameLoaderClientQt::detachedFromParent3):
+        (WebCore::FrameLoaderClientQt::detachedFromParent4):
+        (WebCore::FrameLoaderClientQt::cancelPolicyCheck):
+        (WebCore::FrameLoaderClientQt::windowObjectCleared):
+        (WebCore::FrameLoaderClientQt::createFrame):
+        (WebCore::FrameLoaderClientQt::objectContentType):
+        (WebCore::FrameLoaderClientQt::createPlugin):
+        (WebCore::FrameLoaderClientQt::redirectDataToPlugin):
+        (WebCore::FrameLoaderClientQt::createJavaAppletWidget):
+        (WebCore::FrameLoaderClientQt::overrideMediaType):
+        * WebCoreSupport/FrameLoaderClientQt.h:
+
 2007-01-23  Oliver Hunt  <oliver@apple.com>
 
         Reviewed by Adam.
index d2ca3fe92aa2533e8149625c128c5efb43d39926..0cb314580b19f2561f884f06c2b4178ff07d1a76 100644 (file)
@@ -1,6 +1,7 @@
 /*
  * Copyright (C) 2006 Zack Rusin <zack@kde.org>
  * Copyright (C) 2006 Apple Computer, Inc.  All rights reserved.
+ * Copyright (C) 2007 Trolltech ASA
  *
  * All rights reserved.
  *
  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
+
 #include "config.h"
 #include "FrameLoaderClientQt.h"
+#include "FrameTree.h"
+#include "FrameView.h"
 #include "DocumentLoader.h"
 #include "ResourceResponse.h"
 #include "Page.h"
 #include "ProgressTracker.h"
+#include "ResourceRequest.h"
 
 #include "qwebpage.h"
 #include "qwebframe.h"
+#include "qwebframe_p.h"
 
 #include "qdebug.h"
 
@@ -248,13 +253,6 @@ void FrameLoaderClientQt::willCloseDocument()
     notImplemented();
 }
 
-
-void FrameLoaderClientQt::detachedFromParent1()
-{
-    notImplemented();
-}
-
-
 void FrameLoaderClientQt::detachedFromParent2()
 {
     notImplemented();
@@ -263,13 +261,13 @@ void FrameLoaderClientQt::detachedFromParent2()
 
 void FrameLoaderClientQt::detachedFromParent3()
 {
-    notImplemented();
+    m_webFrame->d->frameView = 0;
 }
 
 
 void FrameLoaderClientQt::detachedFromParent4()
 {
-    notImplemented();
+    delete m_webFrame;
 }
 
 
@@ -361,6 +359,7 @@ void FrameLoaderClientQt::dispatchShow()
 
 void FrameLoaderClientQt::cancelPolicyCheck()
 {
+    qDebug() << "FrameLoaderClientQt::cancelPolicyCheck";
     m_policyFunction = 0;
 }
 
@@ -568,7 +567,7 @@ bool FrameLoaderClientQt::canHandleRequest(const WebCore::ResourceRequest&) cons
     return true;
 }
 
-void FrameLoaderClientQt::partClearedInBegin()
+void FrameLoaderClientQt::windowObjectCleared() const
 {
     emit m_webFrame->cleared();
 }
@@ -771,6 +770,73 @@ bool FrameLoaderClientQt::willUseArchive(WebCore::ResourceLoader*, const WebCore
     return false;
 }
 
+Frame* FrameLoaderClientQt::createFrame(const KURL& url, const String& name, HTMLFrameOwnerElement* ownerElement,
+                                        const String& referrer, bool allowsScrolling, int marginWidth, int marginHeight)
+{
+    qDebug() << ">>>>>>>>>>> createFrame";
+    QWebFrameData frameData;
+    frameData.url = url;
+    frameData.name = name;
+    frameData.ownerElement = ownerElement;
+    frameData.referrer = referrer;
+    frameData.allowsScrolling = allowsScrolling;
+    frameData.marginWidth = marginWidth;
+    frameData.marginHeight = marginHeight;
+        
+
+    QWebFrame* webFrame = m_webFrame->page()->createFrame(m_webFrame, &frameData);
+
+    RefPtr<Frame> childFrame = webFrame->d->frame;
+
+    // FIXME: All of the below should probably be moved over into WebCore
+    childFrame->tree()->setName(name);
+    m_frame->tree()->appendChild(childFrame);
+    // ### set override encoding if we have one
+
+    FrameLoadType loadType = m_frame->loader()->loadType();
+    FrameLoadType childLoadType = FrameLoadTypeInternal;
+
+    childFrame->loader()->load(frameData.url, frameData.referrer, childLoadType,
+                             String(), 0, 0, WTF::HashMap<String, String>());
+    
+    // The frame's onload handler may have removed it from the document.
+    if (!childFrame->tree()->parent())
+        return 0;
+    
+    return childFrame.get();
+}
+
+ObjectContentType FrameLoaderClientQt::objectContentType(const KURL& url, const String& mimeType)
+{
+    notImplemented();
+    return ObjectContentType();
+}
+
+Widget* FrameLoaderClientQt::createPlugin(Element*, const KURL&, const Vector<String>&, const Vector<String>&, const String&, bool)
+{
+    notImplemented();
+    return 0;
+}
+
+void FrameLoaderClientQt::redirectDataToPlugin(Widget* pluginWidget)
+{
+    notImplemented();
+    return;
+}
+
+Widget* FrameLoaderClientQt::createJavaAppletWidget(const IntSize&, Element*, const KURL& baseURL,
+                                                    const Vector<String>& paramNames, const Vector<String>& paramValues)
+{
+    notImplemented();
+    return 0;
+}
+
+String FrameLoaderClientQt::overrideMediaType() const
+{
+    notImplemented();
+    return String();
+}
+
 }
 
 #include "FrameLoaderClientQt.moc"
index 9e44833fdbaffac00024bf2c941f765ba86910c8..626375b0ea2a43c46ca1fa505874f0415ecf39de 100644 (file)
@@ -47,7 +47,7 @@ namespace WebCore {
     class NavigationAction;
     class String;
     class ResourceLoader;
-
+    
     struct LoadErrorResetToken;
 
     class FrameLoaderClientQt : public QObject, public FrameLoaderClient {
@@ -101,7 +101,6 @@ namespace WebCore {
 
         virtual void willCloseDocument();
 
-        virtual void detachedFromParent1();
         virtual void detachedFromParent2();
         virtual void detachedFromParent3();
         virtual void detachedFromParent4();
@@ -207,10 +206,17 @@ namespace WebCore {
         virtual void postProgressStartedNotification();
         virtual void postProgressEstimateChangedNotification();
         virtual void postProgressFinishedNotification();
-        
-        // FIXME: This should probably not be here, but it's needed for the tests currently
-        virtual void partClearedInBegin();
 
+        virtual Frame* createFrame(const KURL& url, const String& name, HTMLFrameOwnerElement* ownerElement,
+                                   const String& referrer, bool allowsScrolling, int marginWidth, int marginHeight) ;
+        virtual Widget* createPlugin(Element*, const KURL&, const Vector<String>&, const Vector<String>&, const String&, bool);
+        virtual void redirectDataToPlugin(Widget* pluginWidget);
+        virtual Widget* createJavaAppletWidget(const IntSize&, Element*, const KURL& baseURL, const Vector<String>& paramNames, const Vector<String>& paramValues);
+
+        virtual ObjectContentType objectContentType(const KURL& url, const String& mimeType);
+        virtual String overrideMediaType() const;
+        
+        virtual void windowObjectCleared() const;
 
     private:
         Frame *m_frame;