Bug 1426501 - Change C++ code to use NS_MutateURI when changing URI draft
authorValentin Gosu <valentin.gosu@gmail.com>
Mon, 08 Jan 2018 15:20:35 +0100
changeset 717302 613bd4450706c5aa36a29b83b0e56d42fa3866b6
parent 717301 3d8e37a3b1b34e8226a8096a953c6f93da8d00c0
child 745198 a4cb6693f784e25de6165663a62b9029bde6af9d
push id94613
push uservalentin.gosu@gmail.com
push dateMon, 08 Jan 2018 14:47:20 +0000
bugs1426501
milestone59.0a1
Bug 1426501 - Change C++ code to use NS_MutateURI when changing URI MozReview-Commit-ID: 4VzZlhWrtSJ
docshell/base/nsDocShell.cpp
layout/generic/nsImageFrame.cpp
netwerk/base/nsIURIMutatorUtils.cpp
netwerk/protocol/ftp/FTPChannelChild.cpp
netwerk/protocol/wyciwyg/nsWyciwygProtocolHandler.cpp
toolkit/components/places/nsAnnoProtocolHandler.cpp
toolkit/components/thumbnails/PageThumbsProtocol.cpp
uriloader/exthandler/nsExternalProtocolHandler.cpp
--- a/docshell/base/nsDocShell.cpp
+++ b/docshell/base/nsDocShell.cpp
@@ -131,16 +131,17 @@
 #include "nsITabChild.h"
 #include "nsITextToSubURI.h"
 #include "nsITimedChannel.h"
 #include "nsITimer.h"
 #include "nsITransportSecurityInfo.h"
 #include "nsIUploadChannel.h"
 #include "nsIURIFixup.h"
 #include "nsIURILoader.h"
+#include "nsIURIMutator.h"
 #include "nsIURL.h"
 #include "nsIViewSourceChannel.h"
 #include "nsIWebBrowserChrome.h"
 #include "nsIWebBrowserChrome3.h"
 #include "nsIWebBrowserChromeFocus.h"
 #include "nsIWebBrowserFind.h"
 #include "nsIWebProgress.h"
 #include "nsIWidget.h"
@@ -1036,23 +1037,21 @@ nsDocShell::LoadStream(nsIInputStream* a
 
   // if the caller doesn't pass in a URI we need to create a dummy URI. necko
   // currently requires a URI in various places during the load. Some consumers
   // do as well.
   nsCOMPtr<nsIURI> uri = aURI;
   if (!uri) {
     // HACK ALERT
     nsresult rv = NS_OK;
-    uri = do_CreateInstance(NS_SIMPLEURI_CONTRACTID, &rv);
-    if (NS_FAILED(rv)) {
-      return rv;
-    }
     // Make sure that the URI spec "looks" like a protocol and path...
     // For now, just use a bogus protocol called "internal"
-    rv = uri->SetSpec(NS_LITERAL_CSTRING("internal:load-stream"));
+    rv = NS_MutateURI(NS_SIMPLEURIMUTATOR_CONTRACTID)
+           .SetSpec(NS_LITERAL_CSTRING("internal:load-stream"))
+           .Finalize(uri);
     if (NS_FAILED(rv)) {
       return rv;
     }
   }
 
   uint32_t loadType = LOAD_NORMAL;
   nsCOMPtr<nsIPrincipal> triggeringPrincipal;
   if (aLoadInfo) {
--- a/layout/generic/nsImageFrame.cpp
+++ b/layout/generic/nsImageFrame.cpp
@@ -52,16 +52,17 @@
 #include "nsIDOMNode.h"
 #include "nsLayoutUtils.h"
 #include "nsDisplayList.h"
 #include "nsIContent.h"
 #include "nsIDocument.h"
 #include "FrameLayerBuilder.h"
 #include "nsISelectionController.h"
 #include "nsISelection.h"
+#include "nsIURIMutator.h"
 
 #include "imgIContainer.h"
 #include "imgLoader.h"
 #include "imgRequestProxy.h"
 
 #include "nsCSSFrameConstructor.h"
 #include "nsIDOMRange.h"
 
@@ -2104,17 +2105,19 @@ nsImageFrame::HandleEvent(nsPresContext*
           if (p.x < 0) p.x = 0;
           if (p.y < 0) p.y = 0;
 
           nsAutoCString spec;
           nsresult rv = uri->GetSpec(spec);
           NS_ENSURE_SUCCESS(rv, rv);
 
           spec += nsPrintfCString("?%d,%d", p.x, p.y);
-          rv = uri->SetSpec(spec);
+          rv = NS_MutateURI(uri)
+                 .SetSpec(spec)
+                 .Finalize(uri);
           NS_ENSURE_SUCCESS(rv, rv);
 
           bool clicked = false;
           if (aEvent->mMessage == eMouseClick && !aEvent->DefaultPrevented()) {
             *aEventStatus = nsEventStatus_eConsumeDoDefault;
             clicked = true;
           }
           nsContentUtils::TriggerLink(anchorNode, aPresContext, uri, target,
--- a/netwerk/base/nsIURIMutatorUtils.cpp
+++ b/netwerk/base/nsIURIMutatorUtils.cpp
@@ -14,9 +14,10 @@ GetURIMutator(nsIURI* aURI, nsIURIMutato
 NS_MutateURI::NS_MutateURI(nsIURI* aURI)
 {
   mStatus = GetURIMutator(aURI, getter_AddRefs(mMutator));
 }
 
 NS_MutateURI::NS_MutateURI(const char * aContractID)
 {
   mMutator = do_CreateInstance(aContractID, &mStatus);
+  MOZ_ASSERT(NS_SUCCEEDED(mStatus), "Called with wrong aContractID");
 }
--- a/netwerk/protocol/ftp/FTPChannelChild.cpp
+++ b/netwerk/protocol/ftp/FTPChannelChild.cpp
@@ -17,16 +17,17 @@
 #include "nsStringStream.h"
 #include "nsNetUtil.h"
 #include "base/compiler_specific.h"
 #include "mozilla/ipc/IPCStreamUtils.h"
 #include "mozilla/ipc/URIUtils.h"
 #include "SerializedLoadContext.h"
 #include "mozilla/ipc/BackgroundUtils.h"
 #include "nsIPrompt.h"
+#include "nsIURIMutator.h"
 
 using mozilla::dom::ContentChild;
 using namespace mozilla::ipc;
 
 #undef LOG
 #define LOG(args) MOZ_LOG(gFTPLog, mozilla::LogLevel::Debug, args)
 
 namespace mozilla {
@@ -323,17 +324,20 @@ FTPChannelChild::DoOnStartRequest(const 
   SetContentType(aContentType);
   mLastModifiedTime = aLastModified;
   mEntityID = aEntityID;
 
   nsCString spec;
   nsCOMPtr<nsIURI> uri = DeserializeURI(aURI);
   nsresult rv = uri->GetSpec(spec);
   if (NS_SUCCEEDED(rv)) {
-    rv = nsBaseChannel::URI()->SetSpec(spec);
+    // Changes nsBaseChannel::URI()
+    rv = NS_MutateURI(mURI)
+           .SetSpec(spec)
+           .Finalize(mURI);
     if (NS_FAILED(rv)) {
       Cancel(rv);
     }
   } else {
     Cancel(rv);
   }
 
   AutoEventEnqueuer ensureSerialDispatch(mEventQ);
--- a/netwerk/protocol/wyciwyg/nsWyciwygProtocolHandler.cpp
+++ b/netwerk/protocol/wyciwyg/nsWyciwygProtocolHandler.cpp
@@ -8,16 +8,17 @@
 #include "nsWyciwyg.h"
 #include "nsWyciwygChannel.h"
 #include "nsWyciwygProtocolHandler.h"
 #include "nsNetCID.h"
 #include "nsServiceManagerUtils.h"
 #include "plstr.h"
 #include "nsIObserverService.h"
 #include "nsIURI.h"
+#include "nsIURIMutator.h"
 
 #include "mozilla/net/NeckoChild.h"
 
 using namespace mozilla::net;
 #include "mozilla/net/WyciwygChannelChild.h"
 
 ////////////////////////////////////////////////////////////////////////////////
 
@@ -60,27 +61,19 @@ nsWyciwygProtocolHandler::AllowPort(int3
 }
 
 NS_IMETHODIMP
 nsWyciwygProtocolHandler::NewURI(const nsACString &aSpec,
                                  const char *aCharset, // ignored
                                  nsIURI *aBaseURI,
                                  nsIURI **result)
 {
-  nsresult rv;
-
-  nsCOMPtr<nsIURI> url = do_CreateInstance(NS_SIMPLEURI_CONTRACTID, &rv);
-  NS_ENSURE_SUCCESS(rv, rv);
-
-  rv = url->SetSpec(aSpec);
-  NS_ENSURE_SUCCESS(rv, rv);
-
-  url.forget(result);
-
-  return rv;
+  return NS_MutateURI(NS_SIMPLEURIMUTATOR_CONTRACTID)
+           .SetSpec(aSpec)
+           .Finalize(result);
 }
 
 NS_IMETHODIMP
 nsWyciwygProtocolHandler::NewChannel2(nsIURI* url,
                                       nsILoadInfo* aLoadInfo,
                                       nsIChannel** result)
 {
   if (mozilla::net::IsNeckoChild())
--- a/toolkit/components/places/nsAnnoProtocolHandler.cpp
+++ b/toolkit/components/places/nsAnnoProtocolHandler.cpp
@@ -18,16 +18,17 @@
 #include "nsIChannel.h"
 #include "nsIInputStreamChannel.h"
 #include "nsILoadGroup.h"
 #include "nsIStandardURL.h"
 #include "nsIStringStream.h"
 #include "nsIInputStream.h"
 #include "nsISupportsUtils.h"
 #include "nsIURI.h"
+#include "nsIURIMutator.h"
 #include "nsNetUtil.h"
 #include "nsIOutputStream.h"
 #include "nsInputStreamPump.h"
 #include "nsContentUtils.h"
 #include "nsServiceManagerUtils.h"
 #include "nsStringStream.h"
 #include "SimpleChannel.h"
 #include "mozilla/ScopeExit.h"
@@ -220,25 +221,20 @@ nsAnnoProtocolHandler::GetProtocolFlags(
 
 // nsAnnoProtocolHandler::NewURI
 
 NS_IMETHODIMP
 nsAnnoProtocolHandler::NewURI(const nsACString& aSpec,
                               const char *aOriginCharset,
                               nsIURI *aBaseURI, nsIURI **_retval)
 {
-  nsCOMPtr <nsIURI> uri = do_CreateInstance(NS_SIMPLEURI_CONTRACTID);
-  if (!uri)
-    return NS_ERROR_OUT_OF_MEMORY;
-  nsresult rv = uri->SetSpec(aSpec);
-  NS_ENSURE_SUCCESS(rv, rv);
-
   *_retval = nullptr;
-  uri.swap(*_retval);
-  return NS_OK;
+  return NS_MutateURI(NS_SIMPLEURIMUTATOR_CONTRACTID)
+           .SetSpec(aSpec)
+           .Finalize(_retval);
 }
 
 
 // nsAnnoProtocolHandler::NewChannel
 //
 
 NS_IMETHODIMP
 nsAnnoProtocolHandler::NewChannel2(nsIURI* aURI,
--- a/toolkit/components/thumbnails/PageThumbsProtocol.cpp
+++ b/toolkit/components/thumbnails/PageThumbsProtocol.cpp
@@ -54,22 +54,19 @@ PageThumbsProtocol::GetProtocolFlags(uin
 
 // PageThumbsProtocol::NewURI
 
 NS_IMETHODIMP
 PageThumbsProtocol::NewURI(const nsACString& aSpec,
                            const char *aOriginCharset,
                            nsIURI *aBaseURI, nsIURI **_retval)
 {
-  nsCOMPtr <nsIURI> uri = do_CreateInstance(NS_SIMPLEURI_CONTRACTID);
-  nsresult rv = uri->SetSpec(aSpec);
-  if (NS_WARN_IF(NS_FAILED(rv))) return rv;
-
-  uri.forget(_retval);
-  return rv;
+  return NS_MutateURI(NS_SIMPLEURIMUTATOR_CONTRACTID)
+           .SetSpec(aSpec)
+           .Finalize(_retval);
 }
 
 // PageThumbsProtocol::NewChannel
 
 NS_IMETHODIMP
 PageThumbsProtocol::NewChannel2(nsIURI* aURI,
                                 nsILoadInfo *aLoadInfo,
                                 nsIChannel** _retval)
--- a/uriloader/exthandler/nsExternalProtocolHandler.cpp
+++ b/uriloader/exthandler/nsExternalProtocolHandler.cpp
@@ -14,16 +14,17 @@
 #include "nsContentUtils.h"
 #include "nsIServiceManager.h"
 #include "nsServiceManagerUtils.h"
 #include "nsIInterfaceRequestor.h"
 #include "nsIInterfaceRequestorUtils.h"
 #include "nsIStringBundle.h"
 #include "nsIPrefService.h"
 #include "nsIPrompt.h"
+#include "nsIURIMutator.h"
 #include "nsNetUtil.h"
 #include "nsContentSecurityManager.h"
 #include "nsExternalHelperAppService.h"
 
 // used to dispatch urls to default protocol handlers
 #include "nsCExternalHandlerService.h"
 #include "nsIExternalProtocolService.h"
 #include "nsIChildChannel.h"
@@ -536,25 +537,19 @@ NS_IMETHODIMP nsExternalProtocolHandler:
     return NS_OK;
 }
 
 NS_IMETHODIMP nsExternalProtocolHandler::NewURI(const nsACString &aSpec,
                                                 const char *aCharset, // ignore charset info
                                                 nsIURI *aBaseURI,
                                                 nsIURI **_retval)
 {
-  nsresult rv;
-  nsCOMPtr<nsIURI> uri = do_CreateInstance(NS_SIMPLEURI_CONTRACTID, &rv);
-  NS_ENSURE_SUCCESS(rv, rv);
-  
-  rv = uri->SetSpec(aSpec);
-  NS_ENSURE_SUCCESS(rv, rv);
-
-  NS_ADDREF(*_retval = uri);
-  return NS_OK;
+  return NS_MutateURI(NS_SIMPLEURIMUTATOR_CONTRACTID)
+           .SetSpec(aSpec)
+           .Finalize(_retval);
 }
 
 NS_IMETHODIMP
 nsExternalProtocolHandler::NewChannel2(nsIURI* aURI,
                                        nsILoadInfo* aLoadInfo,
                                        nsIChannel** aRetval)
 {
   NS_ENSURE_TRUE(aURI, NS_ERROR_UNKNOWN_PROTOCOL);