diff options
author | Lorry Tar Creator <lorry-tar-importer@lorry> | 2017-06-27 06:07:23 +0000 |
---|---|---|
committer | Lorry Tar Creator <lorry-tar-importer@lorry> | 2017-06-27 06:07:23 +0000 |
commit | 1bf1084f2b10c3b47fd1a588d85d21ed0eb41d0c (patch) | |
tree | 46dcd36c86e7fbc6e5df36deb463b33e9967a6f7 /Source/WebKit2/NetworkProcess/NetworkResourceLoadParameters.cpp | |
parent | 32761a6cee1d0dee366b885b7b9c777e67885688 (diff) | |
download | WebKitGtk-tarball-master.tar.gz |
webkitgtk-2.16.5HEADwebkitgtk-2.16.5master
Diffstat (limited to 'Source/WebKit2/NetworkProcess/NetworkResourceLoadParameters.cpp')
-rw-r--r-- | Source/WebKit2/NetworkProcess/NetworkResourceLoadParameters.cpp | 151 |
1 files changed, 151 insertions, 0 deletions
diff --git a/Source/WebKit2/NetworkProcess/NetworkResourceLoadParameters.cpp b/Source/WebKit2/NetworkProcess/NetworkResourceLoadParameters.cpp new file mode 100644 index 000000000..4e197c8eb --- /dev/null +++ b/Source/WebKit2/NetworkProcess/NetworkResourceLoadParameters.cpp @@ -0,0 +1,151 @@ +/* + * Copyright (C) 2012 Apple 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 INC. 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 INC. 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. + */ + +#include "config.h" +#include "NetworkResourceLoadParameters.h" + +#include "ArgumentCoders.h" +#include "DataReference.h" +#include "WebCoreArgumentCoders.h" + +using namespace WebCore; + +namespace WebKit { + +void NetworkResourceLoadParameters::encode(IPC::Encoder& encoder) const +{ + encoder << identifier; + encoder << webPageID; + encoder << webFrameID; + encoder << sessionID; + encoder << request; + + encoder << static_cast<bool>(request.httpBody()); + if (request.httpBody()) { + request.httpBody()->encode(encoder); + + const Vector<FormDataElement>& elements = request.httpBody()->elements(); + size_t fileCount = 0; + for (size_t i = 0, count = elements.size(); i < count; ++i) { + if (elements[i].m_type == FormDataElement::Type::EncodedFile) + ++fileCount; + } + + SandboxExtension::HandleArray requestBodySandboxExtensions; + requestBodySandboxExtensions.allocate(fileCount); + size_t extensionIndex = 0; + for (size_t i = 0, count = elements.size(); i < count; ++i) { + const FormDataElement& element = elements[i]; + if (element.m_type == FormDataElement::Type::EncodedFile) { + const String& path = element.m_shouldGenerateFile ? element.m_generatedFilename : element.m_filename; + SandboxExtension::createHandle(path, SandboxExtension::ReadOnly, requestBodySandboxExtensions[extensionIndex++]); + } + } + encoder << requestBodySandboxExtensions; + } + + if (request.url().isLocalFile()) { + SandboxExtension::Handle requestSandboxExtension; + SandboxExtension::createHandle(request.url().fileSystemPath(), SandboxExtension::ReadOnly, requestSandboxExtension); + encoder << requestSandboxExtension; + } + + encoder.encodeEnum(contentSniffingPolicy); + encoder.encodeEnum(allowStoredCredentials); + encoder.encodeEnum(clientCredentialPolicy); + encoder << shouldFollowRedirects; + encoder << shouldClearReferrerOnHTTPSToHTTPRedirect; + encoder << defersLoading; + encoder << needsCertificateInfo; + encoder << maximumBufferingTime; + encoder << derivedCachedDataTypesToRetrieve; +} + +bool NetworkResourceLoadParameters::decode(IPC::Decoder& decoder, NetworkResourceLoadParameters& result) +{ + if (!decoder.decode(result.identifier)) + return false; + + if (!decoder.decode(result.webPageID)) + return false; + + if (!decoder.decode(result.webFrameID)) + return false; + + if (!decoder.decode(result.sessionID)) + return false; + + if (!decoder.decode(result.request)) + return false; + + bool hasHTTPBody; + if (!decoder.decode(hasHTTPBody)) + return false; + + if (hasHTTPBody) { + RefPtr<FormData> formData = FormData::decode(decoder); + if (!formData) + return false; + result.request.setHTTPBody(WTFMove(formData)); + + SandboxExtension::HandleArray requestBodySandboxExtensionHandles; + if (!decoder.decode(requestBodySandboxExtensionHandles)) + return false; + for (size_t i = 0; i < requestBodySandboxExtensionHandles.size(); ++i) { + if (auto extension = SandboxExtension::create(requestBodySandboxExtensionHandles[i])) + result.requestBodySandboxExtensions.append(WTFMove(extension)); + } + } + + if (result.request.url().isLocalFile()) { + SandboxExtension::Handle resourceSandboxExtensionHandle; + if (!decoder.decode(resourceSandboxExtensionHandle)) + return false; + result.resourceSandboxExtension = SandboxExtension::create(resourceSandboxExtensionHandle); + } + + if (!decoder.decodeEnum(result.contentSniffingPolicy)) + return false; + if (!decoder.decodeEnum(result.allowStoredCredentials)) + return false; + if (!decoder.decodeEnum(result.clientCredentialPolicy)) + return false; + if (!decoder.decode(result.shouldFollowRedirects)) + return false; + if (!decoder.decode(result.shouldClearReferrerOnHTTPSToHTTPRedirect)) + return false; + if (!decoder.decode(result.defersLoading)) + return false; + if (!decoder.decode(result.needsCertificateInfo)) + return false; + if (!decoder.decode(result.maximumBufferingTime)) + return false; + if (!decoder.decode(result.derivedCachedDataTypesToRetrieve)) + return false; + + return true; +} + +} // namespace WebKit |