namespace WebCore {
class WidgetPrivate;
class FrameLoaderClientQt;
+ class ChromeClientQt;
}
class QWebFrameData;
friend class QWebPagePrivate;
friend class WebCore::WidgetPrivate;
friend class WebCore::FrameLoaderClientQt;
+ friend class WebCore::ChromeClientQt;
QWebFramePrivate *d;
};
QWebNetworkJob *job = handle->getInternal()->m_job;
if (!job)
return;
+ //DEBUG() << "QWebNetworkManager::cancel:" << job->d->request.httpHeader.toString();
job->d->resourceHandle = 0;
job->d->connector = 0;
job->d->interface->cancelJob(job);
if (!(protocol.isEmpty() || protocol == QLatin1String("file"))) {
statusCode = 404;
- } else if (job->postData().isEmpty()) {
+ } else {
+ // we simply ignore post data here.
QFile f(path);
DEBUG() << "opening" << QString(url.path());
} else {
statusCode = 404;
}
- } else {
- statusCode = 404;
}
d->sendFileData(job, statusCode, data);
}
+2007-10-05 Lars Knoll <lars@trolltech.com>
+
+ add proper error messages to the FrameLoaderClient.
+ Implement ChromeClientQt::closeWindowSoon and
+ FrameLoaderClientQt::dispatchCreatePage (which should go away IMO).
+ Some fixes in DRT to make it work correctly with multiple windows.
+
+ Reviewed by Maciej.
+
+ * Api/qwebframe.h:
+ * Api/qwebnetworkinterface.cpp:
+ (QWebNetworkManager::cancel):
+ (QWebNetworkInterface::addJob):
+ * WebCoreSupport/ChromeClientQt.cpp:
+ (WebCore::ChromeClientQt::closeWindowSoon):
+ * WebCoreSupport/FrameLoaderClientQt.cpp:
+ (WebCore::FrameLoaderClientQt::cancelledError):
+ (WebCore::):
+ (WebCore::FrameLoaderClientQt::blockedError):
+ (WebCore::FrameLoaderClientQt::cannotShowURLError):
+ (WebCore::FrameLoaderClientQt::interruptForPolicyChangeError):
+ (WebCore::FrameLoaderClientQt::cannotShowMIMETypeError):
+ (WebCore::FrameLoaderClientQt::dispatchCreatePage):
+
2007-10-03 Lars Knoll <lars@trolltech.com>
Signed off by Olliej.
#include "qwebpage.h"
#include "qwebpage_p.h"
+#include "qwebframe_p.h"
namespace WebCore
{
void ChromeClientQt::closeWindowSoon()
{
- notImplemented();
+ m_webPage->mainFrame()->d->frame->loader()->stopAllLoaders();
+ m_webPage->deleteLater();
}
void ChromeClientQt::runJavaScriptAlert(Frame* f, const String& msg)
fl->addData(data, length);
}
-WebCore::ResourceError FrameLoaderClientQt::cancelledError(const WebCore::ResourceRequest&)
+WebCore::ResourceError FrameLoaderClientQt::cancelledError(const WebCore::ResourceRequest& request)
{
- notImplemented();
- return ResourceError();
+ return ResourceError("Error", -999, request.url().prettyURL(), QObject::tr("QWebFrame", "Request cancelled"));
}
-WebCore::ResourceError FrameLoaderClientQt::blockedError(const WebCore::ResourceRequest&)
+// copied from WebKit/Misc/WebKitErrors[Private].h
+enum {
+ WebKitErrorCannotShowMIMEType = 100,
+ WebKitErrorCannotShowURL = 101,
+ WebKitErrorFrameLoadInterruptedByPolicyChange = 102,
+ WebKitErrorCannotUseRestrictedPort = 103,
+ WebKitErrorCannotFindPlugIn = 200,
+ WebKitErrorCannotLoadPlugIn = 201,
+ WebKitErrorJavaUnavailable = 202,
+};
+
+WebCore::ResourceError FrameLoaderClientQt::blockedError(const WebCore::ResourceRequest& request)
{
- notImplemented();
- return ResourceError();
+ return ResourceError("Error", WebKitErrorCannotUseRestrictedPort, request.url().prettyURL(), QObject::tr("QWebFrame", "Request blocked"));
}
-WebCore::ResourceError FrameLoaderClientQt::cannotShowURLError(const WebCore::ResourceRequest&)
+WebCore::ResourceError FrameLoaderClientQt::cannotShowURLError(const WebCore::ResourceRequest& request)
{
- notImplemented();
- return ResourceError();
+ return ResourceError("Error", WebKitErrorCannotShowURL, request.url().url(), QObject::tr("QWebFrame", "Cannot show URL"));
}
-WebCore::ResourceError FrameLoaderClientQt::interruptForPolicyChangeError(const WebCore::ResourceRequest&)
+WebCore::ResourceError FrameLoaderClientQt::interruptForPolicyChangeError(const WebCore::ResourceRequest& request)
{
- notImplemented();
- return ResourceError();
+ return ResourceError("Error", WebKitErrorFrameLoadInterruptedByPolicyChange, request.url().url(), QObject::tr("QWebFrame", "Frame load interruped by policy change"));
}
-WebCore::ResourceError FrameLoaderClientQt::cannotShowMIMETypeError(const WebCore::ResourceResponse&)
+WebCore::ResourceError FrameLoaderClientQt::cannotShowMIMETypeError(const WebCore::ResourceResponse& response)
{
- notImplemented();
- return ResourceError();
+ return ResourceError("Error", WebKitErrorCannotShowMIMEType, response.url().url(), QObject::tr("QWebFrame", "Cannot show mimetype"));
}
-WebCore::ResourceError FrameLoaderClientQt::fileDoesNotExistError(const WebCore::ResourceResponse&)
+WebCore::ResourceError FrameLoaderClientQt::fileDoesNotExistError(const WebCore::ResourceResponse& response)
{
- notImplemented();
- return ResourceError();
+ return ResourceError("Error", -998 /* ### */, response.url().url(), QObject::tr("QWebFrame", "File does not exist"));
}
bool FrameLoaderClientQt::shouldFallBack(const WebCore::ResourceError&)
WebCore::Frame* FrameLoaderClientQt::dispatchCreatePage()
{
- notImplemented();
- return 0;
+ if (!m_webFrame)
+ return 0;
+ QWebPage *newPage = m_webFrame->page()->createWindow();
+ return newPage->mainFrame()->d->frame.get();
}
void FrameLoaderClientQt::dispatchDecidePolicyForMIMEType(FramePolicyFunction function, const WebCore::String&, const WebCore::ResourceRequest&)
+2007-10-05 Lars Knoll <lars@trolltech.com>
+
+ add proper error messages to the FrameLoaderClient.
+ Implement ChromeClientQt::closeWindowSoon and
+ FrameLoaderClientQt::dispatchCreatePage (which should go away IMO).
+ Some fixes in DRT to make it work correctly with multiple windows.
+
+ Reviewed by Maciej.
+
+ * DumpRenderTree/qt/DumpRenderTree.cpp:
+ (WebCore::DumpRenderTree::DumpRenderTree):
+ (WebCore::DumpRenderTree::createWindow):
+ (WebCore::DumpRenderTree::windowCount):
+ * DumpRenderTree/qt/DumpRenderTree.h:
+ * DumpRenderTree/qt/jsobjects.cpp:
+ (LayoutTestController::maybeDump):
+ (LayoutTestController::windowCount):
+ * DumpRenderTree/qt/jsobjects.h:
+
2007-10-05 Lars Knoll <lars@trolltech.com>
Add a dummy plugin to DRT to fix fast/dom/Window/Plug-Ins.html.
: m_stdin(0)
, m_notifier(0)
{
- m_controller = new LayoutTestController();
+ m_controller = new LayoutTestController(this);
connect(m_controller, SIGNAL(done()), this, SLOT(dump()), Qt::QueuedConnection);
m_page = new WebPage(0, this);
container->resize(0, 0);
container->move(-1, -1);
container->hide();
- QWebPage *page = new QWebPage(container);
+ QWebPage *page = new WebPage(container, this);
windows.append(container);
return page;
}
-
+
+int DumpRenderTree::windowCount() const
+{
+ int count = 0;
+ foreach(QWidget *w, windows) {
+ if (w->children().count())
+ ++count;
+ }
+ return count + 1;
}
+}
#include <QObject>
#include <QTextStream>
#include <QSocketNotifier>
-
class QUrl;
class QFile;
class QWebPage;
EventSender *eventSender() const { return m_eventSender; }
QWebPage *createWindow();
+ int windowCount() const;
+
public Q_SLOTS:
void initJSObjects();
void readStdin(int);
#include <qevent.h>
#include <qapplication.h>
+#include "DumpRenderTree.h"
+
class HackWebFrame : public QWebFrame
{
public:
~HackWebFrame() {}
};
-LayoutTestController::LayoutTestController() : QObject()
+LayoutTestController::LayoutTestController(WebCore::DumpRenderTree *drt)
+ : QObject()
+ , m_drt(drt)
{
m_timeoutTimer = 0;
reset();
m_topLoadingFrame = 0;
- if (!ok || !shouldWaitUntilDone()) {
+ if (!shouldWaitUntilDone()) {
emit done();
m_isLoading = false;
}
m_isLoading = false;
}
+int LayoutTestController::windowCount()
+{
+ return m_drt->windowCount();
+}
+
void LayoutTestController::dumpEditingCallbacks()
{
//qDebug() << ">>>dumpEditingCallbacks";
#include <qpoint.h>
class QWebFrame;
-
+namespace WebCore {
+ class DumpRenderTree;
+}
class LayoutTestController : public QObject
{
Q_OBJECT
public:
- LayoutTestController();
+ LayoutTestController(WebCore::DumpRenderTree *drt);
bool isLoading() const { return m_isLoading; }
void setLoading(bool loading) { m_isLoading = loading; }
void dumpEditingCallbacks();
void queueReload();
void provisionalLoad();
+ void setCloseRemainingWindowsWhenComplete(bool) {}
+ int windowCount();
private:
bool m_isLoading;
bool m_waitForDone;
int m_timeoutTimer;
QWebFrame *m_topLoadingFrame;
+ WebCore::DumpRenderTree *m_drt;
};
class QWebPage;