Bug 1431449 - Introduce URLParams::Parse; r?bz draft
authorAnthony Ramine <n.oxyde@gmail.com>
Thu, 18 Jan 2018 12:53:35 +0100
changeset 722188 32d44a70fa67baf098784fce7033fc00f9613410
parent 722187 eee02425c05a05e768a7dd6ff3bfc0b848a0b99c
child 722189 3f49d37dcdb1e08f9ec08ff52a31e26ff1c12c44
push id96080
push userbmo:nox@mozilla.com
push dateThu, 18 Jan 2018 16:12:25 +0000
reviewersbz
bugs1431449
milestone59.0a1
Bug 1431449 - Introduce URLParams::Parse; r?bz MozReview-Commit-ID: LicbWjZHxjz
caps/OriginAttributes.cpp
dom/base/BodyUtil.cpp
dom/url/URLSearchParams.cpp
dom/url/URLSearchParams.h
--- a/caps/OriginAttributes.cpp
+++ b/caps/OriginAttributes.cpp
@@ -246,21 +246,18 @@ OriginAttributes::PopulateFromSuffix(con
   if (aStr.IsEmpty()) {
     return true;
   }
 
   if (aStr[0] != '^') {
     return false;
   }
 
-  URLParams params;
-  params.ParseInput(Substring(aStr, 1, aStr.Length() - 1));
-
   PopulateFromSuffixIterator iterator(this);
-  return params.ForEach(iterator);
+  return URLParams::Parse(Substring(aStr, 1, aStr.Length() - 1), iterator);
 }
 
 bool
 OriginAttributes::PopulateFromOrigin(const nsACString& aOrigin,
                                      nsACString& aOriginNoSuffix)
 {
   // RFindChar is only available on nsCString.
   nsCString origin(aOrigin);
--- a/dom/base/BodyUtil.cpp
+++ b/dom/base/BodyUtil.cpp
@@ -464,22 +464,19 @@ BodyUtil::ConsumeFormData(nsIGlobalObjec
   NS_NAMED_LITERAL_CSTRING(urlDataMimeType, "application/x-www-form-urlencoded");
   bool isValidUrlEncodedMimeType = StringBeginsWith(aMimeType, urlDataMimeType);
 
   if (isValidUrlEncodedMimeType && aMimeType.Length() > urlDataMimeType.Length()) {
     isValidUrlEncodedMimeType = aMimeType[urlDataMimeType.Length()] == ';';
   }
 
   if (isValidUrlEncodedMimeType) {
-    URLParams params;
-    params.ParseInput(aStr);
-
     RefPtr<FormData> fd = new FormData(aParent);
     FillFormIterator iterator(fd);
-    DebugOnly<bool> status = params.ForEach(iterator);
+    DebugOnly<bool> status = URLParams::Parse(aStr, iterator);
     MOZ_ASSERT(status);
 
     return fd.forget();
   }
 
   aRv.ThrowTypeError<MSG_BAD_FORMDATA>();
   return nullptr;
 }
--- a/dom/url/URLSearchParams.cpp
+++ b/dom/url/URLSearchParams.cpp
@@ -158,16 +158,24 @@ URLParams::DecodeString(const nsACString
 
     unescaped.Append(*start);
     ++start;
   }
 
   ConvertString(unescaped, aOutput);
 }
 
+/* static */ bool
+URLParams::Parse(const nsACString& aInput, ForEachIterator& aIterator)
+{
+    URLParams params;
+    params.ParseInput(aInput);
+    return params.ForEach(aIterator);
+}
+
 void
 URLParams::ParseInput(const nsACString& aInput)
 {
   // Remove all the existing data before parsing a new input.
   DeleteAll();
 
   nsACString::const_iterator start, end;
   aInput.BeginReading(start);
--- a/dom/url/URLSearchParams.h
+++ b/dom/url/URLSearchParams.h
@@ -45,16 +45,19 @@ public:
 
   class ForEachIterator
   {
   public:
     virtual bool
     URLParamsIterator(const nsString& aName, const nsString& aValue) = 0;
   };
 
+  static bool
+  Parse(const nsACString& aInput, ForEachIterator& aIterator);
+
   void
   ParseInput(const nsACString& aInput);
 
   bool
   ForEach(ForEachIterator& aIterator) const
   {
     for (uint32_t i = 0; i < mParams.Length(); ++i) {
       if (!aIterator.URLParamsIterator(mParams[i].mKey, mParams[i].mValue)) {