<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[170755] trunk/Source</title>
</head>
<body>
<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; }
#msg dl a { font-weight: bold}
#msg dl a:link { color:#fc3; }
#msg dl a:active { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/170755">170755</a></dd>
<dt>Author</dt> <dd>andersca@apple.com</dd>
<dt>Date</dt> <dd>2014-07-03 10:05:41 -0700 (Thu, 03 Jul 2014)</dd>
</dl>
<h3>Log Message</h3>
<pre>Stop using EncoderAdapter/DecoderAdapter for FormData
https://bugs.webkit.org/show_bug.cgi?id=134571
Reviewed by Andreas Kling.
Source/WebCore:
* WebCore.exp.in:
* platform/network/FormData.cpp:
(WebCore::encodeElement): Deleted.
(WebCore::decodeElement): Deleted.
(WebCore::FormData::encode): Deleted.
(WebCore::FormData::decode): Deleted.
* platform/network/FormData.h:
(WebCore::FormDataElement::encode):
(WebCore::FormDataElement::decode):
(WebCore::FormData::encode):
(WebCore::FormData::decode):
Source/WebKit2:
* Shared/Network/NetworkResourceLoadParameters.cpp:
(WebKit::NetworkResourceLoadParameters::encode):
(WebKit::NetworkResourceLoadParameters::decode):</pre>
<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreWebCoreexpin">trunk/Source/WebCore/WebCore.exp.in</a></li>
<li><a href="#trunkSourceWebCoreplatformnetworkFormDatacpp">trunk/Source/WebCore/platform/network/FormData.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformnetworkFormDatah">trunk/Source/WebCore/platform/network/FormData.h</a></li>
<li><a href="#trunkSourceWebKit2ChangeLog">trunk/Source/WebKit2/ChangeLog</a></li>
<li><a href="#trunkSourceWebKit2SharedNetworkNetworkResourceLoadParameterscpp">trunk/Source/WebKit2/Shared/Network/NetworkResourceLoadParameters.cpp</a></li>
</ul>
</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (170754 => 170755)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2014-07-03 16:19:07 UTC (rev 170754)
+++ trunk/Source/WebCore/ChangeLog        2014-07-03 17:05:41 UTC (rev 170755)
</span><span class="lines">@@ -1,3 +1,22 @@
</span><ins>+2014-07-02 Anders Carlsson <andersca@apple.com>
+
+ Stop using EncoderAdapter/DecoderAdapter for FormData
+ https://bugs.webkit.org/show_bug.cgi?id=134571
+
+ Reviewed by Andreas Kling.
+
+ * WebCore.exp.in:
+ * platform/network/FormData.cpp:
+ (WebCore::encodeElement): Deleted.
+ (WebCore::decodeElement): Deleted.
+ (WebCore::FormData::encode): Deleted.
+ (WebCore::FormData::decode): Deleted.
+ * platform/network/FormData.h:
+ (WebCore::FormDataElement::encode):
+ (WebCore::FormDataElement::decode):
+ (WebCore::FormData::encode):
+ (WebCore::FormData::decode):
+
</ins><span class="cx"> 2014-07-03 Brady Eidson <beidson@apple.com>
</span><span class="cx">
</span><span class="cx"> Possible crash in IconDatabase in WebCore::IconDatabase::dispatchDidRemoveAllIconsOnMainThread
</span></span></pre></div>
<a id="trunkSourceWebCoreWebCoreexpin"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/WebCore.exp.in (170754 => 170755)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/WebCore.exp.in        2014-07-03 16:19:07 UTC (rev 170754)
+++ trunk/Source/WebCore/WebCore.exp.in        2014-07-03 17:05:41 UTC (rev 170755)
</span><span class="lines">@@ -1303,7 +1303,6 @@
</span><span class="cx"> __ZN7WebCore8FormData15appendFileRangeERKN3WTF6StringExxdb
</span><span class="cx"> __ZN7WebCore8FormData6createEv
</span><span class="cx"> __ZN7WebCore8FormData6createEPKvm
</span><del>-__ZN7WebCore8FormData6decodeERN3WTF7DecoderE
</del><span class="cx"> __ZN7WebCore8FormDataD1Ev
</span><span class="cx"> __ZN7WebCore8Gradient12addColorStopEfRKNS_5ColorE
</span><span class="cx"> __ZN7WebCore8GradientC1ERKNS_10FloatPointES3_
</span><span class="lines">@@ -1970,7 +1969,6 @@
</span><span class="cx"> __ZNK7WebCore8Document6domainEv
</span><span class="cx"> __ZNK7WebCore8Document6loaderEv
</span><span class="cx"> __ZNK7WebCore8Document8settingsEv
</span><del>-__ZNK7WebCore8FormData6encodeERN3WTF7EncoderE
</del><span class="cx"> __ZNK7WebCore8IntPointcv7CGPointEv
</span><span class="cx"> __ZNK7WebCore8Position10downstreamENS_27EditingBoundaryCrossingRuleE
</span><span class="cx"> __ZNK7WebCore8Position13containerNodeEv
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformnetworkFormDatacpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/network/FormData.cpp (170754 => 170755)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/network/FormData.cpp        2014-07-03 16:19:07 UTC (rev 170754)
+++ trunk/Source/WebCore/platform/network/FormData.cpp        2014-07-03 17:05:41 UTC (rev 170755)
</span><span class="lines">@@ -393,143 +393,4 @@
</span><span class="cx"> }
</span><span class="cx"> }
</span><span class="cx">
</span><del>-static void encodeElement(Encoder& encoder, const FormDataElement& element)
-{
- encoder.encodeUInt32(static_cast<uint32_t>(element.m_type));
-
- switch (element.m_type) {
- case FormDataElement::Type::Data:
- encoder.encodeBytes(reinterpret_cast<const uint8_t*>(element.m_data.data()), element.m_data.size());
- return;
-
- case FormDataElement::Type::EncodedFile:
- encoder.encodeString(element.m_filename);
- encoder.encodeString(element.m_generatedFilename);
- encoder.encodeBool(element.m_shouldGenerateFile);
- encoder.encodeInt64(element.m_fileStart);
- encoder.encodeInt64(element.m_fileLength);
- encoder.encodeDouble(element.m_expectedFileModificationTime);
- return;
-
- case FormDataElement::Type::EncodedBlob:
- encoder.encodeString(element.m_url.string());
- return;
- }
-
- ASSERT_NOT_REACHED();
-}
-
-static bool decodeElement(Decoder& decoder, FormDataElement& element)
-{
- uint32_t type;
- if (!decoder.decodeUInt32(type))
- return false;
-
- switch (static_cast<FormDataElement::Type>(type)) {
- case FormDataElement::Type::Data: {
- element.m_type = FormDataElement::Type::Data;
- Vector<uint8_t> data;
- if (!decoder.decodeBytes(data))
- return false;
- size_t size = data.size();
- element.m_data.resize(size);
- memcpy(element.m_data.data(), data.data(), size);
- return true;
- }
-
- case FormDataElement::Type::EncodedFile: {
- element.m_type = static_cast<FormDataElement::Type>(type);
- String filenameOrURL;
- if (!decoder.decodeString(filenameOrURL))
- return false;
- if (static_cast<FormDataElement::Type>(type) == FormDataElement::Type::EncodedFile) {
- if (!decoder.decodeString(element.m_generatedFilename))
- return false;
- if (!decoder.decodeBool(element.m_shouldGenerateFile))
- return false;
- }
- int64_t fileStart;
- if (!decoder.decodeInt64(fileStart))
- return false;
- if (fileStart < 0)
- return false;
- int64_t fileLength;
- if (!decoder.decodeInt64(fileLength))
- return false;
- if (fileLength != BlobDataItem::toEndOfFile && fileLength < fileStart)
- return false;
- double expectedFileModificationTime;
- if (!decoder.decodeDouble(expectedFileModificationTime))
- return false;
-
- element.m_filename = filenameOrURL;
- element.m_fileStart = fileStart;
- element.m_fileLength = fileLength;
- element.m_expectedFileModificationTime = expectedFileModificationTime;
- return true;
- }
-
- case FormDataElement::Type::EncodedBlob:
- element.m_type = FormDataElement::Type::EncodedBlob;
- String blobURLString;
- if (!decoder.decodeString(blobURLString))
- return false;
- element.m_url = URL(URL(), blobURLString);
- return true;
-
- }
-
- return false;
-}
-
-void FormData::encode(Encoder& encoder) const
-{
- encoder.encodeBool(m_alwaysStream);
-
- encoder.encodeBytes(reinterpret_cast<const uint8_t*>(m_boundary.data()), m_boundary.size());
-
- size_t size = m_elements.size();
- encoder.encodeUInt64(size);
- for (size_t i = 0; i < size; ++i)
- encodeElement(encoder, m_elements[i]);
-
- encoder.encodeBool(hasGeneratedFiles()); // For backward compatibility.
-
- encoder.encodeInt64(m_identifier);
-}
-
-PassRefPtr<FormData> FormData::decode(Decoder& decoder)
-{
- RefPtr<FormData> data = FormData::create();
-
- if (!decoder.decodeBool(data->m_alwaysStream))
- return 0;
-
- Vector<uint8_t> boundary;
- if (!decoder.decodeBytes(boundary))
- return 0;
- size_t size = boundary.size();
- data->m_boundary.resize(size);
- memcpy(data->m_boundary.data(), boundary.data(), size);
-
- uint64_t elementsSize;
- if (!decoder.decodeUInt64(elementsSize))
- return 0;
- for (size_t i = 0; i < elementsSize; ++i) {
- FormDataElement element;
- if (!decodeElement(decoder, element))
- return 0;
- data->m_elements.append(element);
- }
-
- bool dummy;
- if (!decoder.decodeBool(dummy))
- return 0;
-
- if (!decoder.decodeInt64(data->m_identifier))
- return 0;
-
- return data.release();
-}
-
</del><span class="cx"> } // namespace WebCore
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformnetworkFormDatah"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/network/FormData.h (170754 => 170755)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/network/FormData.h        2014-07-03 16:19:07 UTC (rev 170754)
+++ trunk/Source/WebCore/platform/network/FormData.h        2014-07-03 17:05:41 UTC (rev 170755)
</span><span class="lines">@@ -20,6 +20,7 @@
</span><span class="cx"> #ifndef FormData_h
</span><span class="cx"> #define FormData_h
</span><span class="cx">
</span><ins>+#include "BlobData.h"
</ins><span class="cx"> #include "URL.h"
</span><span class="cx"> #include <wtf/Forward.h>
</span><span class="cx"> #include <wtf/RefCounted.h>
</span><span class="lines">@@ -68,6 +69,11 @@
</span><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx">
</span><ins>+ template<typename Encoder>
+ void encode(Encoder&) const;
+ template<typename Decoder>
+ static bool decode(Decoder&, FormDataElement& result);
+
</ins><span class="cx"> Type m_type;
</span><span class="cx"> Vector<char> m_data;
</span><span class="cx"> String m_filename;
</span><span class="lines">@@ -106,6 +112,79 @@
</span><span class="cx"> return !(a == b);
</span><span class="cx"> }
</span><span class="cx">
</span><ins>+
+template<typename Encoder>
+void FormDataElement::encode(Encoder& encoder) const
+{
+ encoder.encodeEnum(m_type);
+
+ switch (m_type) {
+ case Type::Data:
+ encoder << m_data;
+ break;
+
+ case Type::EncodedFile:
+ encoder << m_filename;
+ encoder << m_generatedFilename;
+ encoder << m_shouldGenerateFile;
+ encoder << m_fileStart;
+ encoder << m_fileLength;
+ encoder << m_expectedFileModificationTime;
+ break;
+
+ case Type::EncodedBlob:
+ encoder << m_url.string();
+ break;
+ }
+}
+
+template<typename Decoder>
+bool FormDataElement::decode(Decoder& decoder, FormDataElement& result)
+{
+ if (!decoder.decodeEnum(result.m_type))
+ return false;
+
+ switch (result.m_type) {
+ case Type::Data:
+ if (!decoder.decode(result.m_data))
+ return false;
+
+ return true;
+
+ case Type::EncodedFile:
+ if (!decoder.decode(result.m_filename))
+ return false;
+ if (!decoder.decode(result.m_generatedFilename))
+ return false;
+ if (!decoder.decode(result.m_shouldGenerateFile))
+ return false;
+ if (!decoder.decode(result.m_fileStart))
+ return false;
+ if (!decoder.decode(result.m_fileLength))
+ return false;
+
+ if (result.m_fileLength != BlobDataItem::toEndOfFile && result.m_fileLength < result.m_fileStart)
+ return false;
+
+ if (!decoder.decode(result.m_expectedFileModificationTime))
+ return false;
+
+ return true;
+
+ case Type::EncodedBlob: {
+ String blobURLString;
+ if (!decoder.decode(blobURLString))
+ return false;
+
+ result.m_url = URL(URL(), blobURLString);
+
+ return true;
+ }
+ }
+
+ return false;
+}
+
</ins><span class="cx"> class FormData : public RefCounted<FormData> {
</span><span class="cx"> public:
</span><span class="cx"> enum EncodingType {
</span><span class="lines">@@ -127,7 +206,9 @@
</span><span class="cx"> PassRefPtr<FormData> copy() const;
</span><span class="cx"> PassRefPtr<FormData> deepCopy() const;
</span><span class="cx">
</span><ins>+ template<typename Encoder>
</ins><span class="cx"> void encode(Encoder&) const;
</span><ins>+ template<typename Decoder>
</ins><span class="cx"> static PassRefPtr<FormData> decode(Decoder&);
</span><span class="cx">
</span><span class="cx"> void appendData(const void* data, size_t);
</span><span class="lines">@@ -197,6 +278,35 @@
</span><span class="cx"> return !(a == b);
</span><span class="cx"> }
</span><span class="cx">
</span><ins>+template<typename Encoder>
+void FormData::encode(Encoder& encoder) const
+{
+ encoder << m_alwaysStream;
+ encoder << m_boundary;
+ encoder << m_elements;
+ encoder << m_identifier;
+}
+
+template<typename Decoder>
+PassRefPtr<FormData> FormData::decode(Decoder& decoder)
+{
+ RefPtr<FormData> data = FormData::create();
+
+ if (!decoder.decode(data->m_alwaysStream))
+ return nullptr;
+
+ if (!decoder.decode(data->m_boundary))
+ return nullptr;
+
+ if (!decoder.decode(data->m_elements))
+ return nullptr;
+
+ if (!decoder.decode(data->m_identifier))
+ return nullptr;
+
+ return data.release();
+}
+
</ins><span class="cx"> } // namespace WebCore
</span><span class="cx">
</span><span class="cx"> #endif
</span></span></pre></div>
<a id="trunkSourceWebKit2ChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/ChangeLog (170754 => 170755)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/ChangeLog        2014-07-03 16:19:07 UTC (rev 170754)
+++ trunk/Source/WebKit2/ChangeLog        2014-07-03 17:05:41 UTC (rev 170755)
</span><span class="lines">@@ -1,3 +1,14 @@
</span><ins>+2014-07-02 Anders Carlsson <andersca@apple.com>
+
+ Stop using EncoderAdapter/DecoderAdapter for FormData
+ https://bugs.webkit.org/show_bug.cgi?id=134571
+
+ Reviewed by Andreas Kling.
+
+ * Shared/Network/NetworkResourceLoadParameters.cpp:
+ (WebKit::NetworkResourceLoadParameters::encode):
+ (WebKit::NetworkResourceLoadParameters::decode):
+
</ins><span class="cx"> 2014-07-03 Brady Eidson <beidson@apple.com>
</span><span class="cx">
</span><span class="cx"> Possible crash in IconDatabase in WebCore::IconDatabase::dispatchDidRemoveAllIconsOnMainThread
</span></span></pre></div>
<a id="trunkSourceWebKit2SharedNetworkNetworkResourceLoadParameterscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/Shared/Network/NetworkResourceLoadParameters.cpp (170754 => 170755)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/Shared/Network/NetworkResourceLoadParameters.cpp        2014-07-03 16:19:07 UTC (rev 170754)
+++ trunk/Source/WebKit2/Shared/Network/NetworkResourceLoadParameters.cpp        2014-07-03 17:05:41 UTC (rev 170755)
</span><span class="lines">@@ -28,8 +28,6 @@
</span><span class="cx">
</span><span class="cx"> #include "ArgumentCoders.h"
</span><span class="cx"> #include "DataReference.h"
</span><del>-#include "DecoderAdapter.h"
-#include "EncoderAdapter.h"
</del><span class="cx"> #include "WebCoreArgumentCoders.h"
</span><span class="cx">
</span><span class="cx"> #if ENABLE(NETWORK_PROCESS)
</span><span class="lines">@@ -37,6 +35,7 @@
</span><span class="cx"> using namespace WebCore;
</span><span class="cx">
</span><span class="cx"> namespace WebKit {
</span><ins>+
</ins><span class="cx"> NetworkResourceLoadParameters::NetworkResourceLoadParameters()
</span><span class="cx"> : identifier(0)
</span><span class="cx"> , webPageID(0)
</span><span class="lines">@@ -62,9 +61,7 @@
</span><span class="cx">
</span><span class="cx"> encoder << static_cast<bool>(request.httpBody());
</span><span class="cx"> if (request.httpBody()) {
</span><del>- EncoderAdapter httpBodyEncoderAdapter;
- request.httpBody()->encode(httpBodyEncoderAdapter);
- encoder << httpBodyEncoderAdapter.dataReference();
</del><ins>+ request.httpBody()->encode(encoder);
</ins><span class="cx">
</span><span class="cx"> const Vector<FormDataElement>& elements = request.httpBody()->elements();
</span><span class="cx"> size_t fileCount = 0;
</span><span class="lines">@@ -123,11 +120,10 @@
</span><span class="cx"> return false;
</span><span class="cx">
</span><span class="cx"> if (hasHTTPBody) {
</span><del>- IPC::DataReference formData;
- if (!decoder.decode(formData))
</del><ins>+ RefPtr<FormData> formData = FormData::decode(decoder);
+ if (!formData)
</ins><span class="cx"> return false;
</span><del>- DecoderAdapter httpBodyDecoderAdapter(formData.data(), formData.size());
- result.request.setHTTPBody(FormData::decode(httpBodyDecoderAdapter));
</del><ins>+ result.request.setHTTPBody(formData.release());
</ins><span class="cx">
</span><span class="cx"> if (!decoder.decode(result.requestBodySandboxExtensions))
</span><span class="cx"> return false;
</span></span></pre>
</div>
</div>
</body>
</html>