Bug 1353082 - don't prefetch is there's a query string r=mcmanus draft
authorNicholas Hurley <hurley@mozilla.com>
Mon, 27 Mar 2017 14:56:05 -0700
changeset 555111 8da7b339a7de50dc5f80cfe0914742fd12c42d1e
parent 555105 9aacfa8081b35bb8ae1a59ce3fd9d7aba57cfc7b
child 622536 13b592cc6519d7f1c79c1461e135f311f85f0e31
push id52158
push userbmo:hurley@mozilla.com
push dateMon, 03 Apr 2017 17:24:23 +0000
reviewersmcmanus
bugs1353082
milestone55.0a1
Bug 1353082 - don't prefetch is there's a query string r=mcmanus
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);