diff --git a/LayoutTests/platform/mac/fast/forms/select-disabled-appearance-expected.png b/LayoutTests/platform/mac/fast/forms/select-disabled-appearance-expected.png index 6e96c31..05a2578 100644 Binary files a/LayoutTests/platform/mac/fast/forms/select-disabled-appearance-expected.png and b/LayoutTests/platform/mac/fast/forms/select-disabled-appearance-expected.png differ diff --git a/WebCore/platform/network/qt/QNetworkReplyHandler.cpp b/WebCore/platform/network/qt/QNetworkReplyHandler.cpp index 3303b34..642b1b1 100644 --- a/WebCore/platform/network/qt/QNetworkReplyHandler.cpp +++ b/WebCore/platform/network/qt/QNetworkReplyHandler.cpp @@ -224,9 +224,7 @@ void QNetworkReplyHandler::finish() if (m_shouldFinish) return; - // FIXME: Investigate if this check should be moved into sendResponseIfNeeded() - if (!m_reply->error()) - sendResponseIfNeeded(); + sendResponseIfNeeded(); if (!m_resourceHandle) return; @@ -236,19 +234,20 @@ void QNetworkReplyHandler::finish() m_reply = 0; return; } + QNetworkReply* oldReply = m_reply; + if (m_redirected) { resetState(); start(); } else if (!m_reply->error() || ignoreHttpError(m_reply, m_responseDataSent)) { client->didFinishLoading(m_resourceHandle); } else { - int code = m_reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(); - QUrl url = m_reply->url(); + int httpStatusCode = m_reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(); - if (code) { - ResourceError error("HTTP", code, url.toString(), m_reply->attribute(QNetworkRequest::HttpReasonPhraseAttribute).toString()); + if (httpStatusCode) { + ResourceError error("HTTP", httpStatusCode, url.toString(), m_reply->attribute(QNetworkRequest::HttpReasonPhraseAttribute).toString()); client->didFail(m_resourceHandle, error); } else { ResourceError error("QtNetwork", m_reply->error(), url.toString(), m_reply->errorString()); @@ -267,6 +266,9 @@ void QNetworkReplyHandler::sendResponseIfNeeded() if (m_shouldSendResponse) return; + if (m_reply->error()) + return; + if (m_responseSent || !m_resourceHandle) return; m_responseSent = true; @@ -290,40 +292,36 @@ void QNetworkReplyHandler::sendResponseIfNeeded() } KURL url(m_reply->url()); - String suggestedFilename = filenameFromHTTPContentDisposition(QString::fromAscii(m_reply->rawHeader("Content-Disposition"))); - - if (suggestedFilename.isEmpty()) - suggestedFilename = url.lastPathComponent(); - ResourceResponse response(url, mimeType, m_reply->header(QNetworkRequest::ContentLengthHeader).toLongLong(), - encoding, - suggestedFilename); + encoding, String()); - const bool isLocalFileReply = (m_reply->url().scheme() == QLatin1String("file")); - int statusCode = m_reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(); - if (!isLocalFileReply) { - response.setHTTPStatusCode(statusCode); - response.setHTTPStatusText(m_reply->attribute(QNetworkRequest::HttpReasonPhraseAttribute).toByteArray().constData()); + if (url.isLocalFile()) { + client->didReceiveResponse(m_resourceHandle, response); + return; } - else if (m_reply->error() == QNetworkReply::ContentNotFoundError) - response.setHTTPStatusCode(404); + // The status code is equal to 0 for protocols not in the HTTP family. + int statusCode = m_reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(); - /* Fill in the other fields - * For local file requests remove the content length and the last-modified - * headers as required by fast/dom/xmlhttprequest-get.xhtml - */ - foreach (const QByteArray& headerName, m_reply->rawHeaderList()) { - if (isLocalFileReply - && (headerName == "Content-Length" || headerName == "Last-Modified")) - continue; + if (url.protocolInHTTPFamily()) { + String suggestedFilename = filenameFromHTTPContentDisposition(QString::fromAscii(m_reply->rawHeader("Content-Disposition"))); - response.setHTTPHeaderField(QString::fromAscii(headerName), QString::fromAscii(m_reply->rawHeader(headerName))); - } + if (!suggestedFilename.isEmpty()) + response.setSuggestedFilename(suggestedFilename); + else + response.setSuggestedFilename(url.lastPathComponent()); - if (isLocalFileReply) - response.setHTTPHeaderField(QString::fromAscii("Cache-Control"), QString::fromAscii("no-cache")); + response.setHTTPStatusCode(statusCode); + response.setHTTPStatusText(m_reply->attribute(QNetworkRequest::HttpReasonPhraseAttribute).toByteArray().constData()); + + /* Fill in the other fields + * headers as required by fast/dom/xmlhttprequest-get.xhtml + */ + foreach (const QByteArray& headerName, m_reply->rawHeaderList()) { + response.setHTTPHeaderField(QString::fromAscii(headerName), QString::fromAscii(m_reply->rawHeader(headerName))); + } + } QUrl redirection = m_reply->attribute(QNetworkRequest::RedirectionTargetAttribute).toUrl(); if (redirection.isValid()) {