QNetworkReply* NetworkManager::createRequest(QNetworkAccessManager::Operation operation, const QNetworkRequest &request, QIODevice *outgoingData) { if (operation == GetOperation && request.url().isLocalFile() && QFileInfo(request.url().toLocalFile()).isDir()) { return new LocalListingNetworkReply(this, request); } QNetworkRequest mutableRequest(request); if (!NetworkManagerFactory::canSendReferrer()) { mutableRequest.setRawHeader(QStringLiteral("Referer").toLatin1(), QByteArray()); } if (operation == PostOperation && mutableRequest.header(QNetworkRequest::ContentTypeHeader).isNull()) { mutableRequest.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("application/x-www-form-urlencoded")); } if (NetworkManagerFactory::isWorkingOffline()) { mutableRequest.setAttribute(QNetworkRequest::CacheLoadControlAttribute, QNetworkRequest::AlwaysCache); } else if (NetworkManagerFactory::getDoNotTrackPolicy() != NetworkManagerFactory::SkipTrackPolicy) { mutableRequest.setRawHeader(QByteArray("DNT"), QByteArray((NetworkManagerFactory::getDoNotTrackPolicy() == NetworkManagerFactory::DoNotAllowToTrackPolicy) ? "1" : "0")); } mutableRequest.setRawHeader(QStringLiteral("Accept-Language").toLatin1(), NetworkManagerFactory::getAcceptLanguage().toLatin1()); return QNetworkAccessManager::createRequest(operation, mutableRequest, outgoingData); }
bool DocumentLoader::shouldContinueForNavigationPolicy(const ResourceRequest& request) { NavigationAction action = triggeringAction(); if (action.isEmpty()) { action = NavigationAction(request, NavigationTypeOther); setTriggeringAction(action); } // Don't ask if we are loading an empty URL. if (!request.isNull() && request.url().isEmpty()) return true; // We are always willing to show alternate content for unreachable URLs; // treat it like a reload so it maintains the right state for b/f list. if (m_substituteData.isValid() && !m_substituteData.failingURL().isEmpty()) { if (isBackForwardLoadType(frameLoader()->loadType())) frameLoader()->setLoadType(FrameLoadTypeReload); return true; } // If we're loading content into a subframe, check against the parent's Content Security Policy // and kill the load if that check fails. if (m_frame->ownerElement() && !m_frame->ownerElement()->document()->contentSecurityPolicy()->allowChildFrameFromSource(request.url())) return false; PolicyAction policy = frameLoader()->client()->decidePolicyForNavigationAction(action, request); if (policy == PolicyDownload) { ResourceRequest mutableRequest(request); frameLoader()->setOriginalURLForDownloadRequest(mutableRequest); frameLoader()->client()->startDownload(mutableRequest); } return policy == PolicyUse; }
static CFURLRequestRef willSendRequest(CFURLConnectionRef conn, CFURLRequestRef cfRequest, CFURLResponseRef cfRedirectResponse, const void* clientInfo) { #if LOG_DISABLED UNUSED_PARAM(conn); #endif ResourceHandle* handle = static_cast<ResourceHandle*>(const_cast<void*>(clientInfo)); if (!cfRedirectResponse) { CFRetain(cfRequest); return cfRequest; } LOG(Network, "CFNet - willSendRequest(conn=%p, handle=%p) (%s)", conn, handle, handle->firstRequest().url().string().utf8().data()); ResourceRequest request; if (cfRedirectResponse) { CFHTTPMessageRef httpMessage = CFURLResponseGetHTTPResponse(cfRedirectResponse); if (httpMessage && CFHTTPMessageGetResponseStatusCode(httpMessage) == 307) { RetainPtr<CFStringRef> lastHTTPMethod(AdoptCF, handle->lastHTTPMethod().createCFString()); RetainPtr<CFStringRef> newMethod(AdoptCF, CFURLRequestCopyHTTPRequestMethod(cfRequest)); if (CFStringCompareWithOptions(lastHTTPMethod.get(), newMethod.get(), CFRangeMake(0, CFStringGetLength(lastHTTPMethod.get())), kCFCompareCaseInsensitive)) { RetainPtr<CFMutableURLRequestRef> mutableRequest(AdoptCF, CFURLRequestCreateMutableCopy(0, cfRequest)); #if USE(CFURLSTORAGESESSIONS) wkSetRequestStorageSession(ResourceHandle::currentStorageSession(), mutableRequest.get()); #endif CFURLRequestSetHTTPRequestMethod(mutableRequest.get(), lastHTTPMethod.get()); FormData* body = handle->firstRequest().httpBody(); if (!equalIgnoringCase(handle->firstRequest().httpMethod(), "GET") && body && !body->isEmpty()) WebCore::setHTTPBody(mutableRequest.get(), body); String originalContentType = handle->firstRequest().httpContentType(); RetainPtr<CFStringRef> originalContentTypeCF(AdoptCF, originalContentType.createCFString()); if (!originalContentType.isEmpty()) CFURLRequestSetHTTPHeaderFieldValue(mutableRequest.get(), CFSTR("Content-Type"), originalContentTypeCF.get()); request = mutableRequest.get(); } } } if (request.isNull()) request = cfRequest; // Should not set Referer after a redirect from a secure resource to non-secure one. if (!request.url().protocolIs("https") && protocolIs(request.httpReferrer(), "https")) request.clearHTTPReferrer(); handle->willSendRequest(request, cfRedirectResponse); if (request.isNull()) return 0; cfRequest = request.cfURLRequest(); CFRetain(cfRequest); return cfRequest; }
QNetworkReply* QtWebKitNetworkManager::createRequest(QNetworkAccessManager::Operation operation, const QNetworkRequest &request, QIODevice *outgoingData) { if (request.url() == m_formRequestUrl) { m_formRequestUrl = QUrl(); m_widget->openFormRequest(request.url(), operation, outgoingData); return QNetworkAccessManager::createRequest(QNetworkAccessManager::GetOperation, QNetworkRequest()); } const QString host = request.url().host(); if (!m_widget->isNavigating() && ContentBlockingManager::isUrlBlocked(m_widget->getContentBlockingProfiles(), request, m_widget->getUrl())) { Console::addMessage(QCoreApplication::translate("main", "Blocked request"), Otter::NetworkMessageCategory, LogMessageLevel, request.url().toString()); QUrl url = QUrl(); url.setScheme(QLatin1String("http")); if (m_blockedRequests.contains(host)) { ++m_blockedRequests[host]; } else { m_blockedRequests[host] = 1; } return QNetworkAccessManager::createRequest(QNetworkAccessManager::GetOperation, QNetworkRequest(url)); } ++m_startedRequests; if (operation == GetOperation && request.url().isLocalFile() && QFileInfo(request.url().toLocalFile()).isDir()) { return new LocalListingNetworkReply(this, request); } QNetworkRequest mutableRequest(request); if (!m_canSendReferrer) { mutableRequest.setRawHeader(QStringLiteral("Referer").toLatin1(), QByteArray()); } if (operation == PostOperation && mutableRequest.header(QNetworkRequest::ContentTypeHeader).isNull()) { mutableRequest.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("application/x-www-form-urlencoded")); } if (NetworkManagerFactory::isWorkingOffline()) { mutableRequest.setAttribute(QNetworkRequest::CacheLoadControlAttribute, QNetworkRequest::AlwaysCache); } else if (m_doNotTrackPolicy != NetworkManagerFactory::SkipTrackPolicy) { mutableRequest.setRawHeader(QByteArray("DNT"), QByteArray((m_doNotTrackPolicy == NetworkManagerFactory::DoNotAllowToTrackPolicy) ? "1" : "0")); } mutableRequest.setRawHeader(QStringLiteral("Accept-Language").toLatin1(), (m_acceptLanguage.isEmpty() ? NetworkManagerFactory::getAcceptLanguage().toLatin1() : m_acceptLanguage.toLatin1())); mutableRequest.setHeader(QNetworkRequest::UserAgentHeader, m_userAgent); emit messageChanged(tr("Sending request to %1…").arg(host)); QNetworkReply *reply = QNetworkAccessManager::createRequest(operation, mutableRequest, outgoingData); if (!m_baseReply) { m_baseReply = reply; } if (m_isSecure >= 0) { const QString scheme = reply->url().scheme(); if (scheme == QLatin1String("https")) { m_isSecure = 1; } else if (scheme == QLatin1String("http")) { m_isSecure = -1; } } m_replies[reply] = qMakePair(0, false); connect(reply, SIGNAL(downloadProgress(qint64,qint64)), this, SLOT(downloadProgress(qint64,qint64))); if (m_updateTimer == 0) { m_updateTimer = startTimer(500); } return reply; }