Bug 1349921 - don't prefetch is there's a query string draft
authorNicholas Hurley <hurley@mozilla.com>
Mon, 27 Mar 2017 14:56:05 -0700
changeset 553320 c9be88048e6d0127d56991f9d6dab75fdd8da5c7
parent 551789 9577ddeaafd85554c2a855f385a87472a089d5c0
child 622026 44be60e87f01e6763c5d107ea3b2c7a3158b18f7
push id51591
push userbmo:hurley@mozilla.com
push dateWed, 29 Mar 2017 19:33:58 +0000
bugs1349921
milestone55.0a1
Bug 1349921 - don't prefetch is there's a query string
netwerk/base/Predictor.cpp
--- a/netwerk/base/Predictor.cpp
+++ b/netwerk/base/Predictor.cpp
@@ -2636,32 +2636,38 @@ Predictor::CacheabilityAction::OnCacheEn
     PREDICTOR_LOG(("    VisitMetaData returned %" PRIx32, static_cast<uint32_t>(rv)));
     return NS_OK;
   }
 
   nsTArray<nsCString> keysToCheck, valuesToCheck;
   keysToCheck.SwapElements(mKeysToCheck);
   valuesToCheck.SwapElements(mValuesToCheck);
 
+  bool hasQueryString = false;
+  nsAutoCString query;
+  if (NS_SUCCEEDED(mTargetURI->GetQuery(query)) && !query.IsEmpty()) {
+    hasQueryString = true;
+  }
+
   MOZ_ASSERT(keysToCheck.Length() == valuesToCheck.Length());
   for (size_t i = 0; i < keysToCheck.Length(); ++i) {
     const char *key = keysToCheck[i].BeginReading();
     const char *value = valuesToCheck[i].BeginReading();
     nsCOMPtr<nsIURI> uri;
     uint32_t hitCount, lastHit, flags;
 
     if (!mPredictor->ParseMetaDataEntry(key, value, getter_AddRefs(uri),
                                         hitCount, lastHit, flags)) {
       PREDICTOR_LOG(("    failed to parse key=%s value=%s", key, value));
       continue;
     }
 
     bool eq = false;
     if (NS_SUCCEEDED(uri->Equals(mTargetURI, &eq)) && eq) {
-      if (mHttpStatus == 200 && mMethod.EqualsLiteral("GET")) {
+      if (mHttpStatus == 200 && mMethod.EqualsLiteral("GET") && !hasQueryString) {
         PREDICTOR_LOG(("    marking %s cacheable", key));
         flags |= FLAG_PREFETCHABLE;
       } else {
         PREDICTOR_LOG(("    marking %s uncacheable", key));
         flags &= ~FLAG_PREFETCHABLE;
       }
       nsCString newValue;
       MakeMetadataEntry(hitCount, lastHit, flags, newValue);