Bug 1429979 Part 1 - Use LookupForAdd() to avoid explicit new nsAutoPtr. draft
authorTing-Yu Lin <tlin@mozilla.com>
Thu, 11 Jan 2018 17:53:08 +0800
changeset 719361 bcbd27888862cd922c6204fe4862cb16375041f2
parent 718845 4db166f0442dddc5b9011c722d7499501fedf283
child 719362 250f359044ce51472a44d1806353ec88df4d39ab
push id95238
push userbmo:tlin@mozilla.com
push dateFri, 12 Jan 2018 03:22:45 +0000
bugs1429979
milestone59.0a1
Bug 1429979 Part 1 - Use LookupForAdd() to avoid explicit new nsAutoPtr. MozReview-Commit-ID: 2LaQVRhPGPB
layout/style/ImageLoader.cpp
--- a/layout/style/ImageLoader.cpp
+++ b/layout/style/ImageLoader.cpp
@@ -52,47 +52,32 @@ ImageLoader::AssociateRequestToFrame(img
   if (!observer) {
     // The request has already been canceled, so ignore it.  This is ok because
     // we're not going to get any more notifications from a canceled request.
     return;
   }
 
   MOZ_ASSERT(observer == this);
 
-  FrameSet* frameSet = nullptr;
-  if (mRequestToFrameMap.Get(aRequest, &frameSet)) {
-    NS_ASSERTION(frameSet, "This should never be null!");
-  }
-
-  if (!frameSet) {
-    nsAutoPtr<FrameSet> newFrameSet(new FrameSet());
-
-    mRequestToFrameMap.Put(aRequest, newFrameSet);
-    frameSet = newFrameSet.forget();
+  FrameSet* frameSet =
+    mRequestToFrameMap.LookupForAdd(aRequest).OrInsert([=]() {
+      nsPresContext* presContext = GetPresContext();
+      if (presContext) {
+        nsLayoutUtils::RegisterImageRequestIfAnimated(presContext,
+                                                      aRequest,
+                                                      nullptr);
+      }
+      return new FrameSet();
+    });
 
-    nsPresContext* presContext = GetPresContext();
-    if (presContext) {
-      nsLayoutUtils::RegisterImageRequestIfAnimated(presContext,
-                                                    aRequest,
-                                                    nullptr);
-    }
-  }
-
-  RequestSet* requestSet = nullptr;
-  if (mFrameToRequestMap.Get(aFrame, &requestSet)) {
-    NS_ASSERTION(requestSet, "This should never be null");
-  }
-
-  if (!requestSet) {
-    nsAutoPtr<RequestSet> newRequestSet(new RequestSet());
-
-    mFrameToRequestMap.Put(aFrame, newRequestSet);
-    requestSet = newRequestSet.forget();
-    aFrame->SetHasImageRequest(true);
-  }
+  RequestSet* requestSet =
+    mFrameToRequestMap.LookupForAdd(aFrame).OrInsert([=]() {
+      aFrame->SetHasImageRequest(true);
+      return new RequestSet();
+    });
 
   // Add these to the sets, but only if they're not already there.
   uint32_t i = frameSet->IndexOfFirstElementGt(aFrame);
   if (i == 0 || aFrame != frameSet->ElementAt(i-1)) {
     frameSet->InsertElementAt(i, aFrame);
   }
   i = requestSet->IndexOfFirstElementGt(aRequest);
   if (i == 0 || aRequest != requestSet->ElementAt(i-1)) {
@@ -242,18 +227,18 @@ ImageLoader::ClearFrames(nsPresContext* 
     {
       nsCOMPtr<imgIRequest> debugRequest = do_QueryInterface(request);
       NS_ASSERTION(debugRequest == request, "This is bad");
     }
 #endif
 
     if (aPresContext) {
       nsLayoutUtils::DeregisterImageRequest(aPresContext,
-					    request,
-					    nullptr);
+                                            request,
+                                            nullptr);
     }
   }
 
   mRequestToFrameMap.Clear();
   mFrameToRequestMap.Clear();
 }
 
 void