To accommodate some downstream WebRTC users we need to loosen
the coupling between our code and the //third_party/protobuf.

This includes using typedefs to define strings instead of
assuming std::string.

After this refactoring it will be possible to link with other
protobuf implementations than the current one.

We moved the PRESUBMIT check to another CL [1]. The goal of this
presubmit is to avoid the direct usage of google::protobuf outside
of the webrtc/base/protobuf_utils.h header file.

[1] - https://codereview.webrtc.org/2753823003/

BUG=webrtc:7340
NOTRY=True

Review-Url: https://codereview.webrtc.org/2747863003
Cr-Commit-Position: refs/heads/master@{#17466}
diff --git a/webrtc/BUILD.gn b/webrtc/BUILD.gn
index a10b953..0bc2eb3 100644
--- a/webrtc/BUILD.gn
+++ b/webrtc/BUILD.gn
@@ -100,6 +100,12 @@
   cflags_cc = []
   defines = []
 
+  if (rtc_enable_protobuf) {
+    defines += [ "WEBRTC_ENABLE_PROTOBUF=1" ]
+  } else {
+    defines += [ "WEBRTC_ENABLE_PROTOBUF=0" ]
+  }
+
   if (rtc_restrict_logging) {
     defines += [ "WEBRTC_RESTRICT_LOGGING" ]
   }
diff --git a/webrtc/base/BUILD.gn b/webrtc/base/BUILD.gn
index 3d0a3f4..dd3b456 100644
--- a/webrtc/base/BUILD.gn
+++ b/webrtc/base/BUILD.gn
@@ -79,6 +79,17 @@
   }
 }
 
+source_set("protobuf_utils") {
+  sources = [
+    "protobuf_utils.h",
+  ]
+  if (rtc_enable_protobuf) {
+    public_deps = [
+      "//third_party/protobuf:protobuf_lite",
+    ]
+  }
+}
+
 # The subset of rtc_base approved for use outside of libjingle.
 rtc_static_library("rtc_base_approved") {
   defines = []
diff --git a/webrtc/base/DEPS b/webrtc/base/DEPS
index bb76adf..6abcfb8 100644
--- a/webrtc/base/DEPS
+++ b/webrtc/base/DEPS
@@ -9,4 +9,7 @@
   "gunit_prod.h": [
     "+gtest",
   ],
+  "protobuf_utils.h": [
+    "+third_party/protobuf",
+  ],
 }
diff --git a/webrtc/base/protobuf_utils.h b/webrtc/base/protobuf_utils.h
new file mode 100644
index 0000000..69f47cf
--- /dev/null
+++ b/webrtc/base/protobuf_utils.h
@@ -0,0 +1,36 @@
+/*
+ *  Copyright (c) 2017 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 <string>
+
+#ifndef WEBRTC_BASE_PROTOBUF_UTILS_H_
+#define WEBRTC_BASE_PROTOBUF_UTILS_H_
+
+namespace webrtc {
+
+using ProtoString = std::string;
+
+}  // namespace webrtc
+
+#if WEBRTC_ENABLE_PROTOBUF
+
+#include "third_party/protobuf/src/google/protobuf/message_lite.h"
+#include "third_party/protobuf/src/google/protobuf/repeated_field.h"
+
+namespace webrtc {
+
+using google::protobuf::MessageLite;
+using google::protobuf::RepeatedPtrField;
+
+}  // namespace webrtc
+
+#endif  // WEBRTC_ENABLE_PROTOBUF
+
+#endif  // WEBRTC_BASE_PROTOBUF_UTILS_H_
diff --git a/webrtc/logging/BUILD.gn b/webrtc/logging/BUILD.gn
index 0cf5731..7d9fdea 100644
--- a/webrtc/logging/BUILD.gn
+++ b/webrtc/logging/BUILD.gn
@@ -51,6 +51,7 @@
   deps = [
     ":rtc_event_log_api",
     "..:webrtc_common",
+    "../base:protobuf_utils",
     "../base:rtc_base_approved",
     "../call:call_interfaces",
     "../modules/audio_coding:audio_network_adaptor",
@@ -96,6 +97,7 @@
       suppressed_configs += [ "//build/config/clang:find_bad_constructs" ]
     }
     deps = [
+      "../base:protobuf_utils",
       "../base:rtc_base_approved",
     ]
   }
diff --git a/webrtc/logging/rtc_event_log/rtc_event_log.cc b/webrtc/logging/rtc_event_log/rtc_event_log.cc
index 902ce42..376a4f6 100644
--- a/webrtc/logging/rtc_event_log/rtc_event_log.cc
+++ b/webrtc/logging/rtc_event_log/rtc_event_log.cc
@@ -16,6 +16,7 @@
 #include "webrtc/base/checks.h"
 #include "webrtc/base/constructormagic.h"
 #include "webrtc/base/event.h"
+#include "webrtc/base/protobuf_utils.h"
 #include "webrtc/base/swap_queue.h"
 #include "webrtc/base/thread_checker.h"
 #include "webrtc/base/timeutils.h"
@@ -37,7 +38,7 @@
 #include "webrtc/system_wrappers/include/logging.h"
 
 #ifdef ENABLE_RTC_EVENT_LOG
-// Files generated at build-time by the protobuf compiler.
+// *.pb.h files are generated at build-time by the protobuf compiler.
 #ifdef WEBRTC_ANDROID_PLATFORM_BUILD
 #include "external/webrtc/webrtc/logging/rtc_event_log/rtc_event_log.pb.h"
 #else
@@ -583,7 +584,7 @@
   if (!dump_file->OpenFile(file_name.c_str(), true)) {
     return false;
   }
-  std::string dump_buffer;
+  ProtoString dump_buffer;
   while ((bytes_read = dump_file->Read(tmp_buffer, sizeof(tmp_buffer))) > 0) {
     dump_buffer.append(tmp_buffer, bytes_read);
   }
diff --git a/webrtc/logging/rtc_event_log/rtc_event_log_helper_thread.h b/webrtc/logging/rtc_event_log/rtc_event_log_helper_thread.h
index 420e5c5..16faad3 100644
--- a/webrtc/logging/rtc_event_log/rtc_event_log_helper_thread.h
+++ b/webrtc/logging/rtc_event_log/rtc_event_log_helper_thread.h
@@ -13,7 +13,6 @@
 
 #include <limits>
 #include <memory>
-#include <string>
 #include <utility>
 #include <vector>
 
@@ -21,12 +20,13 @@
 #include "webrtc/base/event.h"
 #include "webrtc/base/ignore_wundef.h"
 #include "webrtc/base/platform_thread.h"
+#include "webrtc/base/protobuf_utils.h"
 #include "webrtc/base/swap_queue.h"
 #include "webrtc/logging/rtc_event_log/ringbuffer.h"
 #include "webrtc/system_wrappers/include/file_wrapper.h"
 
 #ifdef ENABLE_RTC_EVENT_LOG
-// Files generated at build-time by the protobuf compiler.
+// *.ph.h files are generated at build-time by the protobuf compiler.
 RTC_PUSH_IGNORING_WUNDEF()
 #ifdef WEBRTC_ANDROID_PLATFORM_BUILD
 #include "external/webrtc/webrtc/logging/rtc_event_log/rtc_event_log.pb.h"
@@ -112,7 +112,7 @@
   std::unique_ptr<rtclog::Event> most_recent_event_;
 
   // Temporary space for serializing profobuf data.
-  std::string output_string_;
+  ProtoString output_string_;
 
   rtc::Event wake_periodically_;
   rtc::Event wake_from_hibernation_;
diff --git a/webrtc/logging/rtc_event_log/rtc_event_log_parser.cc b/webrtc/logging/rtc_event_log/rtc_event_log_parser.cc
index 815308d..855cb97 100644
--- a/webrtc/logging/rtc_event_log/rtc_event_log_parser.cc
+++ b/webrtc/logging/rtc_event_log/rtc_event_log_parser.cc
@@ -20,6 +20,7 @@
 
 #include "webrtc/base/checks.h"
 #include "webrtc/base/logging.h"
+#include "webrtc/base/protobuf_utils.h"
 #include "webrtc/call/call.h"
 #include "webrtc/logging/rtc_event_log/rtc_event_log.h"
 #include "webrtc/modules/rtp_rtcp/include/rtp_rtcp_defines.h"
@@ -127,8 +128,8 @@
 
 void GetHeaderExtensions(
     std::vector<RtpExtension>* header_extensions,
-    const google::protobuf::RepeatedPtrField<rtclog::RtpHeaderExtension>&
-        proto_header_extensions) {
+    const RepeatedPtrField<rtclog::RtpHeaderExtension>&
+    proto_header_extensions) {
   header_extensions->clear();
   for (auto& p : proto_header_extensions) {
     RTC_CHECK(p.has_name());
diff --git a/webrtc/modules/audio_coding/BUILD.gn b/webrtc/modules/audio_coding/BUILD.gn
index ea3a1b7..883a669 100644
--- a/webrtc/modules/audio_coding/BUILD.gn
+++ b/webrtc/modules/audio_coding/BUILD.gn
@@ -74,6 +74,7 @@
   deps = [
            "../../api/audio_codecs:audio_codecs_api",
            "../..:webrtc_common",
+           "../../base:protobuf_utils",
            "../../base:rtc_base_approved",
            "../../system_wrappers",
            ":audio_coding_module_typedefs",
@@ -82,6 +83,7 @@
            ":isac_fix_c",
            ":neteq_decoder_enum",
          ] + audio_codec_deps
+
   defines = audio_codec_defines
 }
 
@@ -828,6 +830,7 @@
     ":audio_network_adaptor",
     "../..:webrtc_common",
     "../../api/audio_codecs:audio_codecs_api",
+    "../../base:protobuf_utils",
     "../../base:rtc_base_approved",
     "../../base:rtc_numerics",
     "../../common_audio",
@@ -921,6 +924,7 @@
 
   deps = [
     "../..:webrtc_common",
+    "../../base:protobuf_utils",
     "../../base:rtc_base_approved",
     "../../common_audio",
     "../../logging:rtc_event_log_api",
@@ -1188,10 +1192,12 @@
       ":neteq_unittest_tools",
       ":webrtc_opus",
       "../..:webrtc_common",
+      "../../base:protobuf_utils",
       "../../base:rtc_base_approved",
       "../../system_wrappers:system_wrappers",
       "../../test:test_support",
     ]
+
     if (!build_with_chromium && is_clang) {
       # Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163).
       suppressed_configs += [ "//build/config/clang:find_bad_constructs" ]
@@ -1326,6 +1332,7 @@
       ":neteq",
       ":neteq_unittest_tools",
       "../../api/audio_codecs:audio_codecs_api",
+      "../../base:protobuf_utils",
       "../../common_audio",
       "../../test:test_main",
       "//testing/gtest",
@@ -2082,6 +2089,7 @@
       "../..:webrtc_common",
       "../../api/audio_codecs:audio_codecs_api",
       "../../api/audio_codecs:builtin_audio_decoder_factory",
+      "../../base:protobuf_utils",
       "../../base:rtc_base",
       "../../base:rtc_base_approved",
       "../../base:rtc_base_tests_utils",
diff --git a/webrtc/modules/audio_coding/audio_network_adaptor/controller_manager.cc b/webrtc/modules/audio_coding/audio_network_adaptor/controller_manager.cc
index b0d4aed..1e6aff1 100644
--- a/webrtc/modules/audio_coding/audio_network_adaptor/controller_manager.cc
+++ b/webrtc/modules/audio_coding/audio_network_adaptor/controller_manager.cc
@@ -195,7 +195,7 @@
 ControllerManagerImpl::Config::~Config() = default;
 
 std::unique_ptr<ControllerManager> ControllerManagerImpl::Create(
-    const std::string& config_string,
+    const ProtoString& config_string,
     size_t num_encoder_channels,
     rtc::ArrayView<const int> encoder_frame_lengths_ms,
     int min_encoder_bitrate_bps,
diff --git a/webrtc/modules/audio_coding/audio_network_adaptor/controller_manager.h b/webrtc/modules/audio_coding/audio_network_adaptor/controller_manager.h
index 155b749..0124cc2 100644
--- a/webrtc/modules/audio_coding/audio_network_adaptor/controller_manager.h
+++ b/webrtc/modules/audio_coding/audio_network_adaptor/controller_manager.h
@@ -16,6 +16,7 @@
 #include <vector>
 
 #include "webrtc/base/constructormagic.h"
+#include "webrtc/base/protobuf_utils.h"
 #include "webrtc/modules/audio_coding/audio_network_adaptor/controller.h"
 
 namespace webrtc {
@@ -49,7 +50,7 @@
   };
 
   static std::unique_ptr<ControllerManager> Create(
-      const std::string& config_string,
+      const ProtoString& config_string,
       size_t num_encoder_channels,
       rtc::ArrayView<const int> encoder_frame_lengths_ms,
       int min_encoder_bitrate_bps,
diff --git a/webrtc/modules/audio_coding/audio_network_adaptor/controller_manager_unittest.cc b/webrtc/modules/audio_coding/audio_network_adaptor/controller_manager_unittest.cc
index ed96e1b..292f17f 100644
--- a/webrtc/modules/audio_coding/audio_network_adaptor/controller_manager_unittest.cc
+++ b/webrtc/modules/audio_coding/audio_network_adaptor/controller_manager_unittest.cc
@@ -11,6 +11,7 @@
 #include <utility>
 
 #include "webrtc/base/ignore_wundef.h"
+#include "webrtc/base/protobuf_utils.h"
 #include "webrtc/modules/audio_coding/audio_network_adaptor/controller_manager.h"
 #include "webrtc/modules/audio_coding/audio_network_adaptor/mock/mock_controller.h"
 #include "webrtc/system_wrappers/include/clock.h"
@@ -273,7 +274,7 @@
 constexpr int kMinBitrateBps = 6000;
 
 ControllerManagerStates CreateControllerManager(
-    const std::string& config_string) {
+    const ProtoString& config_string) {
   ControllerManagerStates states;
   states.simulated_clock.reset(new SimulatedClock(kClockInitialTime));
   constexpr size_t kNumEncoderChannels = 2;
@@ -345,7 +346,7 @@
   AddFrameLengthControllerConfig(&config);
   AddBitrateControllerConfig(&config);
 
-  std::string config_string;
+  ProtoString config_string;
   config.SerializeToString(&config_string);
 
   auto states = CreateControllerManager(config_string);
@@ -376,7 +377,7 @@
 
   AddBitrateControllerConfig(&config);
 
-  std::string config_string;
+  ProtoString config_string;
   config.SerializeToString(&config_string);
 
   auto states = CreateControllerManager(config_string);
diff --git a/webrtc/modules/audio_coding/audio_network_adaptor/debug_dump_writer.cc b/webrtc/modules/audio_coding/audio_network_adaptor/debug_dump_writer.cc
index e0af336..0ee466e 100644
--- a/webrtc/modules/audio_coding/audio_network_adaptor/debug_dump_writer.cc
+++ b/webrtc/modules/audio_coding/audio_network_adaptor/debug_dump_writer.cc
@@ -12,6 +12,7 @@
 
 #include "webrtc/base/checks.h"
 #include "webrtc/base/ignore_wundef.h"
+#include "webrtc/base/protobuf_utils.h"
 
 #ifdef WEBRTC_AUDIO_NETWORK_ADAPTOR_DEBUG_DUMP
 RTC_PUSH_IGNORING_WUNDEF()
@@ -34,7 +35,7 @@
 
 void DumpEventToFile(const Event& event, FileWrapper* dump_file) {
   RTC_CHECK(dump_file->is_open());
-  std::string dump_data;
+  ProtoString dump_data;
   event.SerializeToString(&dump_data);
   int32_t size = event.ByteSize();
   dump_file->Write(&size, sizeof(size));
diff --git a/webrtc/modules/audio_coding/audio_network_adaptor/debug_dump_writer.h b/webrtc/modules/audio_coding/audio_network_adaptor/debug_dump_writer.h
index da4b031..711e13e 100644
--- a/webrtc/modules/audio_coding/audio_network_adaptor/debug_dump_writer.h
+++ b/webrtc/modules/audio_coding/audio_network_adaptor/debug_dump_writer.h
@@ -12,7 +12,6 @@
 #define WEBRTC_MODULES_AUDIO_CODING_AUDIO_NETWORK_ADAPTOR_DEBUG_DUMP_WRITER_H_
 
 #include <memory>
-#include <string>
 
 #include "webrtc/base/constructormagic.h"
 #include "webrtc/modules/audio_coding/audio_network_adaptor/controller.h"
diff --git a/webrtc/modules/audio_coding/codecs/opus/audio_encoder_opus.cc b/webrtc/modules/audio_coding/codecs/opus/audio_encoder_opus.cc
index 103ec9b..ba9e360 100644
--- a/webrtc/modules/audio_coding/codecs/opus/audio_encoder_opus.cc
+++ b/webrtc/modules/audio_coding/codecs/opus/audio_encoder_opus.cc
@@ -16,6 +16,7 @@
 #include "webrtc/base/checks.h"
 #include "webrtc/base/logging.h"
 #include "webrtc/base/numerics/exp_filter.h"
+#include "webrtc/base/protobuf_utils.h"
 #include "webrtc/base/safe_conversions.h"
 #include "webrtc/base/timeutils.h"
 #include "webrtc/common_types.h"
@@ -192,7 +193,7 @@
       audio_network_adaptor_creator_(
           audio_network_adaptor_creator
               ? std::move(audio_network_adaptor_creator)
-              : [this](const std::string& config_string,
+              : [this](const ProtoString& config_string,
                        RtcEventLog* event_log,
                        const Clock* clock) {
                   return DefaultAudioNetworkAdaptorCreator(config_string,
@@ -548,7 +549,7 @@
 
 std::unique_ptr<AudioNetworkAdaptor>
 AudioEncoderOpus::DefaultAudioNetworkAdaptorCreator(
-    const std::string& config_string,
+    const ProtoString& config_string,
     RtcEventLog* event_log,
     const Clock* clock) const {
   AudioNetworkAdaptorImpl::Config config;
diff --git a/webrtc/modules/audio_coding/codecs/opus/audio_encoder_opus.h b/webrtc/modules/audio_coding/codecs/opus/audio_encoder_opus.h
index 15ded47..c756acf 100644
--- a/webrtc/modules/audio_coding/codecs/opus/audio_encoder_opus.h
+++ b/webrtc/modules/audio_coding/codecs/opus/audio_encoder_opus.h
@@ -18,6 +18,7 @@
 
 #include "webrtc/base/constructormagic.h"
 #include "webrtc/base/optional.h"
+#include "webrtc/base/protobuf_utils.h"
 #include "webrtc/common_audio/smoothing_filter.h"
 #include "webrtc/modules/audio_coding/audio_network_adaptor/include/audio_network_adaptor.h"
 #include "webrtc/modules/audio_coding/codecs/opus/opus_interface.h"
@@ -156,7 +157,7 @@
 
   void ApplyAudioNetworkAdaptor();
   std::unique_ptr<AudioNetworkAdaptor> DefaultAudioNetworkAdaptorCreator(
-      const std::string& config_string,
+      const ProtoString& config_string,
       RtcEventLog* event_log,
       const Clock* clock) const;
 
diff --git a/webrtc/modules/audio_coding/neteq/neteq_unittest.cc b/webrtc/modules/audio_coding/neteq/neteq_unittest.cc
index c52f2d6..47073fb 100644
--- a/webrtc/modules/audio_coding/neteq/neteq_unittest.cc
+++ b/webrtc/modules/audio_coding/neteq/neteq_unittest.cc
@@ -25,6 +25,7 @@
 #include "webrtc/base/ignore_wundef.h"
 #include "webrtc/base/sha1digest.h"
 #include "webrtc/base/stringencode.h"
+#include "webrtc/base/protobuf_utils.h"
 #include "webrtc/modules/audio_coding/codecs/pcm16b/pcm16b.h"
 #include "webrtc/modules/audio_coding/neteq/tools/audio_loop.h"
 #include "webrtc/modules/audio_coding/neteq/tools/rtp_file_source.h"
@@ -194,7 +195,7 @@
   neteq_unittest::NetEqNetworkStatistics stats;
   Convert(stats_raw, &stats);
 
-  std::string stats_string;
+  ProtoString stats_string;
   ASSERT_TRUE(stats.SerializeToString(&stats_string));
   AddMessage(output_fp_, digest_.get(), stats_string);
 #else
@@ -207,7 +208,7 @@
   neteq_unittest::RtcpStatistics stats;
   Convert(stats_raw, &stats);
 
-  std::string stats_string;
+  ProtoString stats_string;
   ASSERT_TRUE(stats.SerializeToString(&stats_string));
   AddMessage(output_fp_, digest_.get(), stats_string);
 #else
diff --git a/webrtc/modules/audio_processing/BUILD.gn b/webrtc/modules/audio_processing/BUILD.gn
index 36f5575..84545dd 100644
--- a/webrtc/modules/audio_processing/BUILD.gn
+++ b/webrtc/modules/audio_processing/BUILD.gn
@@ -232,6 +232,7 @@
     "../..:webrtc_common",
     "../../audio/utility:audio_frame_operations",
     "../../base:gtest_prod",
+    "../../base:protobuf_utils",
     "../audio_coding:isac",
   ]
   public_deps = [
@@ -524,6 +525,7 @@
       ":audioproc_test_utils",
       "../..:webrtc_common",
       "../../base:gtest_prod",
+      "../../base:protobuf_utils",
       "../../base:rtc_base",
       "../../base:rtc_base_approved",
       "../../common_audio:common_audio",
@@ -656,8 +658,10 @@
     deps = [
       ":audio_processing",
       ":audioproc_test_utils",
+      "../../base:protobuf_utils",
       "//testing/gtest",
     ]
+
     if (rtc_enable_intelligibility_enhancer) {
       defines = [ "WEBRTC_INTELLIGIBILITY_ENHANCER=1" ]
     } else {
@@ -678,6 +682,7 @@
         ":audioproc_protobuf_utils",
         ":audioproc_test_utils",
         "../..:webrtc_common",
+        "../../base:protobuf_utils",
         "../../base:rtc_base_approved",
         "../../common_audio",
         "../../system_wrappers:system_wrappers_default",
@@ -702,6 +707,7 @@
         ":audioproc_debug_proto",
         ":audioproc_protobuf_utils",
         ":audioproc_test_utils",
+        "../../base:protobuf_utils",
         "../../base:rtc_base_approved",
         "../../common_audio:common_audio",
         "../../system_wrappers",
@@ -817,6 +823,7 @@
       deps = [
         ":audioproc_debug_proto",
         "../..:webrtc_common",
+        "../../base:protobuf_utils",
         "../../base:rtc_base_approved",
       ]
     }
diff --git a/webrtc/modules/audio_processing/audio_processing_impl.cc b/webrtc/modules/audio_processing/audio_processing_impl.cc
index 1f73c59..56da282 100644
--- a/webrtc/modules/audio_processing/audio_processing_impl.cc
+++ b/webrtc/modules/audio_processing/audio_processing_impl.cc
@@ -1879,11 +1879,11 @@
   audioproc::Init* msg = debug_dump_.capture.event_msg->mutable_init();
   msg->set_sample_rate(formats_.api_format.input_stream().sample_rate_hz());
 
-  msg->set_num_input_channels(static_cast<google::protobuf::int32>(
+  msg->set_num_input_channels(static_cast<int32_t>(
       formats_.api_format.input_stream().num_channels()));
-  msg->set_num_output_channels(static_cast<google::protobuf::int32>(
+  msg->set_num_output_channels(static_cast<int32_t>(
       formats_.api_format.output_stream().num_channels()));
-  msg->set_num_reverse_channels(static_cast<google::protobuf::int32>(
+  msg->set_num_reverse_channels(static_cast<int32_t>(
       formats_.api_format.reverse_input_stream().num_channels()));
   msg->set_reverse_sample_rate(
       formats_.api_format.reverse_input_stream().sample_rate_hz());
@@ -1953,7 +1953,7 @@
   }
   config.set_experiments_description(experiments_description);
 
-  std::string serialized_config = config.SerializeAsString();
+  ProtoString serialized_config = config.SerializeAsString();
   if (!forced &&
       debug_dump_.capture.last_serialized_config == serialized_config) {
     return kNoError;
diff --git a/webrtc/modules/audio_processing/audio_processing_impl.h b/webrtc/modules/audio_processing/audio_processing_impl.h
index 01b640f..2b6e6f6 100644
--- a/webrtc/modules/audio_processing/audio_processing_impl.h
+++ b/webrtc/modules/audio_processing/audio_processing_impl.h
@@ -13,13 +13,13 @@
 
 #include <list>
 #include <memory>
-#include <string>
 #include <vector>
 
 #include "webrtc/base/criticalsection.h"
 #include "webrtc/base/function_view.h"
 #include "webrtc/base/gtest_prod_util.h"
 #include "webrtc/base/ignore_wundef.h"
+#include "webrtc/base/protobuf_utils.h"
 #include "webrtc/base/swap_queue.h"
 #include "webrtc/base/thread_annotations.h"
 #include "webrtc/modules/audio_processing/audio_buffer.h"
@@ -29,7 +29,7 @@
 #include "webrtc/system_wrappers/include/file_wrapper.h"
 
 #ifdef WEBRTC_AUDIOPROC_DEBUG_DUMP
-// Files generated at build-time by the protobuf compiler.
+// *.pb.h files are generated at build-time by the protobuf compiler.
 RTC_PUSH_IGNORING_WUNDEF()
 #ifdef WEBRTC_ANDROID_PLATFORM_BUILD
 #include "external/webrtc/webrtc/modules/audio_processing/debug.pb.h"
@@ -200,10 +200,10 @@
     ApmDebugDumpThreadState();
     ~ApmDebugDumpThreadState();
     std::unique_ptr<audioproc::Event> event_msg;  // Protobuf message.
-    std::string event_str;  // Memory for protobuf serialization.
+    ProtoString event_str;  // Memory for protobuf serialization.
 
     // Serialized string of last saved APM configuration.
-    std::string last_serialized_config;
+    ProtoString last_serialized_config;
   };
 
   struct ApmDebugDumpState {
diff --git a/webrtc/modules/audio_processing/audio_processing_unittest.cc b/webrtc/modules/audio_processing/audio_processing_unittest.cc
index b52acce..814eea9 100644
--- a/webrtc/modules/audio_processing/audio_processing_unittest.cc
+++ b/webrtc/modules/audio_processing/audio_processing_unittest.cc
@@ -20,6 +20,7 @@
 #include "webrtc/base/checks.h"
 #include "webrtc/base/gtest_prod_util.h"
 #include "webrtc/base/ignore_wundef.h"
+#include "webrtc/base/protobuf_utils.h"
 #include "webrtc/common_audio/include/audio_util.h"
 #include "webrtc/common_audio/resampler/include/push_resampler.h"
 #include "webrtc/common_audio/resampler/push_sinc_resampler.h"
@@ -58,7 +59,7 @@
 // file. This is the typical case. When the file should be updated, it can
 // be set to true with the command-line switch --write_ref_data.
 bool write_ref_data = false;
-const google::protobuf::int32 kChannels[] = {1, 2};
+const int32_t kChannels[] = {1, 2};
 const int kSampleRates[] = {8000, 16000, 32000, 48000};
 
 #if defined(WEBRTC_AUDIOPROC_FIXED_PROFILE)
@@ -230,7 +231,7 @@
 #endif
 
 void OpenFileAndWriteMessage(const std::string filename,
-                             const ::google::protobuf::MessageLite& msg) {
+                             const MessageLite& msg) {
   FILE* file = fopen(filename.c_str(), "wb");
   ASSERT_TRUE(file != NULL);
 
@@ -299,8 +300,7 @@
     remove(kv.second.c_str());
 }
 
-void OpenFileAndReadMessage(std::string filename,
-                            ::google::protobuf::MessageLite* msg) {
+void OpenFileAndReadMessage(std::string filename, MessageLite* msg) {
   FILE* file = fopen(filename.c_str(), "rb");
   ASSERT_TRUE(file != NULL);
   ReadMessageFromFile(file, msg);
diff --git a/webrtc/modules/audio_processing/test/protobuf_utils.cc b/webrtc/modules/audio_processing/test/protobuf_utils.cc
index c18a13e..cb8adf9 100644
--- a/webrtc/modules/audio_processing/test/protobuf_utils.cc
+++ b/webrtc/modules/audio_processing/test/protobuf_utils.cc
@@ -30,7 +30,7 @@
 }
 
 // Returns true on success, false on error or end-of-file.
-bool ReadMessageFromFile(FILE* file, ::google::protobuf::MessageLite* msg) {
+bool ReadMessageFromFile(FILE* file, MessageLite* msg) {
   std::unique_ptr<uint8_t[]> bytes;
   size_t size = ReadMessageBytesFromFile(file, &bytes);
   if (!size)
diff --git a/webrtc/modules/audio_processing/test/protobuf_utils.h b/webrtc/modules/audio_processing/test/protobuf_utils.h
index e132c94..8941338 100644
--- a/webrtc/modules/audio_processing/test/protobuf_utils.h
+++ b/webrtc/modules/audio_processing/test/protobuf_utils.h
@@ -14,6 +14,7 @@
 #include <memory>
 
 #include "webrtc/base/ignore_wundef.h"
+#include "webrtc/base/protobuf_utils.h"
 
 RTC_PUSH_IGNORING_WUNDEF()
 #include "webrtc/modules/audio_processing/debug.pb.h"
@@ -26,7 +27,7 @@
 size_t ReadMessageBytesFromFile(FILE* file, std::unique_ptr<uint8_t[]>* bytes);
 
 // Returns true on success, false on error or end-of-file.
-bool ReadMessageFromFile(FILE* file, ::google::protobuf::MessageLite* msg);
+bool ReadMessageFromFile(FILE* file, MessageLite* msg);
 
 }  // namespace webrtc
 
diff --git a/webrtc/tools/BUILD.gn b/webrtc/tools/BUILD.gn
index 169a7f4..510bc69 100644
--- a/webrtc/tools/BUILD.gn
+++ b/webrtc/tools/BUILD.gn
@@ -202,6 +202,7 @@
     }
     defines = [ "ENABLE_RTC_EVENT_LOG" ]
     deps = [
+      "../base:protobuf_utils",
       "../call:call_interfaces",
       "../logging:rtc_event_log_impl",
       "../logging:rtc_event_log_parser",
@@ -238,6 +239,7 @@
       defines = [ "ENABLE_RTC_EVENT_LOG" ]
       deps = [
         ":event_log_visualizer_utils",
+        "../base:protobuf_utils",
         "../test:field_trial",
         "//third_party/gflags",
       ]
@@ -329,6 +331,7 @@
         "$root_build_dir/{{source_file_part}}",
       ]
       deps = [
+        "../base:protobuf_utils",
         "../logging:rtc_event_log_proto",
       ]
     }