Reviewed and landed by Anders.
Offer a way for WebKitPart to be able to detect when
the webpage has been completly loaded (including subresources).
Also fix Qt/Linux build by removing PopupMenu.cpp from CMakeLists.txt
and removing some functions from PopupMenuQt.cpp, and alter FrameQt.cpp.
* CMakeLists.txt:
* platform/qt/FrameQt.cpp:
(WebCore::FrameQt::submitForm):
(WebCore::FrameQt::client):
* platform/qt/FrameQt.h:
* platform/qt/FrameQtClient.cpp:
(WebCore::FrameQtClientDefault::setFrame):
(WebCore::FrameQtClientDefault::openURL):
(WebCore::FrameQtClientDefault::submitForm):
(WebCore::FrameQtClientDefault::checkLoaded):
(WebCore::FrameQtClientDefault::traverseNextFrameStayWithin):
(WebCore::FrameQtClientDefault::numPendingOrLoadingRequests):
(WebCore::FrameQtClientDefault::receivedAllData):
* platform/qt/FrameQtClient.h:
* platform/qt/LoaderFunctionsQt.cpp:
(WebCore::CheckCacheObjectStatus):
* platform/qt/PopupMenuQt.cpp:
* platform/qt/ResourceLoaderManager.cpp:
(WebCore::ResourceLoaderManager::ResourceLoaderManager):
(WebCore::ResourceLoaderManager::slotResult):
(WebCore::ResourceLoaderManager::add):
* platform/qt/ResourceLoaderManager.h:
* platform/qt/ResourceLoaderQt.cpp:
(WebCore::ResourceLoader::start):
git-svn-id: https://svn.webkit.org/repository/webkit/trunk@17165
268f45cc-cd09-0410-ab3c-
d52691b4dbfc
platform/GlyphMap.cpp
platform/Font.cpp
platform/FontData.cpp
- platform/PopupMenu.cpp
rendering/RenderCounter.cpp
rendering/CounterNode.cpp
rendering/CounterResetNode.cpp
+2006-10-20 Nikolas Zimmermann <zimmermann@kde.org>
+
+ Reviewed and landed by Anders.
+
+ Offer a way for WebKitPart to be able to detect when
+ the webpage has been completly loaded (including subresources).
+
+ Also fix Qt/Linux build by removing PopupMenu.cpp from CMakeLists.txt
+ and removing some functions from PopupMenuQt.cpp, and alter FrameQt.cpp.
+
+ * CMakeLists.txt:
+ * platform/qt/FrameQt.cpp:
+ (WebCore::FrameQt::submitForm):
+ (WebCore::FrameQt::client):
+ * platform/qt/FrameQt.h:
+ * platform/qt/FrameQtClient.cpp:
+ (WebCore::FrameQtClientDefault::setFrame):
+ (WebCore::FrameQtClientDefault::openURL):
+ (WebCore::FrameQtClientDefault::submitForm):
+ (WebCore::FrameQtClientDefault::checkLoaded):
+ (WebCore::FrameQtClientDefault::traverseNextFrameStayWithin):
+ (WebCore::FrameQtClientDefault::numPendingOrLoadingRequests):
+ (WebCore::FrameQtClientDefault::receivedAllData):
+ * platform/qt/FrameQtClient.h:
+ * platform/qt/LoaderFunctionsQt.cpp:
+ (WebCore::CheckCacheObjectStatus):
+ * platform/qt/PopupMenuQt.cpp:
+ * platform/qt/ResourceLoaderManager.cpp:
+ (WebCore::ResourceLoaderManager::ResourceLoaderManager):
+ (WebCore::ResourceLoaderManager::slotResult):
+ (WebCore::ResourceLoaderManager::add):
+ * platform/qt/ResourceLoaderManager.h:
+ * platform/qt/ResourceLoaderQt.cpp:
+ (WebCore::ResourceLoader::start):
+
2006-10-20 Steve Falkenburg <sfalken@apple.com>
Reviewed by Geoff.
d->m_submittedFormURL = request.url();
if (m_client)
- m_client->submitForm(request.doPost() ? "POST" : "GET", request.url(), &request.postData);
+ m_client->submitForm(request.httpMethod(), request.url(), &request.httpBody());
clearRecordedFormValues();
}
-void FrameQt::urlSelected(const FrameLoadRequest& frameLoadRequest)
+void FrameQt::urlSelected(const FrameLoadRequest& frameLoadRequest, const Event*)
{
ResourceRequest request = frameLoadRequest.m_request;
void FrameQt::openURLRequest(const FrameLoadRequest& request)
{
- urlSelected(request);
+ urlSelected(request, 0);
}
void FrameQt::scheduleClose()
checkCompleted();
}
+FrameQtClient* FrameQt::client() const
+{
+ return m_client;
+}
+
}
// vim: ts=4 sw=4 et
virtual bool openURL(const KURL&);
virtual void openURLRequest(const FrameLoadRequest&);
virtual void submitForm(const FrameLoadRequest&);
- virtual void urlSelected(const FrameLoadRequest&);
+ virtual void urlSelected(const FrameLoadRequest&, const Event*);
virtual void setTitle(const String&);
virtual void tokenizerProcessedData();
+ FrameQtClient* client() const;
+
private:
void init();
#include "FrameQtClient.h"
#include "FrameQt.h"
+#include "Document.h"
+#include "FrameTree.h"
#include "ResourceLoader.h"
+#include "LoaderFunctions.h"
#include "ResourceLoaderInternal.h"
#include <kstdguiitem.h>
void FrameQtClientDefault::setFrame(const FrameQt* frame)
{
- ASSERT(frame != 0);
+ ASSERT(frame);
m_frame = const_cast<FrameQt*>(frame);
}
m_assignedMimetype = false;
RefPtr<ResourceLoader> loader = ResourceLoader::create(this, "GET", url);
- loader->start(0);
+ loader->start(m_frame->document() ? m_frame->document()->docLoader() : 0);
}
void FrameQtClientDefault::submitForm(const String& method, const KURL& url, const FormData* postData)
{
+ ASSERT(m_frame);
+
m_assignedMimetype = false;
RefPtr<ResourceLoader> loader = ResourceLoader::create(this, method, url, *postData);
- loader->start(0);
+ loader->start(m_frame->document() ? m_frame->document()->docLoader() : 0);
+}
+
+void FrameQtClientDefault::checkLoaded()
+{
+ ASSERT(m_frame && m_frame->document() && m_frame->document()->docLoader());
+
+ // Recursively check the frame tree for open requests...
+ int num = numPendingOrLoadingRequests(true);
+ if (!num)
+ loadFinished();
}
void FrameQtClientDefault::runJavaScriptAlert(String const& message)
m_frame->write(data, length);
}
+FrameQt* FrameQtClientDefault::traverseNextFrameStayWithin(FrameQt* frame) const
+{
+ return QtFrame(m_frame->tree()->traverseNext(frame));
+}
+
+int FrameQtClientDefault::numPendingOrLoadingRequests(bool recurse) const
+{
+ if (!recurse)
+ return NumberOfPendingOrLoadingRequests(m_frame->document()->docLoader());
+
+ int num = 0;
+ for (FrameQt* frame = m_frame; frame != 0; frame = traverseNextFrameStayWithin(frame))
+ num += NumberOfPendingOrLoadingRequests(frame->document()->docLoader());
+
+ return num;
+}
+
void FrameQtClientDefault::receivedAllData(ResourceLoader* job, PlatformData data)
{
+ ASSERT(m_frame);
+
m_frame->end();
m_assignedMimetype = false;
-
- loadFinished();
}
}
virtual void openURL(const KURL&) = 0;
virtual void submitForm(const String& method, const KURL&, const FormData*) = 0;
+ // This is invoked after any ResourceLoader is done,
+ // to check wheter all items to be loaded are finished.
+ virtual void checkLoaded() = 0;
+
// WebKitPart / DumpRenderTree want to handle this differently.
virtual bool menubarVisible() const = 0;
virtual bool toolbarVisible() const = 0;
virtual void openURL(const KURL&);
virtual void submitForm(const String& method, const KURL&, const FormData*);
+ virtual void checkLoaded();
+
virtual void runJavaScriptAlert(String const& message);
virtual bool runJavaScriptConfirm(const String& message);
virtual bool runJavaScriptPrompt(const String& message, const String& defaultValue, String& result);
virtual void receivedAllData(ResourceLoader*, PlatformData);
private:
+ // Internal helpers
+ FrameQt* traverseNextFrameStayWithin(FrameQt*) const;
+ int numPendingOrLoadingRequests(bool recurse) const;
+
FrameQt* m_frame;
bool m_assignedMimetype : 1;
};
return;
}
- ASSERT(cachedObject->response());
+ // FIXME: Doesn't work at the moment! ASSERT(cachedObject->response());
// FIXME: Notify the caller that we "loaded".
}
{
}
-void PopupMenu::clear()
-{
- notImplemented();
-}
-
-void PopupMenu::populate()
-{
- notImplemented();
-}
-
void PopupMenu::show(const IntRect&, FrameView*, int)
{
notImplemented();
notImplemented();
}
-void PopupMenu::addSeparator()
-{
- notImplemented();
-}
-
-void PopupMenu::addGroupLabel(HTMLOptGroupElement*)
-{
- notImplemented();
-}
-
-void PopupMenu::addOption(HTMLOptionElement*)
-{
- notImplemented();
-}
-
}
// vim: ts=4 sw=4 et
ResourceLoaderManager::ResourceLoaderManager()
: m_jobToKioMap()
, m_kioToJobMap()
+ , m_frameClient(0)
{
}
job->setError(kjob->error());
remove(job);
+
+ ASSERT(m_frameClient);
+ m_frameClient->checkLoaded();
}
void ResourceLoaderManager::remove(ResourceLoader* job)
m_kioToJobMap.remove(kioJob);
}
-void ResourceLoaderManager::add(ResourceLoader* job)
+void ResourceLoaderManager::add(ResourceLoader* job, FrameQtClient* frameClient)
{
ResourceLoaderInternal* d = job->getInternal();
DeprecatedString url = d->URL.url();
m_jobToKioMap.insert(job, kioJob);
m_kioToJobMap.insert(kioJob, job);
+
+ if (!m_frameClient)
+ m_frameClient = frameClient;
+ else
+ ASSERT(m_frameClient == frameClient);
}
void ResourceLoaderManager::cancel(ResourceLoader* job)
#include <QMap>
#include <QObject>
-#include "Frame.h"
-#include "Timer.h"
#include "ResourceLoader.h"
namespace WebCore {
+class FrameQtClient;
+
class ResourceLoaderManager : public QObject {
Q_OBJECT
public:
static ResourceLoaderManager* self();
- void add(ResourceLoader*);
+ void add(ResourceLoader*, FrameQtClient*);
void cancel(ResourceLoader*);
public Q_SLOTS:
// KIO Job <-> WebKit Job mapping
QMap<ResourceLoader*, KIO::Job*> m_jobToKioMap;
QMap<KIO::Job*, ResourceLoader*> m_kioToJobMap;
+
+ FrameQtClient* m_frameClient;
};
}
ref();
d->m_loading = true;
+ FrameQt* frame = 0;
if (docLoader) {
- FrameQt* frame = QtFrame(docLoader->frame());
- if (!frame ) {
- kill();
- return false;
- }
+ frame = QtFrame(docLoader->frame());
+ ASSERT(frame);
}
- ResourceLoaderManager::self()->add(this);
+ ResourceLoaderManager::self()->add(this, frame ? frame->client() : 0);
return true;
}