diff --git a/modules/desktop_capture/mac/full_screen_chrome_window_detector.cc b/modules/desktop_capture/mac/full_screen_chrome_window_detector.cc
index f2c8fd4..afa4473 100644
--- a/modules/desktop_capture/mac/full_screen_chrome_window_detector.cc
+++ b/modules/desktop_capture/mac/full_screen_chrome_window_detector.cc
@@ -16,6 +16,7 @@
 
 #include "modules/desktop_capture/mac/window_list_utils.h"
 #include "rtc_base/logging.h"
+#include "rtc_base/mac_utils.h"
 #include "rtc_base/time_utils.h"
 
 namespace webrtc {
diff --git a/modules/desktop_capture/mac/window_list_utils.cc b/modules/desktop_capture/mac/window_list_utils.cc
index 3f0a9b0..5899530 100644
--- a/modules/desktop_capture/mac/window_list_utils.cc
+++ b/modules/desktop_capture/mac/window_list_utils.cc
@@ -19,6 +19,7 @@
 #include <map>
 
 #include "rtc_base/checks.h"
+#include "rtc_base/mac_utils.h"
 
 static_assert(static_cast<webrtc::WindowId>(kCGNullWindowID) ==
                   webrtc::kNullWindowId,
@@ -28,19 +29,6 @@
 
 namespace {
 
-bool ToUtf8(const CFStringRef str16, std::string* str8) {
-  size_t maxlen = CFStringGetMaximumSizeForEncoding(CFStringGetLength(str16),
-                                                    kCFStringEncodingUTF8) +
-                  1;
-  std::unique_ptr<char[]> buffer(new char[maxlen]);
-  if (!buffer ||
-      !CFStringGetCString(str16, buffer.get(), maxlen, kCFStringEncodingUTF8)) {
-    return false;
-  }
-  str8->assign(buffer.get());
-  return true;
-}
-
 // Get CFDictionaryRef from |id| and call |on_window| against it. This function
 // returns false if native APIs fail, typically it indicates that the |id| does
 // not represent a window. |on_window| will not be called if false is returned
@@ -259,7 +247,7 @@
   CFStringRef title = reinterpret_cast<CFStringRef>(
       CFDictionaryGetValue(window, kCGWindowName));
   std::string result;
-  if (title && ToUtf8(title, &result)) {
+  if (title && rtc::ToUtf8(title, &result)) {
     return result;
   }
 
@@ -280,7 +268,7 @@
   CFStringRef owner_name = reinterpret_cast<CFStringRef>(
       CFDictionaryGetValue(window, kCGWindowOwnerName));
   std::string result;
-  if (owner_name && ToUtf8(owner_name, &result)) {
+  if (owner_name && rtc::ToUtf8(owner_name, &result)) {
     return result;
   }
   return std::string();
diff --git a/modules/desktop_capture/mouse_cursor_monitor_mac.mm b/modules/desktop_capture/mouse_cursor_monitor_mac.mm
index afc4497..35ef394 100644
--- a/modules/desktop_capture/mouse_cursor_monitor_mac.mm
+++ b/modules/desktop_capture/mouse_cursor_monitor_mac.mm
@@ -27,6 +27,7 @@
 #include "modules/desktop_capture/mac/full_screen_chrome_window_detector.h"
 #include "modules/desktop_capture/mac/window_list_utils.h"
 #include "modules/desktop_capture/mouse_cursor.h"
+#include "rtc_base/mac_utils.h"
 
 namespace webrtc {
 
diff --git a/modules/desktop_capture/window_capturer_mac.mm b/modules/desktop_capture/window_capturer_mac.mm
index 828122b..fae3f98 100644
--- a/modules/desktop_capture/window_capturer_mac.mm
+++ b/modules/desktop_capture/window_capturer_mac.mm
@@ -27,6 +27,7 @@
 #include "modules/desktop_capture/window_finder_mac.h"
 #include "rtc_base/constructor_magic.h"
 #include "rtc_base/logging.h"
+#include "rtc_base/mac_utils.h"
 #include "rtc_base/trace_event.h"
 
 namespace webrtc {
diff --git a/rtc_base/BUILD.gn b/rtc_base/BUILD.gn
index 7b0108d..b937714 100644
--- a/rtc_base/BUILD.gn
+++ b/rtc_base/BUILD.gn
@@ -926,6 +926,19 @@
     ]
   }
 
+  if (is_mac) {
+    sources += [
+      "mac_utils.cc",
+      "mac_utils.h",
+    ]
+    libs += [
+      "Cocoa.framework",
+      "Foundation.framework",
+      "IOKit.framework",
+      "Security.framework",
+      "SystemConfiguration.framework",
+    ]
+  }
   if (is_ios) {
     libs += [
       "CFNetwork.framework",
diff --git a/rtc_base/mac_utils.cc b/rtc_base/mac_utils.cc
new file mode 100644
index 0000000..d2428b4
--- /dev/null
+++ b/rtc_base/mac_utils.cc
@@ -0,0 +1,48 @@
+/*
+ *  Copyright 2007 The WebRTC Project Authors. All rights reserved.
+ *
+ *  Use of this source code is governed by a BSD-style license
+ *  that can be found in the LICENSE file in the root of the source
+ *  tree. An additional intellectual property rights grant can be found
+ *  in the file PATENTS.  All contributing project authors may
+ *  be found in the AUTHORS file in the root of the source tree.
+ */
+
+#include "rtc_base/mac_utils.h"
+
+#include <sys/utsname.h>
+
+#include <cstring>
+#include <memory>
+
+#include "rtc_base/checks.h"
+#include "rtc_base/logging.h"
+
+namespace rtc {
+
+bool ToUtf8(const CFStringRef str16, std::string* str8) {
+  if ((nullptr == str16) || (nullptr == str8)) {
+    return false;
+  }
+  size_t maxlen = CFStringGetMaximumSizeForEncoding(CFStringGetLength(str16),
+                                                    kCFStringEncodingUTF8) +
+                  1;
+  std::unique_ptr<char[]> buffer(new char[maxlen]);
+  if (!buffer ||
+      !CFStringGetCString(str16, buffer.get(), maxlen, kCFStringEncodingUTF8)) {
+    return false;
+  }
+  str8->assign(buffer.get());
+  return true;
+}
+
+bool ToUtf16(const std::string& str8, CFStringRef* str16) {
+  if (nullptr == str16) {
+    return false;
+  }
+  *str16 = CFStringCreateWithBytes(kCFAllocatorDefault,
+                                   reinterpret_cast<const UInt8*>(str8.data()),
+                                   str8.length(), kCFStringEncodingUTF8, false);
+  return nullptr != *str16;
+}
+}  // namespace rtc
diff --git a/rtc_base/mac_utils.h b/rtc_base/mac_utils.h
new file mode 100644
index 0000000..5f5b836
--- /dev/null
+++ b/rtc_base/mac_utils.h
@@ -0,0 +1,23 @@
+/*
+ *  Copyright 2007 The WebRTC Project Authors. All rights reserved.
+ *
+ *  Use of this source code is governed by a BSD-style license
+ *  that can be found in the LICENSE file in the root of the source
+ *  tree. An additional intellectual property rights grant can be found
+ *  in the file PATENTS.  All contributing project authors may
+ *  be found in the AUTHORS file in the root of the source tree.
+ */
+
+#ifndef RTC_BASE_MAC_UTILS_H_
+#define RTC_BASE_MAC_UTILS_H_
+
+#include <CoreFoundation/CoreFoundation.h>
+
+#include <string>
+
+namespace rtc {
+bool ToUtf8(const CFStringRef str16, std::string* str8);
+bool ToUtf16(const std::string& str8, CFStringRef* str16);
+}  // namespace rtc
+
+#endif  // RTC_BASE_MAC_UTILS_H_
