Make SysUTF8ToCFStringRef and SysUTF16ToCFStringRef return ScopedCFTypeRefs.

This enforces ownership rather than merely documenting it.

Change-Id: I51f8e017694f09bda7b3b56f234b7fdc855ab679
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2264506
Commit-Queue: Robert Sesek <[email protected]>
Reviewed-by: Nico Weber <[email protected]>
Cr-Commit-Position: refs/heads/master@{#783220}
diff --git a/base/strings/sys_string_conversions_mac.mm b/base/strings/sys_string_conversions_mac.mm
index ce56dca..7a077d2e 100644
--- a/base/strings/sys_string_conversions_mac.mm
+++ b/base/strings/sys_string_conversions_mac.mm
@@ -96,17 +96,17 @@
 // Given a StringPiece |in| with an encoding specified by |in_encoding|, return
 // it as a CFStringRef.  Returns NULL on failure.
 template <typename StringType>
-static CFStringRef StringPieceToCFStringWithEncodingsT(
+static ScopedCFTypeRef<CFStringRef> StringPieceToCFStringWithEncodingsT(
     BasicStringPiece<StringType> in,
     CFStringEncoding in_encoding) {
   const auto in_length = in.length();
   if (in_length == 0)
-    return CFSTR("");
+    return ScopedCFTypeRef<CFStringRef>(CFSTR(""), base::scoped_policy::RETAIN);
 
-  return CFStringCreateWithBytes(
+  return ScopedCFTypeRef<CFStringRef>(CFStringCreateWithBytes(
       kCFAllocatorDefault, reinterpret_cast<const UInt8*>(in.data()),
       in_length * sizeof(typename BasicStringPiece<StringType>::value_type),
-      in_encoding, false);
+      in_encoding, false));
 }
 
 // Specify the byte ordering explicitly, otherwise CFString will be confused
@@ -142,20 +142,20 @@
   return SysUTF8ToWide(native_mb);
 }
 
-CFStringRef SysUTF8ToCFStringRef(StringPiece utf8) {
+ScopedCFTypeRef<CFStringRef> SysUTF8ToCFStringRef(StringPiece utf8) {
   return StringPieceToCFStringWithEncodingsT(utf8, kNarrowStringEncoding);
 }
 
-CFStringRef SysUTF16ToCFStringRef(StringPiece16 utf16) {
+ScopedCFTypeRef<CFStringRef> SysUTF16ToCFStringRef(StringPiece16 utf16) {
   return StringPieceToCFStringWithEncodingsT(utf16, kMediumStringEncoding);
 }
 
 NSString* SysUTF8ToNSString(StringPiece utf8) {
-  return [mac::CFToNSCast(SysUTF8ToCFStringRef(utf8)) autorelease];
+  return [mac::CFToNSCast(SysUTF8ToCFStringRef(utf8).release()) autorelease];
 }
 
 NSString* SysUTF16ToNSString(StringPiece16 utf16) {
-  return [mac::CFToNSCast(SysUTF16ToCFStringRef(utf16)) autorelease];
+  return [mac::CFToNSCast(SysUTF16ToCFStringRef(utf16).release()) autorelease];
 }
 
 std::string SysCFStringRefToUTF8(CFStringRef ref) {