[go: nahoru, domu]

[LSC] Replace base::string16 with std::u16string in //[f-z]*

This change replaces base::string16 with std::u16string in //[f-z]*

Reproduction steps:
$ git grep -lw 'base::string16' [f-z]* | \
      xargs sed -i 's/\bbase::string16\b/std::u16string/g'
$ git cl format

Bug: 1184339
Change-Id: I4e0ff2fd300c9fd9360dbf8f4b44e74f5f511797
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2752148
Commit-Queue: Jan Wilken Dörrie <jdoerrie@chromium.org>
Owners-Override: Jan Wilken Dörrie <jdoerrie@chromium.org>
Owners-Override: danakj <danakj@chromium.org>
Auto-Submit: Jan Wilken Dörrie <jdoerrie@chromium.org>
Reviewed-by: danakj <danakj@chromium.org>
Cr-Commit-Position: refs/heads/master@{#862044}
diff --git a/fuchsia/base/mem_buffer_util.cc b/fuchsia/base/mem_buffer_util.cc
index d8b3464..2a84d0a 100644
--- a/fuchsia/base/mem_buffer_util.cc
+++ b/fuchsia/base/mem_buffer_util.cc
@@ -20,7 +20,7 @@
 namespace cr_fuchsia {
 
 bool ReadUTF8FromVMOAsUTF16(const fuchsia::mem::Buffer& buffer,
-                            base::string16* output) {
+                            std::u16string* output) {
   std::string output_utf8;
   if (!StringFromMemBuffer(buffer, &output_utf8))
     return false;
diff --git a/fuchsia/base/mem_buffer_util.h b/fuchsia/base/mem_buffer_util.h
index fe7129f..9a2b4613 100644
--- a/fuchsia/base/mem_buffer_util.h
+++ b/fuchsia/base/mem_buffer_util.h
@@ -19,7 +19,7 @@
 // Reads the contents of |buffer|, encoded in UTF-8, to a UTF-16 string.
 // Returns |false| if |buffer| is not valid UTF-8.
 bool ReadUTF8FromVMOAsUTF16(const fuchsia::mem::Buffer& buffer,
-                            base::string16* output);
+                            std::u16string* output);
 
 // Creates a Fuchsia memory buffer from |data|.
 fuchsia::mem::Buffer MemBufferFromString(base::StringPiece data,
diff --git a/fuchsia/base/message_port.cc b/fuchsia/base/message_port.cc
index 891ec69..c20f137 100644
--- a/fuchsia/base/message_port.cc
+++ b/fuchsia/base/message_port.cc
@@ -35,7 +35,7 @@
     return fuchsia::web::FrameError::NO_DATA_IN_MESSAGE;
   }
 
-  base::string16 data_utf16;
+  std::u16string data_utf16;
   if (!cr_fuchsia::ReadUTF8FromVMOAsUTF16(fidl_message.data(), &data_utf16)) {
     return fuchsia::web::FrameError::BUFFER_NOT_UTF8;
   }
@@ -359,7 +359,7 @@
     blink_message.ports.clear();
   }
 
-  base::string16 data_utf16 = std::move(blink_message.data);
+  std::u16string data_utf16 = std::move(blink_message.data);
   std::string data_utf8;
   if (!base::UTF16ToUTF8(data_utf16.data(), data_utf16.size(), &data_utf8))
     return base::nullopt;
diff --git a/fuchsia/engine/browser/frame_impl.cc b/fuchsia/engine/browser/frame_impl.cc
index 781cdcb..f50f434 100644
--- a/fuchsia/engine/browser/frame_impl.cc
+++ b/fuchsia/engine/browser/frame_impl.cc
@@ -328,7 +328,7 @@
     return;
   }
 
-  base::string16 script_utf16;
+  std::u16string script_utf16;
   if (!cr_fuchsia::ReadUTF8FromVMOAsUTF16(script, &script_utf16)) {
     result.set_err(fuchsia::web::FrameError::BUFFER_NOT_UTF8);
     callback(std::move(result));
@@ -720,11 +720,11 @@
     return;
   }
 
-  base::Optional<base::string16> origin_utf16;
+  base::Optional<std::u16string> origin_utf16;
   if (origin != kWildcardOrigin)
     origin_utf16 = base::UTF8ToUTF16(origin);
 
-  base::string16 data_utf16;
+  std::u16string data_utf16;
   if (!cr_fuchsia::ReadUTF8FromVMOAsUTF16(message.data(), &data_utf16)) {
     result.set_err(fuchsia::web::FrameError::BUFFER_NOT_UTF8);
     callback(std::move(result));
@@ -757,7 +757,7 @@
   }
 
   content::MessagePortProvider::PostMessageToFrame(
-      web_contents_.get(), base::string16(), origin_utf16,
+      web_contents_.get(), std::u16string(), origin_utf16,
       std::move(data_utf16), std::move(message_ports));
   result.set_response(fuchsia::web::Frame_PostMessage_Response());
   callback(std::move(result));
@@ -1005,9 +1005,9 @@
 bool FrameImpl::DidAddMessageToConsole(
     content::WebContents* source,
     blink::mojom::ConsoleMessageLevel log_level,
-    const base::string16& message,
+    const std::u16string& message,
     int32_t line_no,
-    const base::string16& source_id) {
+    const std::u16string& source_id) {
   fx_log_severity_t severity =
       BlinkConsoleMessageLevelToFxLogSeverity(log_level);
   if (severity < log_level_) {
diff --git a/fuchsia/engine/browser/frame_impl.h b/fuchsia/engine/browser/frame_impl.h
index 9bdcbcc..429c3b50 100644
--- a/fuchsia/engine/browser/frame_impl.h
+++ b/fuchsia/engine/browser/frame_impl.h
@@ -227,9 +227,9 @@
   void CloseContents(content::WebContents* source) override;
   bool DidAddMessageToConsole(content::WebContents* source,
                               blink::mojom::ConsoleMessageLevel log_level,
-                              const base::string16& message,
+                              const std::u16string& message,
                               int32_t line_no,
-                              const base::string16& source_id) override;
+                              const std::u16string& source_id) override;
   bool IsWebContentsCreationOverridden(
       content::SiteInstance* source_site_instance,
       content::mojom::WindowContainerType window_container_type,
diff --git a/fuchsia/engine/common/web_engine_content_client.cc b/fuchsia/engine/common/web_engine_content_client.cc
index 30d007d..1f9a18a 100644
--- a/fuchsia/engine/common/web_engine_content_client.cc
+++ b/fuchsia/engine/common/web_engine_content_client.cc
@@ -14,7 +14,7 @@
 WebEngineContentClient::WebEngineContentClient() = default;
 WebEngineContentClient::~WebEngineContentClient() = default;
 
-base::string16 WebEngineContentClient::GetLocalizedString(int message_id) {
+std::u16string WebEngineContentClient::GetLocalizedString(int message_id) {
   return l10n_util::GetStringUTF16(message_id);
 }
 
diff --git a/fuchsia/engine/common/web_engine_content_client.h b/fuchsia/engine/common/web_engine_content_client.h
index 95a9e1d..2383b079 100644
--- a/fuchsia/engine/common/web_engine_content_client.h
+++ b/fuchsia/engine/common/web_engine_content_client.h
@@ -14,7 +14,7 @@
   ~WebEngineContentClient() override;
 
   // content::ContentClient implementation.
-  base::string16 GetLocalizedString(int message_id) override;
+  std::u16string GetLocalizedString(int message_id) override;
   base::StringPiece GetDataResource(int resource_id,
                                     ui::ScaleFactor scale_factor) override;
   base::RefCountedMemory* GetDataResourceBytes(int resource_id) override;
diff --git a/gin/converter.cc b/gin/converter.cc
index 3498080e..dd7bf46 100644
--- a/gin/converter.cc
+++ b/gin/converter.cc
@@ -152,17 +152,17 @@
   return true;
 }
 
-Local<Value> Converter<base::string16>::ToV8(Isolate* isolate,
-                                             const base::string16& val) {
+Local<Value> Converter<std::u16string>::ToV8(Isolate* isolate,
+                                             const std::u16string& val) {
   return String::NewFromTwoByte(isolate,
                                 reinterpret_cast<const uint16_t*>(val.data()),
                                 v8::NewStringType::kNormal, val.size())
       .ToLocalChecked();
 }
 
-bool Converter<base::string16>::FromV8(Isolate* isolate,
+bool Converter<std::u16string>::FromV8(Isolate* isolate,
                                        Local<Value> val,
-                                       base::string16* out) {
+                                       std::u16string* out) {
   if (!val->IsString())
     return false;
   Local<String> str = Local<String>::Cast(val);
diff --git a/gin/converter.h b/gin/converter.h
index 9e9db93..6f8a421f 100644
--- a/gin/converter.h
+++ b/gin/converter.h
@@ -123,12 +123,12 @@
 };
 
 template <>
-struct GIN_EXPORT Converter<base::string16> {
+struct GIN_EXPORT Converter<std::u16string> {
   static v8::Local<v8::Value> ToV8(v8::Isolate* isolate,
-                                   const base::string16& val);
+                                   const std::u16string& val);
   static bool FromV8(v8::Isolate* isolate,
                      v8::Local<v8::Value> val,
-                     base::string16* out);
+                     std::u16string* out);
 };
 
 template <>
diff --git a/gin/converter_unittest.cc b/gin/converter_unittest.cc
index 5cbc625..3acfe58 100644
--- a/gin/converter_unittest.cc
+++ b/gin/converter_unittest.cc
@@ -89,22 +89,22 @@
 
   HandleScope handle_scope(isolate);
 
-  EXPECT_TRUE(Converter<base::string16>::ToV8(isolate, base::ASCIIToUTF16(""))
+  EXPECT_TRUE(Converter<std::u16string>::ToV8(isolate, base::ASCIIToUTF16(""))
                   ->StrictEquals(StringToV8(isolate, "")));
   EXPECT_TRUE(
-      Converter<base::string16>::ToV8(isolate, base::ASCIIToUTF16("hello"))
+      Converter<std::u16string>::ToV8(isolate, base::ASCIIToUTF16("hello"))
           ->StrictEquals(StringToV8(isolate, "hello")));
 
-  base::string16 result;
+  std::u16string result;
 
   ASSERT_FALSE(
-      Converter<base::string16>::FromV8(isolate, v8::False(isolate), &result));
+      Converter<std::u16string>::FromV8(isolate, v8::False(isolate), &result));
   ASSERT_FALSE(
-      Converter<base::string16>::FromV8(isolate, v8::True(isolate), &result));
-  ASSERT_TRUE(Converter<base::string16>::FromV8(
+      Converter<std::u16string>::FromV8(isolate, v8::True(isolate), &result));
+  ASSERT_TRUE(Converter<std::u16string>::FromV8(
       isolate, v8::String::Empty(isolate), &result));
-  EXPECT_EQ(result, base::string16());
-  ASSERT_TRUE(Converter<base::string16>::FromV8(
+  EXPECT_EQ(result, std::u16string());
+  ASSERT_TRUE(Converter<std::u16string>::FromV8(
       isolate, StringToV8(isolate, "hello"), &result));
   EXPECT_EQ(result, base::ASCIIToUTF16("hello"));
 }
diff --git a/headless/lib/browser/headless_clipboard.cc b/headless/lib/browser/headless_clipboard.cc
index 62949fe..6c1c088 100644
--- a/headless/lib/browser/headless_clipboard.cc
+++ b/headless/lib/browser/headless_clipboard.cc
@@ -48,7 +48,7 @@
 void HeadlessClipboard::ReadAvailableTypes(
     ui::ClipboardBuffer buffer,
     const ui::DataTransferEndpoint* data_dst,
-    std::vector<base::string16>* types) const {
+    std::vector<std::u16string>* types) const {
   DCHECK(types);
   types->clear();
 
@@ -69,15 +69,15 @@
 
 // |data_dst| is not used. It's only passed to be consistent with other
 // platforms.
-std::vector<base::string16>
+std::vector<std::u16string>
 HeadlessClipboard::ReadAvailablePlatformSpecificFormatNames(
     ui::ClipboardBuffer buffer,
     const ui::DataTransferEndpoint* data_dst) const {
   const auto& data = GetStore(buffer).data;
-  std::vector<base::string16> types;
+  std::vector<std::u16string> types;
   types.reserve(data.size());
   for (const auto& it : data) {
-    base::string16 type = base::UTF8ToUTF16(it.first.GetName());
+    std::u16string type = base::UTF8ToUTF16(it.first.GetName());
     types.push_back(type);
   }
 
@@ -88,7 +88,7 @@
 // platforms.
 void HeadlessClipboard::ReadText(ui::ClipboardBuffer buffer,
                                  const ui::DataTransferEndpoint* data_dst,
-                                 base::string16* result) const {
+                                 std::u16string* result) const {
   std::string result8;
   ReadAsciiText(buffer, data_dst, &result8);
   *result = base::UTF8ToUTF16(result8);
@@ -110,7 +110,7 @@
 // platforms.
 void HeadlessClipboard::ReadHTML(ui::ClipboardBuffer buffer,
                                  const ui::DataTransferEndpoint* data_dst,
-                                 base::string16* markup,
+                                 std::u16string* markup,
                                  std::string* src_url,
                                  uint32_t* fragment_start,
                                  uint32_t* fragment_end) const {
@@ -129,7 +129,7 @@
 // platforms.
 void HeadlessClipboard::ReadSvg(ui::ClipboardBuffer buffer,
                                 const ui::DataTransferEndpoint* data_dst,
-                                base::string16* result) const {
+                                std::u16string* result) const {
   result->clear();
   const DataStore& store = GetStore(buffer);
   auto it = store.data.find(ui::ClipboardFormatType::GetSvgType());
@@ -160,9 +160,9 @@
 // |data_dst| is not used. It's only passed to be consistent with other
 // platforms.
 void HeadlessClipboard::ReadCustomData(ui::ClipboardBuffer clipboard_buffer,
-                                       const base::string16& type,
+                                       const std::u16string& type,
                                        const ui::DataTransferEndpoint* data_dst,
-                                       base::string16* result) const {}
+                                       std::u16string* result) const {}
 
 // |data_dst| is not used. It's only passed to be consistent with other
 // platforms.
@@ -175,7 +175,7 @@
 // |data_dst| is not used. It's only passed to be consistent with other
 // platforms.
 void HeadlessClipboard::ReadBookmark(const ui::DataTransferEndpoint* data_dst,
-                                     base::string16* title,
+                                     std::u16string* title,
                                      std::string* url) const {
   const DataStore& store = GetDefaultStore();
   auto it = store.data.find(ui::ClipboardFormatType::GetUrlType());
@@ -240,7 +240,7 @@
                                   size_t markup_len,
                                   const char* url_data,
                                   size_t url_len) {
-  base::string16 markup;
+  std::u16string markup;
   base::UTF8ToUTF16(markup_data, markup_len, &markup);
   GetDefaultStore().data[ui::ClipboardFormatType::GetHtmlType()] =
       base::UTF16ToUTF8(markup);
diff --git a/headless/lib/browser/headless_clipboard.h b/headless/lib/browser/headless_clipboard.h
index e616a68..dabf6f1 100644
--- a/headless/lib/browser/headless_clipboard.h
+++ b/headless/lib/browser/headless_clipboard.h
@@ -35,25 +35,25 @@
   void Clear(ui::ClipboardBuffer buffer) override;
   void ReadAvailableTypes(ui::ClipboardBuffer buffer,
                           const ui::DataTransferEndpoint* data_dst,
-                          std::vector<base::string16>* types) const override;
-  std::vector<base::string16> ReadAvailablePlatformSpecificFormatNames(
+                          std::vector<std::u16string>* types) const override;
+  std::vector<std::u16string> ReadAvailablePlatformSpecificFormatNames(
       ui::ClipboardBuffer buffer,
       const ui::DataTransferEndpoint* data_dst) const override;
   void ReadText(ui::ClipboardBuffer buffer,
                 const ui::DataTransferEndpoint* data_dst,
-                base::string16* result) const override;
+                std::u16string* result) const override;
   void ReadAsciiText(ui::ClipboardBuffer buffer,
                      const ui::DataTransferEndpoint* data_dst,
                      std::string* result) const override;
   void ReadHTML(ui::ClipboardBuffer buffer,
                 const ui::DataTransferEndpoint* data_dst,
-                base::string16* markup,
+                std::u16string* markup,
                 std::string* src_url,
                 uint32_t* fragment_start,
                 uint32_t* fragment_end) const override;
   void ReadSvg(ui::ClipboardBuffer buffer,
                const ui::DataTransferEndpoint* data_dst,
-               base::string16* result) const override;
+               std::u16string* result) const override;
   void ReadRTF(ui::ClipboardBuffer buffer,
                const ui::DataTransferEndpoint* data_dst,
                std::string* result) const override;
@@ -61,14 +61,14 @@
                  const ui::DataTransferEndpoint* data_dst,
                  ReadImageCallback callback) const override;
   void ReadCustomData(ui::ClipboardBuffer clipboard_buffer,
-                      const base::string16& type,
+                      const std::u16string& type,
                       const ui::DataTransferEndpoint* data_dst,
-                      base::string16* result) const override;
+                      std::u16string* result) const override;
   void ReadFilenames(ui::ClipboardBuffer buffer,
                      const ui::DataTransferEndpoint* data_dst,
                      std::vector<ui::FileInfo>* result) const override;
   void ReadBookmark(const ui::DataTransferEndpoint* data_dst,
-                    base::string16* title,
+                    std::u16string* title,
                     std::string* url) const override;
   void ReadData(const ui::ClipboardFormatType& format,
                 const ui::DataTransferEndpoint* data_dst,
diff --git a/headless/lib/headless_content_client.cc b/headless/lib/headless_content_client.cc
index a153aa1..a9d3b712 100644
--- a/headless/lib/headless_content_client.cc
+++ b/headless/lib/headless_content_client.cc
@@ -14,7 +14,7 @@
 
 HeadlessContentClient::~HeadlessContentClient() = default;
 
-base::string16 HeadlessContentClient::GetLocalizedString(int message_id) {
+std::u16string HeadlessContentClient::GetLocalizedString(int message_id) {
   return l10n_util::GetStringUTF16(message_id);
 }
 
diff --git a/headless/lib/headless_content_client.h b/headless/lib/headless_content_client.h
index 1e68e993..349cc6a8 100644
--- a/headless/lib/headless_content_client.h
+++ b/headless/lib/headless_content_client.h
@@ -22,7 +22,7 @@
   ~HeadlessContentClient() override;
 
   // content::ContentClient implementation:
-  base::string16 GetLocalizedString(int message_id) override;
+  std::u16string GetLocalizedString(int message_id) override;
   base::StringPiece GetDataResource(int resource_id,
                                     ui::ScaleFactor scale_factor) override;
   base::RefCountedMemory* GetDataResourceBytes(int resource_id) override;
diff --git a/headless/test/headless_browser_browsertest.cc b/headless/test/headless_browser_browsertest.cc
index cb6c695..6f7ebbc 100644
--- a/headless/test/headless_browser_browsertest.cc
+++ b/headless/test/headless_browser_browsertest.cc
@@ -265,7 +265,7 @@
   // Tests copy-pasting text with the clipboard in headless mode.
   ui::Clipboard* clipboard = ui::Clipboard::GetForCurrentThread();
   ASSERT_TRUE(clipboard);
-  base::string16 paste_text = base::ASCIIToUTF16("Clippy!");
+  std::u16string paste_text = base::ASCIIToUTF16("Clippy!");
   for (ui::ClipboardBuffer buffer :
        {ui::ClipboardBuffer::kCopyPaste, ui::ClipboardBuffer::kSelection,
         ui::ClipboardBuffer::kDrag}) {
@@ -275,7 +275,7 @@
       ui::ScopedClipboardWriter writer(buffer);
       writer.WriteText(paste_text);
     }
-    base::string16 copy_text;
+    std::u16string copy_text;
     clipboard->ReadText(buffer, /* data_dst = */ nullptr, &copy_text);
     EXPECT_EQ(paste_text, copy_text);
   }
diff --git a/ios/chrome/app/application_delegate/user_activity_handler.mm b/ios/chrome/app/application_delegate/user_activity_handler.mm
index 6f8e382..bf374b4 100644
--- a/ios/chrome/app/application_delegate/user_activity_handler.mm
+++ b/ios/chrome/app/application_delegate/user_activity_handler.mm
@@ -444,7 +444,7 @@
   DCHECK(!defaultURL->url().empty());
   DCHECK(
       defaultURL->url_ref().IsValid(templateURLService->search_terms_data()));
-  base::string16 queryString = base::SysNSStringToUTF16(searchQuery);
+  std::u16string queryString = base::SysNSStringToUTF16(searchQuery);
   TemplateURLRef::SearchTermsArgs search_args(queryString);
 
   GURL result(defaultURL->url_ref().ReplaceSearchTerms(
diff --git a/ios/chrome/browser/accessibility/window_accessibility_change_notifier_app_agent.mm b/ios/chrome/browser/accessibility/window_accessibility_change_notifier_app_agent.mm
index 05211476..c14127d5 100644
--- a/ios/chrome/browser/accessibility/window_accessibility_change_notifier_app_agent.mm
+++ b/ios/chrome/browser/accessibility/window_accessibility_change_notifier_app_agent.mm
@@ -122,10 +122,10 @@
   // are showing.
   if (previousWindowCount != self.visibleWindowCount &&
       self.visibleWindowCount > 0) {
-    base::string16 pattern =
+    std::u16string pattern =
         l10n_util::GetStringUTF16(IDS_IOS_WINDOW_COUNT_CHANGE);
     int numberOfWindows = static_cast<int>(self.visibleWindowCount);
-    base::string16 formattedMessage =
+    std::u16string formattedMessage =
         base::i18n::MessageFormatter::FormatWithNamedArgs(pattern, "count",
                                                           numberOfWindows);
 
diff --git a/ios/chrome/browser/autocomplete/autocomplete_provider_client_impl.h b/ios/chrome/browser/autocomplete/autocomplete_provider_client_impl.h
index 1703997..7ca7cbd 100644
--- a/ios/chrome/browser/autocomplete/autocomplete_provider_client_impl.h
+++ b/ios/chrome/browser/autocomplete/autocomplete_provider_client_impl.h
@@ -53,8 +53,8 @@
       const override;
   std::string GetAcceptLanguages() const override;
   std::string GetEmbedderRepresentationOfAboutScheme() const override;
-  std::vector<base::string16> GetBuiltinURLs() override;
-  std::vector<base::string16> GetBuiltinsToProvideAsUserTypes() override;
+  std::vector<std::u16string> GetBuiltinURLs() override;
+  std::vector<std::u16string> GetBuiltinsToProvideAsUserTypes() override;
   component_updater::ComponentUpdateService* GetComponentUpdateService()
       override;
   signin::IdentityManager* GetIdentityManager() const override;
@@ -64,7 +64,7 @@
   bool IsAuthenticated() const override;
   bool IsSyncActive() const override;
   void Classify(
-      const base::string16& text,
+      const std::u16string& text,
       bool prefer_keyword,
       bool allow_exact_keyword_match,
       metrics::OmniboxEventProto::PageClassification page_classification,
@@ -72,7 +72,7 @@
       GURL* alternate_nav_url) override;
   void DeleteMatchingURLsForKeywordFromHistory(
       history::KeywordID keyword_id,
-      const base::string16& term) override;
+      const std::u16string& term) override;
   void PrefetchImage(const GURL& url) override;
   bool IsTabOpenWithURL(const GURL& url,
                         const AutocompleteInput* input) override;
diff --git a/ios/chrome/browser/autocomplete/autocomplete_provider_client_impl.mm b/ios/chrome/browser/autocomplete/autocomplete_provider_client_impl.mm
index 9bbe664..c053a0f 100644
--- a/ios/chrome/browser/autocomplete/autocomplete_provider_client_impl.mm
+++ b/ios/chrome/browser/autocomplete/autocomplete_provider_client_impl.mm
@@ -162,19 +162,19 @@
   return kChromeUIScheme;
 }
 
-std::vector<base::string16> AutocompleteProviderClientImpl::GetBuiltinURLs() {
+std::vector<std::u16string> AutocompleteProviderClientImpl::GetBuiltinURLs() {
   std::vector<std::string> chrome_builtins(
       kChromeHostURLs, kChromeHostURLs + kNumberOfChromeHostURLs);
   std::sort(chrome_builtins.begin(), chrome_builtins.end());
 
-  std::vector<base::string16> builtins;
+  std::vector<std::u16string> builtins;
   for (auto& url : chrome_builtins) {
     builtins.push_back(base::ASCIIToUTF16(url));
   }
   return builtins;
 }
 
-std::vector<base::string16>
+std::vector<std::u16string>
 AutocompleteProviderClientImpl::GetBuiltinsToProvideAsUserTypes() {
   return {base::ASCIIToUTF16(kChromeUIChromeURLsURL),
           base::ASCIIToUTF16(kChromeUIVersionURL)};
@@ -217,7 +217,7 @@
 }
 
 void AutocompleteProviderClientImpl::Classify(
-    const base::string16& text,
+    const std::u16string& text,
     bool prefer_keyword,
     bool allow_exact_keyword_match,
     metrics::OmniboxEventProto::PageClassification page_classification,
@@ -230,7 +230,7 @@
 
 void AutocompleteProviderClientImpl::DeleteMatchingURLsForKeywordFromHistory(
     history::KeywordID keyword_id,
-    const base::string16& term) {
+    const std::u16string& term) {
   GetHistoryService()->DeleteMatchingURLsForKeyword(keyword_id, term);
 }
 
diff --git a/ios/chrome/browser/autofill/autofill_controller_unittest.mm b/ios/chrome/browser/autofill/autofill_controller_unittest.mm
index c786bf46..7270449 100644
--- a/ios/chrome/browser/autofill/autofill_controller_unittest.mm
+++ b/ios/chrome/browser/autofill/autofill_controller_unittest.mm
@@ -146,7 +146,7 @@
   FAIL() << "Missing field " << name;
 }
 
-AutofillEntry CreateAutofillEntry(const base::string16& value) {
+AutofillEntry CreateAutofillEntry(const std::u16string& value) {
   const base::Time kNow = AutofillClock::Now();
   return AutofillEntry(AutofillKey(base::ASCIIToUTF16("Name"), value), kNow,
                        kNow);
@@ -536,7 +536,7 @@
                       CreateAutofillEntry(base::ASCIIToUTF16("get")),
                       CreateAutofillEntry(base::ASCIIToUTF16("overwritten"))};
   web_data_service->GetFormValuesForElementName(
-      base::UTF8ToUTF16("greeting"), base::string16(), limit, &consumer);
+      base::UTF8ToUTF16("greeting"), std::u16string(), limit, &consumer);
   base::ThreadPoolInstance::Get()->FlushForTesting();
   WaitForBackgroundTasks();
   // No value should be returned before anything is loaded via form submission.
@@ -544,7 +544,7 @@
   ExecuteJavaScript(@"submit.click()");
   WaitForCondition(^bool {
     web_data_service->GetFormValuesForElementName(
-        base::UTF8ToUTF16("greeting"), base::string16(), limit, &consumer);
+        base::UTF8ToUTF16("greeting"), std::u16string(), limit, &consumer);
     return consumer.result_.size();
   });
   base::ThreadPoolInstance::Get()->FlushForTesting();
diff --git a/ios/chrome/browser/browser_state/browser_state_info_cache.cc b/ios/chrome/browser/browser_state/browser_state_info_cache.cc
index 7462f52..d633e4d 100644
--- a/ios/chrome/browser/browser_state/browser_state_info_cache.cc
+++ b/ios/chrome/browser/browser_state/browser_state_info_cache.cc
@@ -46,7 +46,7 @@
 void BrowserStateInfoCache::AddBrowserState(
     const base::FilePath& browser_state_path,
     const std::string& gaia_id,
-    const base::string16& user_name) {
+    const std::u16string& user_name) {
   std::string key = CacheKeyFromBrowserStatePath(browser_state_path);
   DictionaryPrefUpdate update(prefs_, prefs::kBrowserStateInfoCache);
   base::DictionaryValue* cache = update.Get();
@@ -105,9 +105,9 @@
   return std::string::npos;
 }
 
-base::string16 BrowserStateInfoCache::GetUserNameOfBrowserStateAtIndex(
+std::u16string BrowserStateInfoCache::GetUserNameOfBrowserStateAtIndex(
     size_t index) const {
-  base::string16 user_name;
+  std::u16string user_name;
   GetInfoForBrowserStateAtIndex(index)->GetString(kUserNameKey, &user_name);
   return user_name;
 }
@@ -143,7 +143,7 @@
 void BrowserStateInfoCache::SetAuthInfoOfBrowserStateAtIndex(
     size_t index,
     const std::string& gaia_id,
-    const base::string16& user_name) {
+    const std::u16string& user_name) {
   // If both gaia_id and username are unchanged, abort early.
   if (gaia_id == GetGAIAIdOfBrowserStateAtIndex(index) &&
       user_name == GetUserNameOfBrowserStateAtIndex(index)) {
diff --git a/ios/chrome/browser/browser_state/browser_state_info_cache.h b/ios/chrome/browser/browser_state/browser_state_info_cache.h
index 147e35a..751b928 100644
--- a/ios/chrome/browser/browser_state/browser_state_info_cache.h
+++ b/ios/chrome/browser/browser_state/browser_state_info_cache.h
@@ -34,7 +34,7 @@
 
   void AddBrowserState(const base::FilePath& browser_state_path,
                        const std::string& gaia_id,
-                       const base::string16& user_name);
+                       const std::u16string& user_name);
   void RemoveBrowserState(const base::FilePath& browser_state_path);
 
   // Returns the count of known browser states.
@@ -47,13 +47,13 @@
   // Gets and sets information related to browser states.
   size_t GetIndexOfBrowserStateWithPath(
       const base::FilePath& browser_state_path) const;
-  base::string16 GetUserNameOfBrowserStateAtIndex(size_t index) const;
+  std::u16string GetUserNameOfBrowserStateAtIndex(size_t index) const;
   base::FilePath GetPathOfBrowserStateAtIndex(size_t index) const;
   std::string GetGAIAIdOfBrowserStateAtIndex(size_t index) const;
   bool BrowserStateIsAuthenticatedAtIndex(size_t index) const;
   void SetAuthInfoOfBrowserStateAtIndex(size_t index,
                                         const std::string& gaia_id,
-                                        const base::string16& user_name);
+                                        const std::u16string& user_name);
   void SetBrowserStateIsAuthErrorAtIndex(size_t index, bool value);
   bool BrowserStateIsAuthErrorAtIndex(size_t index) const;
 
diff --git a/ios/chrome/browser/browser_state/chrome_browser_state_manager_impl.cc b/ios/chrome/browser/browser_state/chrome_browser_state_manager_impl.cc
index 7c809c4..a31a5e6 100644
--- a/ios/chrome/browser/browser_state/chrome_browser_state_manager_impl.cc
+++ b/ios/chrome/browser/browser_state/chrome_browser_state_manager_impl.cc
@@ -223,7 +223,7 @@
       IdentityManagerFactory::GetForBrowserState(browser_state);
   CoreAccountInfo account_info =
       identity_manager->GetPrimaryAccountInfo(signin::ConsentLevel::kSync);
-  base::string16 username = base::UTF8ToUTF16(account_info.email);
+  std::u16string username = base::UTF8ToUTF16(account_info.email);
 
   size_t browser_state_index =
       cache->GetIndexOfBrowserStateWithPath(browser_state->GetStatePath());
diff --git a/ios/chrome/browser/browser_state/test_chrome_browser_state_manager.cc b/ios/chrome/browser/browser_state/test_chrome_browser_state_manager.cc
index 0b87164..75564f0 100644
--- a/ios/chrome/browser/browser_state/test_chrome_browser_state_manager.cc
+++ b/ios/chrome/browser/browser_state/test_chrome_browser_state_manager.cc
@@ -27,7 +27,7 @@
   if (browser_state_) {
     browser_state_info_cache_.AddBrowserState(browser_state_->GetStatePath(),
                                               /*gaia_id=*/std::string(),
-                                              /*user_name=*/base::string16());
+                                              /*user_name=*/std::u16string());
   }
 }
 
diff --git a/ios/chrome/browser/crash_report/crash_restore_helper.mm b/ios/chrome/browser/crash_report/crash_restore_helper.mm
index 4024028..f0998d4 100644
--- a/ios/chrome/browser/crash_report/crash_restore_helper.mm
+++ b/ios/chrome/browser/crash_report/crash_restore_helper.mm
@@ -138,9 +138,9 @@
   InfoBarIdentifier GetIdentifier() const override;
 
   // ConfirmInfoBarDelegate:
-  base::string16 GetMessageText() const override;
+  std::u16string GetMessageText() const override;
   int GetButtons() const override;
-  base::string16 GetButtonLabel(InfoBarButton button) const override;
+  std::u16string GetButtonLabel(InfoBarButton button) const override;
   bool Accept() override;
   void InfoBarDismissed() override;
   bool ShouldExpire(const NavigationDetails& details) const override;
@@ -181,7 +181,7 @@
   return SESSION_CRASHED_INFOBAR_DELEGATE_IOS;
 }
 
-base::string16 SessionCrashedInfoBarDelegate::GetMessageText() const {
+std::u16string SessionCrashedInfoBarDelegate::GetMessageText() const {
   return l10n_util::GetStringUTF16(IDS_SESSION_CRASHED_VIEW_MESSAGE);
 }
 
@@ -189,7 +189,7 @@
   return BUTTON_OK;
 }
 
-base::string16 SessionCrashedInfoBarDelegate::GetButtonLabel(
+std::u16string SessionCrashedInfoBarDelegate::GetButtonLabel(
     InfoBarButton button) const {
   DCHECK_EQ(BUTTON_OK, button);
   return l10n_util::GetStringUTF16(IDS_SESSION_CRASHED_VIEW_RESTORE_BUTTON);
diff --git a/ios/chrome/browser/download/ar_quick_look_tab_helper.mm b/ios/chrome/browser/download/ar_quick_look_tab_helper.mm
index c990143..84d575b 100644
--- a/ios/chrome/browser/download/ar_quick_look_tab_helper.mm
+++ b/ios/chrome/browser/download/ar_quick_look_tab_helper.mm
@@ -169,7 +169,7 @@
 
   auto task_runner = base::ThreadPool::CreateSequencedTaskRunner(
       {base::MayBlock(), base::TaskPriority::USER_VISIBLE});
-  base::string16 file_name = download_task_->GetSuggestedFilename();
+  std::u16string file_name = download_task_->GetSuggestedFilename();
   base::FilePath path = destination_dir.Append(base::UTF16ToUTF8(file_name));
   auto writer = std::make_unique<net::URLFetcherFileWriter>(task_runner, path);
   writer->Initialize(base::BindRepeating(
diff --git a/ios/chrome/browser/download/usdz_mime_type.cc b/ios/chrome/browser/download/usdz_mime_type.cc
index 3fb1c77..8e6af2f 100644
--- a/ios/chrome/browser/download/usdz_mime_type.cc
+++ b/ios/chrome/browser/download/usdz_mime_type.cc
@@ -14,7 +14,7 @@
 char krealityFileExtension[] = ".reality";
 
 bool IsUsdzFileFormat(const std::string& mime_type,
-                      const base::string16& suggested_filename) {
+                      const std::u16string& suggested_filename) {
   base::FilePath suggested_path =
       base::FilePath(base::UTF16ToUTF8(suggested_filename));
   return mime_type == kUsdzMimeType || mime_type == kLegacyUsdzMimeType ||
diff --git a/ios/chrome/browser/download/usdz_mime_type.h b/ios/chrome/browser/download/usdz_mime_type.h
index 9862822..d533fe5 100644
--- a/ios/chrome/browser/download/usdz_mime_type.h
+++ b/ios/chrome/browser/download/usdz_mime_type.h
@@ -20,6 +20,6 @@
 // 3D model. The file extension is checked in addition to the content-type since
 // many static file hosting services do not allow setting the content-type.
 bool IsUsdzFileFormat(const std::string& mime_type,
-                      const base::string16& suggested_filename);
+                      const std::u16string& suggested_filename);
 
 #endif  // IOS_CHROME_BROWSER_DOWNLOAD_USDZ_MIME_TYPE_H_
diff --git a/ios/chrome/browser/history/history_tab_helper.mm b/ios/chrome/browser/history/history_tab_helper.mm
index 9e3266e..b75dd05 100644
--- a/ios/chrome/browser/history/history_tab_helper.mm
+++ b/ios/chrome/browser/history/history_tab_helper.mm
@@ -26,14 +26,14 @@
 
 namespace {
 
-base::Optional<base::string16> GetPageTitle(const web::NavigationItem& item) {
-  const base::string16& title = item.GetTitleForDisplay();
+base::Optional<std::u16string> GetPageTitle(const web::NavigationItem& item) {
+  const std::u16string& title = item.GetTitleForDisplay();
   if (title.empty() ||
       title == l10n_util::GetStringUTF16(IDS_DEFAULT_TAB_TITLE)) {
     return base::nullopt;
   }
 
-  return base::Optional<base::string16>(title);
+  return base::Optional<std::u16string>(title);
 }
 
 }  // namespace
@@ -45,7 +45,7 @@
 void HistoryTabHelper::UpdateHistoryPageTitle(const web::NavigationItem& item) {
   DCHECK(!delay_notification_);
 
-  const base::Optional<base::string16> title = GetPageTitle(item);
+  const base::Optional<std::u16string> title = GetPageTitle(item);
   // Don't update the history if current entry has no title.
   if (!title) {
     return;
diff --git a/ios/chrome/browser/history/history_tab_helper_unittest.mm b/ios/chrome/browser/history/history_tab_helper_unittest.mm
index 0e7a8b7..f60c3bd 100644
--- a/ios/chrome/browser/history/history_tab_helper_unittest.mm
+++ b/ios/chrome/browser/history/history_tab_helper_unittest.mm
@@ -178,7 +178,7 @@
   EXPECT_EQ(base::UTF8ToUTF16(test_title), latest_row_result_.title());
 
   // Set the empty title and make sure the title is updated.
-  item->SetTitle(base::string16());
+  item->SetTitle(std::u16string());
   helper->UpdateHistoryPageTitle(*item);
   QueryURL(test_url);
   EXPECT_NE(base::UTF8ToUTF16(test_title), latest_row_result_.title());
diff --git a/ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/save_card/save_card_infobar_banner_interaction_handler.h b/ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/save_card/save_card_infobar_banner_interaction_handler.h
index 4263326c..779f2a0 100644
--- a/ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/save_card/save_card_infobar_banner_interaction_handler.h
+++ b/ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/save_card/save_card_infobar_banner_interaction_handler.h
@@ -27,9 +27,9 @@
   // |expiration_date_month|, and |expiration_date_year|. This replaces
   // MainButtonTapped.
   virtual void SaveCredentials(InfoBarIOS* infobar,
-                               base::string16 cardholder_name,
-                               base::string16 expiration_date_month,
-                               base::string16 expiration_date_year);
+                               std::u16string cardholder_name,
+                               std::u16string expiration_date_month,
+                               std::u16string expiration_date_year);
 
   // Overrides InfobarBannerInteractionHandler implementation because a banner
   // dismissal should not call InfoBarDismissed();
diff --git a/ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/save_card/save_card_infobar_banner_interaction_handler.mm b/ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/save_card/save_card_infobar_banner_interaction_handler.mm
index 977b268..661c39e9 100644
--- a/ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/save_card/save_card_infobar_banner_interaction_handler.mm
+++ b/ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/save_card/save_card_infobar_banner_interaction_handler.mm
@@ -32,9 +32,9 @@
 
 void SaveCardInfobarBannerInteractionHandler::SaveCredentials(
     InfoBarIOS* infobar,
-    base::string16 cardholder_name,
-    base::string16 expiration_date_month,
-    base::string16 expiration_date_year) {
+    std::u16string cardholder_name,
+    std::u16string expiration_date_month,
+    std::u16string expiration_date_year) {
   infobar->set_accepted(GetInfobarDelegate(infobar)->UpdateAndAccept(
       cardholder_name, expiration_date_month, expiration_date_year));
 }
diff --git a/ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/save_card/save_card_infobar_banner_interaction_handler_unittest.mm b/ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/save_card/save_card_infobar_banner_interaction_handler_unittest.mm
index b145c435..ef67353b 100644
--- a/ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/save_card/save_card_infobar_banner_interaction_handler_unittest.mm
+++ b/ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/save_card/save_card_infobar_banner_interaction_handler_unittest.mm
@@ -45,9 +45,9 @@
 };
 
 TEST_F(SaveCardInfobarBannerInteractionHandlerTest, SaveCredentials) {
-  base::string16 cardholder_name = base::SysNSStringToUTF16(@"test name");
-  base::string16 expiration_date_month = base::SysNSStringToUTF16(@"06");
-  base::string16 expiration_date_year = base::SysNSStringToUTF16(@"2023");
+  std::u16string cardholder_name = base::SysNSStringToUTF16(@"test name");
+  std::u16string expiration_date_month = base::SysNSStringToUTF16(@"06");
+  std::u16string expiration_date_year = base::SysNSStringToUTF16(@"2023");
   EXPECT_CALL(mock_delegate(),
               UpdateAndAccept(cardholder_name, expiration_date_month,
                               expiration_date_year));
diff --git a/ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/save_card/save_card_infobar_modal_interaction_handler.h b/ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/save_card/save_card_infobar_modal_interaction_handler.h
index 42f4ab9cb..fb3ac8a 100644
--- a/ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/save_card/save_card_infobar_modal_interaction_handler.h
+++ b/ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/save_card/save_card_infobar_modal_interaction_handler.h
@@ -26,9 +26,9 @@
   // |expiration_date_month|, and |expiration_date_year|. Replaces
   // MainButtonTapped.
   virtual void UpdateCredentials(InfoBarIOS* infobar,
-                                 base::string16 cardholder_name,
-                                 base::string16 expiration_date_month,
-                                 base::string16 expiration_date_year);
+                                 std::u16string cardholder_name,
+                                 std::u16string expiration_date_month,
+                                 std::u16string expiration_date_year);
 
   // Instructs the handler to load |url| through the delegate.
   virtual void LoadURL(InfoBarIOS* infobar, GURL url);
diff --git a/ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/save_card/save_card_infobar_modal_interaction_handler.mm b/ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/save_card/save_card_infobar_modal_interaction_handler.mm
index 39a27d3..91f8f5e8 100644
--- a/ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/save_card/save_card_infobar_modal_interaction_handler.mm
+++ b/ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/save_card/save_card_infobar_modal_interaction_handler.mm
@@ -23,9 +23,9 @@
 
 void SaveCardInfobarModalInteractionHandler::UpdateCredentials(
     InfoBarIOS* infobar,
-    base::string16 cardholder_name,
-    base::string16 expiration_date_month,
-    base::string16 expiration_date_year) {
+    std::u16string cardholder_name,
+    std::u16string expiration_date_month,
+    std::u16string expiration_date_year) {
   infobar->set_accepted(GetInfoBarDelegate(infobar)->UpdateAndAccept(
       cardholder_name, expiration_date_month, expiration_date_year));
 }
diff --git a/ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/save_card/save_card_infobar_modal_interaction_handler_unittest.mm b/ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/save_card/save_card_infobar_modal_interaction_handler_unittest.mm
index 572112cb..a40c694 100644
--- a/ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/save_card/save_card_infobar_modal_interaction_handler_unittest.mm
+++ b/ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/save_card/save_card_infobar_modal_interaction_handler_unittest.mm
@@ -48,9 +48,9 @@
 };
 
 TEST_F(SaveCardInfobarModalInteractionHandlerTest, UpdateCredentials) {
-  base::string16 cardholder_name = base::SysNSStringToUTF16(@"test name");
-  base::string16 expiration_date_month = base::SysNSStringToUTF16(@"06");
-  base::string16 expiration_date_year = base::SysNSStringToUTF16(@"2023");
+  std::u16string cardholder_name = base::SysNSStringToUTF16(@"test name");
+  std::u16string expiration_date_month = base::SysNSStringToUTF16(@"06");
+  std::u16string expiration_date_year = base::SysNSStringToUTF16(@"2023");
   EXPECT_CALL(mock_delegate(),
               UpdateAndAccept(cardholder_name, expiration_date_month,
                               expiration_date_year));
diff --git a/ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/test/mock_autofill_save_card_infobar_delegate_mobile.h b/ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/test/mock_autofill_save_card_infobar_delegate_mobile.h
index 85e6783e..705a005a 100644
--- a/ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/test/mock_autofill_save_card_infobar_delegate_mobile.h
+++ b/ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/test/mock_autofill_save_card_infobar_delegate_mobile.h
@@ -35,9 +35,9 @@
   ~MockAutofillSaveCardInfoBarDelegateMobile() override;
 
   MOCK_METHOD3(UpdateAndAccept,
-               bool(base::string16 cardholder_name,
-                    base::string16 expiration_date_month,
-                    base::string16 expiration_date_year));
+               bool(std::u16string cardholder_name,
+                    std::u16string expiration_date_month,
+                    std::u16string expiration_date_year));
   MOCK_METHOD1(OnLegalMessageLinkClicked, void(GURL url));
   MOCK_METHOD0(InfoBarDismissed, void());
 };
diff --git a/ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/test/mock_save_card_banner_infobar_interaction_handler.h b/ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/test/mock_save_card_banner_infobar_interaction_handler.h
index 1b45368..f4deea4 100644
--- a/ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/test/mock_save_card_banner_infobar_interaction_handler.h
+++ b/ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/test/mock_save_card_banner_infobar_interaction_handler.h
@@ -22,9 +22,9 @@
 
   MOCK_METHOD4(SaveCredentials,
                void(InfoBarIOS* infobar,
-                    base::string16 cardholder_name,
-                    base::string16 expiration_date_month,
-                    base::string16 expiration_date_year));
+                    std::u16string cardholder_name,
+                    std::u16string expiration_date_month,
+                    std::u16string expiration_date_year));
 };
 
 #endif  // IOS_CHROME_BROWSER_INFOBARS_OVERLAYS_BROWSER_AGENT_INTERACTION_HANDLERS_TEST_MOCK_SAVE_CARD_BANNER_INFOBAR_INTERACTION_HANDLER_H_
diff --git a/ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/test/mock_save_card_modal_infobar_interaction_handler.h b/ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/test/mock_save_card_modal_infobar_interaction_handler.h
index 2709288..1256074 100644
--- a/ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/test/mock_save_card_modal_infobar_interaction_handler.h
+++ b/ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/test/mock_save_card_modal_infobar_interaction_handler.h
@@ -21,9 +21,9 @@
 
   MOCK_METHOD4(UpdateCredentials,
                void(InfoBarIOS* infobar,
-                    base::string16 cardholder_name,
-                    base::string16 expiration_date_month,
-                    base::string16 expiration_date_year));
+                    std::u16string cardholder_name,
+                    std::u16string expiration_date_month,
+                    std::u16string expiration_date_year));
   MOCK_METHOD2(LoadURL, void(InfoBarIOS* infobar, GURL url));
 };
 
diff --git a/ios/chrome/browser/infobars/overlays/infobar_overlay_request_inserter_unittest.mm b/ios/chrome/browser/infobars/overlays/infobar_overlay_request_inserter_unittest.mm
index 9acc194..a074db3 100644
--- a/ios/chrome/browser/infobars/overlays/infobar_overlay_request_inserter_unittest.mm
+++ b/ios/chrome/browser/infobars/overlays/infobar_overlay_request_inserter_unittest.mm
@@ -24,9 +24,9 @@
 
 namespace {
 // The two infobar message text used in tests.  Both support badges.
-base::string16 kFirstInfobarMessageText =
+std::u16string kFirstInfobarMessageText =
     base::ASCIIToUTF16("FakeInfobarDelegate1");
-base::string16 kSecondInfobarMessageText =
+std::u16string kSecondInfobarMessageText =
     base::ASCIIToUTF16("FakeInfobarDelegate2");
 }
 
@@ -61,7 +61,7 @@
   // Adds an InfoBar created with a test delegate to the manager.  Returns a
   // pointer to the added InfoBar.  If |message_text| matches an infobar already
   // added, then it the new one will be ignored.
-  InfoBar* CreateInfobar(base::string16 message_text) {
+  InfoBar* CreateInfobar(std::u16string message_text) {
     std::unique_ptr<InfoBar> added_infobar = std::make_unique<FakeInfobarIOS>(
         InfobarType::kInfobarTypeConfirm, message_text);
     InfoBar* infobar = added_infobar.get();
diff --git a/ios/chrome/browser/infobars/test/fake_infobar_delegate.cc b/ios/chrome/browser/infobars/test/fake_infobar_delegate.cc
index faa9d625..53eb969 100644
--- a/ios/chrome/browser/infobars/test/fake_infobar_delegate.cc
+++ b/ios/chrome/browser/infobars/test/fake_infobar_delegate.cc
@@ -9,23 +9,23 @@
 FakeInfobarDelegate::FakeInfobarDelegate()
     : FakeInfobarDelegate(
           infobars::InfoBarDelegate::InfoBarIdentifier::TEST_INFOBAR,
-          /*title_text=*/base::string16(),
+          /*title_text=*/std::u16string(),
           base::ASCIIToUTF16("FakeInfobarDelegate")) {}
 
 FakeInfobarDelegate::FakeInfobarDelegate(
     infobars::InfoBarDelegate::InfoBarIdentifier identifier)
     : FakeInfobarDelegate(identifier,
-                          /*title_text=*/base::string16(),
+                          /*title_text=*/std::u16string(),
                           base::ASCIIToUTF16("FakeInfobarDelegate")) {}
 
-FakeInfobarDelegate::FakeInfobarDelegate(base::string16 message_text)
+FakeInfobarDelegate::FakeInfobarDelegate(std::u16string message_text)
     : FakeInfobarDelegate(
           infobars::InfoBarDelegate::InfoBarIdentifier::TEST_INFOBAR,
-          /*title_text=*/base::string16(),
+          /*title_text=*/std::u16string(),
           std::move(message_text)) {}
 
-FakeInfobarDelegate::FakeInfobarDelegate(base::string16 title_text,
-                                         base::string16 message_text)
+FakeInfobarDelegate::FakeInfobarDelegate(std::u16string title_text,
+                                         std::u16string message_text)
     : FakeInfobarDelegate(
           infobars::InfoBarDelegate::InfoBarIdentifier::TEST_INFOBAR,
           std::move(title_text),
@@ -33,8 +33,8 @@
 
 FakeInfobarDelegate::FakeInfobarDelegate(
     infobars::InfoBarDelegate::InfoBarIdentifier identifier,
-    base::string16 title_text,
-    base::string16 message_text)
+    std::u16string title_text,
+    std::u16string message_text)
     : identifier_(identifier),
       title_text_(std::move(title_text)),
       message_text_(std::move(message_text)) {}
@@ -47,11 +47,11 @@
 }
 
 // Returns the title string to be displayed for the Infobar.
-base::string16 FakeInfobarDelegate::GetTitleText() const {
+std::u16string FakeInfobarDelegate::GetTitleText() const {
   return title_text_;
 }
 
 // Returns the message string to be displayed for the Infobar.
-base::string16 FakeInfobarDelegate::GetMessageText() const {
+std::u16string FakeInfobarDelegate::GetMessageText() const {
   return message_text_;
 }
diff --git a/ios/chrome/browser/infobars/test/fake_infobar_delegate.h b/ios/chrome/browser/infobars/test/fake_infobar_delegate.h
index 602a142..052fdfd 100644
--- a/ios/chrome/browser/infobars/test/fake_infobar_delegate.h
+++ b/ios/chrome/browser/infobars/test/fake_infobar_delegate.h
@@ -13,8 +13,8 @@
 class FakeInfobarDelegate : public ConfirmInfoBarDelegate {
  public:
   FakeInfobarDelegate();
-  FakeInfobarDelegate(base::string16 message_text);
-  FakeInfobarDelegate(base::string16 title_text, base::string16 message_text);
+  FakeInfobarDelegate(std::u16string message_text);
+  FakeInfobarDelegate(std::u16string title_text, std::u16string message_text);
   FakeInfobarDelegate(infobars::InfoBarDelegate::InfoBarIdentifier identifier);
   ~FakeInfobarDelegate() override;
 
@@ -22,18 +22,18 @@
   InfoBarIdentifier GetIdentifier() const override;
 
   // Returns the message string to be displayed for the Infobar.
-  base::string16 GetTitleText() const override;
+  std::u16string GetTitleText() const override;
 
   // Returns the message string to be displayed for the Infobar.
-  base::string16 GetMessageText() const override;
+  std::u16string GetMessageText() const override;
 
  private:
   FakeInfobarDelegate(infobars::InfoBarDelegate::InfoBarIdentifier identifier,
-                      base::string16 title_text,
-                      base::string16 message_text);
+                      std::u16string title_text,
+                      std::u16string message_text);
   infobars::InfoBarDelegate::InfoBarIdentifier identifier_;
-  base::string16 title_text_;
-  base::string16 message_text_;
+  std::u16string title_text_;
+  std::u16string message_text_;
 };
 
 #endif  // IOS_CHROME_BROWSER_INFOBARS_TEST_FAKE_INFOBAR_DELEGATE_H_
diff --git a/ios/chrome/browser/infobars/test/fake_infobar_ios.h b/ios/chrome/browser/infobars/test/fake_infobar_ios.h
index ae0ce1a..53e908a2 100644
--- a/ios/chrome/browser/infobars/test/fake_infobar_ios.h
+++ b/ios/chrome/browser/infobars/test/fake_infobar_ios.h
@@ -21,7 +21,7 @@
   // |message_text| as its message.
   FakeInfobarIOS(
       InfobarType type = InfobarType::kInfobarTypeConfirm,
-      base::string16 message_text = base::ASCIIToUTF16("FakeInfobar"));
+      std::u16string message_text = base::ASCIIToUTF16("FakeInfobar"));
   // Creates a FakeInfobarIOS with |fake_delegate|. Uses
   // InfobarType::kInfobarTypeConfirm as a default type value.}
   FakeInfobarIOS(std::unique_ptr<FakeInfobarDelegate> fake_delegate);
diff --git a/ios/chrome/browser/infobars/test/fake_infobar_ios.mm b/ios/chrome/browser/infobars/test/fake_infobar_ios.mm
index 87fee0b0..9984ee6 100644
--- a/ios/chrome/browser/infobars/test/fake_infobar_ios.mm
+++ b/ios/chrome/browser/infobars/test/fake_infobar_ios.mm
@@ -10,7 +10,7 @@
 #error "This file requires ARC support."
 #endif
 
-FakeInfobarIOS::FakeInfobarIOS(InfobarType type, base::string16 message_text)
+FakeInfobarIOS::FakeInfobarIOS(InfobarType type, std::u16string message_text)
     : InfoBarIOS(type, std::make_unique<FakeInfobarDelegate>(message_text)) {}
 
 FakeInfobarIOS::FakeInfobarIOS(
diff --git a/ios/chrome/browser/infobars/test/mock_infobar_delegate.h b/ios/chrome/browser/infobars/test/mock_infobar_delegate.h
index c136067..5f24a5e 100644
--- a/ios/chrome/browser/infobars/test/mock_infobar_delegate.h
+++ b/ios/chrome/browser/infobars/test/mock_infobar_delegate.h
@@ -15,7 +15,7 @@
   MockInfobarDelegate();
   ~MockInfobarDelegate() override;
 
-  base::string16 GetMessageText() const override { return base::string16(); }
+  std::u16string GetMessageText() const override { return std::u16string(); }
   InfoBarIdentifier GetIdentifier() const override { return TEST_INFOBAR; }
 
   MOCK_METHOD0(Accept, bool());
diff --git a/ios/chrome/browser/open_in/open_in_tab_helper.mm b/ios/chrome/browser/open_in/open_in_tab_helper.mm
index 10e8876..b101588 100644
--- a/ios/chrome/browser/open_in/open_in_tab_helper.mm
+++ b/ios/chrome/browser/open_in/open_in_tab_helper.mm
@@ -123,7 +123,7 @@
   web::NavigationItem* item =
       web_state_->GetNavigationManager()->GetLastCommittedItem();
   const GURL& last_committed_url = item ? item->GetURL() : GURL::EmptyGURL();
-  base::string16 file_name =
+  std::u16string file_name =
       net::GetSuggestedFilename(last_committed_url, content_disposition,
                                 "",  // referrer-charset
                                 "",  // suggested-name
diff --git a/ios/chrome/browser/overlays/public/infobar_banner/confirm_infobar_banner_overlay_request_config.h b/ios/chrome/browser/overlays/public/infobar_banner/confirm_infobar_banner_overlay_request_config.h
index 1ca7bc24..19fca42 100644
--- a/ios/chrome/browser/overlays/public/infobar_banner/confirm_infobar_banner_overlay_request_config.h
+++ b/ios/chrome/browser/overlays/public/infobar_banner/confirm_infobar_banner_overlay_request_config.h
@@ -26,13 +26,13 @@
   ~ConfirmBannerRequestConfig() override;
 
   // The title text.
-  base::string16 title_text() const { return title_text_; }
+  std::u16string title_text() const { return title_text_; }
 
   // The message text.
-  base::string16 message_text() const { return message_text_; }
+  std::u16string message_text() const { return message_text_; }
 
   // The button label text.
-  base::string16 button_label_text() const { return button_label_text_; }
+  std::u16string button_label_text() const { return button_label_text_; }
 
   // The infobar's icon image.
   gfx::Image icon_image() const { return icon_image_; }
@@ -53,9 +53,9 @@
   // The InfoBar causing this banner.
   infobars::InfoBar* infobar_ = nullptr;
   // Configuration data extracted from |infobar_|'s confirm delegate.
-  base::string16 title_text_;
-  base::string16 message_text_;
-  base::string16 button_label_text_;
+  std::u16string title_text_;
+  std::u16string message_text_;
+  std::u16string button_label_text_;
   gfx::Image icon_image_;
   // True if the icon image should apply a background tint.
   bool use_icon_background_tint_ = true;
diff --git a/ios/chrome/browser/overlays/public/infobar_banner/save_address_profile_infobar_banner_overlay_request_config.h b/ios/chrome/browser/overlays/public/infobar_banner/save_address_profile_infobar_banner_overlay_request_config.h
index 10db25c..d6fa397 100644
--- a/ios/chrome/browser/overlays/public/infobar_banner/save_address_profile_infobar_banner_overlay_request_config.h
+++ b/ios/chrome/browser/overlays/public/infobar_banner/save_address_profile_infobar_banner_overlay_request_config.h
@@ -25,13 +25,13 @@
   ~SaveAddressProfileBannerRequestConfig() override;
 
   // The message text.
-  base::string16 message_text() const { return message_text_; }
+  std::u16string message_text() const { return message_text_; }
 
   // The button label text.
-  base::string16 button_label_text() const { return button_label_text_; }
+  std::u16string button_label_text() const { return button_label_text_; }
 
   // The message sub text.
-  base::string16 message_sub_text() const { return message_sub_text_; }
+  std::u16string message_sub_text() const { return message_sub_text_; }
 
   // The name of the icon image.
   NSString* icon_image_name() const { return icon_image_name_; }
@@ -47,9 +47,9 @@
   infobars::InfoBar* infobar_ = nullptr;
   // Configuration data extracted from |infobar_|'s save address profile
   // delegate.
-  base::string16 message_text_;
-  base::string16 message_sub_text_;
-  base::string16 button_label_text_;
+  std::u16string message_text_;
+  std::u16string message_sub_text_;
+  std::u16string button_label_text_;
   NSString* icon_image_name_ = nil;
 };
 
diff --git a/ios/chrome/browser/overlays/public/infobar_banner/save_card_infobar_banner_overlay_request_config.h b/ios/chrome/browser/overlays/public/infobar_banner/save_card_infobar_banner_overlay_request_config.h
index d116cab..78542c4 100644
--- a/ios/chrome/browser/overlays/public/infobar_banner/save_card_infobar_banner_overlay_request_config.h
+++ b/ios/chrome/browser/overlays/public/infobar_banner/save_card_infobar_banner_overlay_request_config.h
@@ -25,24 +25,24 @@
   ~SaveCardBannerRequestConfig() override;
 
   // The message text.
-  base::string16 message_text() const { return message_text_; }
+  std::u16string message_text() const { return message_text_; }
 
   // The label for the card.
-  base::string16 card_label() const { return card_label_; }
+  std::u16string card_label() const { return card_label_; }
 
   // The card holder name of the card.
-  base::string16 cardholder_name() const { return cardholder_name_; }
+  std::u16string cardholder_name() const { return cardholder_name_; }
 
   // The expiration month of the card.
-  base::string16 expiration_date_month() const {
+  std::u16string expiration_date_month() const {
     return expiration_date_month_;
   }
 
   // The expiration year of the card.
-  base::string16 expiration_date_year() const { return expiration_date_year_; }
+  std::u16string expiration_date_year() const { return expiration_date_year_; }
 
   // The button label text.
-  base::string16 button_label_text() const { return button_label_text_; }
+  std::u16string button_label_text() const { return button_label_text_; }
 
   // The name of the icon image.
   NSString* icon_image_name() const { return icon_image_name_; }
@@ -60,12 +60,12 @@
   // The InfoBar causing this banner.
   infobars::InfoBar* infobar_ = nullptr;
   // Configuration data extracted from |infobar_|'s save card delegate.
-  base::string16 message_text_;
-  base::string16 card_label_;
-  base::string16 cardholder_name_;
-  base::string16 expiration_date_month_;
-  base::string16 expiration_date_year_;
-  base::string16 button_label_text_;
+  std::u16string message_text_;
+  std::u16string card_label_;
+  std::u16string cardholder_name_;
+  std::u16string expiration_date_month_;
+  std::u16string expiration_date_year_;
+  std::u16string button_label_text_;
   NSString* icon_image_name_ = nil;
   bool should_upload_credentials_ = false;
 };
diff --git a/ios/chrome/browser/overlays/public/infobar_banner/translate_infobar_banner_overlay_request_config.h b/ios/chrome/browser/overlays/public/infobar_banner/translate_infobar_banner_overlay_request_config.h
index 49312e3..616ad25 100644
--- a/ios/chrome/browser/overlays/public/infobar_banner/translate_infobar_banner_overlay_request_config.h
+++ b/ios/chrome/browser/overlays/public/infobar_banner/translate_infobar_banner_overlay_request_config.h
@@ -23,9 +23,9 @@
   ~TranslateBannerRequestConfig() override;
 
   // The source language name.
-  base::string16 source_language() const { return source_language_; }
+  std::u16string source_language() const { return source_language_; }
   // The target language name.
-  base::string16 target_language() const { return target_language_; }
+  std::u16string target_language() const { return target_language_; }
   // The current TranslateStep Translate is in.
   translate::TranslateStep translate_step() const { return translate_step_; }
   // The name of the banner's icon image.
@@ -41,8 +41,8 @@
   // The InfoBar causing this banner.
   infobars::InfoBar* infobar_ = nullptr;
   // Configuration data extracted from |infobar_|'s translate delegate.
-  base::string16 source_language_;
-  base::string16 target_language_;
+  std::u16string source_language_;
+  std::u16string target_language_;
   NSString* icon_image_name_ = nil;
   translate::TranslateStep translate_step_;
 };
diff --git a/ios/chrome/browser/overlays/public/infobar_modal/save_card_infobar_modal_overlay_request_config.h b/ios/chrome/browser/overlays/public/infobar_modal/save_card_infobar_modal_overlay_request_config.h
index db8c4055..e628930 100644
--- a/ios/chrome/browser/overlays/public/infobar_modal/save_card_infobar_modal_overlay_request_config.h
+++ b/ios/chrome/browser/overlays/public/infobar_modal/save_card_infobar_modal_overlay_request_config.h
@@ -26,18 +26,18 @@
   ~SaveCardModalRequestConfig() override;
 
   // The card holder name of the card.
-  base::string16 cardholder_name() const { return cardholder_name_; }
+  std::u16string cardholder_name() const { return cardholder_name_; }
 
   // The expiration month of the card.
-  base::string16 expiration_date_month() const {
+  std::u16string expiration_date_month() const {
     return expiration_date_month_;
   }
 
   // The expiration year of the card.
-  base::string16 expiration_date_year() const { return expiration_date_year_; }
+  std::u16string expiration_date_year() const { return expiration_date_year_; }
 
   // The last four digits of the card.
-  base::string16 card_last_four_digits() const {
+  std::u16string card_last_four_digits() const {
     return card_last_four_digits_;
   }
 
@@ -70,10 +70,10 @@
   // The InfoBar causing this modal.
   InfoBarIOS* infobar_ = nullptr;
   // Configuration data extracted from |infobar_|'s save card delegate.
-  base::string16 cardholder_name_;
-  base::string16 expiration_date_month_;
-  base::string16 expiration_date_year_;
-  base::string16 card_last_four_digits_;
+  std::u16string cardholder_name_;
+  std::u16string expiration_date_month_;
+  std::u16string expiration_date_year_;
+  std::u16string card_last_four_digits_;
   int issuer_icon_id_;
   NSArray<SaveCardMessageWithLinks*>* legal_message_lines_;
   bool current_card_saved_ = false;
diff --git a/ios/chrome/browser/overlays/public/infobar_modal/translate_infobar_modal_overlay_request_config.h b/ios/chrome/browser/overlays/public/infobar_modal/translate_infobar_modal_overlay_request_config.h
index b80321e..f0b24c6 100644
--- a/ios/chrome/browser/overlays/public/infobar_modal/translate_infobar_modal_overlay_request_config.h
+++ b/ios/chrome/browser/overlays/public/infobar_modal/translate_infobar_modal_overlay_request_config.h
@@ -23,11 +23,11 @@
   // The current TranslateStep Translate is in.
   translate::TranslateStep current_step() const { return current_step_; }
   // The source language name.
-  base::string16 source_language_name() const { return source_language_name_; }
+  std::u16string source_language_name() const { return source_language_name_; }
   // The target language name.
-  base::string16 target_language_name() const { return target_language_name_; }
+  std::u16string target_language_name() const { return target_language_name_; }
   // A list of names of all possible languages.
-  std::vector<base::string16> language_names() const { return language_names_; }
+  std::vector<std::u16string> language_names() const { return language_names_; }
   // Whether the current Translate pref is set to always translate for the
   // source language.
   bool is_always_translate_enabled() const {
@@ -53,9 +53,9 @@
   InfoBarIOS* infobar_ = nullptr;
   // Configuration data extracted from |infobar_|'s translate delegate.
   translate::TranslateStep current_step_;
-  base::string16 source_language_name_;
-  base::string16 target_language_name_;
-  std::vector<base::string16> language_names_;
+  std::u16string source_language_name_;
+  std::u16string target_language_name_;
+  std::vector<std::u16string> language_names_;
   bool is_always_translate_enabled_ = false;
   bool is_translatable_language_ = false;
   bool is_site_on_never_prompt_list_ = false;
diff --git a/ios/chrome/browser/passwords/ios_chrome_password_manager_client.h b/ios/chrome/browser/passwords/ios_chrome_password_manager_client.h
index e1071c6..ad874fd 100644
--- a/ios/chrome/browser/passwords/ios_chrome_password_manager_client.h
+++ b/ios/chrome/browser/passwords/ios_chrome_password_manager_client.h
@@ -115,7 +115,7 @@
       password_manager::CredentialLeakType leak_type,
       password_manager::CompromisedSitesCount saved_sites,
       const GURL& origin,
-      const base::string16& username) override;
+      const std::u16string& username) override;
   bool IsSavingAndFillingEnabled(const GURL& url) const override;
   bool IsFillingEnabled(const GURL& url) const override;
   bool IsCommittedMainFrameSecure() const override;
@@ -152,7 +152,7 @@
   // Shows the password protection UI. |warning_text| is the displayed text.
   // |callback| is invoked when the user dismisses the UI.
   void NotifyUserPasswordProtectionWarning(
-      const base::string16& warning_text,
+      const std::u16string& warning_text,
       base::OnceCallback<void(safe_browsing::WarningAction)> callback);
 
  private:
diff --git a/ios/chrome/browser/passwords/ios_chrome_password_manager_client.mm b/ios/chrome/browser/passwords/ios_chrome_password_manager_client.mm
index ef61918..608bb39 100644
--- a/ios/chrome/browser/passwords/ios_chrome_password_manager_client.mm
+++ b/ios/chrome/browser/passwords/ios_chrome_password_manager_client.mm
@@ -220,7 +220,7 @@
     password_manager::CredentialLeakType leak_type,
     password_manager::CompromisedSitesCount saved_sites,
     const GURL& origin,
-    const base::string16& username) {
+    const std::u16string& username) {
   [bridge_ showPasswordBreachForLeakType:leak_type URL:origin];
 }
 
@@ -346,7 +346,7 @@
 }
 
 void IOSChromePasswordManagerClient::NotifyUserPasswordProtectionWarning(
-    const base::string16& warning_text,
+    const std::u16string& warning_text,
     base::OnceCallback<void(safe_browsing::WarningAction)> callback) {
   __block auto block_callback = std::move(callback);
   [bridge_
diff --git a/ios/chrome/browser/passwords/ios_chrome_password_manager_driver.h b/ios/chrome/browser/passwords/ios_chrome_password_manager_driver.h
index 1ad8887..776cb86 100644
--- a/ios/chrome/browser/passwords/ios_chrome_password_manager_driver.h
+++ b/ios/chrome/browser/passwords/ios_chrome_password_manager_driver.h
@@ -38,11 +38,11 @@
       bool should_show_popup_without_passwords) override;
   void FormEligibleForGenerationFound(
       const autofill::PasswordFormGenerationData& form) override;
-  void GeneratedPasswordAccepted(const base::string16& password) override;
-  void FillSuggestion(const base::string16& username,
-                      const base::string16& password) override;
-  void PreviewSuggestion(const base::string16& username,
-                         const base::string16& password) override;
+  void GeneratedPasswordAccepted(const std::u16string& password) override;
+  void FillSuggestion(const std::u16string& username,
+                      const std::u16string& password) override;
+  void PreviewSuggestion(const std::u16string& username,
+                         const std::u16string& password) override;
   void ClearPreviewedForm() override;
   password_manager::PasswordGenerationFrameHelper* GetPasswordGenerationHelper()
       override;
diff --git a/ios/chrome/browser/passwords/ios_chrome_password_manager_driver.mm b/ios/chrome/browser/passwords/ios_chrome_password_manager_driver.mm
index 5a3a90f..5ff2159 100644
--- a/ios/chrome/browser/passwords/ios_chrome_password_manager_driver.mm
+++ b/ios/chrome/browser/passwords/ios_chrome_password_manager_driver.mm
@@ -50,19 +50,19 @@
 }
 
 void IOSChromePasswordManagerDriver::GeneratedPasswordAccepted(
-    const base::string16& password) {
+    const std::u16string& password) {
   NOTIMPLEMENTED();
 }
 
 void IOSChromePasswordManagerDriver::FillSuggestion(
-    const base::string16& username,
-    const base::string16& password) {
+    const std::u16string& username,
+    const std::u16string& password) {
   NOTIMPLEMENTED();
 }
 
 void IOSChromePasswordManagerDriver::PreviewSuggestion(
-    const base::string16& username,
-    const base::string16& password) {
+    const std::u16string& username,
+    const std::u16string& password) {
   NOTIMPLEMENTED();
 }
 
diff --git a/ios/chrome/browser/passwords/ios_chrome_save_password_infobar_delegate.h b/ios/chrome/browser/passwords/ios_chrome_save_password_infobar_delegate.h
index 611bfaf1..ed7760e 100644
--- a/ios/chrome/browser/passwords/ios_chrome_save_password_infobar_delegate.h
+++ b/ios/chrome/browser/passwords/ios_chrome_save_password_infobar_delegate.h
@@ -42,8 +42,8 @@
   bool ShouldExpire(const NavigationDetails& details) const override;
 
   // ConfirmInfoBarDelegate implementation.
-  base::string16 GetMessageText() const override;
-  base::string16 GetButtonLabel(InfoBarButton button) const override;
+  std::u16string GetMessageText() const override;
+  std::u16string GetButtonLabel(InfoBarButton button) const override;
   bool Accept() override;
   bool Cancel() override;
   void InfoBarDismissed() override;
diff --git a/ios/chrome/browser/passwords/ios_chrome_save_password_infobar_delegate.mm b/ios/chrome/browser/passwords/ios_chrome_save_password_infobar_delegate.mm
index 87b102e..a7761db 100644
--- a/ios/chrome/browser/passwords/ios_chrome_save_password_infobar_delegate.mm
+++ b/ios/chrome/browser/passwords/ios_chrome_save_password_infobar_delegate.mm
@@ -151,7 +151,7 @@
   return SAVE_PASSWORD_INFOBAR_DELEGATE_MOBILE;
 }
 
-base::string16 IOSChromeSavePasswordInfoBarDelegate::GetMessageText() const {
+std::u16string IOSChromeSavePasswordInfoBarDelegate::GetMessageText() const {
   if (IsPasswordUpdate()) {
     return l10n_util::GetStringUTF16(IDS_IOS_PASSWORD_MANAGER_UPDATE_PASSWORD);
   }
@@ -164,23 +164,23 @@
   return l10n_util::GetNSString(IDS_IOS_PASSWORD_MANAGER_SAVE_PASSWORD_TITLE);
 }
 
-base::string16 IOSChromeSavePasswordInfoBarDelegate::GetButtonLabel(
+std::u16string IOSChromeSavePasswordInfoBarDelegate::GetButtonLabel(
     InfoBarButton button) const {
-    switch (button) {
-      case BUTTON_OK:
-        return l10n_util::GetStringUTF16(
-            IsPasswordUpdate() ? IDS_IOS_PASSWORD_MANAGER_UPDATE_BUTTON
-                               : IDS_IOS_PASSWORD_MANAGER_SAVE_BUTTON);
-      case BUTTON_CANCEL: {
-        return IsPasswordUpdate()
-                   ? base::string16()
-                   : l10n_util::GetStringUTF16(
-                         IDS_IOS_PASSWORD_MANAGER_MODAL_BLOCK_BUTTON);
-      }
-      case BUTTON_NONE:
-        NOTREACHED();
-        return base::string16();
+  switch (button) {
+    case BUTTON_OK:
+      return l10n_util::GetStringUTF16(
+          IsPasswordUpdate() ? IDS_IOS_PASSWORD_MANAGER_UPDATE_BUTTON
+                             : IDS_IOS_PASSWORD_MANAGER_SAVE_BUTTON);
+    case BUTTON_CANCEL: {
+      return IsPasswordUpdate()
+                 ? std::u16string()
+                 : l10n_util::GetStringUTF16(
+                       IDS_IOS_PASSWORD_MANAGER_MODAL_BLOCK_BUTTON);
     }
+    case BUTTON_NONE:
+      NOTREACHED();
+      return std::u16string();
+  }
 }
 
 bool IOSChromeSavePasswordInfoBarDelegate::Accept() {
@@ -214,8 +214,8 @@
 void IOSChromeSavePasswordInfoBarDelegate::UpdateCredentials(
     NSString* username,
     NSString* password) {
-  const base::string16 username_string = base::SysNSStringToUTF16(username);
-  const base::string16 password_string = base::SysNSStringToUTF16(password);
+  const std::u16string username_string = base::SysNSStringToUTF16(username);
+  const std::u16string password_string = base::SysNSStringToUTF16(password);
   UpdatePasswordFormUsernameAndPassword(username_string, password_string,
                                         form_to_save());
 }
diff --git a/ios/chrome/browser/rlz/rlz_tracker_delegate_impl.cc b/ios/chrome/browser/rlz/rlz_tracker_delegate_impl.cc
index 82e438f..e4cc64e 100644
--- a/ios/chrome/browser/rlz/rlz_tracker_delegate_impl.cc
+++ b/ios/chrome/browser/rlz/rlz_tracker_delegate_impl.cc
@@ -83,13 +83,13 @@
   return false;
 }
 
-bool RLZTrackerDelegateImpl::GetLanguage(base::string16* language) {
+bool RLZTrackerDelegateImpl::GetLanguage(std::u16string* language) {
   // TODO(thakis): Implement.
   NOTIMPLEMENTED();
   return false;
 }
 
-bool RLZTrackerDelegateImpl::GetReferral(base::string16* referral) {
+bool RLZTrackerDelegateImpl::GetReferral(std::u16string* referral) {
   // The referral program is defunct and not used. No need to implement this
   // function on non-Win platforms.
   return true;
diff --git a/ios/chrome/browser/rlz/rlz_tracker_delegate_impl.h b/ios/chrome/browser/rlz/rlz_tracker_delegate_impl.h
index e7c17489..459547a 100644
--- a/ios/chrome/browser/rlz/rlz_tracker_delegate_impl.h
+++ b/ios/chrome/browser/rlz/rlz_tracker_delegate_impl.h
@@ -35,8 +35,8 @@
   bool IsBrandOrganic(const std::string& brand) override;
   bool GetReactivationBrand(std::string* brand) override;
   bool ShouldEnableZeroDelayForTesting() override;
-  bool GetLanguage(base::string16* language) override;
-  bool GetReferral(base::string16* referral) override;
+  bool GetLanguage(std::u16string* language) override;
+  bool GetReferral(std::u16string* referral) override;
   bool ClearReferral() override;
   void SetOmniboxSearchCallback(base::OnceClosure callback) override;
   void SetHomepageSearchCallback(base::OnceClosure callback) override;
diff --git a/ios/chrome/browser/safe_browsing/chrome_password_protection_service.h b/ios/chrome/browser/safe_browsing/chrome_password_protection_service.h
index a5c7163..5081be9 100644
--- a/ios/chrome/browser/safe_browsing/chrome_password_protection_service.h
+++ b/ios/chrome/browser/safe_browsing/chrome_password_protection_service.h
@@ -171,26 +171,26 @@
   // dialog. |placeholder_offsets| are the start points/indices of the
   // placeholders that are passed into the resource string. It is only set for
   // saved passwords.
-  base::string16 GetWarningDetailText(
+  std::u16string GetWarningDetailText(
       safe_browsing::ReusedPasswordAccountType password_type,
       std::vector<size_t>* placeholder_offsets) const;
 
   // Gets the warning text for saved password reuse warnings.
   // |placeholder_offsets| are the start points/indices of the placeholders that
   // are passed into the resource string.
-  base::string16 GetWarningDetailTextForSavedPasswords(
+  std::u16string GetWarningDetailTextForSavedPasswords(
       std::vector<size_t>* placeholder_offsets) const;
 
   // Gets the warning text of the saved password reuse warnings that tells the
   // user to check their saved passwords. |placeholder_offsets| are the start
   // points/indices of the placeholders that are passed into the resource
   // string.
-  base::string16 GetWarningDetailTextToCheckSavedPasswords(
+  std::u16string GetWarningDetailTextToCheckSavedPasswords(
       std::vector<size_t>* placeholder_offsets) const;
 
   // Get placeholders for the warning detail text for saved password reuse
   // warnings.
-  std::vector<base::string16> GetPlaceholdersForSavedPasswordWarningText()
+  std::vector<std::u16string> GetPlaceholdersForSavedPasswordWarningText()
       const;
 
   // Creates, starts, and tracks a new request.
diff --git a/ios/chrome/browser/safe_browsing/chrome_password_protection_service.mm b/ios/chrome/browser/safe_browsing/chrome_password_protection_service.mm
index fe737d7..32d15d6 100644
--- a/ios/chrome/browser/safe_browsing/chrome_password_protection_service.mm
+++ b/ios/chrome/browser/safe_browsing/chrome_password_protection_service.mm
@@ -158,7 +158,7 @@
         GetPasswordProtectionReusedPasswordAccountType(request->password_type(),
                                                        request->username());
     std::vector<size_t> placeholder_offsets;
-    const base::string16 warning_text = GetWarningDetailText(
+    const std::u16string warning_text = GetWarningDetailText(
         reused_password_account_type, &placeholder_offsets);
     // Partial bind WebState and password_type.
     auto completion_callback = base::BindOnce(
@@ -551,7 +551,7 @@
   user_event_service->RecordUserEvent(std::move(specifics));
 }
 
-base::string16 ChromePasswordProtectionService::GetWarningDetailText(
+std::u16string ChromePasswordProtectionService::GetWarningDetailText(
     ReusedPasswordAccountType password_type,
     std::vector<size_t>* placeholder_offsets) const {
   DCHECK(password_type.account_type() ==
@@ -560,10 +560,10 @@
       safe_browsing::kPasswordProtectionForSavedPasswords));
   return GetWarningDetailTextForSavedPasswords(placeholder_offsets);
 }
-base::string16
+std::u16string
 ChromePasswordProtectionService::GetWarningDetailTextForSavedPasswords(
     std::vector<size_t>* placeholder_offsets) const {
-  std::vector<base::string16> placeholders =
+  std::vector<std::u16string> placeholders =
       GetPlaceholdersForSavedPasswordWarningText();
   // The default text is a complete sentence without placeholders.
   return placeholders.empty()
@@ -572,10 +572,10 @@
              : GetWarningDetailTextToCheckSavedPasswords(placeholder_offsets);
 }
 
-base::string16
+std::u16string
 ChromePasswordProtectionService::GetWarningDetailTextToCheckSavedPasswords(
     std::vector<size_t>* placeholder_offsets) const {
-  std::vector<base::string16> placeholders =
+  std::vector<std::u16string> placeholders =
       GetPlaceholdersForSavedPasswordWarningText();
   if (placeholders.size() == 1) {
     return l10n_util::GetStringFUTF16(
@@ -592,7 +592,7 @@
   }
 }
 
-std::vector<base::string16>
+std::vector<std::u16string>
 ChromePasswordProtectionService::GetPlaceholdersForSavedPasswordWarningText()
     const {
   const std::vector<std::string>& matching_domains =
@@ -602,7 +602,7 @@
   // Show most commonly spoofed domains first.
   // This looks through the top priority spoofed domains and then checks to see
   // if it's in the matching domains.
-  std::vector<base::string16> placeholders;
+  std::vector<std::u16string> placeholders;
   for (auto priority_domain_iter = spoofed_domains.begin();
        priority_domain_iter != spoofed_domains.end(); ++priority_domain_iter) {
     std::string matching_domain;
diff --git a/ios/chrome/browser/safe_browsing/chrome_password_protection_service_unittest.mm b/ios/chrome/browser/safe_browsing/chrome_password_protection_service_unittest.mm
index f3644719..2d6ac4c 100644
--- a/ios/chrome/browser/safe_browsing/chrome_password_protection_service_unittest.mm
+++ b/ios/chrome/browser/safe_browsing/chrome_password_protection_service_unittest.mm
@@ -440,7 +440,7 @@
 }
 
 TEST_F(ChromePasswordProtectionServiceTest, VerifyGetWarningDetailTextSaved) {
-  base::string16 warning_text =
+  std::u16string warning_text =
       l10n_util::GetStringUTF16(IDS_PAGE_INFO_CHANGE_PASSWORD_DETAILS_SAVED);
   ReusedPasswordAccountType reused_password_type;
   reused_password_type.set_account_type(
@@ -457,7 +457,7 @@
       ReusedPasswordAccountType::SAVED_PASSWORD);
   std::vector<std::string> domains{"www.example.com"};
   service_->set_saved_passwords_matching_domains(domains);
-  base::string16 warning_text = l10n_util::GetStringFUTF16(
+  std::u16string warning_text = l10n_util::GetStringFUTF16(
       IDS_PAGE_INFO_CHECK_PASSWORD_DETAILS_SAVED_1_DOMAIN,
       base::UTF8ToUTF16(domains[0]));
   std::vector<size_t> placeholder_offsets;
@@ -502,7 +502,7 @@
   domains.push_back("amazon.com");
   service_->set_saved_passwords_matching_domains(domains);
   // Default domains should be prioritzed over other domains.
-  std::vector<base::string16> expected_placeholders{
+  std::vector<std::u16string> expected_placeholders{
       base::UTF8ToUTF16("amazon.com"), base::UTF8ToUTF16(domains[0]),
       base::UTF8ToUTF16(domains[1])};
   EXPECT_EQ(expected_placeholders,
diff --git a/ios/chrome/browser/search_engines/search_engine_tab_helper.mm b/ios/chrome/browser/search_engines/search_engine_tab_helper.mm
index d80a52c..7482df6 100644
--- a/ios/chrome/browser/search_engines/search_engine_tab_helper.mm
+++ b/ios/chrome/browser/search_engines/search_engine_tab_helper.mm
@@ -40,12 +40,12 @@
 
 // Generates a keyword from |item|. This code is based on:
 // https://cs.chromium.org/chromium/src/chrome/browser/ui/search_engines/search_engine_tab_helper.cc
-base::string16 GenerateKeywordFromNavigationItem(
+std::u16string GenerateKeywordFromNavigationItem(
     const web::NavigationItem* item) {
   // Don't autogenerate keywords for pages that are the result of form
   // submissions.
   if (IsFormSubmit(item))
-    return base::string16();
+    return std::u16string();
 
   // The code from Desktop will try NavigationEntry::GetUserTypedURL() first if
   // available since that represents what the user typed to get here, and fall
@@ -54,7 +54,7 @@
   // it.
   GURL url = item->GetURL();
   if (!url.is_valid()) {
-    return base::string16();
+    return std::u16string();
   }
 
   // Don't autogenerate keywords for referrers that
@@ -65,7 +65,7 @@
   // elements and update AutocompletePopup to look for keywords using the path.
   // See http://b/issue?id=863583.
   if (!url.SchemeIsHTTPOrHTTPS() || url.path().length() > 1) {
-    return base::string16();
+    return std::u16string();
   }
 
   return TemplateURL::GenerateKeyword(url);
@@ -190,7 +190,7 @@
 
   // Autogenerate a keyword for the autodetected case; in the other cases we'll
   // generate a keyword later after fetching the OSDD.
-  base::string16 keyword = GenerateKeywordFromNavigationItem(item);
+  std::u16string keyword = GenerateKeywordFromNavigationItem(item);
   if (keyword.empty())
     return;
 
@@ -232,7 +232,7 @@
   const web::NavigationItem* previous_item =
       manager->GetItemAtIndex(last_index - 1);
 
-  base::string16 keyword(GenerateKeywordFromNavigationItem(previous_item));
+  std::u16string keyword(GenerateKeywordFromNavigationItem(previous_item));
   if (keyword.empty())
     return;
 
diff --git a/ios/chrome/browser/search_engines/template_url_service_client_impl.cc b/ios/chrome/browser/search_engines/template_url_service_client_impl.cc
index 5721d6da..5fb7c0b 100644
--- a/ios/chrome/browser/search_engines/template_url_service_client_impl.cc
+++ b/ios/chrome/browser/search_engines/template_url_service_client_impl.cc
@@ -55,7 +55,7 @@
 void TemplateURLServiceClientImpl::SetKeywordSearchTermsForURL(
     const GURL& url,
     TemplateURLID id,
-    const base::string16& term) {
+    const std::u16string& term) {
   if (history_service_)
     history_service_->SetKeywordSearchTermsForURL(url, id, term);
 }
diff --git a/ios/chrome/browser/search_engines/template_url_service_client_impl.h b/ios/chrome/browser/search_engines/template_url_service_client_impl.h
index dea27d5..17389f5 100644
--- a/ios/chrome/browser/search_engines/template_url_service_client_impl.h
+++ b/ios/chrome/browser/search_engines/template_url_service_client_impl.h
@@ -31,7 +31,7 @@
   void DeleteAllSearchTermsForKeyword(history::KeywordID keyword_id) override;
   void SetKeywordSearchTermsForURL(const GURL& url,
                                    TemplateURLID id,
-                                   const base::string16& term) override;
+                                   const std::u16string& term) override;
   void AddKeywordGeneratedVisit(const GURL& url) override;
 
   // history::HistoryServiceObserver:
diff --git a/ios/chrome/browser/search_engines/ui_thread_search_terms_data.cc b/ios/chrome/browser/search_engines/ui_thread_search_terms_data.cc
index b9d27698..e7e243a 100644
--- a/ios/chrome/browser/search_engines/ui_thread_search_terms_data.cc
+++ b/ios/chrome/browser/search_engines/ui_thread_search_terms_data.cc
@@ -47,11 +47,11 @@
   return GetApplicationContext()->GetApplicationLocale();
 }
 
-base::string16 UIThreadSearchTermsData::GetRlzParameterValue(
+std::u16string UIThreadSearchTermsData::GetRlzParameterValue(
     bool from_app_list) const {
   DCHECK(!from_app_list);
   DCHECK(thread_checker_.CalledOnValidThread());
-  base::string16 rlz_string;
+  std::u16string rlz_string;
 #if BUILDFLAG(ENABLE_RLZ)
   // For organic brandcode do not use rlz at all.
   std::string brand;
diff --git a/ios/chrome/browser/search_engines/ui_thread_search_terms_data.h b/ios/chrome/browser/search_engines/ui_thread_search_terms_data.h
index d637738..785f15d 100644
--- a/ios/chrome/browser/search_engines/ui_thread_search_terms_data.h
+++ b/ios/chrome/browser/search_engines/ui_thread_search_terms_data.h
@@ -20,7 +20,7 @@
   // SearchTermsData implementation.
   std::string GoogleBaseURLValue() const override;
   std::string GetApplicationLocale() const override;
-  base::string16 GetRlzParameterValue(bool from_app_list) const override;
+  std::u16string GetRlzParameterValue(bool from_app_list) const override;
   std::string GetSearchClient() const override;
   std::string GetSuggestClient(bool from_ntp) const override;
   std::string GetSuggestRequestIdentifier() const override;
diff --git a/ios/chrome/browser/send_tab_to_self/ios_send_tab_to_self_infobar_delegate.h b/ios/chrome/browser/send_tab_to_self/ios_send_tab_to_self_infobar_delegate.h
index d1c99f6..b3ac4f4 100644
--- a/ios/chrome/browser/send_tab_to_self/ios_send_tab_to_self_infobar_delegate.h
+++ b/ios/chrome/browser/send_tab_to_self/ios_send_tab_to_self_infobar_delegate.h
@@ -33,10 +33,10 @@
   // ConfirmInfoBarDelegate:
   InfoBarDelegate::InfoBarIdentifier GetIdentifier() const override;
   int GetButtons() const override;
-  base::string16 GetButtonLabel(InfoBarButton button) const override;
+  std::u16string GetButtonLabel(InfoBarButton button) const override;
   int GetIconId() const override;
   void InfoBarDismissed() override;
-  base::string16 GetMessageText() const override;
+  std::u16string GetMessageText() const override;
   bool Accept() override;
   bool Cancel() override;
 
diff --git a/ios/chrome/browser/send_tab_to_self/ios_send_tab_to_self_infobar_delegate.mm b/ios/chrome/browser/send_tab_to_self/ios_send_tab_to_self_infobar_delegate.mm
index 89cb0f7..ea5d2d3 100644
--- a/ios/chrome/browser/send_tab_to_self/ios_send_tab_to_self_infobar_delegate.mm
+++ b/ios/chrome/browser/send_tab_to_self/ios_send_tab_to_self_infobar_delegate.mm
@@ -85,7 +85,7 @@
   return BUTTON_OK;
 }
 
-base::string16 IOSSendTabToSelfInfoBarDelegate::GetButtonLabel(
+std::u16string IOSSendTabToSelfInfoBarDelegate::GetButtonLabel(
     InfoBarButton button) const {
   return l10n_util::GetStringUTF16(IDS_SEND_TAB_TO_SELF_INFOBAR_MESSAGE_URL);
 }
@@ -98,7 +98,7 @@
   Cancel();
 }
 
-base::string16 IOSSendTabToSelfInfoBarDelegate::GetMessageText() const {
+std::u16string IOSSendTabToSelfInfoBarDelegate::GetMessageText() const {
   return l10n_util::GetStringUTF16(IDS_SEND_TAB_TO_SELF_INFOBAR_MESSAGE);
 }
 
diff --git a/ios/chrome/browser/signin/signin_browser_state_info_updater.mm b/ios/chrome/browser/signin/signin_browser_state_info_updater.mm
index ca7f0073..42091cc 100644
--- a/ios/chrome/browser/signin/signin_browser_state_info_updater.mm
+++ b/ios/chrome/browser/signin/signin_browser_state_info_updater.mm
@@ -62,7 +62,7 @@
         index, account_info.gaia, base::UTF8ToUTF16(account_info.email));
   } else {
     cache->SetAuthInfoOfBrowserStateAtIndex(index, /*gaia_id=*/std::string(),
-                                            /*user_name=*/base::string16());
+                                            /*user_name=*/std::u16string());
   }
 }
 
diff --git a/ios/chrome/browser/signin/signin_browser_state_info_updater_unittest.mm b/ios/chrome/browser/signin/signin_browser_state_info_updater_unittest.mm
index f2ebdf6..11596b8 100644
--- a/ios/chrome/browser/signin/signin_browser_state_info_updater_unittest.mm
+++ b/ios/chrome/browser/signin/signin_browser_state_info_updater_unittest.mm
@@ -64,7 +64,7 @@
             browser_state_path()) {
     browser_state_info()->AddBrowserState(browser_state_path(),
                                           /*gaia_id=*/std::string(),
-                                          /*username=*/base::string16());
+                                          /*username=*/std::u16string());
   }
 
   signin::IdentityTestEnvironment* identity_test_env() {
diff --git a/ios/chrome/browser/ssl/ios_captive_portal_blocking_page.mm b/ios/chrome/browser/ssl/ios_captive_portal_blocking_page.mm
index 0aa7597..6962408 100644
--- a/ios/chrome/browser/ssl/ios_captive_portal_blocking_page.mm
+++ b/ios/chrome/browser/ssl/ios_captive_portal_blocking_page.mm
@@ -50,12 +50,12 @@
       "primaryButtonText",
       l10n_util::GetStringUTF16(IDS_CAPTIVE_PORTAL_BUTTON_OPEN_LOGIN_PAGE));
 
-  base::string16 tab_title =
+  std::u16string tab_title =
       l10n_util::GetStringUTF16(IDS_CAPTIVE_PORTAL_HEADING_WIFI);
   load_time_data->SetString("tabTitle", tab_title);
   load_time_data->SetString("heading", tab_title);
 
-  base::string16 paragraph;
+  std::u16string paragraph;
   if (landing_url_.spec() ==
       captive_portal::CaptivePortalDetector::kDefaultURL) {
     // Captive portal may intercept requests without HTTP redirects, in which
@@ -66,7 +66,7 @@
   } else {
     // Portal redirection was done with HTTP redirects, so show the login URL.
     // If |languages| is empty, punycode in |login_host| will always be decoded.
-    base::string16 login_host =
+    std::u16string login_host =
         url_formatter::IDNToUnicode(landing_url_.host());
     if (base::i18n::IsRTL())
       base::i18n::WrapStringWithLTRFormatting(&login_host);
@@ -76,13 +76,13 @@
   }
   load_time_data->SetString("primaryParagraph", paragraph);
   // Explicitly specify other expected fields to empty.
-  load_time_data->SetString("openDetails", base::string16());
-  load_time_data->SetString("closeDetails", base::string16());
-  load_time_data->SetString("explanationParagraph", base::string16());
-  load_time_data->SetString("finalParagraph", base::string16());
-  load_time_data->SetString("recurrentErrorParagraph", base::string16());
-  load_time_data->SetString("optInLink", base::string16());
-  load_time_data->SetString("enhancedProtectionMessage", base::string16());
+  load_time_data->SetString("openDetails", std::u16string());
+  load_time_data->SetString("closeDetails", std::u16string());
+  load_time_data->SetString("explanationParagraph", std::u16string());
+  load_time_data->SetString("finalParagraph", std::u16string());
+  load_time_data->SetString("recurrentErrorParagraph", std::u16string());
+  load_time_data->SetString("optInLink", std::u16string());
+  load_time_data->SetString("enhancedProtectionMessage", std::u16string());
   load_time_data->SetBoolean("show_recurrent_error_paragraph", false);
 }
 
diff --git a/ios/chrome/browser/tabs/tab_title_util.mm b/ios/chrome/browser/tabs/tab_title_util.mm
index 57c21a96..0817d96 100644
--- a/ios/chrome/browser/tabs/tab_title_util.mm
+++ b/ios/chrome/browser/tabs/tab_title_util.mm
@@ -21,7 +21,7 @@
 namespace tab_util {
 
 NSString* GetTabTitle(web::WebState* web_state) {
-  base::string16 title;
+  std::u16string title;
   web::NavigationManager* navigationManager = web_state->GetNavigationManager();
   DownloadManagerTabHelper* downloadTabHelper =
       DownloadManagerTabHelper::FromWebState(web_state);
diff --git a/ios/chrome/browser/tabs/tab_title_util_unittest.mm b/ios/chrome/browser/tabs/tab_title_util_unittest.mm
index 50bd0a60..11b0194 100644
--- a/ios/chrome/browser/tabs/tab_title_util_unittest.mm
+++ b/ios/chrome/browser/tabs/tab_title_util_unittest.mm
@@ -48,7 +48,7 @@
   auto task = std::make_unique<web::FakeDownloadTask>(
       GURL("https://test.test/"), /*mime_type=*/std::string());
   tab_helper->Download(std::move(task));
-  base::string16 download_title =
+  std::u16string download_title =
       l10n_util::GetStringUTF16(IDS_DOWNLOAD_TAB_TITLE);
   NSString* ns_download_title = base::SysUTF16ToNSString(download_title);
   EXPECT_NSEQ(ns_download_title, tab_util::GetTabTitle(&web_state_));
@@ -66,13 +66,13 @@
   DownloadManagerTabHelper::CreateForWebState(&web_state_,
                                               /*delegate=*/nullptr);
   // No title set on the web state.
-  base::string16 default_title =
+  std::u16string default_title =
       l10n_util::GetStringUTF16(IDS_DEFAULT_TAB_TITLE);
   NSString* ns_default_title = base::SysUTF16ToNSString(default_title);
   EXPECT_NSEQ(ns_default_title, tab_util::GetTabTitle(&web_state_));
 
   // Title is set on the web state.
-  base::string16 custom_title = base::UTF8ToUTF16("TestTitle");
+  std::u16string custom_title = base::UTF8ToUTF16("TestTitle");
   NSString* ns_custom_title = base::SysUTF16ToNSString(custom_title);
 
   web_state_.SetTitle(custom_title);
diff --git a/ios/chrome/browser/translate/fake_translate_infobar_delegate.h b/ios/chrome/browser/translate/fake_translate_infobar_delegate.h
index f1f4d519..7a16e67 100644
--- a/ios/chrome/browser/translate/fake_translate_infobar_delegate.h
+++ b/ios/chrome/browser/translate/fake_translate_infobar_delegate.h
@@ -45,14 +45,14 @@
       translate::TranslateStep step,
       translate::TranslateErrors::Type error_type);
 
-  base::string16 source_language_name() const override;
+  std::u16string source_language_name() const override;
 
-  base::string16 target_language_name() const override;
+  std::u16string target_language_name() const override;
 
  private:
   base::ObserverList<Observer> observers_;
-  base::string16 source_language_;
-  base::string16 target_language_;
+  std::u16string source_language_;
+  std::u16string target_language_;
 };
 
 // Factory class to create instances of FakeTranslateInfoBarDelegate.
diff --git a/ios/chrome/browser/translate/fake_translate_infobar_delegate.mm b/ios/chrome/browser/translate/fake_translate_infobar_delegate.mm
index 561294c..4b522bd4 100644
--- a/ios/chrome/browser/translate/fake_translate_infobar_delegate.mm
+++ b/ios/chrome/browser/translate/fake_translate_infobar_delegate.mm
@@ -57,11 +57,11 @@
   }
 }
 
-base::string16 FakeTranslateInfoBarDelegate::source_language_name() const {
+std::u16string FakeTranslateInfoBarDelegate::source_language_name() const {
   return source_language_;
 }
 
-base::string16 FakeTranslateInfoBarDelegate::target_language_name() const {
+std::u16string FakeTranslateInfoBarDelegate::target_language_name() const {
   return target_language_;
 }
 
diff --git a/ios/chrome/browser/u2f/u2f_controller.mm b/ios/chrome/browser/u2f/u2f_controller.mm
index 0be6bdf..be25cf9 100644
--- a/ios/chrome/browser/u2f/u2f_controller.mm
+++ b/ios/chrome/browser/u2f/u2f_controller.mm
@@ -39,7 +39,7 @@
 
 // Generates the JS string to be injected onto the web page to send FIDO U2F
 // requests' results from the U2F callback URL.
-- (base::string16)JSStringFromReponseURL:(const GURL&)URL;
+- (std::u16string)JSStringFromReponseURL:(const GURL&)URL;
 
 // Checks if the source URL has Google domain or allow-listed test domain.
 - (BOOL)shouldAllowSourceURL:(const GURL&)sourceURL;
@@ -141,10 +141,10 @@
 
 #pragma mark - Helper method
 
-- (base::string16)JSStringFromReponseURL:(const GURL&)URL {
+- (std::u16string)JSStringFromReponseURL:(const GURL&)URL {
   std::string requestID;
   if (!net::GetValueForKeyInQuery(URL, kRequestIDKey, &requestID)) {
-    return base::string16();
+    return std::u16string();
   }
 
   std::string JSString;
diff --git a/ios/chrome/browser/u2f/u2f_controller_unittest.mm b/ios/chrome/browser/u2f/u2f_controller_unittest.mm
index a3b2b72..fe157a5a 100644
--- a/ios/chrome/browser/u2f/u2f_controller_unittest.mm
+++ b/ios/chrome/browser/u2f/u2f_controller_unittest.mm
@@ -25,7 +25,7 @@
 // Mocks ExecuteJavaScript method.
 class WebStateMock : public web::FakeWebState {
  public:
-  MOCK_METHOD1(ExecuteJavaScript, void(const base::string16&));
+  MOCK_METHOD1(ExecuteJavaScript, void(const std::u16string&));
 };
 
 }  // namespace
diff --git a/ios/chrome/browser/ui/activity_services/data/share_to_data_builder.mm b/ios/chrome/browser/ui/activity_services/data/share_to_data_builder.mm
index 1dd3b61..d502afc 100644
--- a/ios/chrome/browser/ui/activity_services/data/share_to_data_builder.mm
+++ b/ios/chrome/browser/ui/activity_services/data/share_to_data_builder.mm
@@ -39,7 +39,7 @@
   if (last_committed_item) {
     // Do not use WebState::GetTitle() as it returns the display title, not the
     // original page title.
-    const base::string16& original_title = last_committed_item->GetTitle();
+    const std::u16string& original_title = last_committed_item->GetTitle();
     if (!original_title.empty()) {
       // If the original page title exists, it is expected to match the Tab's
       // title. If this ever changes, then a decision has to be made on which
diff --git a/ios/chrome/browser/ui/authentication/authentication_ui_util.h b/ios/chrome/browser/ui/authentication/authentication_ui_util.h
index 95a0038..4a766bb 100644
--- a/ios/chrome/browser/ui/authentication/authentication_ui_util.h
+++ b/ios/chrome/browser/ui/authentication/authentication_ui_util.h
@@ -31,7 +31,7 @@
     void (^)(SignoutActionSheetCoordinatorResult result);
 
 // Returns the hosted domain for the primary account.
-base::string16 HostedDomainForPrimaryAccount(Browser* browser);
+std::u16string HostedDomainForPrimaryAccount(Browser* browser);
 
 // Returns ActionSheetCoordinator to ask the sign-out confirmation from the
 // user. The alert sheet dialog choices are based if the primary account is
diff --git a/ios/chrome/browser/ui/authentication/authentication_ui_util.mm b/ios/chrome/browser/ui/authentication/authentication_ui_util.mm
index b85c2aa..8e7462f 100644
--- a/ios/chrome/browser/ui/authentication/authentication_ui_util.mm
+++ b/ios/chrome/browser/ui/authentication/authentication_ui_util.mm
@@ -37,7 +37,7 @@
   SignedInUserStateWithNoneManagedAccountAndNotSyncing
 };
 
-base::string16 HostedDomainForPrimaryAccount(Browser* browser) {
+std::u16string HostedDomainForPrimaryAccount(Browser* browser) {
   signin::IdentityManager* identity_manager =
       IdentityManagerFactory::GetForBrowserState(browser->GetBrowserState());
   base::Optional<AccountInfo> account_info =
@@ -74,7 +74,7 @@
   }
   switch (signed_in_user_state) {
     case SignedInUserStateWithManagedAccountAndSyncing: {
-      base::string16 hosted_domain = HostedDomainForPrimaryAccount(browser);
+      std::u16string hosted_domain = HostedDomainForPrimaryAccount(browser);
       title = l10n_util::GetNSStringF(
           IDS_IOS_SIGNOUT_DIALOG_TITLE_WITH_SYNCING_MANAGED_ACCOUNT,
           hosted_domain);
diff --git a/ios/chrome/browser/ui/authentication/cells/signin_promo_view_configurator.mm b/ios/chrome/browser/ui/authentication/cells/signin_promo_view_configurator.mm
index 2f1e581..81927927 100644
--- a/ios/chrome/browser/ui/authentication/cells/signin_promo_view_configurator.mm
+++ b/ios/chrome/browser/ui/authentication/cells/signin_promo_view_configurator.mm
@@ -66,7 +66,7 @@
 
   NSString* name =
       self.userGivenName.length ? self.userGivenName : self.userEmail;
-  base::string16 name16 = SysNSStringToUTF16(name);
+  std::u16string name16 = SysNSStringToUTF16(name);
   switch (self.signinPromoViewMode) {
     case SigninPromoViewModeNoAccounts: {
       NSString* signInString =
diff --git a/ios/chrome/browser/ui/authentication/re_signin_infobar_delegate.h b/ios/chrome/browser/ui/authentication/re_signin_infobar_delegate.h
index e7e930d..295fa9b9 100644
--- a/ios/chrome/browser/ui/authentication/re_signin_infobar_delegate.h
+++ b/ios/chrome/browser/ui/authentication/re_signin_infobar_delegate.h
@@ -52,9 +52,9 @@
   InfoBarIdentifier GetIdentifier() const override;
 
   // ConfirmInfoBarDelegate implementation.
-  base::string16 GetMessageText() const override;
+  std::u16string GetMessageText() const override;
   int GetButtons() const override;
-  base::string16 GetButtonLabel(InfoBarButton button) const override;
+  std::u16string GetButtonLabel(InfoBarButton button) const override;
   gfx::Image GetIcon() const override;
   bool Accept() override;
   void InfoBarDismissed() override;
diff --git a/ios/chrome/browser/ui/authentication/re_signin_infobar_delegate.mm b/ios/chrome/browser/ui/authentication/re_signin_infobar_delegate.mm
index 30818ab..5b3da17 100644
--- a/ios/chrome/browser/ui/authentication/re_signin_infobar_delegate.mm
+++ b/ios/chrome/browser/ui/authentication/re_signin_infobar_delegate.mm
@@ -100,7 +100,7 @@
   return RE_SIGN_IN_INFOBAR_DELEGATE_IOS;
 }
 
-base::string16 ReSignInInfoBarDelegate::GetMessageText() const {
+std::u16string ReSignInInfoBarDelegate::GetMessageText() const {
   return l10n_util::GetStringUTF16(IDS_IOS_SYNC_LOGIN_INFO_OUT_OF_DATE);
 }
 
@@ -108,7 +108,7 @@
   return BUTTON_OK;
 }
 
-base::string16 ReSignInInfoBarDelegate::GetButtonLabel(
+std::u16string ReSignInInfoBarDelegate::GetButtonLabel(
     InfoBarButton button) const {
   return l10n_util::GetStringUTF16(
       IDS_IOS_SYNC_INFOBAR_SIGN_IN_SETTINGS_BUTTON_MOBILE);
diff --git a/ios/chrome/browser/ui/authentication/re_signin_infobar_delegate_unittest.mm b/ios/chrome/browser/ui/authentication/re_signin_infobar_delegate_unittest.mm
index 95fc9e6..cf95310 100644
--- a/ios/chrome/browser/ui/authentication/re_signin_infobar_delegate_unittest.mm
+++ b/ios/chrome/browser/ui/authentication/re_signin_infobar_delegate_unittest.mm
@@ -130,9 +130,9 @@
   std::unique_ptr<ReSignInInfoBarDelegate> delegate(
       new ReSignInInfoBarDelegate(chrome_browser_state_.get(), nil));
   EXPECT_EQ(ConfirmInfoBarDelegate::BUTTON_OK, delegate->GetButtons());
-  base::string16 message_text = delegate->GetMessageText();
+  std::u16string message_text = delegate->GetMessageText();
   EXPECT_GT(message_text.length(), 0U);
-  base::string16 button_label =
+  std::u16string button_label =
       delegate->GetButtonLabel(ConfirmInfoBarDelegate::BUTTON_OK);
   EXPECT_GT(button_label.length(), 0U);
 }
diff --git a/ios/chrome/browser/ui/authentication/signin_notification_infobar_delegate.h b/ios/chrome/browser/ui/authentication/signin_notification_infobar_delegate.h
index 0b7f4737..c5afb62a 100644
--- a/ios/chrome/browser/ui/authentication/signin_notification_infobar_delegate.h
+++ b/ios/chrome/browser/ui/authentication/signin_notification_infobar_delegate.h
@@ -45,10 +45,10 @@
   InfoBarIdentifier GetIdentifier() const override;
 
   // ConfirmInfoBarDelegate implementation.
-  base::string16 GetTitleText() const override;
-  base::string16 GetMessageText() const override;
+  std::u16string GetTitleText() const override;
+  std::u16string GetMessageText() const override;
   int GetButtons() const override;
-  base::string16 GetButtonLabel(InfoBarButton button) const override;
+  std::u16string GetButtonLabel(InfoBarButton button) const override;
   gfx::Image GetIcon() const override;
   bool UseIconBackgroundTint() const override;
   bool Accept() override;
@@ -56,9 +56,9 @@
 
  private:
   gfx::Image icon_;
-  base::string16 title_;
-  base::string16 message_;
-  base::string16 button_text_;
+  std::u16string title_;
+  std::u16string message_;
+  std::u16string button_text_;
 
   // Dispatcher.
   __weak id<ApplicationSettingsCommands> dispatcher_ = nil;
diff --git a/ios/chrome/browser/ui/authentication/signin_notification_infobar_delegate.mm b/ios/chrome/browser/ui/authentication/signin_notification_infobar_delegate.mm
index facea37..788112d0 100644
--- a/ios/chrome/browser/ui/authentication/signin_notification_infobar_delegate.mm
+++ b/ios/chrome/browser/ui/authentication/signin_notification_infobar_delegate.mm
@@ -98,11 +98,11 @@
   return RE_SIGN_IN_INFOBAR_DELEGATE_IOS;
 }
 
-base::string16 SigninNotificationInfoBarDelegate::GetTitleText() const {
+std::u16string SigninNotificationInfoBarDelegate::GetTitleText() const {
   return title_;
 }
 
-base::string16 SigninNotificationInfoBarDelegate::GetMessageText() const {
+std::u16string SigninNotificationInfoBarDelegate::GetMessageText() const {
   return message_;
 }
 
@@ -110,7 +110,7 @@
   return BUTTON_OK;
 }
 
-base::string16 SigninNotificationInfoBarDelegate::GetButtonLabel(
+std::u16string SigninNotificationInfoBarDelegate::GetButtonLabel(
     InfoBarButton button) const {
   DCHECK(button == BUTTON_OK);
   return button_text_;
diff --git a/ios/chrome/browser/ui/authentication/signin_promo_view_mediator_unittest.mm b/ios/chrome/browser/ui/authentication/signin_promo_view_mediator_unittest.mm
index 6a0cf3a..8ff141f 100644
--- a/ios/chrome/browser/ui/authentication/signin_promo_view_mediator_unittest.mm
+++ b/ios/chrome/browser/ui/authentication/signin_promo_view_mediator_unittest.mm
@@ -193,7 +193,7 @@
     NSString* name = expected_default_identity_.userGivenName.length
                          ? expected_default_identity_.userGivenName
                          : expected_default_identity_.userEmail;
-    base::string16 name16 = SysNSStringToUTF16(name);
+    std::u16string name16 = SysNSStringToUTF16(name);
     NSString* accessibilityLabel =
         GetNSStringF(IDS_IOS_SIGNIN_PROMO_ACCESSIBILITY_LABEL, name16);
     OCMExpect([signin_promo_view_ setAccessibilityLabel:accessibilityLabel]);
diff --git a/ios/chrome/browser/ui/autofill/autofill_app_interface.mm b/ios/chrome/browser/ui/autofill/autofill_app_interface.mm
index 22fbc05..8b7fc1e 100644
--- a/ios/chrome/browser/ui/autofill/autofill_app_interface.mm
+++ b/ios/chrome/browser/ui/autofill/autofill_app_interface.mm
@@ -371,7 +371,7 @@
 
 + (NSString*)exampleProfileName {
   autofill::AutofillProfile profile = autofill::test::GetFullProfile();
-  base::string16 name =
+  std::u16string name =
       profile.GetInfo(autofill::AutofillType(autofill::NAME_FULL),
                       GetApplicationContext()->GetApplicationLocale());
   return base::SysUTF16ToNSString(name);
diff --git a/ios/chrome/browser/ui/autofill/card_expiration_date_fix_flow_view_bridge.h b/ios/chrome/browser/ui/autofill/card_expiration_date_fix_flow_view_bridge.h
index 0476fe7..0559b5a 100644
--- a/ios/chrome/browser/ui/autofill/card_expiration_date_fix_flow_view_bridge.h
+++ b/ios/chrome/browser/ui/autofill/card_expiration_date_fix_flow_view_bridge.h
@@ -32,8 +32,8 @@
   CardExpirationDateFixFlowController* GetController();
 
   // Called when the user confirms the expirationn date.
-  void OnConfirmedExpirationDate(const base::string16& month,
-                                 const base::string16& year);
+  void OnConfirmedExpirationDate(const std::u16string& month,
+                                 const std::u16string& year);
 
   // Called when the user cancels the fix flow.
   void OnDismissed();
diff --git a/ios/chrome/browser/ui/autofill/card_expiration_date_fix_flow_view_bridge.mm b/ios/chrome/browser/ui/autofill/card_expiration_date_fix_flow_view_bridge.mm
index 6be2862..d938f4f 100644
--- a/ios/chrome/browser/ui/autofill/card_expiration_date_fix_flow_view_bridge.mm
+++ b/ios/chrome/browser/ui/autofill/card_expiration_date_fix_flow_view_bridge.mm
@@ -67,8 +67,8 @@
 }
 
 void CardExpirationDateFixFlowViewBridge::OnConfirmedExpirationDate(
-    const base::string16& month,
-    const base::string16& year) {
+    const std::u16string& month,
+    const std::u16string& year) {
   controller_->OnAccepted(month, year);
   PerformClose();
 }
diff --git a/ios/chrome/browser/ui/autofill/card_name_fix_flow_view_bridge.h b/ios/chrome/browser/ui/autofill/card_name_fix_flow_view_bridge.h
index f887c09c..a6a2ad5c 100644
--- a/ios/chrome/browser/ui/autofill/card_name_fix_flow_view_bridge.h
+++ b/ios/chrome/browser/ui/autofill/card_name_fix_flow_view_bridge.h
@@ -32,7 +32,7 @@
   CardNameFixFlowController* GetController();
 
   // Called when the user confirms their name.
-  void OnConfirmedName(const base::string16& confirmed_name);
+  void OnConfirmedName(const std::u16string& confirmed_name);
 
   // Called when the user cancels the card name fix flow.
   void OnDismissed();
diff --git a/ios/chrome/browser/ui/autofill/card_name_fix_flow_view_bridge.mm b/ios/chrome/browser/ui/autofill/card_name_fix_flow_view_bridge.mm
index dafae96..739e45e 100644
--- a/ios/chrome/browser/ui/autofill/card_name_fix_flow_view_bridge.mm
+++ b/ios/chrome/browser/ui/autofill/card_name_fix_flow_view_bridge.mm
@@ -66,7 +66,7 @@
 }
 
 void CardNameFixFlowViewBridge::OnConfirmedName(
-    const base::string16& confirmed_name) {
+    const std::u16string& confirmed_name) {
   controller_->OnNameAccepted(confirmed_name);
   PerformClose();
 }
diff --git a/ios/chrome/browser/ui/autofill/card_unmask_prompt_view_bridge.h b/ios/chrome/browser/ui/autofill/card_unmask_prompt_view_bridge.h
index f9d9edc6..a2e4703 100644
--- a/ios/chrome/browser/ui/autofill/card_unmask_prompt_view_bridge.h
+++ b/ios/chrome/browser/ui/autofill/card_unmask_prompt_view_bridge.h
@@ -34,7 +34,7 @@
   void Show() override;
   void ControllerGone() override;
   void DisableAndWaitForVerification() override;
-  void GotVerificationResult(const base::string16& error_message,
+  void GotVerificationResult(const std::u16string& error_message,
                              bool allow_retry) override;
 
   CardUnmaskPromptController* GetController();
diff --git a/ios/chrome/browser/ui/autofill/card_unmask_prompt_view_bridge.mm b/ios/chrome/browser/ui/autofill/card_unmask_prompt_view_bridge.mm
index b40bbe9..1b78691 100644
--- a/ios/chrome/browser/ui/autofill/card_unmask_prompt_view_bridge.mm
+++ b/ios/chrome/browser/ui/autofill/card_unmask_prompt_view_bridge.mm
@@ -86,7 +86,7 @@
 }
 
 void CardUnmaskPromptViewBridge::GotVerificationResult(
-    const base::string16& error_message,
+    const std::u16string& error_message,
     bool allow_retry) {
   if (error_message.empty()) {
     [view_controller_ showSuccess];
diff --git a/ios/chrome/browser/ui/autofill/chrome_autofill_client_ios.h b/ios/chrome/browser/ui/autofill/chrome_autofill_client_ios.h
index a7c1f63..06f5ef6 100644
--- a/ios/chrome/browser/ui/autofill/chrome_autofill_client_ios.h
+++ b/ios/chrome/browser/ui/autofill/chrome_autofill_client_ios.h
@@ -75,10 +75,10 @@
                         base::WeakPtr<CardUnmaskDelegate> delegate) override;
   void OnUnmaskVerificationResult(PaymentsRpcResult result) override;
   void ConfirmAccountNameFixFlow(
-      base::OnceCallback<void(const base::string16&)> callback) override;
+      base::OnceCallback<void(const std::u16string&)> callback) override;
   void ConfirmExpirationDateFixFlow(
       const CreditCard& card,
-      base::OnceCallback<void(const base::string16&, const base::string16&)>
+      base::OnceCallback<void(const std::u16string&, const std::u16string&)>
           callback) override;
   void ConfirmSaveCreditCardLocally(
       const CreditCard& card,
@@ -101,8 +101,8 @@
       const PopupOpenArgs& open_args,
       base::WeakPtr<AutofillPopupDelegate> delegate) override;
   void UpdateAutofillPopupDataListValues(
-      const std::vector<base::string16>& values,
-      const std::vector<base::string16>& labels) override;
+      const std::vector<std::u16string>& values,
+      const std::vector<std::u16string>& labels) override;
   base::span<const Suggestion> GetPopupSuggestions() const override;
   void PinPopupView() override;
   PopupOpenArgs GetReopenPopupArgs() const override;
@@ -113,8 +113,8 @@
   void PropagateAutofillPredictions(
       content::RenderFrameHost* rfh,
       const std::vector<FormStructure*>& forms) override;
-  void DidFillOrPreviewField(const base::string16& autofilled_value,
-                             const base::string16& profile_full_name) override;
+  void DidFillOrPreviewField(const std::u16string& autofilled_value,
+                             const std::u16string& profile_full_name) override;
   bool IsContextSecure() const override;
   bool ShouldShowSigninPromo() override;
   bool AreServerCardsSupported() const override;
diff --git a/ios/chrome/browser/ui/autofill/chrome_autofill_client_ios.mm b/ios/chrome/browser/ui/autofill/chrome_autofill_client_ios.mm
index e529958..9877386 100644
--- a/ios/chrome/browser/ui/autofill/chrome_autofill_client_ios.mm
+++ b/ios/chrome/browser/ui/autofill/chrome_autofill_client_ios.mm
@@ -255,14 +255,14 @@
 }
 
 void ChromeAutofillClientIOS::ConfirmAccountNameFixFlow(
-    base::OnceCallback<void(const base::string16&)> callback) {
+    base::OnceCallback<void(const std::u16string&)> callback) {
   base::Optional<AccountInfo> primary_account_info =
       identity_manager_->FindExtendedAccountInfoForAccountWithRefreshToken(
           identity_manager_->GetPrimaryAccountInfo(
               signin::ConsentLevel::kSync));
-  base::string16 account_name =
+  std::u16string account_name =
       primary_account_info ? base::UTF8ToUTF16(primary_account_info->full_name)
-                           : base::string16();
+                           : std::u16string();
 
   card_name_fix_flow_controller_.Show(
       // CardNameFixFlowViewBridge manages its own lifetime, so
@@ -274,7 +274,7 @@
 
 void ChromeAutofillClientIOS::ConfirmExpirationDateFixFlow(
     const CreditCard& card,
-    base::OnceCallback<void(const base::string16&, const base::string16&)>
+    base::OnceCallback<void(const std::u16string&, const std::u16string&)>
         callback) {
   card_expiration_date_fix_flow_controller_.Show(
       // CardExpirationDateFixFlowViewBridge manages its own lifetime,
@@ -346,8 +346,8 @@
 }
 
 void ChromeAutofillClientIOS::UpdateAutofillPopupDataListValues(
-    const std::vector<base::string16>& values,
-    const std::vector<base::string16>& labels) {
+    const std::vector<std::u16string>& values,
+    const std::vector<std::u16string>& labels) {
   // No op. ios/web_view does not support display datalist.
 }
 
@@ -388,8 +388,8 @@
 }
 
 void ChromeAutofillClientIOS::DidFillOrPreviewField(
-    const base::string16& autofilled_value,
-    const base::string16& profile_full_name) {}
+    const std::u16string& autofilled_value,
+    const std::u16string& profile_full_name) {}
 
 bool ChromeAutofillClientIOS::IsContextSecure() const {
   return IsContextSecureForWebState(web_state_);
diff --git a/ios/chrome/browser/ui/autofill/form_input_accessory/form_input_accessory_coordinator.mm b/ios/chrome/browser/ui/autofill/form_input_accessory/form_input_accessory_coordinator.mm
index 9b48638..184f35e 100644
--- a/ios/chrome/browser/ui/autofill/form_input_accessory/form_input_accessory_coordinator.mm
+++ b/ios/chrome/browser/ui/autofill/form_input_accessory/form_input_accessory_coordinator.mm
@@ -356,7 +356,7 @@
 - (void)showConfirmationDialogToUseOtherPassword {
   WebStateList* webStateList = self.browser->GetWebStateList();
   const GURL& URL = webStateList->GetActiveWebState()->GetLastCommittedURL();
-  base::string16 origin = base::ASCIIToUTF16(
+  std::u16string origin = base::ASCIIToUTF16(
       password_manager::GetShownOrigin(url::Origin::Create(URL)));
   NSString* title =
       l10n_util::GetNSString(IDS_IOS_CONFIRM_USING_OTHER_PASSWORD_TITLE);
diff --git a/ios/chrome/browser/ui/autofill/manual_fill/card_view_controller_egtest.mm b/ios/chrome/browser/ui/autofill/manual_fill/card_view_controller_egtest.mm
index 19c47644b..d874e17 100644
--- a/ios/chrome/browser/ui/autofill/manual_fill/card_view_controller_egtest.mm
+++ b/ios/chrome/browser/ui/autofill/manual_fill/card_view_controller_egtest.mm
@@ -59,8 +59,8 @@
     0x2022, 0x2060, 0x2006, 0x2060, 0x2022, 0x2060, 0x2006, 0x2060, 0x2022,
     0x2060, 0x2006, 0x2060, 0x2022, 0x2060, 0x2006, 0x2060, 0};
 NSString* kObfuscatedNumberPrefix = base::SysUTF16ToNSString(
-    kMidlineEllipsis + base::string16(separator) + kMidlineEllipsis +
-    base::string16(separator) + kMidlineEllipsis + base::string16(separator));
+    kMidlineEllipsis + std::u16string(separator) + kMidlineEllipsis +
+    std::u16string(separator) + kMidlineEllipsis + std::u16string(separator));
 
 NSString* kLocalNumberObfuscated =
     [NSString stringWithFormat:@"%@1111", kObfuscatedNumberPrefix];
diff --git a/ios/chrome/browser/ui/autofill/manual_fill/full_card_request_result_delegate_bridge.h b/ios/chrome/browser/ui/autofill/manual_fill/full_card_request_result_delegate_bridge.h
index 10c0868..8f79e59 100644
--- a/ios/chrome/browser/ui/autofill/manual_fill/full_card_request_result_delegate_bridge.h
+++ b/ios/chrome/browser/ui/autofill/manual_fill/full_card_request_result_delegate_bridge.h
@@ -42,7 +42,7 @@
   void OnFullCardRequestSucceeded(
       const autofill::payments::FullCardRequest& full_card_request,
       const autofill::CreditCard& card,
-      const base::string16& cvc) override;
+      const std::u16string& cvc) override;
   void OnFullCardRequestFailed(
       autofill::payments::FullCardRequest::FailureType failure_type) override;
 
diff --git a/ios/chrome/browser/ui/autofill/manual_fill/full_card_request_result_delegate_bridge.mm b/ios/chrome/browser/ui/autofill/manual_fill/full_card_request_result_delegate_bridge.mm
index 7740d11..f5b3a16 100644
--- a/ios/chrome/browser/ui/autofill/manual_fill/full_card_request_result_delegate_bridge.mm
+++ b/ios/chrome/browser/ui/autofill/manual_fill/full_card_request_result_delegate_bridge.mm
@@ -30,7 +30,7 @@
 void FullCardRequestResultDelegateBridge::OnFullCardRequestSucceeded(
     const autofill::payments::FullCardRequest& /* full_card_request */,
     const autofill::CreditCard& card,
-    const base::string16& /* cvc */) {
+    const std::u16string& /* cvc */) {
   [delegate_ onFullCardRequestSucceeded:card];
 }
 
diff --git a/ios/chrome/browser/ui/autofill/manual_fill/full_card_requester_unittest.mm b/ios/chrome/browser/ui/autofill/manual_fill/full_card_requester_unittest.mm
index adbb802..f609bac 100644
--- a/ios/chrome/browser/ui/autofill/manual_fill/full_card_requester_unittest.mm
+++ b/ios/chrome/browser/ui/autofill/manual_fill/full_card_requester_unittest.mm
@@ -43,7 +43,7 @@
   void OnFullCardRequestSucceeded(
       const autofill::payments::FullCardRequest& /* full_card_request */,
       const autofill::CreditCard& card,
-      const base::string16& cvc) override {}
+      const std::u16string& cvc) override {}
 
   void OnFullCardRequestFailed(
       autofill::payments::FullCardRequest::FailureType /* failure_type */)
diff --git a/ios/chrome/browser/ui/autofill/manual_fill/manual_fill_address+AutofillProfile_unittest.mm b/ios/chrome/browser/ui/autofill/manual_fill/manual_fill_address+AutofillProfile_unittest.mm
index 2972da2..c9744a6 100644
--- a/ios/chrome/browser/ui/autofill/manual_fill/manual_fill_address+AutofillProfile_unittest.mm
+++ b/ios/chrome/browser/ui/autofill/manual_fill/manual_fill_address+AutofillProfile_unittest.mm
@@ -24,7 +24,7 @@
 void SetProfileFieldTypeValue(AutofillProfile* profile,
                               const autofill::ServerFieldType fieldType,
                               NSString* value) {
-  const base::string16 v = base::SysNSStringToUTF16(value);
+  const std::u16string v = base::SysNSStringToUTF16(value);
   const std::string& app_locale =
       GetApplicationContext()->GetApplicationLocale();
   profile->SetInfo(fieldType, v, app_locale);
diff --git a/ios/chrome/browser/ui/autofill/manual_fill/manual_fill_credit_card+CreditCard.mm b/ios/chrome/browser/ui/autofill/manual_fill/manual_fill_credit_card+CreditCard.mm
index 27f4ae2..4ed0c0e 100644
--- a/ios/chrome/browser/ui/autofill/manual_fill/manual_fill_credit_card+CreditCard.mm
+++ b/ios/chrome/browser/ui/autofill/manual_fill/manual_fill_credit_card+CreditCard.mm
@@ -39,11 +39,11 @@
   //  - 0x0020 - Space.
   //  - 0x2060 - WORD-JOINER (makes string undivisible).
   constexpr char16_t separator[] = {0x2060, 0x0020, 0};
-  const base::string16 digits = creditCard.LastFourDigits();
+  const std::u16string digits = creditCard.LastFourDigits();
   NSString* obfuscatedNumber = base::SysUTF16ToNSString(
-      autofill::kMidlineEllipsis + base::string16(separator) +
-      autofill::kMidlineEllipsis + base::string16(separator) +
-      autofill::kMidlineEllipsis + base::string16(separator) + digits);
+      autofill::kMidlineEllipsis + std::u16string(separator) +
+      autofill::kMidlineEllipsis + std::u16string(separator) +
+      autofill::kMidlineEllipsis + std::u16string(separator) + digits);
 
   // Use 2 digits year.
   NSString* expirationYear =
diff --git a/ios/chrome/browser/ui/autofill/manual_fill/password_view_controller_egtest.mm b/ios/chrome/browser/ui/autofill/manual_fill/password_view_controller_egtest.mm
index 1499d69..5bfa0b95 100644
--- a/ios/chrome/browser/ui/autofill/manual_fill/password_view_controller_egtest.mm
+++ b/ios/chrome/browser/ui/autofill/manual_fill/password_view_controller_egtest.mm
@@ -240,7 +240,7 @@
   [[EarlGrey selectElementWithMatcher:ManualFallbackOtherPasswordsMatcher()]
       performAction:grey_tap()];
 
-  base::string16 origin = base::ASCIIToUTF16(
+  std::u16string origin = base::ASCIIToUTF16(
       password_manager::GetShownOrigin(url::Origin::Create(self.URL)));
   NSString* title = l10n_util::GetNSStringF(
       IDS_IOS_CONFIRM_USING_OTHER_PASSWORD_DESCRIPTION, origin);
diff --git a/ios/chrome/browser/ui/autofill/save_card_infobar_controller.mm b/ios/chrome/browser/ui/autofill/save_card_infobar_controller.mm
index 312874cf..c7bce2d 100644
--- a/ios/chrome/browser/ui/autofill/save_card_infobar_controller.mm
+++ b/ios/chrome/browser/ui/autofill/save_card_infobar_controller.mm
@@ -41,10 +41,10 @@
 }
 
 // Returns the title for the given infobar button.
-base::string16 GetTitleForButton(ConfirmInfoBarDelegate* delegate,
+std::u16string GetTitleForButton(ConfirmInfoBarDelegate* delegate,
                                  ConfirmInfoBarDelegate::InfoBarButton button) {
   return (delegate->GetButtons() & button) ? delegate->GetButtonLabel(button)
-                                           : base::string16();
+                                           : std::u16string();
 }
 
 }  // namespace
@@ -94,10 +94,10 @@
   }
 
   // Message, if any.
-  base::string16 messageText = self.infoBarDelegate->GetMessageText();
+  std::u16string messageText = self.infoBarDelegate->GetMessageText();
   if (!messageText.empty()) {
     SaveCardMessageWithLinks* message = [[SaveCardMessageWithLinks alloc] init];
-    const base::string16 linkText = self.infoBarDelegate->GetLinkText();
+    const std::u16string linkText = self.infoBarDelegate->GetLinkText();
     GURL linkURL = self.infoBarDelegate->GetLinkURL();
 
     if (!linkText.empty() && !linkURL.is_empty()) {
@@ -117,7 +117,7 @@
   }
 
   // Description, if any.
-  const base::string16 description = self.infoBarDelegate->GetDescriptionText();
+  const std::u16string description = self.infoBarDelegate->GetDescriptionText();
   if (!description.empty()) {
     [self.infoBarView setDescription:base::SysUTF16ToNSString(description)];
   }
@@ -152,13 +152,13 @@
   }
 
   // Cancel button.
-  const base::string16 cancelButtonTitle = GetTitleForButton(
+  const std::u16string cancelButtonTitle = GetTitleForButton(
       self.infoBarDelegate, ConfirmInfoBarDelegate::BUTTON_CANCEL);
   [self.infoBarView
       setCancelButtonTitle:base::SysUTF16ToNSString(cancelButtonTitle)];
 
   // Confirm button.
-  const base::string16 confirmButtonTitle = GetTitleForButton(
+  const std::u16string confirmButtonTitle = GetTitleForButton(
       self.infoBarDelegate, ConfirmInfoBarDelegate::BUTTON_OK);
   [self.infoBarView
       setConfirmButtonTitle:base::SysUTF16ToNSString(confirmButtonTitle)];
diff --git a/ios/chrome/browser/ui/badges/badge_mediator_unittest.mm b/ios/chrome/browser/ui/badges/badge_mediator_unittest.mm
index b89d41c0..d09ec08 100644
--- a/ios/chrome/browser/ui/badges/badge_mediator_unittest.mm
+++ b/ios/chrome/browser/ui/badges/badge_mediator_unittest.mm
@@ -39,10 +39,10 @@
 namespace {
 // The two infobar types used in tests.  Both support badges.
 InfobarType kFirstInfobarType = InfobarType::kInfobarTypePasswordSave;
-base::string16 kFirstInfobarMessageText =
+std::u16string kFirstInfobarMessageText =
     base::ASCIIToUTF16("FakeInfobarDelegate1");
 InfobarType kSecondInfobarType = InfobarType::kInfobarTypePasswordUpdate;
-base::string16 kSecondInfobarMessageText =
+std::u16string kSecondInfobarMessageText =
     base::ASCIIToUTF16("FakeInfobarDelegate2");
 // Parameters used for BadgeMediator test fixtures.
 enum class TestParam {
@@ -111,7 +111,7 @@
 
   // Adds an Infobar of |type| to the InfoBarManager and returns the infobar.
   // Pass in different |message_text| to avoid replacing existing infobar.
-  InfoBarIOS* AddInfobar(InfobarType type, base::string16 message_text) {
+  InfoBarIOS* AddInfobar(InfobarType type, std::u16string message_text) {
     std::unique_ptr<InfoBarIOS> added_infobar =
         std::make_unique<FakeInfobarIOS>(type, message_text);
     InfoBarIOS* infobar = added_infobar.get();
diff --git a/ios/chrome/browser/ui/bookmarks/bookmark_earl_grey_app_interface.mm b/ios/chrome/browser/ui/bookmarks/bookmark_earl_grey_app_interface.mm
index fde58ed..5f1ce51 100644
--- a/ios/chrome/browser/ui/bookmarks/bookmark_earl_grey_app_interface.mm
+++ b/ios/chrome/browser/ui/bookmarks/bookmark_earl_grey_app_interface.mm
@@ -137,7 +137,7 @@
       [BookmarkEarlGreyAppInterface bookmarkModel];
 
   // Verify the correct number of bookmarks exist.
-  base::string16 matchString = base::SysNSStringToUTF16(title);
+  std::u16string matchString = base::SysNSStringToUTF16(title);
   int const kMaxCountOfBookmarks = 50;
   std::vector<bookmarks::TitledUrlMatch> matches =
       bookmarkModel->GetBookmarksMatching(
@@ -165,7 +165,7 @@
 }
 
 + (NSError*)removeBookmarkWithTitle:(NSString*)title {
-  base::string16 name16(base::SysNSStringToUTF16(title));
+  std::u16string name16(base::SysNSStringToUTF16(title));
   bookmarks::BookmarkModel* bookmarkModel =
       [BookmarkEarlGreyAppInterface bookmarkModel];
   ui::TreeNodeIterator<const bookmarks::BookmarkNode> iterator(
@@ -183,7 +183,7 @@
 
 + (NSError*)moveBookmarkWithTitle:(NSString*)bookmarkTitle
                 toFolderWithTitle:(NSString*)newFolder {
-  base::string16 name16(base::SysNSStringToUTF16(bookmarkTitle));
+  std::u16string name16(base::SysNSStringToUTF16(bookmarkTitle));
   bookmarks::BookmarkModel* bookmarkModel =
       [BookmarkEarlGreyAppInterface bookmarkModel];
   ui::TreeNodeIterator<const bookmarks::BookmarkNode> iterator(
@@ -196,7 +196,7 @@
     bookmark = iterator.Next();
   }
 
-  base::string16 folderName16(base::SysNSStringToUTF16(newFolder));
+  std::u16string folderName16(base::SysNSStringToUTF16(newFolder));
   ui::TreeNodeIterator<const bookmarks::BookmarkNode> iteratorFolder(
       bookmarkModel->root_node());
   const bookmarks::BookmarkNode* folder = iteratorFolder.Next();
@@ -218,7 +218,7 @@
 }
 
 + (NSError*)verifyChildCount:(size_t)count inFolderWithName:(NSString*)name {
-  base::string16 name16(base::SysNSStringToUTF16(name));
+  std::u16string name16(base::SysNSStringToUTF16(name));
   bookmarks::BookmarkModel* bookmarkModel =
       [BookmarkEarlGreyAppInterface bookmarkModel];
 
@@ -274,7 +274,7 @@
 }
 
 + (NSError*)verifyExistenceOfFolderWithTitle:(NSString*)title {
-  base::string16 folderTitle16(base::SysNSStringToUTF16(title));
+  std::u16string folderTitle16(base::SysNSStringToUTF16(title));
 
   ui::TreeNodeIterator<const bookmarks::BookmarkNode> iterator(
       [self bookmarkModel] -> root_node());
diff --git a/ios/chrome/browser/ui/bookmarks/bookmark_folder_editor_view_controller.mm b/ios/chrome/browser/ui/bookmarks/bookmark_folder_editor_view_controller.mm
index d3887cd..42ba5bb 100644
--- a/ios/chrome/browser/ui/bookmarks/bookmark_folder_editor_view_controller.mm
+++ b/ios/chrome/browser/ui/bookmarks/bookmark_folder_editor_view_controller.mm
@@ -262,7 +262,7 @@
 
   NSString* folderString = self.titleItem.text;
   DCHECK(folderString.length > 0);
-  base::string16 folderTitle = base::SysNSStringToUTF16(folderString);
+  std::u16string folderTitle = base::SysNSStringToUTF16(folderString);
 
   if (self.editingExistingFolder) {
     DCHECK(self.folder);
diff --git a/ios/chrome/browser/ui/bookmarks/bookmark_home_mediator.mm b/ios/chrome/browser/ui/bookmarks/bookmark_home_mediator.mm
index c37d3b0..74b8383 100644
--- a/ios/chrome/browser/ui/bookmarks/bookmark_home_mediator.mm
+++ b/ios/chrome/browser/ui/bookmarks/bookmark_home_mediator.mm
@@ -243,7 +243,7 @@
 
   std::vector<const BookmarkNode*> nodes;
   bookmarks::QueryFields query;
-  query.word_phrase_query.reset(new base::string16);
+  query.word_phrase_query.reset(new std::u16string);
   *query.word_phrase_query = base::SysNSStringToUTF16(searchText);
   GetBookmarksMatchingProperties(self.sharedState.bookmarkModel, query,
                                  kMaxBookmarksSearchResults, &nodes);
diff --git a/ios/chrome/browser/ui/bookmarks/bookmark_home_view_controller.mm b/ios/chrome/browser/ui/bookmarks/bookmark_home_view_controller.mm
index 6330aec..9d2aa26 100644
--- a/ios/chrome/browser/ui/bookmarks/bookmark_home_view_controller.mm
+++ b/ios/chrome/browser/ui/bookmarks/bookmark_home_view_controller.mm
@@ -1166,7 +1166,7 @@
     return;
   }
   self.sharedState.addingNewFolder = YES;
-  base::string16 folderTitle =
+  std::u16string folderTitle =
       l10n_util::GetStringUTF16(IDS_IOS_BOOKMARK_NEW_GROUP_DEFAULT_NAME);
   self.sharedState.editingFolderNode =
       self.sharedState.bookmarkModel->AddFolder(
diff --git a/ios/chrome/browser/ui/bookmarks/bookmark_ios_unittest.mm b/ios/chrome/browser/ui/bookmarks/bookmark_ios_unittest.mm
index ddede789..fb7f21a 100644
--- a/ios/chrome/browser/ui/bookmarks/bookmark_ios_unittest.mm
+++ b/ios/chrome/browser/ui/bookmarks/bookmark_ios_unittest.mm
@@ -42,7 +42,7 @@
 
 const BookmarkNode* BookmarkIOSUnitTest::AddBookmark(const BookmarkNode* parent,
                                                      NSString* title) {
-  base::string16 c_title = base::SysNSStringToUTF16(title);
+  std::u16string c_title = base::SysNSStringToUTF16(title);
   GURL url(base::SysNSStringToUTF16(@"http://example.com/bookmark") + c_title);
   return bookmark_model_->AddURL(parent, parent->children().size(), c_title,
                                  url);
@@ -50,12 +50,12 @@
 
 const BookmarkNode* BookmarkIOSUnitTest::AddFolder(const BookmarkNode* parent,
                                                    NSString* title) {
-  base::string16 c_title = base::SysNSStringToUTF16(title);
+  std::u16string c_title = base::SysNSStringToUTF16(title);
   return bookmark_model_->AddFolder(parent, parent->children().size(), c_title);
 }
 
 void BookmarkIOSUnitTest::ChangeTitle(NSString* title,
                                       const BookmarkNode* node) {
-  base::string16 c_title = base::SysNSStringToUTF16(title);
+  std::u16string c_title = base::SysNSStringToUTF16(title);
   bookmark_model_->SetTitle(node, c_title);
 }
diff --git a/ios/chrome/browser/ui/bookmarks/bookmark_utils_ios.mm b/ios/chrome/browser/ui/bookmarks/bookmark_utils_ios.mm
index 8f0f410b..7d1fa17 100644
--- a/ios/chrome/browser/ui/bookmarks/bookmark_utils_ios.mm
+++ b/ios/chrome/browser/ui/bookmarks/bookmark_utils_ios.mm
@@ -166,7 +166,7 @@
     bookmarks::BookmarkModel* bookmark_model,
     ChromeBrowserState* browser_state) {
   DCHECK(!node || node->is_url());
-  base::string16 titleString = base::SysNSStringToUTF16(title);
+  std::u16string titleString = base::SysNSStringToUTF16(title);
 
   // If the bookmark has no changes supporting Undo, just bail out.
   if (node && node->GetTitle() == titleString && node->url() == url &&
@@ -215,7 +215,7 @@
     int position,
     bookmarks::BookmarkModel* bookmark_model,
     ChromeBrowserState* browser_state) {
-  base::string16 titleString = base::SysNSStringToUTF16(title);
+  std::u16string titleString = base::SysNSStringToUTF16(title);
 
   UndoManagerWrapper* wrapper =
       [[UndoManagerWrapper alloc] initWithBrowserState:browser_state];
diff --git a/ios/chrome/browser/ui/content_suggestions/content_suggestions_app_interface.mm b/ios/chrome/browser/ui/content_suggestions/content_suggestions_app_interface.mm
index 480e11e..f4c3740 100644
--- a/ios/chrome/browser/ui/content_suggestions/content_suggestions_app_interface.mm
+++ b/ios/chrome/browser/ui/content_suggestions/content_suggestions_app_interface.mm
@@ -145,7 +145,7 @@
 }
 
 + (void)resetSearchEngineTo:(NSString*)defaultSearchEngine {
-  base::string16 defaultSearchEngineString =
+  std::u16string defaultSearchEngineString =
       base::SysNSStringToUTF16(defaultSearchEngine);
   // Set the search engine back to the default in case the test fails before
   // cleaning it up.
diff --git a/ios/chrome/browser/ui/dialogs/javascript_dialog_egtest.mm b/ios/chrome/browser/ui/dialogs/javascript_dialog_egtest.mm
index aaa2cd8a..e1229b9 100644
--- a/ios/chrome/browser/ui/dialogs/javascript_dialog_egtest.mm
+++ b/ios/chrome/browser/ui/dialogs/javascript_dialog_egtest.mm
@@ -205,7 +205,7 @@
 
   // Check the title.  Non-modal main-frame dialogs do not have a title label.
   if (!is_main_frame) {
-    base::string16 url_string = url_formatter::FormatUrlForSecurityDisplay(
+    std::u16string url_string = url_formatter::FormatUrlForSecurityDisplay(
         url, url_formatter::SchemeDisplay::OMIT_HTTP_AND_HTTPS);
     NSString* expected_title =
         l10n_util::GetNSStringF(IDS_JAVASCRIPT_MESSAGEBOX_TITLE, url_string);
diff --git a/ios/chrome/browser/ui/dialogs/nsurl_protection_space_util.mm b/ios/chrome/browser/ui/dialogs/nsurl_protection_space_util.mm
index 1052b34..2143b2b8 100644
--- a/ios/chrome/browser/ui/dialogs/nsurl_protection_space_util.mm
+++ b/ios/chrome/browser/ui/dialogs/nsurl_protection_space_util.mm
@@ -53,7 +53,7 @@
     return l10n_util::GetNSStringF(
         formatID, base::SysNSStringToUTF16(protectionSpace.host));
   }
-  base::string16 authority =
+  std::u16string authority =
       url_formatter::FormatUrlForSecurityDisplay(requesterOrigin);
 
   return l10n_util::GetNSStringF(formatID, authority);
diff --git a/ios/chrome/browser/ui/download/download_manager_mediator.mm b/ios/chrome/browser/ui/download/download_manager_mediator.mm
index 4257c9b..40bb881 100644
--- a/ios/chrome/browser/ui/download/download_manager_mediator.mm
+++ b/ios/chrome/browser/ui/download/download_manager_mediator.mm
@@ -86,7 +86,7 @@
 
   auto task_runner = base::ThreadPool::CreateSequencedTaskRunner(
       {base::MayBlock(), base::TaskPriority::BEST_EFFORT});
-  base::string16 file_name = task_->GetSuggestedFilename();
+  std::u16string file_name = task_->GetSuggestedFilename();
   base::FilePath path = destination_dir.Append(base::UTF16ToUTF8(file_name));
   auto writer = std::make_unique<net::URLFetcherFileWriter>(task_runner, path);
   writer->Initialize(base::BindRepeating(
diff --git a/ios/chrome/browser/ui/download/download_manager_view_controller.mm b/ios/chrome/browser/ui/download/download_manager_view_controller.mm
index 09e2a72..4fea429 100644
--- a/ios/chrome/browser/ui/download/download_manager_view_controller.mm
+++ b/ios/chrome/browser/ui/download/download_manager_view_controller.mm
@@ -699,7 +699,7 @@
       }
       break;
     case kDownloadManagerStateInProgress: {
-      base::string16 size =
+      std::u16string size =
           base::SysNSStringToUTF16(GetSizeString(_countOfBytesReceived));
       statusText = l10n_util::GetNSStringF(
           IDS_IOS_DOWNLOAD_MANAGER_DOWNLOADING_ELIPSIS, size);
diff --git a/ios/chrome/browser/ui/history/history_entry_inserter_unittest.mm b/ios/chrome/browser/ui/history/history_entry_inserter_unittest.mm
index 74d34e2e..63f53bd 100644
--- a/ios/chrome/browser/ui/history/history_entry_inserter_unittest.mm
+++ b/ios/chrome/browser/ui/history/history_entry_inserter_unittest.mm
@@ -30,7 +30,7 @@
   BrowsingHistoryService::HistoryEntry entry(
       BrowsingHistoryService::HistoryEntry::LOCAL_ENTRY,
       GURL(("http://" + name).c_str()), base::UTF8ToUTF16(name.c_str()),
-      timestamp, std::string(), false, base::string16(), false, GURL(), 0, 0);
+      timestamp, std::string(), false, std::u16string(), false, GURL(), 0, 0);
   HistoryEntryItem* item =
       [[HistoryEntryItem alloc] initWithType:kItemTypeEnumZero
                        accessibilityDelegate:nil];
diff --git a/ios/chrome/browser/ui/history/history_table_view_controller.mm b/ios/chrome/browser/ui/history/history_table_view_controller.mm
index 170382d..cdc58774 100644
--- a/ios/chrome/browser/ui/history/history_table_view_controller.mm
+++ b/ios/chrome/browser/ui/history/history_table_view_controller.mm
@@ -784,8 +784,8 @@
     _query_history_continuation.Reset();
 
     BOOL fetchAllHistory = !query || [query isEqualToString:@""];
-    base::string16 queryString =
-        fetchAllHistory ? base::string16() : base::SysNSStringToUTF16(query);
+    std::u16string queryString =
+        fetchAllHistory ? std::u16string() : base::SysNSStringToUTF16(query);
     history::QueryOptions options;
     options.duplicate_policy =
         fetchAllHistory ? history::QueryOptions::REMOVE_DUPLICATES_PER_DAY
diff --git a/ios/chrome/browser/ui/history/history_util.h b/ios/chrome/browser/ui/history/history_util.h
index 9e9c698..bacb232 100644
--- a/ios/chrome/browser/ui/history/history_util.h
+++ b/ios/chrome/browser/ui/history/history_util.h
@@ -20,11 +20,11 @@
 
 // Returns a localized version of |visit_time| including a relative
 // indicator (e.g. today, yesterday).
-base::string16 GetRelativeDateLocalized(const base::Time& visit_time);
+std::u16string GetRelativeDateLocalized(const base::Time& visit_time);
 
 // Formats |title| to support RTL, or creates an RTL supported title based on
 // |url| if |title| is empty.
-NSString* FormattedTitle(const base::string16& title, const GURL& url);
+NSString* FormattedTitle(const std::u16string& title, const GURL& url);
 
 }  // namespace history
 
diff --git a/ios/chrome/browser/ui/history/history_util.mm b/ios/chrome/browser/ui/history/history_util.mm
index 2e63dd4..9e86739d 100644
--- a/ios/chrome/browser/ui/history/history_util.mm
+++ b/ios/chrome/browser/ui/history/history_util.mm
@@ -19,9 +19,9 @@
 
 namespace history {
 
-base::string16 GetRelativeDateLocalized(const base::Time& visit_time) {
+std::u16string GetRelativeDateLocalized(const base::Time& visit_time) {
   base::Time midnight = base::Time::Now().LocalMidnight();
-  base::string16 date_str = ui::TimeFormat::RelativeDate(visit_time, &midnight);
+  std::u16string date_str = ui::TimeFormat::RelativeDate(visit_time, &midnight);
   if (date_str.empty()) {
     date_str = base::TimeFormatFriendlyDate(visit_time);
   } else {
@@ -32,10 +32,10 @@
   return date_str;
 }
 
-NSString* FormattedTitle(const base::string16& title, const GURL& url) {
+NSString* FormattedTitle(const std::u16string& title, const GURL& url) {
   // Use url as title if no title.
   bool using_url_as_the_title = false;
-  base::string16 formatted_title(title);
+  std::u16string formatted_title(title);
   if (title.empty()) {
     using_url_as_the_title = true;
     formatted_title = url_formatter::FormatUrl(url);
diff --git a/ios/chrome/browser/ui/infobars/coordinators/infobar_translate_mediator.mm b/ios/chrome/browser/ui/infobars/coordinators/infobar_translate_mediator.mm
index f5ed154..d443bfe 100644
--- a/ios/chrome/browser/ui/infobars/coordinators/infobar_translate_mediator.mm
+++ b/ios/chrome/browser/ui/infobars/coordinators/infobar_translate_mediator.mm
@@ -184,7 +184,7 @@
 
   self.newSourceLanguageIndex = languageIndex;
 
-  base::string16 targetLanguage =
+  std::u16string targetLanguage =
       self.translateInfobarDelegate->target_language_name();
   if (self.newTargetLanguageIndex != kInvalidLanguageIndex) {
     targetLanguage = self.translateInfobarDelegate->language_name_at(
@@ -212,7 +212,7 @@
 
   self.newTargetLanguageIndex = languageIndex;
 
-  base::string16 sourceLanguage =
+  std::u16string sourceLanguage =
       self.translateInfobarDelegate->source_language_name();
   if (self.newSourceLanguageIndex != kInvalidLanguageIndex) {
     sourceLanguage = self.translateInfobarDelegate->language_name_at(
diff --git a/ios/chrome/browser/ui/infobars/test/test_infobar_password_delegate.h b/ios/chrome/browser/ui/infobars/test/test_infobar_password_delegate.h
index 5365f59c..4a41276 100644
--- a/ios/chrome/browser/ui/infobars/test/test_infobar_password_delegate.h
+++ b/ios/chrome/browser/ui/infobars/test/test_infobar_password_delegate.h
@@ -18,7 +18,7 @@
   // InfoBarDelegate implementation.
   InfoBarIdentifier GetIdentifier() const override;
   // ConfirmInfoBarDelegate implementation.
-  base::string16 GetMessageText() const override;
+  std::u16string GetMessageText() const override;
   int GetButtons() const override;
 
  private:
diff --git a/ios/chrome/browser/ui/infobars/test/test_infobar_password_delegate.mm b/ios/chrome/browser/ui/infobars/test/test_infobar_password_delegate.mm
index f7ac4475..d4d05f2b 100644
--- a/ios/chrome/browser/ui/infobars/test/test_infobar_password_delegate.mm
+++ b/ios/chrome/browser/ui/infobars/test/test_infobar_password_delegate.mm
@@ -38,11 +38,11 @@
   MOCK_METHOD3(Save,
                void(PasswordForm pending,
                     const std::vector<const PasswordForm*>& matches,
-                    const base::string16& old_password));
+                    const std::u16string& old_password));
   MOCK_METHOD3(Update,
                void(PasswordForm pending,
                     const std::vector<const PasswordForm*>& matches,
-                    const base::string16& old_password));
+                    const std::u16string& old_password));
 
   // Convenience downcasting method.
   static MockFormSaver& Get(
@@ -95,7 +95,7 @@
   return TEST_INFOBAR;
 }
 
-base::string16 TestInfobarPasswordDelegate::GetMessageText() const {
+std::u16string TestInfobarPasswordDelegate::GetMessageText() const {
   return base::SysNSStringToUTF16(infobar_message_);
 }
 
diff --git a/ios/chrome/browser/ui/infobars/test_infobar_delegate.h b/ios/chrome/browser/ui/infobars/test_infobar_delegate.h
index 023d8e0..22d24122 100644
--- a/ios/chrome/browser/ui/infobars/test_infobar_delegate.h
+++ b/ios/chrome/browser/ui/infobars/test_infobar_delegate.h
@@ -17,7 +17,7 @@
   // InfoBarDelegate implementation.
   InfoBarIdentifier GetIdentifier() const override;
   // ConfirmInfoBarDelegate implementation.
-  base::string16 GetMessageText() const override;
+  std::u16string GetMessageText() const override;
   int GetButtons() const override;
 
  private:
diff --git a/ios/chrome/browser/ui/infobars/test_infobar_delegate.mm b/ios/chrome/browser/ui/infobars/test_infobar_delegate.mm
index b3ac8034..53abf60 100644
--- a/ios/chrome/browser/ui/infobars/test_infobar_delegate.mm
+++ b/ios/chrome/browser/ui/infobars/test_infobar_delegate.mm
@@ -25,7 +25,7 @@
   return TEST_INFOBAR;
 }
 
-base::string16 TestInfoBarDelegate::GetMessageText() const {
+std::u16string TestInfoBarDelegate::GetMessageText() const {
   return base::SysNSStringToUTF16(infobar_message_);
 }
 
diff --git a/ios/chrome/browser/ui/location_bar/location_bar_coordinator.mm b/ios/chrome/browser/ui/location_bar/location_bar_coordinator.mm
index e0d547d..dab5ac8c 100644
--- a/ios/chrome/browser/ui/location_bar/location_bar_coordinator.mm
+++ b/ios/chrome/browser/ui/location_bar/location_bar_coordinator.mm
@@ -278,7 +278,7 @@
 - (void)loadQuery:(NSString*)query immediately:(BOOL)immediately {
   DCHECK(query);
   // Since the query is not user typed, sanitize it to make sure it's safe.
-  base::string16 sanitizedQuery =
+  std::u16string sanitizedQuery =
       OmniboxView::SanitizeTextForPaste(base::SysNSStringToUTF16(query));
   if (immediately) {
     [self loadURLForQuery:sanitizedQuery];
@@ -467,7 +467,7 @@
 }
 
 // Navigate to |query| from omnibox.
-- (void)loadURLForQuery:(const base::string16&)query {
+- (void)loadURLForQuery:(const std::u16string&)query {
   GURL searchURL;
   metrics::OmniboxInputType type = AutocompleteInput::Parse(
       query, std::string(), AutocompleteSchemeClassifierImpl(), nullptr,
diff --git a/ios/chrome/browser/ui/location_bar/location_bar_model_delegate_ios.h b/ios/chrome/browser/ui/location_bar/location_bar_model_delegate_ios.h
index 3901212..d5cd449 100644
--- a/ios/chrome/browser/ui/location_bar/location_bar_model_delegate_ios.h
+++ b/ios/chrome/browser/ui/location_bar/location_bar_model_delegate_ios.h
@@ -24,9 +24,9 @@
   ~LocationBarModelDelegateIOS() override;
 
   // LocationBarModelDelegate implementation:
-  base::string16 FormattedStringWithEquivalentMeaning(
+  std::u16string FormattedStringWithEquivalentMeaning(
       const GURL& url,
-      const base::string16& formatted_url) const override;
+      const std::u16string& formatted_url) const override;
   bool GetURL(GURL* url) const override;
   bool ShouldDisplayURL() const override;
   security_state::SecurityLevel GetSecurityLevel() const override;
diff --git a/ios/chrome/browser/ui/location_bar/location_bar_model_delegate_ios.mm b/ios/chrome/browser/ui/location_bar/location_bar_model_delegate_ios.mm
index 7947e35..107d94e 100644
--- a/ios/chrome/browser/ui/location_bar/location_bar_model_delegate_ios.mm
+++ b/ios/chrome/browser/ui/location_bar/location_bar_model_delegate_ios.mm
@@ -44,10 +44,10 @@
   return navigation_manager ? navigation_manager->GetVisibleItem() : nullptr;
 }
 
-base::string16
+std::u16string
 LocationBarModelDelegateIOS::FormattedStringWithEquivalentMeaning(
     const GURL& url,
-    const base::string16& formatted_url) const {
+    const std::u16string& formatted_url) const {
   return AutocompleteInput::FormattedStringWithEquivalentMeaning(
       url, formatted_url, AutocompleteSchemeClassifierImpl(), nullptr);
 }
diff --git a/ios/chrome/browser/ui/location_bar/location_bar_steady_view_mediator.mm b/ios/chrome/browser/ui/location_bar/location_bar_steady_view_mediator.mm
index 6017d88..7039c3ae 100644
--- a/ios/chrome/browser/ui/location_bar/location_bar_steady_view_mediator.mm
+++ b/ios/chrome/browser/ui/location_bar/location_bar_steady_view_mediator.mm
@@ -223,7 +223,7 @@
 - (NSString*)currentLocationString {
   if (self.webContentAreaShowingHTTPAuthDialog)
     return l10n_util::GetNSString(IDS_IOS_LOCATION_BAR_SIGN_IN);
-  base::string16 string = self.locationBarModel->GetURLForDisplay();
+  std::u16string string = self.locationBarModel->GetURLForDisplay();
   return base::SysUTF16ToNSString(string);
 }
 
diff --git a/ios/chrome/browser/ui/location_bar/location_bar_view_controller.mm b/ios/chrome/browser/ui/location_bar/location_bar_view_controller.mm
index 9b19db0..cf873c83 100644
--- a/ios/chrome/browser/ui/location_bar/location_bar_view_controller.mm
+++ b/ios/chrome/browser/ui/location_bar/location_bar_view_controller.mm
@@ -685,7 +685,7 @@
   LogLikelyInterestedDefaultBrowserUserActivity();
   RecordAction(UserMetricsAction("Mobile.OmniboxContextMenu.SearchCopiedText"));
   ClipboardRecentContent::GetInstance()->GetRecentTextFromClipboard(
-      base::BindOnce(^(base::Optional<base::string16> optionalText) {
+      base::BindOnce(^(base::Optional<std::u16string> optionalText) {
         if (!optionalText) {
           return;
         }
diff --git a/ios/chrome/browser/ui/main/scene_controller.mm b/ios/chrome/browser/ui/main/scene_controller.mm
index 37669a7..178cd996 100644
--- a/ios/chrome/browser/ui/main/scene_controller.mm
+++ b/ios/chrome/browser/ui/main/scene_controller.mm
@@ -974,16 +974,16 @@
   int numberOfTabs = self.currentInterface.browser->GetWebStateList()->count();
   DCHECK(numberOfTabs > 0);
   GURL url = webState->GetVisibleURL();
-  base::string16 urlText = url_formatter::FormatUrl(
+  std::u16string urlText = url_formatter::FormatUrl(
       url,
       url_formatter::kFormatUrlOmitDefaults |
           url_formatter::kFormatUrlOmitTrivialSubdomains |
           url_formatter::kFormatUrlOmitHTTPS |
           url_formatter::kFormatUrlTrimAfterHost,
       net::UnescapeRule::SPACES, nullptr, nullptr, nullptr);
-  base::string16 pattern =
+  std::u16string pattern =
       l10n_util::GetStringUTF16(IDS_IOS_APP_SWITCHER_SCENE_TITLE);
-  base::string16 formattedTitle =
+  std::u16string formattedTitle =
       base::i18n::MessageFormatter::FormatWithNamedArgs(
           pattern, "domain", urlText, "count", numberOfTabs - 1);
   return base::SysUTF16ToNSString(formattedTitle);
@@ -1743,7 +1743,7 @@
     return nil;
   // Returns URL of browser tab that is currently showing.
   GURL url = webState->GetVisibleURL();
-  base::string16 urlText = url_formatter::FormatUrl(url);
+  std::u16string urlText = url_formatter::FormatUrl(url);
   return base::SysUTF16ToNSString(urlText);
 }
 
diff --git a/ios/chrome/browser/ui/omnibox/chrome_omnibox_client_ios.h b/ios/chrome/browser/ui/omnibox/chrome_omnibox_client_ios.h
index 6a5e227..ca4c7e9 100644
--- a/ios/chrome/browser/ui/omnibox/chrome_omnibox_client_ios.h
+++ b/ios/chrome/browser/ui/omnibox/chrome_omnibox_client_ios.h
@@ -24,7 +24,7 @@
   std::unique_ptr<AutocompleteProviderClient> CreateAutocompleteProviderClient()
       override;
   std::unique_ptr<OmniboxNavigationObserver> CreateOmniboxNavigationObserver(
-      const base::string16& text,
+      const std::u16string& text,
       const AutocompleteMatch& match,
       const AutocompleteMatch& alternate_nav_match) override;
   bool CurrentPageExists() const override;
@@ -52,7 +52,7 @@
                        const BitmapFetchedCallback& on_bitmap_fetched) override;
   void OnURLOpenedFromOmnibox(OmniboxLog* log) override;
   void DiscardNonCommittedNavigations() override;
-  const base::string16& GetTitle() const override;
+  const std::u16string& GetTitle() const override;
   gfx::Image GetFavicon() const override;
 
  private:
diff --git a/ios/chrome/browser/ui/omnibox/chrome_omnibox_client_ios.mm b/ios/chrome/browser/ui/omnibox/chrome_omnibox_client_ios.mm
index 738a2ad..b3fc9713 100644
--- a/ios/chrome/browser/ui/omnibox/chrome_omnibox_client_ios.mm
+++ b/ios/chrome/browser/ui/omnibox/chrome_omnibox_client_ios.mm
@@ -50,7 +50,7 @@
 
 std::unique_ptr<OmniboxNavigationObserver>
 ChromeOmniboxClientIOS::CreateOmniboxNavigationObserver(
-    const base::string16& text,
+    const std::u16string& text,
     const AutocompleteMatch& match,
     const AutocompleteMatch& alternate_nav_match) {
   // TODO(blundell): Bring up an OmniboxNavigationObserver implementation on
@@ -212,7 +212,7 @@
       ->DiscardNonCommittedItems();
 }
 
-const base::string16& ChromeOmniboxClientIOS::GetTitle() const {
+const std::u16string& ChromeOmniboxClientIOS::GetTitle() const {
   return CurrentPageExists() ? controller_->GetWebState()->GetTitle()
                              : base::EmptyString16();
 }
diff --git a/ios/chrome/browser/ui/omnibox/omnibox_mediator.mm b/ios/chrome/browser/ui/omnibox/omnibox_mediator.mm
index 0345ec7..668d77ae 100644
--- a/ios/chrome/browser/ui/omnibox/omnibox_mediator.mm
+++ b/ios/chrome/browser/ui/omnibox/omnibox_mediator.mm
@@ -228,7 +228,7 @@
     // favicons may be fetched from Google server which doesn't suppoprt
     // icon URL.
     std::string emptyPageUrl = defaultProvider->url_ref().ReplaceSearchTerms(
-        TemplateURLRef::SearchTermsArgs(base::string16()),
+        TemplateURLRef::SearchTermsArgs(std::u16string()),
         _templateURLService->search_terms_data());
     self.faviconLoader->FaviconForPageUrl(
         GURL(emptyPageUrl), kOmniboxIconSize, kOmniboxIconSize,
diff --git a/ios/chrome/browser/ui/omnibox/omnibox_view_controller.mm b/ios/chrome/browser/ui/omnibox/omnibox_view_controller.mm
index 4733837..24be952 100644
--- a/ios/chrome/browser/ui/omnibox/omnibox_view_controller.mm
+++ b/ios/chrome/browser/ui/omnibox/omnibox_view_controller.mm
@@ -663,7 +663,7 @@
   RecordAction(UserMetricsAction("Mobile.OmniboxContextMenu.SearchCopiedText"));
   self.omniboxInteractedWhileFocused = YES;
   ClipboardRecentContent::GetInstance()->GetRecentTextFromClipboard(
-      base::BindOnce(^(base::Optional<base::string16> optionalText) {
+      base::BindOnce(^(base::Optional<std::u16string> optionalText) {
         if (!optionalText) {
           return;
         }
diff --git a/ios/chrome/browser/ui/omnibox/omnibox_view_ios.h b/ios/chrome/browser/ui/omnibox/omnibox_view_ios.h
index 83dc9c1..10f6611 100644
--- a/ios/chrome/browser/ui/omnibox/omnibox_view_ios.h
+++ b/ios/chrome/browser/ui/omnibox/omnibox_view_ios.h
@@ -55,7 +55,7 @@
       const AutocompleteMatch& match,
       WindowOpenDisposition disposition,
       const GURL& alternate_nav_url,
-      const base::string16& pasted_text,
+      const std::u16string& pasted_text,
       size_t selected_line,
       base::TimeTicks match_selection_timestamp,
       base::Optional<GURL> optional_gurl);
@@ -64,16 +64,16 @@
       const AutocompleteMatch& match,
       WindowOpenDisposition disposition,
       const GURL& alternate_nav_url,
-      const base::string16& pasted_text,
+      const std::u16string& pasted_text,
       size_t selected_line,
       base::TimeTicks match_selection_timestamp,
-      base::Optional<base::string16> optional_text);
+      base::Optional<std::u16string> optional_text);
 
   void OnReceiveClipboardImageForOpenMatch(
       const AutocompleteMatch& match,
       WindowOpenDisposition disposition,
       const GURL& alternate_nav_url,
-      const base::string16& pasted_text,
+      const std::u16string& pasted_text,
       size_t selected_line,
       base::TimeTicks match_selection_timestamp,
       base::Optional<gfx::Image> optional_image);
@@ -81,7 +81,7 @@
   void OnReceiveImageMatchForOpenMatch(
       WindowOpenDisposition disposition,
       const GURL& alternate_nav_url,
-      const base::string16& pasted_text,
+      const std::u16string& pasted_text,
       size_t selected_line,
       base::TimeTicks match_selection_timestamp,
       base::Optional<AutocompleteMatch> optional_match);
@@ -90,22 +90,22 @@
   void OpenMatch(const AutocompleteMatch& match,
                  WindowOpenDisposition disposition,
                  const GURL& alternate_nav_url,
-                 const base::string16& pasted_text,
+                 const std::u16string& pasted_text,
                  size_t selected_line,
                  base::TimeTicks match_selection_timestamp) override;
-  base::string16 GetText() const override;
-  void SetWindowTextAndCaretPos(const base::string16& text,
+  std::u16string GetText() const override;
+  void SetWindowTextAndCaretPos(const std::u16string& text,
                                 size_t caret_pos,
                                 bool update_popup,
                                 bool notify_text_changed) override;
   void SetCaretPos(size_t caret_pos) override;
   void RevertAll() override;
   void UpdatePopup() override;
-  void OnTemporaryTextMaybeChanged(const base::string16& display_text,
+  void OnTemporaryTextMaybeChanged(const std::u16string& display_text,
                                    const AutocompleteMatch& match,
                                    bool save_original_selection,
                                    bool notify_text_changed) override;
-  void OnInlineAutocompleteTextMaybeChanged(const base::string16& display_text,
+  void OnInlineAutocompleteTextMaybeChanged(const std::u16string& display_text,
                                             std::vector<gfx::Range> selections,
                                             size_t user_text_length) override;
   void OnBeforePossibleChange() override;
@@ -115,17 +115,17 @@
 
   // OmniboxView stubs.
   void Update() override {}
-  void SetAdditionalText(const base::string16& text) override {}
+  void SetAdditionalText(const std::u16string& text) override {}
   void EnterKeywordModeForDefaultSearchProvider() override {}
   bool IsSelectAll() const override;
-  void GetSelectionBounds(base::string16::size_type* start,
-                          base::string16::size_type* end) const override;
+  void GetSelectionBounds(std::u16string::size_type* start,
+                          std::u16string::size_type* end) const override;
   size_t GetAllSelectionsLength() const override;
   void SelectAll(bool reversed) override {}
   void SetFocus(bool is_user_initiated) override {}
   void ApplyCaretVisibility() override {}
   void OnInlineAutocompleteTextCleared() override {}
-  void OnRevertTemporaryText(const base::string16& display_text,
+  void OnRevertTemporaryText(const std::u16string& display_text,
                              const AutocompleteMatch& match) override {}
   gfx::NativeView GetNativeView() const override;
   gfx::NativeView GetRelativeWindowForPopup() const override;
@@ -152,11 +152,11 @@
       GURL favicon_url) override;
   void OnResultsChanged(const AutocompleteResult& result) override;
   void OnPopupDidScroll() override;
-  void OnSelectedMatchForAppending(const base::string16& str) override;
+  void OnSelectedMatchForAppending(const std::u16string& str) override;
   void OnSelectedMatchForOpening(AutocompleteMatch match,
                                  WindowOpenDisposition disposition,
                                  const GURL& alternate_nav_url,
-                                 const base::string16& pasted_text,
+                                 const std::u16string& pasted_text,
                                  size_t index) override;
 
   ChromeBrowserState* browser_state() { return browser_state_; }
@@ -192,7 +192,7 @@
 
   // Calculates text attributes according to |display_text| and
   // returns them in an autoreleased object.
-  NSAttributedString* ApplyTextAttributes(const base::string16& text);
+  NSAttributedString* ApplyTextAttributes(const std::u16string& text);
 
   // Removes the query refinement chip from the omnibox.
   void RemoveQueryRefinementChip();
diff --git a/ios/chrome/browser/ui/omnibox/omnibox_view_ios.mm b/ios/chrome/browser/ui/omnibox/omnibox_view_ios.mm
index d37b0ab..3b48efd8 100644
--- a/ios/chrome/browser/ui/omnibox/omnibox_view_ios.mm
+++ b/ios/chrome/browser/ui/omnibox/omnibox_view_ios.mm
@@ -105,7 +105,7 @@
 void OmniboxViewIOS::OpenMatch(const AutocompleteMatch& match,
                                WindowOpenDisposition disposition,
                                const GURL& alternate_nav_url,
-                               const base::string16& pasted_text,
+                               const std::u16string& pasted_text,
                                size_t selected_line,
                                base::TimeTicks match_selection_timestamp) {
   // It may be unsafe to modify the contents of the field.
@@ -150,7 +150,7 @@
     const AutocompleteMatch& match,
     WindowOpenDisposition disposition,
     const GURL& alternate_nav_url,
-    const base::string16& pasted_text,
+    const std::u16string& pasted_text,
     size_t selected_line,
     base::TimeTicks match_selection_timestamp,
     base::Optional<GURL> optional_gurl) {
@@ -172,15 +172,15 @@
     const AutocompleteMatch& match,
     WindowOpenDisposition disposition,
     const GURL& alternate_nav_url,
-    const base::string16& pasted_text,
+    const std::u16string& pasted_text,
     size_t selected_line,
     base::TimeTicks match_selection_timestamp,
-    base::Optional<base::string16> optional_text) {
+    base::Optional<std::u16string> optional_text) {
   if (!optional_text) {
     return;
   }
 
-  base::string16 text = std::move(optional_text).value();
+  std::u16string text = std::move(optional_text).value();
 
   ClipboardProvider* clipboard_provider =
       model()->autocomplete_controller()->clipboard_provider();
@@ -199,7 +199,7 @@
     const AutocompleteMatch& match,
     WindowOpenDisposition disposition,
     const GURL& alternate_nav_url,
-    const base::string16& pasted_text,
+    const std::u16string& pasted_text,
     size_t selected_line,
     base::TimeTicks match_selection_timestamp,
     base::Optional<gfx::Image> optional_image) {
@@ -221,7 +221,7 @@
 void OmniboxViewIOS::OnReceiveImageMatchForOpenMatch(
     WindowOpenDisposition disposition,
     const GURL& alternate_nav_url,
-    const base::string16& pasted_text,
+    const std::u16string& pasted_text,
     size_t selected_line,
     base::TimeTicks match_selection_timestamp,
     base::Optional<AutocompleteMatch> optional_match) {
@@ -232,11 +232,11 @@
                          pasted_text, selected_line, match_selection_timestamp);
 }
 
-base::string16 OmniboxViewIOS::GetText() const {
+std::u16string OmniboxViewIOS::GetText() const {
   return base::SysNSStringToUTF16([field_ displayedText]);
 }
 
-void OmniboxViewIOS::SetWindowTextAndCaretPos(const base::string16& text,
+void OmniboxViewIOS::SetWindowTextAndCaretPos(const std::u16string& text,
                                               size_t caret_pos,
                                               bool update_popup,
                                               bool notify_text_changed) {
@@ -303,7 +303,7 @@
 }
 
 void OmniboxViewIOS::OnTemporaryTextMaybeChanged(
-    const base::string16& display_text,
+    const std::u16string& display_text,
     const AutocompleteMatch& match,
     bool save_original_selection,
     bool notify_text_changed) {
@@ -313,7 +313,7 @@
 }
 
 void OmniboxViewIOS::OnInlineAutocompleteTextMaybeChanged(
-    const base::string16& display_text,
+    const std::u16string& display_text,
     std::vector<gfx::Range> selections,
     size_t user_text_length) {
   if (display_text == GetText())
@@ -364,8 +364,8 @@
   return false;
 }
 
-void OmniboxViewIOS::GetSelectionBounds(base::string16::size_type* start,
-                                        base::string16::size_type* end) const {
+void OmniboxViewIOS::GetSelectionBounds(std::u16string::size_type* start,
+                                        std::u16string::size_type* end) const {
   if ([field_ isFirstResponder]) {
     NSRange selected_range = [field_ selectedNSRange];
     *start = selected_range.location;
@@ -537,8 +537,8 @@
 
   // Sanitize pasted text.
   if (model() && model()->is_pasting()) {
-    base::string16 pastedText = base::SysNSStringToUTF16(field_.text);
-    base::string16 newText = OmniboxView::SanitizeTextForPaste(pastedText);
+    std::u16string pastedText = base::SysNSStringToUTF16(field_.text);
+    std::u16string newText = OmniboxView::SanitizeTextForPaste(pastedText);
     if (pastedText != newText) {
       [field_ setText:base::SysUTF16ToNSString(newText)];
     }
@@ -632,7 +632,7 @@
     start_location =
         [field_ offsetFromPosition:start toPosition:[selected_range start]];
   }
-  base::string16 text = base::SysNSStringToUTF16(selectedText);
+  std::u16string text = base::SysNSStringToUTF16(selectedText);
 
   GURL url;
   bool write_url = false;
@@ -676,7 +676,7 @@
 }
 
 NSAttributedString* OmniboxViewIOS::ApplyTextAttributes(
-    const base::string16& text) {
+    const std::u16string& text) {
   NSMutableAttributedString* as = [[NSMutableAttributedString alloc]
       initWithString:base::SysUTF16ToNSString(text)];
   // Cache a pointer to the attributed string to allow the superclass'
@@ -843,7 +843,7 @@
   }
 }
 
-void OmniboxViewIOS::OnSelectedMatchForAppending(const base::string16& str) {
+void OmniboxViewIOS::OnSelectedMatchForAppending(const std::u16string& str) {
   // Exit preedit state and append the match. Refocus if necessary.
   if ([field_ isPreEditing])
     [field_ exitPreEditState];
@@ -858,7 +858,7 @@
     AutocompleteMatch match,
     WindowOpenDisposition disposition,
     const GURL& alternate_nav_url,
-    const base::string16& pasted_text,
+    const std::u16string& pasted_text,
     size_t index) {
   this->OpenMatch(match, disposition, alternate_nav_url, pasted_text, index,
                   base::TimeTicks());
diff --git a/ios/chrome/browser/ui/omnibox/popup/autocomplete_match_formatter.mm b/ios/chrome/browser/ui/omnibox/popup/autocomplete_match_formatter.mm
index 1028530..c654c68 100644
--- a/ios/chrome/browser/ui/omnibox/popup/autocomplete_match_formatter.mm
+++ b/ios/chrome/browser/ui/omnibox/popup/autocomplete_match_formatter.mm
@@ -177,7 +177,7 @@
   } else {
     // The text should be search term (|_match.contents|) for searches,
     // otherwise page title (|_match.description|).
-    base::string16 textString =
+    std::u16string textString =
         !self.isURL ? _match.contents : _match.description;
     NSString* text = base::SysUTF16ToNSString(textString);
 
@@ -314,7 +314,7 @@
 - (NSAttributedString*)
     attributedStringForTextfield:(const SuggestionAnswer::TextField*)field
           useDeemphasizedStyling:(BOOL)useDeemphasizedStyling {
-  const base::string16& string = field->text();
+  const std::u16string& string = field->text();
 
   NSString* unescapedString =
       base::SysUTF16ToNSString(net::UnescapeForHTML(string));
diff --git a/ios/chrome/browser/ui/omnibox/popup/omnibox_popup_view_ios.mm b/ios/chrome/browser/ui/omnibox/popup/omnibox_popup_view_ios.mm
index b48ab963..72d00cb 100644
--- a/ios/chrome/browser/ui/omnibox/popup/omnibox_popup_view_ios.mm
+++ b/ios/chrome/browser/ui/omnibox/popup/omnibox_popup_view_ios.mm
@@ -147,14 +147,14 @@
         ClipboardRecentContent::GetInstance()->GetClipboardContentAge());
   }
   delegate_->OnSelectedMatchForOpening(match, disposition, GURL(),
-                                       base::string16(), row);
+                                       std::u16string(), row);
 }
 
 void OmniboxPopupViewIOS::OnMatchSelectedForAppending(
     const AutocompleteMatch& match) {
   // Make a defensive copy of |match.fill_into_edit|, as CopyToOmnibox() will
   // trigger a new round of autocomplete and modify |match|.
-  base::string16 fill_into_edit(match.fill_into_edit);
+  std::u16string fill_into_edit(match.fill_into_edit);
 
   // If the match is not a URL, append a whitespace to the end of it.
   if (AutocompleteMatch::IsSearchType(match.type)) {
diff --git a/ios/chrome/browser/ui/omnibox/popup/omnibox_popup_view_suggestions_delegate.h b/ios/chrome/browser/ui/omnibox/popup/omnibox_popup_view_suggestions_delegate.h
index 53ee4fd1..c11367bd 100644
--- a/ios/chrome/browser/ui/omnibox/popup/omnibox_popup_view_suggestions_delegate.h
+++ b/ios/chrome/browser/ui/omnibox/popup/omnibox_popup_view_suggestions_delegate.h
@@ -33,12 +33,12 @@
   virtual void OnPopupDidScroll() = 0;
   // Called when the user chooses a suggestion from the popup via the "append"
   // button.
-  virtual void OnSelectedMatchForAppending(const base::string16& str) = 0;
+  virtual void OnSelectedMatchForAppending(const std::u16string& str) = 0;
   // Called when a match was chosen for opening.
   virtual void OnSelectedMatchForOpening(AutocompleteMatch match,
                                          WindowOpenDisposition disposition,
                                          const GURL& alternate_nav_url,
-                                         const base::string16& pasted_text,
+                                         const std::u16string& pasted_text,
                                          size_t index) = 0;
 };
 
diff --git a/ios/chrome/browser/ui/overlays/infobar_modal/translate/translate_infobar_modal_overlay_mediator.mm b/ios/chrome/browser/ui/overlays/infobar_modal/translate/translate_infobar_modal_overlay_mediator.mm
index 869fcac..51d6b5e 100644
--- a/ios/chrome/browser/ui/overlays/infobar_modal/translate/translate_infobar_modal_overlay_mediator.mm
+++ b/ios/chrome/browser/ui/overlays/infobar_modal/translate/translate_infobar_modal_overlay_mediator.mm
@@ -228,10 +228,10 @@
                           self.config->language_names().at(languageIndex))]);
 
   self.newSourceLanguageIndex = languageIndex;
-  base::string16 sourceLanguage =
+  std::u16string sourceLanguage =
       self.config->language_names().at(languageIndex);
 
-  base::string16 targetLanguage = self.config->target_language_name();
+  std::u16string targetLanguage = self.config->target_language_name();
   if (self.newTargetLanguageIndex != kInvalidLanguageIndex) {
     targetLanguage =
         self.config->language_names().at(self.newTargetLanguageIndex);
@@ -253,10 +253,10 @@
                           self.config->language_names().at(languageIndex))]);
 
   self.newTargetLanguageIndex = languageIndex;
-  base::string16 targetLanguage =
+  std::u16string targetLanguage =
       self.config->language_names().at(languageIndex);
 
-  base::string16 sourceLanguage = self.config->source_language_name();
+  std::u16string sourceLanguage = self.config->source_language_name();
   if (self.newSourceLanguageIndex != kInvalidLanguageIndex) {
     sourceLanguage =
         self.config->language_names().at(self.newSourceLanguageIndex);
@@ -277,14 +277,14 @@
   // In the instance that the user has already selected a different original
   // language, then we should be using that language as the one to potentially
   // check or not show.
-  base::string16 originalLanguageName =
+  std::u16string originalLanguageName =
       self.newSourceLanguageIndex != kInvalidLanguageIndex
           ? self.config->language_names().at(self.newSourceLanguageIndex)
           : self.config->source_language_name();
   // In the instance that the user has already selected a different target
   // language, then we should be using that language as the one to potentially
   // check or not show.
-  base::string16 targetLanguageName =
+  std::u16string targetLanguageName =
       self.newTargetLanguageIndex != kInvalidLanguageIndex
           ? self.config->language_names().at(self.newTargetLanguageIndex)
           : self.config->target_language_name();
diff --git a/ios/chrome/browser/ui/page_info/page_info_site_security_mediator.mm b/ios/chrome/browser/ui/page_info/page_info_site_security_mediator.mm
index a809b10..df418fa 100644
--- a/ios/chrome/browser/ui/page_info/page_info_site_security_mediator.mm
+++ b/ios/chrome/browser/ui/page_info/page_info_site_security_mediator.mm
@@ -148,7 +148,7 @@
 
   // The remaining states are valid HTTPS, or HTTPS with minor errors.
 
-  base::string16 issuerName(
+  std::u16string issuerName(
       base::UTF8ToUTF16(status.certificate->issuer().GetDisplayName()));
   // Have certificateDetails be an empty string to help building the message.
   NSString* certificateDetails = @"";
diff --git a/ios/chrome/browser/ui/popup_menu/popup_menu_action_handler.mm b/ios/chrome/browser/ui/popup_menu/popup_menu_action_handler.mm
index 268fa0e3..84971208 100644
--- a/ios/chrome/browser/ui/popup_menu/popup_menu_action_handler.mm
+++ b/ios/chrome/browser/ui/popup_menu/popup_menu_action_handler.mm
@@ -199,7 +199,7 @@
       ClipboardRecentContent* clipboardRecentContent =
           ClipboardRecentContent::GetInstance();
       clipboardRecentContent->GetRecentTextFromClipboard(
-          base::BindOnce(^(base::Optional<base::string16> optional_text) {
+          base::BindOnce(^(base::Optional<std::u16string> optional_text) {
             if (!optional_text) {
               return;
             }
diff --git a/ios/chrome/browser/ui/qr_scanner/qr_scanner_app_interface.mm b/ios/chrome/browser/ui/qr_scanner/qr_scanner_app_interface.mm
index e900db5..8f2008a1 100644
--- a/ios/chrome/browser/ui/qr_scanner/qr_scanner_app_interface.mm
+++ b/ios/chrome/browser/ui/qr_scanner/qr_scanner_app_interface.mm
@@ -185,7 +185,7 @@
 
 // Returns the expected title for the dialog which is presented for |state|.
 + (NSString*)dialogTitleForState:(CameraState)state {
-  base::string16 appName = base::UTF8ToUTF16(version_info::GetProductName());
+  std::u16string appName = base::UTF8ToUTF16(version_info::GetProductName());
   switch (state) {
     case scanner::CAMERA_AVAILABLE:
     case scanner::CAMERA_NOT_LOADED:
diff --git a/ios/chrome/browser/ui/recent_tabs/synced_sessions.h b/ios/chrome/browser/ui/recent_tabs/synced_sessions.h
index 7478120..9694366 100644
--- a/ios/chrome/browser/ui/recent_tabs/synced_sessions.h
+++ b/ios/chrome/browser/ui/recent_tabs/synced_sessions.h
@@ -34,7 +34,7 @@
   // Uniquely identifies this tab in its distant session.
   SessionID tab_id;
   // The title of the page shown in this DistantTab.
-  base::string16 title;
+  std::u16string title;
   // The url shown in this DistantTab.
   GURL virtual_url;
   // Returns a hash the fields |virtual_url| and |title|.
diff --git a/ios/chrome/browser/ui/sad_tab/sad_tab_view.mm b/ios/chrome/browser/ui/sad_tab/sad_tab_view.mm
index c140fee..d9b12b2b 100644
--- a/ios/chrome/browser/ui/sad_tab/sad_tab_view.mm
+++ b/ios/chrome/browser/ui/sad_tab/sad_tab_view.mm
@@ -248,7 +248,7 @@
   NSString* label = nil;
   switch (self.mode) {
     case SadTabViewMode::RELOAD: {
-      base::string16 footerLinkText(
+      std::u16string footerLinkText(
           l10n_util::GetStringUTF16(IDS_SAD_TAB_HELP_LINK));
       label = base::SysUTF16ToNSString(
           l10n_util::GetStringFUTF16(IDS_SAD_TAB_HELP_MESSAGE, footerLinkText));
@@ -265,7 +265,7 @@
   NSString* label = nil;
   switch (self.mode) {
     case SadTabViewMode::RELOAD: {
-      base::string16 footerLinkText(
+      std::u16string footerLinkText(
           l10n_util::GetStringUTF16(IDS_SAD_TAB_HELP_LINK));
       label = base::SysUTF16ToNSString(footerLinkText);
     } break;
diff --git a/ios/chrome/browser/ui/settings/google_services/accounts_table_view_controller.mm b/ios/chrome/browser/ui/settings/google_services/accounts_table_view_controller.mm
index 38ae975..a5f3318 100644
--- a/ios/chrome/browser/ui/settings/google_services/accounts_table_view_controller.mm
+++ b/ios/chrome/browser/ui/settings/google_services/accounts_table_view_controller.mm
@@ -302,7 +302,7 @@
   DCHECK(!base::FeatureList::IsEnabled(signin::kSimplifySignOutIOS));
   TableViewLinkHeaderFooterItem* footer = [[TableViewLinkHeaderFooterItem alloc]
       initWithType:ItemTypeSignOutManagedAccountFooter];
-  base::string16 hostedDomain = HostedDomainForPrimaryAccount(_browser);
+  std::u16string hostedDomain = HostedDomainForPrimaryAccount(_browser);
   footer.text = l10n_util::GetNSStringF(
       IDS_IOS_DISCONNECT_MANAGED_ACCOUNT_FOOTER_INFO_MOBILE, hostedDomain);
   return footer;
diff --git a/ios/chrome/browser/ui/settings/language/language_settings_mediator_unittest.mm b/ios/chrome/browser/ui/settings/language/language_settings_mediator_unittest.mm
index e167860..6ea6f2c 100644
--- a/ios/chrome/browser/ui/settings/language/language_settings_mediator_unittest.mm
+++ b/ios/chrome/browser/ui/settings/language/language_settings_mediator_unittest.mm
@@ -44,9 +44,9 @@
 // Constant for timeout while waiting for asynchronous sync operations.
 const NSTimeInterval kSyncOperationTimeout = 10.0;
 
-std::vector<base::string16> ExtractDisplayNamesFromLanguageItems(
+std::vector<std::u16string> ExtractDisplayNamesFromLanguageItems(
     NSArray<LanguageItem*>* language_items) {
-  __block std::vector<base::string16> output;
+  __block std::vector<std::u16string> output;
   [language_items enumerateObjectsUsingBlock:^(LanguageItem* item,
                                                NSUInteger index, BOOL* stop) {
     output.push_back(base::SysNSStringToUTF16(item.text));
@@ -185,9 +185,9 @@
 // and excludes languages already in the accept languages list.
 TEST_F(LanguageSettingsMediatorTest, TestSupportedLanguagesItems) {
   NSArray<LanguageItem*>* language_items = [mediator() supportedLanguagesItems];
-  std::vector<base::string16> display_names =
+  std::vector<std::u16string> display_names =
       ExtractDisplayNamesFromLanguageItems(language_items);
-  std::vector<base::string16> sorted(display_names);
+  std::vector<std::u16string> sorted(display_names);
   l10n_util::SortVectorWithStringKey("en-US", &sorted, false);
   EXPECT_THAT(display_names, ElementsAreArray(sorted));
 
diff --git a/ios/chrome/browser/ui/settings/safety_check/safety_check_mediator.mm b/ios/chrome/browser/ui/settings/safety_check/safety_check_mediator.mm
index 0ed239c..618f620 100644
--- a/ios/chrome/browser/ui/settings/safety_check/safety_check_mediator.mm
+++ b/ios/chrome/browser/ui/settings/safety_check/safety_check_mediator.mm
@@ -1207,7 +1207,7 @@
 
   base::TimeDelta elapsedTime = base::Time::Now() - lastCompletedCheck;
 
-  base::string16 timestamp;
+  std::u16string timestamp;
   // If check found issues less than 1 minuete ago.
   if (elapsedTime < base::TimeDelta::FromMinutes(1)) {
     timestamp = l10n_util::GetStringUTF16(IDS_IOS_CHECK_FINISHED_JUST_NOW);
diff --git a/ios/chrome/browser/ui/settings/search_engine_table_view_controller.mm b/ios/chrome/browser/ui/settings/search_engine_table_view_controller.mm
index 35e5746b..17a6ec60 100644
--- a/ios/chrome/browser/ui/settings/search_engine_table_view_controller.mm
+++ b/ios/chrome/browser/ui/settings/search_engine_table_view_controller.mm
@@ -452,7 +452,7 @@
     // favicons may be fetched from Google server which doesn't suppoprt
     // icon URL.
     std::string emptyPageUrl = templateURL->url_ref().ReplaceSearchTerms(
-        TemplateURLRef::SearchTermsArgs(base::string16()),
+        TemplateURLRef::SearchTermsArgs(std::u16string()),
         _templateURLService->search_terms_data());
     item.URL = GURL(emptyPageUrl);
   } else {
diff --git a/ios/chrome/browser/ui/settings/search_engine_table_view_controller_unittest.mm b/ios/chrome/browser/ui/settings/search_engine_table_view_controller_unittest.mm
index 5624c168..db1c7c4 100644
--- a/ios/chrome/browser/ui/settings/search_engine_table_view_controller_unittest.mm
+++ b/ios/chrome/browser/ui/settings/search_engine_table_view_controller_unittest.mm
@@ -156,7 +156,7 @@
     data.SetURL(expected_searchable_url.possibly_invalid_spec());
     const std::string expected_url =
         TemplateURL(data).url_ref().ReplaceSearchTerms(
-            TemplateURLRef::SearchTermsArgs(base::string16()),
+            TemplateURLRef::SearchTermsArgs(std::u16string()),
             template_url_service_->search_terms_data());
     CheckItem(base::SysUTF8ToNSString(expected_text),
               base::SysUTF8ToNSString(expected_text), GURL(expected_url),
@@ -195,7 +195,7 @@
     CheckItem(base::SysUTF16ToNSString(turl->short_name()),
               base::SysUTF16ToNSString(turl->keyword()),
               GURL(turl->url_ref().ReplaceSearchTerms(
-                  TemplateURLRef::SearchTermsArgs(base::string16()),
+                  TemplateURLRef::SearchTermsArgs(std::u16string()),
                   template_url_service_->search_terms_data())),
               expected_checked, section, row, enabled);
   }
@@ -484,7 +484,7 @@
       chrome_browser_state_->GetTestingPrefService()->GetDictionary(
           DefaultSearchManager::kDefaultSearchProviderDataPrefName);
   ASSERT_TRUE(searchProviderDict);
-  base::string16 short_name;
+  std::u16string short_name;
   EXPECT_TRUE(searchProviderDict->GetString(DefaultSearchManager::kShortName,
                                             &short_name));
   EXPECT_EQ(url_c1->short_name(), short_name);
diff --git a/ios/chrome/browser/ui/settings/sync/sync_encryption_passphrase_table_view_controller.mm b/ios/chrome/browser/ui/settings/sync/sync_encryption_passphrase_table_view_controller.mm
index fa39d05..5ed1c0d 100644
--- a/ios/chrome/browser/ui/settings/sync/sync_encryption_passphrase_table_view_controller.mm
+++ b/ios/chrome/browser/ui/settings/sync/sync_encryption_passphrase_table_view_controller.mm
@@ -104,7 +104,7 @@
       base::Time passphrase_time =
           service->GetUserSettings()->GetExplicitPassphraseTime();
       if (!passphrase_time.is_null()) {
-        base::string16 passphrase_time_str =
+        std::u16string passphrase_time_str =
             base::TimeFormatShortDate(passphrase_time);
         _headerMessage = l10n_util::GetNSStringF(
             IDS_IOS_SYNC_ENTER_PASSPHRASE_BODY_WITH_EMAIL_AND_DATE,
diff --git a/ios/chrome/browser/ui/settings/sync/utils/sync_error_infobar_delegate.h b/ios/chrome/browser/ui/settings/sync/utils/sync_error_infobar_delegate.h
index dbb44a46..0aa8e7e 100644
--- a/ios/chrome/browser/ui/settings/sync/utils/sync_error_infobar_delegate.h
+++ b/ios/chrome/browser/ui/settings/sync/utils/sync_error_infobar_delegate.h
@@ -43,9 +43,9 @@
   InfoBarIdentifier GetIdentifier() const override;
 
   // ConfirmInfoBarDelegate implementation.
-  base::string16 GetMessageText() const override;
+  std::u16string GetMessageText() const override;
   int GetButtons() const override;
-  base::string16 GetButtonLabel(InfoBarButton button) const override;
+  std::u16string GetButtonLabel(InfoBarButton button) const override;
   gfx::Image GetIcon() const override;
   bool Accept() override;
 
@@ -56,8 +56,8 @@
   gfx::Image icon_;
   ChromeBrowserState* browser_state_;
   SyncSetupService::SyncServiceState error_state_;
-  base::string16 message_;
-  base::string16 button_text_;
+  std::u16string message_;
+  std::u16string button_text_;
   id<SyncPresenter> presenter_;
 
   DISALLOW_COPY_AND_ASSIGN(SyncErrorInfoBarDelegate);
diff --git a/ios/chrome/browser/ui/settings/sync/utils/sync_error_infobar_delegate.mm b/ios/chrome/browser/ui/settings/sync/utils/sync_error_infobar_delegate.mm
index b01d0d5..5f4d381 100644
--- a/ios/chrome/browser/ui/settings/sync/utils/sync_error_infobar_delegate.mm
+++ b/ios/chrome/browser/ui/settings/sync/utils/sync_error_infobar_delegate.mm
@@ -72,7 +72,7 @@
   return SYNC_ERROR_INFOBAR_DELEGATE_IOS;
 }
 
-base::string16 SyncErrorInfoBarDelegate::GetMessageText() const {
+std::u16string SyncErrorInfoBarDelegate::GetMessageText() const {
   return message_;
 }
 
@@ -80,7 +80,7 @@
   return button_text_.empty() ? BUTTON_NONE : BUTTON_OK;
 }
 
-base::string16 SyncErrorInfoBarDelegate::GetButtonLabel(
+std::u16string SyncErrorInfoBarDelegate::GetButtonLabel(
     InfoBarButton button) const {
   DCHECK(button == BUTTON_OK);
   return button_text_;
diff --git a/ios/chrome/browser/ui/sharing/sharing_coordinator_unittest.mm b/ios/chrome/browser/ui/sharing/sharing_coordinator_unittest.mm
index 31c9615..cfccc5b 100644
--- a/ios/chrome/browser/ui/sharing/sharing_coordinator_unittest.mm
+++ b/ios/chrome/browser/ui/sharing/sharing_coordinator_unittest.mm
@@ -60,7 +60,7 @@
   }
 
   MOCK_METHOD2(ExecuteJavaScript,
-               void(const base::string16&, JavaScriptResultCallback));
+               void(const std::u16string&, JavaScriptResultCallback));
 };
 
 }  // namespace
@@ -147,7 +147,7 @@
 
   EXPECT_CALL(*test_web_state, ExecuteJavaScript(testing::_, testing::_))
       .WillOnce(testing::Invoke(
-          [&](const base::string16& javascript,
+          [&](const std::u16string& javascript,
               base::OnceCallback<void(const base::Value*)> callback) {
             std::move(callback).Run(&url_value);
           }));
diff --git a/ios/chrome/browser/ui/translate/legacy_translate_infobar_mediator.mm b/ios/chrome/browser/ui/translate/legacy_translate_infobar_mediator.mm
index 4b5173a..9b80c5d 100644
--- a/ios/chrome/browser/ui/translate/legacy_translate_infobar_mediator.mm
+++ b/ios/chrome/browser/ui/translate/legacy_translate_infobar_mediator.mm
@@ -136,7 +136,7 @@
 // Returns the menu items for the translate option selection popup menu.
 - (NSArray<NSArray<TableViewItem<PopupMenuItem>*>*>*)
     translateOptionSelectionItems {
-  base::string16 sourceLanguageName =
+  std::u16string sourceLanguageName =
       self.infobarDelegate->source_language_name();
 
   TranslatePopupMenuItem* selectTargetLanguageItem =
diff --git a/ios/chrome/browser/ui/util/i18n_string.mm b/ios/chrome/browser/ui/util/i18n_string.mm
index 9cf28a6..f2a53d0 100644
--- a/ios/chrome/browser/ui/util/i18n_string.mm
+++ b/ios/chrome/browser/ui/util/i18n_string.mm
@@ -15,7 +15,7 @@
 #endif
 
 NSString* AdjustStringForLocaleDirection(NSString* text) {
-  base::string16 converted_text = base::SysNSStringToUTF16(text);
+  std::u16string converted_text = base::SysNSStringToUTF16(text);
   bool has_changed =
       base::i18n::AdjustStringForLocaleDirection(&converted_text);
   if (has_changed) {
diff --git a/ios/chrome/browser/upgrade/upgrade_center.mm b/ios/chrome/browser/upgrade/upgrade_center.mm
index 98bc4c703..f1466da 100644
--- a/ios/chrome/browser/upgrade/upgrade_center.mm
+++ b/ios/chrome/browser/upgrade/upgrade_center.mm
@@ -88,7 +88,7 @@
     return icon_;
   }
 
-  base::string16 GetMessageText() const override {
+  std::u16string GetMessageText() const override {
     return l10n_util::GetStringUTF16(IDS_IOS_UPGRADE_AVAILABLE);
   }
 
@@ -99,7 +99,7 @@
 
   int GetButtons() const override { return BUTTON_OK; }
 
-  base::string16 GetButtonLabel(InfoBarButton button) const override {
+  std::u16string GetButtonLabel(InfoBarButton button) const override {
     DCHECK(button == BUTTON_OK);
     return l10n_util::GetStringUTF16(IDS_IOS_UPGRADE_AVAILABLE_BUTTON);
   }
diff --git a/ios/chrome/browser/voice/speech_input_locale.h b/ios/chrome/browser/voice/speech_input_locale.h
index 9fdb108..ae85160 100644
--- a/ios/chrome/browser/voice/speech_input_locale.h
+++ b/ios/chrome/browser/voice/speech_input_locale.h
@@ -16,7 +16,7 @@
   // The locale code in canonical form (e.g. "en-US", "fr-FR").
   std::string code;
   // The display name (e.g. "English U.S.", "Français (France)").
-  base::string16 display_name;
+  std::u16string display_name;
 } SpeechInputLocale;
 
 }  // namespace voice
diff --git a/ios/chrome/browser/web/blocked_popup_tab_helper.mm b/ios/chrome/browser/web/blocked_popup_tab_helper.mm
index cfbb1cd..5ba7c53 100644
--- a/ios/chrome/browser/web/blocked_popup_tab_helper.mm
+++ b/ios/chrome/browser/web/blocked_popup_tab_helper.mm
@@ -58,13 +58,13 @@
     return icon_;
   }
 
-  base::string16 GetMessageText() const override {
+  std::u16string GetMessageText() const override {
     return l10n_util::GetStringFUTF16(
         IDS_IOS_POPUPS_BLOCKED_MOBILE,
         base::UTF8ToUTF16(base::StringPrintf("%" PRIuS, popups_.size())));
   }
 
-  base::string16 GetButtonLabel(InfoBarButton button) const override {
+  std::u16string GetButtonLabel(InfoBarButton button) const override {
     DCHECK(button == BUTTON_OK);
     return l10n_util::GetStringUTF16(IDS_IOS_POPUPS_ALWAYS_SHOW_MOBILE);
   }
diff --git a/ios/chrome/browser/web/chrome_web_client.h b/ios/chrome/browser/web/chrome_web_client.h
index bcde31f..97916aea 100644
--- a/ios/chrome/browser/web/chrome_web_client.h
+++ b/ios/chrome/browser/web/chrome_web_client.h
@@ -28,9 +28,9 @@
                                    web::WebState* web_state) const override;
   void AddSerializableData(web::SerializableUserDataManager* user_data_manager,
                            web::WebState* web_state) override;
-  base::string16 GetPluginNotSupportedText() const override;
+  std::u16string GetPluginNotSupportedText() const override;
   std::string GetUserAgent(web::UserAgentType type) const override;
-  base::string16 GetLocalizedString(int message_id) const override;
+  std::u16string GetLocalizedString(int message_id) const override;
   base::StringPiece GetDataResource(
       int resource_id,
       ui::ScaleFactor scale_factor) const override;
diff --git a/ios/chrome/browser/web/chrome_web_client.mm b/ios/chrome/browser/web/chrome_web_client.mm
index 8001b6f1..c2cb902 100644
--- a/ios/chrome/browser/web/chrome_web_client.mm
+++ b/ios/chrome/browser/web/chrome_web_client.mm
@@ -228,7 +228,7 @@
                                                               web_state);
 }
 
-base::string16 ChromeWebClient::GetPluginNotSupportedText() const {
+std::u16string ChromeWebClient::GetPluginNotSupportedText() const {
   return l10n_util::GetStringUTF16(IDS_PLUGIN_NOT_SUPPORTED);
 }
 
@@ -253,7 +253,7 @@
   return web::BuildMobileUserAgent(GetMobileProduct());
 }
 
-base::string16 ChromeWebClient::GetLocalizedString(int message_id) const {
+std::u16string ChromeWebClient::GetLocalizedString(int message_id) const {
   return l10n_util::GetStringUTF16(message_id);
 }
 
diff --git a/ios/chrome/browser/web/forms_egtest.mm b/ios/chrome/browser/web/forms_egtest.mm
index 5430bb564..5189809 100644
--- a/ios/chrome/browser/web/forms_egtest.mm
+++ b/ios/chrome/browser/web/forms_egtest.mm
@@ -351,7 +351,7 @@
 
   // Mimic |web::GetDisplayTitleForUrl| behavior which uses FormatUrl
   // internally. It can't be called directly from the EarlGrey 2 test process.
-  base::string16 title = url_formatter::FormatUrl(destinationURL);
+  std::u16string title = url_formatter::FormatUrl(destinationURL);
   id<GREYMatcher> historyItem = grey_text(base::SysUTF16ToNSString(title));
   [[EarlGrey selectElementWithMatcher:historyItem] performAction:grey_tap()];
   [ChromeEarlGrey waitForPageToFinishLoading];
diff --git a/ios/components/security_interstitials/ios_security_interstitial_page.h b/ios/components/security_interstitials/ios_security_interstitial_page.h
index 60fd9d3..e8d5a07d 100644
--- a/ios/components/security_interstitials/ios_security_interstitial_page.h
+++ b/ios/components/security_interstitials/ios_security_interstitial_page.h
@@ -62,7 +62,7 @@
   virtual void AfterShow() = 0;
 
   // Returns the formatted host name for the request url.
-  base::string16 GetFormattedHostName() const;
+  std::u16string GetFormattedHostName() const;
 
   web::WebState* web_state() const { return web_state_; }
   const GURL& request_url() const { return request_url_; }
diff --git a/ios/components/security_interstitials/ios_security_interstitial_page.mm b/ios/components/security_interstitials/ios_security_interstitial_page.mm
index 78a36cfb..24ebad0d 100644
--- a/ios/components/security_interstitials/ios_security_interstitial_page.mm
+++ b/ios/components/security_interstitials/ios_security_interstitial_page.mm
@@ -88,7 +88,7 @@
   return true;
 }
 
-base::string16 IOSSecurityInterstitialPage::GetFormattedHostName() const {
+std::u16string IOSSecurityInterstitialPage::GetFormattedHostName() const {
   return security_interstitials::common_string_util::GetFormattedHostName(
       request_url_);
 }
diff --git a/ios/components/security_interstitials/legacy_tls/legacy_tls_blocking_page.mm b/ios/components/security_interstitials/legacy_tls/legacy_tls_blocking_page.mm
index 421f9b4..0de23c29 100644
--- a/ios/components/security_interstitials/legacy_tls/legacy_tls_blocking_page.mm
+++ b/ios/components/security_interstitials/legacy_tls/legacy_tls_blocking_page.mm
@@ -54,7 +54,7 @@
   load_time_data->SetBoolean("bad_clock", false);
   load_time_data->SetString("type", "LEGACY_TLS");
 
-  const base::string16 hostname(
+  const std::u16string hostname(
       security_interstitials::common_string_util::GetFormattedHostName(
           request_url_));
   security_interstitials::common_string_util::PopulateLegacyTLSStrings(
diff --git a/ios/web/download/download_task_impl.h b/ios/web/download/download_task_impl.h
index 9a74943..951bbc8 100644
--- a/ios/web/download/download_task_impl.h
+++ b/ios/web/download/download_task_impl.h
@@ -77,7 +77,7 @@
   std::string GetContentDisposition() const override;
   std::string GetOriginalMimeType() const override;
   std::string GetMimeType() const override;
-  base::string16 GetSuggestedFilename() const override;
+  std::u16string GetSuggestedFilename() const override;
   bool HasPerformedBackgroundDownload() const override;
   void AddObserver(DownloadTaskObserver* observer) override;
   void RemoveObserver(DownloadTaskObserver* observer) override;
diff --git a/ios/web/download/download_task_impl.mm b/ios/web/download/download_task_impl.mm
index 61b05b7..e356589 100644
--- a/ios/web/download/download_task_impl.mm
+++ b/ios/web/download/download_task_impl.mm
@@ -322,7 +322,7 @@
   return mime_type_;
 }
 
-base::string16 DownloadTaskImpl::GetSuggestedFilename() const {
+std::u16string DownloadTaskImpl::GetSuggestedFilename() const {
   DCHECK_CURRENTLY_ON(web::WebThread::UI);
   return net::GetSuggestedFilename(GetOriginalUrl(), GetContentDisposition(),
                                    /*referrer_charset=*/std::string(),
diff --git a/ios/web/js_features/context_menu/context_menu_params_utils.mm b/ios/web/js_features/context_menu/context_menu_params_utils.mm
index 71b36ab..c2848ff 100644
--- a/ios/web/js_features/context_menu/context_menu_params_utils.mm
+++ b/ios/web/js_features/context_menu/context_menu_params_utils.mm
@@ -31,7 +31,7 @@
     if (link_url.SchemeIs(url::kJavaScriptScheme)) {
       title = @"JavaScript";
     } else {
-      base::string16 URLText = url_formatter::FormatUrl(link_url);
+      std::u16string URLText = url_formatter::FormatUrl(link_url);
       title = base::SysUTF16ToNSString(URLText);
     }
   }
diff --git a/ios/web/js_features/context_menu/context_menu_params_utils_unittest.mm b/ios/web/js_features/context_menu/context_menu_params_utils_unittest.mm
index 1551f64..1f78a48 100644
--- a/ios/web/js_features/context_menu/context_menu_params_utils_unittest.mm
+++ b/ios/web/js_features/context_menu/context_menu_params_utils_unittest.mm
@@ -80,7 +80,7 @@
   ContextMenuParams params =
       ContextMenuParamsFromElementDictionary(&element_dict);
 
-  base::string16 urlText = url_formatter::FormatUrl(GURL(kLinkUrl));
+  std::u16string urlText = url_formatter::FormatUrl(GURL(kLinkUrl));
   NSString* title = base::SysUTF16ToNSString(urlText);
 
   EXPECT_NSEQ(params.menu_title, title);
diff --git a/ios/web/navigation/navigation_item_impl.h b/ios/web/navigation/navigation_item_impl.h
index 76f40c6..f8c3af0 100644
--- a/ios/web/navigation/navigation_item_impl.h
+++ b/ios/web/navigation/navigation_item_impl.h
@@ -44,11 +44,11 @@
   const web::Referrer& GetReferrer() const override;
   void SetVirtualURL(const GURL& url) override;
   const GURL& GetVirtualURL() const override;
-  void SetTitle(const base::string16& title) override;
-  const base::string16& GetTitle() const override;
+  void SetTitle(const std::u16string& title) override;
+  const std::u16string& GetTitle() const override;
   void SetPageDisplayState(const PageDisplayState& display_state) override;
   const PageDisplayState& GetPageDisplayState() const override;
-  const base::string16& GetTitleForDisplay() const override;
+  const std::u16string& GetTitleForDisplay() const override;
   void SetTransitionType(ui::PageTransition transition_type) override;
   ui::PageTransition GetTransitionType() const override;
   const FaviconStatus& GetFavicon() const override;
@@ -122,7 +122,7 @@
 
   // Returns the title string to be used for a page with |url| if that page
   // doesn't specify a title.
-  static base::string16 GetDisplayTitleForURL(const GURL& url);
+  static std::u16string GetDisplayTitleForURL(const GURL& url);
 
   // Used only by NavigationManagerImpl.  SetUntrusted() is only used for
   // Visible or LastCommitted NavigationItems where the |url_| may be incorrect
@@ -148,7 +148,7 @@
   GURL url_;
   Referrer referrer_;
   GURL virtual_url_;
-  base::string16 title_;
+  std::u16string title_;
   PageDisplayState page_display_state_;
   ui::PageTransition transition_type_;
   FaviconStatus favicon_;
@@ -178,7 +178,7 @@
 
   // This is a cached version of the result of GetTitleForDisplay. When the URL,
   // virtual URL, or title is set, this should be cleared to force a refresh.
-  mutable base::string16 cached_display_title_;
+  mutable std::u16string cached_display_title_;
 
   // Copy and assignment is explicitly allowed for this class.
 };
diff --git a/ios/web/navigation/navigation_item_impl.mm b/ios/web/navigation/navigation_item_impl.mm
index ac70208..9e8e942 100644
--- a/ios/web/navigation/navigation_item_impl.mm
+++ b/ios/web/navigation/navigation_item_impl.mm
@@ -129,7 +129,7 @@
   return virtual_url_.is_empty() ? url_ : virtual_url_;
 }
 
-void NavigationItemImpl::SetTitle(const base::string16& title) {
+void NavigationItemImpl::SetTitle(const std::u16string& title) {
   if (title_ == title)
     return;
 
@@ -141,7 +141,7 @@
   cached_display_title_.clear();
 }
 
-const base::string16& NavigationItemImpl::GetTitle() const {
+const std::u16string& NavigationItemImpl::GetTitle() const {
   return title_;
 }
 
@@ -154,7 +154,7 @@
   return page_display_state_;
 }
 
-const base::string16& NavigationItemImpl::GetTitleForDisplay() const {
+const std::u16string& NavigationItemImpl::GetTitleForDisplay() const {
   // Most pages have real titles. Don't even bother caching anything if this is
   // the case.
   if (!title_.empty())
@@ -344,16 +344,16 @@
 }
 
 // static
-base::string16 NavigationItemImpl::GetDisplayTitleForURL(const GURL& url) {
+std::u16string NavigationItemImpl::GetDisplayTitleForURL(const GURL& url) {
   if (url.is_empty())
-    return base::string16();
+    return std::u16string();
 
-  base::string16 title = url_formatter::FormatUrl(url);
+  std::u16string title = url_formatter::FormatUrl(url);
 
   // For file:// URLs use the filename as the title, not the full path.
   if (url.SchemeIsFile()) {
-    base::string16::size_type slashpos = title.rfind('/');
-    if (slashpos != base::string16::npos && slashpos != (title.size() - 1))
+    std::u16string::size_type slashpos = title.rfind('/');
+    if (slashpos != std::u16string::npos && slashpos != (title.size() - 1))
       title = title.substr(slashpos + 1);
   }
 
diff --git a/ios/web/navigation/navigation_item_impl_unittest.mm b/ios/web/navigation/navigation_item_impl_unittest.mm
index 66f1a9e..43e33ac1 100644
--- a/ios/web/navigation/navigation_item_impl_unittest.mm
+++ b/ios/web/navigation/navigation_item_impl_unittest.mm
@@ -168,7 +168,7 @@
 
 // Tests NavigationItemImpl::GetDisplayTitleForURL method.
 TEST_F(NavigationItemTest, GetDisplayTitleForURL) {
-  base::string16 title;
+  std::u16string title;
 
   title = NavigationItemImpl::GetDisplayTitleForURL(GURL("http://foo.org/"));
   EXPECT_EQ("foo.org", base::UTF16ToUTF8(title));
diff --git a/ios/web/navigation/navigation_manager_impl.mm b/ios/web/navigation/navigation_manager_impl.mm
index 91d5021..83e4fc6b 100644
--- a/ios/web/navigation/navigation_manager_impl.mm
+++ b/ios/web/navigation/navigation_manager_impl.mm
@@ -1205,7 +1205,7 @@
 
   // Grab the title of the first item before |restored_visible_item_| (which may
   // or may not be the first index) is moved out of |items| below.
-  const base::string16& firstTitle = items[first_index]->GetTitle();
+  const std::u16string& firstTitle = items[first_index]->GetTitle();
 
   // Ordering is important. Cache the visible item of the restored session
   // before starting the new navigation, which may trigger client lookup of
diff --git a/ios/web/public/download/download_task.h b/ios/web/public/download/download_task.h
index 330bcfc..7f13f93 100644
--- a/ios/web/public/download/download_task.h
+++ b/ios/web/public/download/download_task.h
@@ -109,7 +109,7 @@
   virtual std::string GetMimeType() const = 0;
 
   // Suggested name for the downloaded file.
-  virtual base::string16 GetSuggestedFilename() const = 0;
+  virtual std::u16string GetSuggestedFilename() const = 0;
 
   // Returns true if the last download operation was fully or partially
   // performed while the application was not active.
diff --git a/ios/web/public/navigation/navigation_item.h b/ios/web/public/navigation/navigation_item.h
index c8a1438..eaea9ed 100644
--- a/ios/web/public/navigation/navigation_item.h
+++ b/ios/web/public/navigation/navigation_item.h
@@ -74,8 +74,8 @@
   // The caller is responsible for detecting when there is no title and
   // displaying the appropriate "Untitled" label if this is being displayed to
   // the user.
-  virtual void SetTitle(const base::string16& title) = 0;
-  virtual const base::string16& GetTitle() const = 0;
+  virtual void SetTitle(const std::u16string& title) = 0;
+  virtual const std::u16string& GetTitle() const = 0;
 
   // Stores the NavigationItem's last recorded scroll offset and zoom scale.
   virtual void SetPageDisplayState(const PageDisplayState& page_state) = 0;
@@ -85,7 +85,7 @@
 
   // Returns the title to be displayed on the tab. This could be the title of
   // the page if it is available or the URL.
-  virtual const base::string16& GetTitleForDisplay() const = 0;
+  virtual const std::u16string& GetTitleForDisplay() const = 0;
 
   // Tracking stuff ------------------------------------------------------------
 
diff --git a/ios/web/public/session/crw_navigation_item_storage.h b/ios/web/public/session/crw_navigation_item_storage.h
index 4d8bb76..1c0cabe 100644
--- a/ios/web/public/session/crw_navigation_item_storage.h
+++ b/ios/web/public/session/crw_navigation_item_storage.h
@@ -65,7 +65,7 @@
 @property(nonatomic, assign) GURL virtualURL;
 @property(nonatomic, assign) web::Referrer referrer;
 @property(nonatomic, assign) base::Time timestamp;
-@property(nonatomic, assign) base::string16 title;
+@property(nonatomic, assign) std::u16string title;
 @property(nonatomic, assign) web::PageDisplayState displayState;
 @property(nonatomic, assign) BOOL shouldSkipRepostFormConfirmation;
 @property(nonatomic, assign) web::UserAgentType userAgentType;
diff --git a/ios/web/public/test/fakes/fake_download_task.h b/ios/web/public/test/fakes/fake_download_task.h
index 3efd995..a79153e 100644
--- a/ios/web/public/test/fakes/fake_download_task.h
+++ b/ios/web/public/test/fakes/fake_download_task.h
@@ -38,7 +38,7 @@
   std::string GetContentDisposition() const override;
   std::string GetOriginalMimeType() const override;
   std::string GetMimeType() const override;
-  base::string16 GetSuggestedFilename() const override;
+  std::u16string GetSuggestedFilename() const override;
   bool HasPerformedBackgroundDownload() const override;
   void AddObserver(DownloadTaskObserver* observer) override;
   void RemoveObserver(DownloadTaskObserver* observer) override;
@@ -53,7 +53,7 @@
   void SetPercentComplete(int percent_complete);
   void SetContentDisposition(const std::string& content_disposition);
   void SetMimeType(const std::string& mime_type);
-  void SetSuggestedFilename(const base::string16& suggested_file_name);
+  void SetSuggestedFilename(const std::u16string& suggested_file_name);
   void SetPerformedBackgroundDownload(bool flag);
 
  private:
@@ -74,7 +74,7 @@
   int percent_complete_ = -1;
   std::string original_mime_type_;
   std::string mime_type_;
-  base::string16 suggested_file_name_;
+  std::u16string suggested_file_name_;
   bool has_performed_background_download_ = false;
   __strong NSString* identifier_ = nil;
 
diff --git a/ios/web/public/test/fakes/fake_download_task.mm b/ios/web/public/test/fakes/fake_download_task.mm
index 0d956c2..e25115b 100644
--- a/ios/web/public/test/fakes/fake_download_task.mm
+++ b/ios/web/public/test/fakes/fake_download_task.mm
@@ -97,7 +97,7 @@
   return mime_type_;
 }
 
-base::string16 FakeDownloadTask::GetSuggestedFilename() const {
+std::u16string FakeDownloadTask::GetSuggestedFilename() const {
   return suggested_file_name_;
 }
 
@@ -161,7 +161,7 @@
 }
 
 void FakeDownloadTask::SetSuggestedFilename(
-    const base::string16& suggested_file_name) {
+    const std::u16string& suggested_file_name) {
   suggested_file_name_ = suggested_file_name;
   OnDownloadUpdated();
 }
diff --git a/ios/web/public/test/fakes/fake_web_client.h b/ios/web/public/test/fakes/fake_web_client.h
index a7453c6..0e8add5 100644
--- a/ios/web/public/test/fakes/fake_web_client.h
+++ b/ios/web/public/test/fakes/fake_web_client.h
@@ -38,7 +38,7 @@
 
   // Returns |plugin_not_supported_text_| as the text to be displayed for an
   // unsupported plugin.
-  base::string16 GetPluginNotSupportedText() const override;
+  std::u16string GetPluginNotSupportedText() const override;
 
   base::RefCountedMemory* GetDataResourceBytes(int id) const override;
 
@@ -69,7 +69,7 @@
                                     const GURL& url) override;
 
   // Sets |plugin_not_supported_text_|.
-  void SetPluginNotSupportedText(const base::string16& text);
+  void SetPluginNotSupportedText(const std::u16string& text);
 
   // Changes Early Page Script for testing purposes.
   void SetEarlyPageScript(NSString* page_script);
@@ -93,7 +93,7 @@
   void SetDefaultUserAgent(UserAgentType type) { default_user_agent_ = type; }
 
  private:
-  base::string16 plugin_not_supported_text_;
+  std::u16string plugin_not_supported_text_;
   std::vector<JavaScriptFeature*> java_script_features_;
   NSString* early_page_script_ = nil;
   // Last arguments passed to AllowCertificateError.
diff --git a/ios/web/public/test/fakes/fake_web_client.mm b/ios/web/public/test/fakes/fake_web_client.mm
index 286dc76..b255759 100644
--- a/ios/web/public/test/fakes/fake_web_client.mm
+++ b/ios/web/public/test/fakes/fake_web_client.mm
@@ -45,7 +45,7 @@
     web::SerializableUserDataManager* user_data_manager,
     web::WebState* web_state) {}
 
-base::string16 FakeWebClient::GetPluginNotSupportedText() const {
+std::u16string FakeWebClient::GetPluginNotSupportedText() const {
   return plugin_not_supported_text_;
 }
 
@@ -78,7 +78,7 @@
   return web::test::GetPageScript(@"all_frames_web_test_bundle");
 }
 
-void FakeWebClient::SetPluginNotSupportedText(const base::string16& text) {
+void FakeWebClient::SetPluginNotSupportedText(const std::u16string& text) {
   plugin_not_supported_text_ = text;
 }
 
diff --git a/ios/web/public/test/fakes/fake_web_state.h b/ios/web/public/test/fakes/fake_web_state.h
index 1c3574e..a4446f0 100644
--- a/ios/web/public/test/fakes/fake_web_state.h
+++ b/ios/web/public/test/fakes/fake_web_state.h
@@ -57,13 +57,13 @@
   CRWSessionStorage* BuildSessionStorage() override;
   CRWJSInjectionReceiver* GetJSInjectionReceiver() const override;
   void LoadData(NSData* data, NSString* mime_type, const GURL& url) override;
-  void ExecuteJavaScript(const base::string16& javascript) override;
-  void ExecuteJavaScript(const base::string16& javascript,
+  void ExecuteJavaScript(const std::u16string& javascript) override;
+  void ExecuteJavaScript(const std::u16string& javascript,
                          JavaScriptResultCallback callback) override;
   void ExecuteUserJavaScript(NSString* javaScript) override;
   const std::string& GetContentsMimeType() const override;
   bool ContentIsHTML() const override;
-  const base::string16& GetTitle() const override;
+  const std::u16string& GetTitle() const override;
   bool IsLoading() const override;
   double GetLoadingProgress() const override;
   bool IsVisible() const override;
@@ -98,7 +98,7 @@
   // Setters for test data.
   void SetBrowserState(BrowserState* browser_state);
   void SetJSInjectionReceiver(CRWJSInjectionReceiver* injection_receiver);
-  void SetTitle(const base::string16& title);
+  void SetTitle(const std::u16string& title);
   void SetContentIsHTML(bool content_is_html);
   void SetContentsMimeType(const std::string& mime_type);
   void SetLoading(bool is_loading);
@@ -129,7 +129,7 @@
       NSURLResponse* response,
       bool for_main_frame,
       base::OnceCallback<void(WebStatePolicyDecider::PolicyDecision)> callback);
-  base::string16 GetLastExecutedJavascript() const;
+  std::u16string GetLastExecutedJavascript() const;
   NSData* GetLastLoadedData() const;
   bool IsClosed() const;
 
@@ -156,8 +156,8 @@
   bool can_take_snapshot_;
   bool is_closed_;
   GURL url_;
-  base::string16 title_;
-  base::string16 last_executed_javascript_;
+  std::u16string title_;
+  std::u16string last_executed_javascript_;
   URLVerificationTrustLevel trust_level_;
   bool content_is_html_;
   std::string mime_type_;
diff --git a/ios/web/public/test/fakes/fake_web_state.mm b/ios/web/public/test/fakes/fake_web_state.mm
index 7e123cf..bf782b75 100644
--- a/ios/web/public/test/fakes/fake_web_state.mm
+++ b/ios/web/public/test/fakes/fake_web_state.mm
@@ -196,11 +196,11 @@
   OnPageLoaded(web::PageLoadCompletionStatus::SUCCESS);
 }
 
-void FakeWebState::ExecuteJavaScript(const base::string16& javascript) {
+void FakeWebState::ExecuteJavaScript(const std::u16string& javascript) {
   last_executed_javascript_ = javascript;
 }
 
-void FakeWebState::ExecuteJavaScript(const base::string16& javascript,
+void FakeWebState::ExecuteJavaScript(const std::u16string& javascript,
                                      JavaScriptResultCallback callback) {
   last_executed_javascript_ = javascript;
   std::move(callback).Run(nullptr);
@@ -262,11 +262,11 @@
   mime_type_ = mime_type;
 }
 
-void FakeWebState::SetTitle(const base::string16& title) {
+void FakeWebState::SetTitle(const std::u16string& title) {
   title_ = title;
 }
 
-const base::string16& FakeWebState::GetTitle() const {
+const std::u16string& FakeWebState::GetTitle() const {
   return title_;
 }
 
@@ -397,7 +397,7 @@
       num_decisions_requested);
 }
 
-base::string16 FakeWebState::GetLastExecutedJavascript() const {
+std::u16string FakeWebState::GetLastExecutedJavascript() const {
   return last_executed_javascript_;
 }
 
diff --git a/ios/web/public/test/url_test_util.h b/ios/web/public/test/url_test_util.h
index 8226481..4c26200 100644
--- a/ios/web/public/test/url_test_util.h
+++ b/ios/web/public/test/url_test_util.h
@@ -15,7 +15,7 @@
 
 // Returns a formatted version of |url| that would be used as the fallback title
 // for a page with that URL.
-base::string16 GetDisplayTitleForUrl(const GURL& url);
+std::u16string GetDisplayTitleForUrl(const GURL& url);
 
 }  // namespace web
 
diff --git a/ios/web/public/web_client.h b/ios/web/public/web_client.h
index 70a6388..4c7eeb4 100644
--- a/ios/web/public/web_client.h
+++ b/ios/web/public/web_client.h
@@ -95,13 +95,13 @@
       web::SerializableUserDataManager* user_data_manager,
       web::WebState* web_state);
   // Returns text to be displayed for an unsupported plugin.
-  virtual base::string16 GetPluginNotSupportedText() const;
+  virtual std::u16string GetPluginNotSupportedText() const;
 
   // Returns the user agent string for the specified type.
   virtual std::string GetUserAgent(UserAgentType type) const;
 
   // Returns a string resource given its id.
-  virtual base::string16 GetLocalizedString(int message_id) const;
+  virtual std::u16string GetLocalizedString(int message_id) const;
 
   // Returns the contents of a resource in a StringPiece given the resource id.
   virtual base::StringPiece GetDataResource(int resource_id,
diff --git a/ios/web/public/web_state.h b/ios/web/public/web_state.h
index 661ac7e..7b08199 100644
--- a/ios/web/public/web_state.h
+++ b/ios/web/public/web_state.h
@@ -250,8 +250,8 @@
   // NOTE: Integer values will be returned as Type::DOUBLE because of underlying
   // library limitation.
   typedef base::OnceCallback<void(const base::Value*)> JavaScriptResultCallback;
-  virtual void ExecuteJavaScript(const base::string16& javascript) = 0;
-  virtual void ExecuteJavaScript(const base::string16& javascript,
+  virtual void ExecuteJavaScript(const std::u16string& javascript) = 0;
+  virtual void ExecuteJavaScript(const std::u16string& javascript,
                                  JavaScriptResultCallback callback) = 0;
 
   // Asynchronously executes |javaScript| in the main frame's context,
@@ -266,7 +266,7 @@
 
   // Returns the current navigation title. This could be the title of the page
   // if it is available or the URL.
-  virtual const base::string16& GetTitle() const = 0;
+  virtual const std::u16string& GetTitle() const = 0;
 
   // Returns true if the current page is loading.
   virtual bool IsLoading() const = 0;
diff --git a/ios/web/public/webui/web_ui_ios.h b/ios/web/public/webui/web_ui_ios.h
index 08ea86d6..cbc0630a 100644
--- a/ios/web/public/webui/web_ui_ios.h
+++ b/ios/web/public/webui/web_ui_ios.h
@@ -31,7 +31,7 @@
  public:
   // Returns JavaScript code that, when executed, calls the function specified
   // by |function_name| with the arguments specified in |arg_list|.
-  static base::string16 GetJavascriptCall(
+  static std::u16string GetJavascriptCall(
       const std::string& function_name,
       const std::vector<const base::Value*>& arg_list);
 
diff --git a/ios/web/public/webui/web_ui_ios_data_source.h b/ios/web/public/webui/web_ui_ios_data_source.h
index 2368c4a7..2be76f6 100644
--- a/ios/web/public/webui/web_ui_ios_data_source.h
+++ b/ios/web/public/webui/web_ui_ios_data_source.h
@@ -36,7 +36,7 @@
 
   // Adds a string keyed to its name to our dictionary.
   virtual void AddString(const std::string& name,
-                         const base::string16& value) = 0;
+                         const std::u16string& value) = 0;
 
   // Adds a string keyed to its name to our dictionary.
   virtual void AddString(const std::string& name, const std::string& value) = 0;
diff --git a/ios/web/public/webui/web_ui_ios_message_handler.h b/ios/web/public/webui/web_ui_ios_message_handler.h
index 409be49..6595d75 100644
--- a/ios/web/public/webui/web_ui_ios_message_handler.h
+++ b/ios/web/public/webui/web_ui_ios_message_handler.h
@@ -37,7 +37,7 @@
                                  double* out_value);
 
   // Extract a string value from a list Value.
-  static base::string16 ExtractStringValue(const base::ListValue* value);
+  static std::u16string ExtractStringValue(const base::ListValue* value);
 
   // This is where subclasses specify which messages they'd like to handle and
   // perform any additional initialization. At this point web_ui() will return
diff --git a/ios/web/test/url_test_util.mm b/ios/web/test/url_test_util.mm
index f0ed6343..7fdaa5c 100644
--- a/ios/web/test/url_test_util.mm
+++ b/ios/web/test/url_test_util.mm
@@ -12,7 +12,7 @@
 
 namespace web {
 
-base::string16 GetDisplayTitleForUrl(const GURL& url) {
+std::u16string GetDisplayTitleForUrl(const GURL& url) {
   return NavigationItemImpl::GetDisplayTitleForURL(url);
 }
 
diff --git a/ios/web/text_fragments/crw_text_fragments_handler_unittest.mm b/ios/web/text_fragments/crw_text_fragments_handler_unittest.mm
index b24d052a..07037eb 100644
--- a/ios/web/text_fragments/crw_text_fragments_handler_unittest.mm
+++ b/ios/web/text_fragments/crw_text_fragments_handler_unittest.mm
@@ -60,7 +60,7 @@
   explicit MockWebStateImpl(web::WebState::CreateParams params)
       : web::WebStateImpl(params) {}
 
-  MOCK_METHOD1(ExecuteJavaScript, void(const base::string16&));
+  MOCK_METHOD1(ExecuteJavaScript, void(const std::u16string&));
   MOCK_CONST_METHOD0(GetLastCommittedURL, const GURL&());
 
   base::CallbackListSubscription AddScriptCommandCallback(
@@ -182,7 +182,7 @@
   CRWTextFragmentsHandler* handler = CreateDefaultHandler();
 
   // Set up expectation.
-  base::string16 expected_javascript =
+  std::u16string expected_javascript =
       base::UTF8ToUTF16(kScriptForValidFragmentsURL);
   EXPECT_CALL(*web_state_, ExecuteJavaScript(expected_javascript)).Times(1);
 
@@ -210,7 +210,7 @@
                     /*feature_color_change=*/true);
 
   // Set up expectation.
-  base::string16 expected_javascript =
+  std::u16string expected_javascript =
       base::UTF8ToUTF16(kScriptForValidFragmentsColorChangeURL);
   EXPECT_CALL(*web_state_, ExecuteJavaScript(expected_javascript)).Times(1);
 
diff --git a/ios/web/web_client.mm b/ios/web/web_client.mm
index 3717583..97031a5e 100644
--- a/ios/web/web_client.mm
+++ b/ios/web/web_client.mm
@@ -53,16 +53,16 @@
     web::SerializableUserDataManager* user_data_manager,
     web::WebState* web_state) {}
 
-base::string16 WebClient::GetPluginNotSupportedText() const {
-  return base::string16();
+std::u16string WebClient::GetPluginNotSupportedText() const {
+  return std::u16string();
 }
 
 std::string WebClient::GetUserAgent(UserAgentType type) const {
   return std::string();
 }
 
-base::string16 WebClient::GetLocalizedString(int message_id) const {
-  return base::string16();
+std::u16string WebClient::GetLocalizedString(int message_id) const {
+  return std::u16string();
 }
 
 base::StringPiece WebClient::GetDataResource(
diff --git a/ios/web/web_state/web_state_impl.h b/ios/web/web_state/web_state_impl.h
index e92701a..fd0f259 100644
--- a/ios/web/web_state/web_state_impl.h
+++ b/ios/web/web_state/web_state_impl.h
@@ -203,13 +203,13 @@
   CRWSessionStorage* BuildSessionStorage() override;
   CRWJSInjectionReceiver* GetJSInjectionReceiver() const override;
   void LoadData(NSData* data, NSString* mime_type, const GURL& url) override;
-  void ExecuteJavaScript(const base::string16& javascript) override;
-  void ExecuteJavaScript(const base::string16& javascript,
+  void ExecuteJavaScript(const std::u16string& javascript) override;
+  void ExecuteJavaScript(const std::u16string& javascript,
                          JavaScriptResultCallback callback) override;
   void ExecuteUserJavaScript(NSString* javaScript) override;
   const std::string& GetContentsMimeType() const override;
   bool ContentIsHTML() const override;
-  const base::string16& GetTitle() const override;
+  const std::u16string& GetTitle() const override;
   bool IsLoading() const override;
   double GetLoadingProgress() const override;
   bool IsCrashed() const override;
@@ -379,7 +379,7 @@
   WebInterstitialImpl* interstitial_;
 
   // Returned by reference.
-  base::string16 empty_string16_;
+  std::u16string empty_string16_;
 
   // Callbacks associated to command prefixes.
   std::map<std::string,
diff --git a/ios/web/web_state/web_state_impl.mm b/ios/web/web_state/web_state_impl.mm
index f1a6c7a5..9bcbc1b 100644
--- a/ios/web/web_state/web_state_impl.mm
+++ b/ios/web/web_state/web_state_impl.mm
@@ -328,7 +328,7 @@
   return !!web_ui_;
 }
 
-const base::string16& WebStateImpl::GetTitle() const {
+const std::u16string& WebStateImpl::GetTitle() const {
   // TODO(stuartmorgan): Implement the NavigationManager logic necessary to
   // match the WebContents implementation of this method.
   DCHECK(Configured());
@@ -683,13 +683,13 @@
   return [web_controller_.jsInjector JSInjectionReceiver];
 }
 
-void WebStateImpl::ExecuteJavaScript(const base::string16& javascript) {
+void WebStateImpl::ExecuteJavaScript(const std::u16string& javascript) {
   [web_controller_.jsInjector
       executeJavaScript:base::SysUTF16ToNSString(javascript)
       completionHandler:nil];
 }
 
-void WebStateImpl::ExecuteJavaScript(const base::string16& javascript,
+void WebStateImpl::ExecuteJavaScript(const std::u16string& javascript,
                                      JavaScriptResultCallback callback) {
   __block JavaScriptResultCallback stack_callback = std::move(callback);
   [web_controller_.jsInjector
diff --git a/ios/web/webui/mojo_facade_unittest.mm b/ios/web/webui/mojo_facade_unittest.mm
index 8fb2ee2..84082e1 100644
--- a/ios/web/webui/mojo_facade_unittest.mm
+++ b/ios/web/webui/mojo_facade_unittest.mm
@@ -53,7 +53,7 @@
 
   void SetFacade(MojoFacade* facade) { facade_ = facade; }
 
-  void ExecuteJavaScript(const base::string16& javascript) override {
+  void ExecuteJavaScript(const std::u16string& javascript) override {
     FakeWebState::ExecuteJavaScript(javascript);
     // Cancel the watch immediately to ensure there are no additional
     // notifications.
diff --git a/ios/web/webui/web_ui_ios_data_source_impl.h b/ios/web/webui/web_ui_ios_data_source_impl.h
index 5f52536..07e4715 100644
--- a/ios/web/webui/web_ui_ios_data_source_impl.h
+++ b/ios/web/webui/web_ui_ios_data_source_impl.h
@@ -24,7 +24,7 @@
                                public WebUIIOSDataSource {
  public:
   // WebUIIOSDataSource implementation:
-  void AddString(const std::string& name, const base::string16& value) override;
+  void AddString(const std::string& name, const std::u16string& value) override;
   void AddString(const std::string& name, const std::string& value) override;
   void AddLocalizedString(const std::string& name, int ids) override;
   void AddLocalizedStrings(
diff --git a/ios/web/webui/web_ui_ios_data_source_impl.mm b/ios/web/webui/web_ui_ios_data_source_impl.mm
index ac0432f..6a9cee6 100644
--- a/ios/web/webui/web_ui_ios_data_source_impl.mm
+++ b/ios/web/webui/web_ui_ios_data_source_impl.mm
@@ -71,7 +71,7 @@
 WebUIIOSDataSourceImpl::~WebUIIOSDataSourceImpl() {}
 
 void WebUIIOSDataSourceImpl::AddString(const std::string& name,
-                                       const base::string16& value) {
+                                       const std::u16string& value) {
   localized_strings_.SetString(name, value);
   replacements_[name] = base::UTF16ToUTF8(value);
 }
diff --git a/ios/web/webui/web_ui_ios_impl.h b/ios/web/webui/web_ui_ios_impl.h
index f0c7d15a..95a57614 100644
--- a/ios/web/webui/web_ui_ios_impl.h
+++ b/ios/web/webui/web_ui_ios_impl.h
@@ -57,7 +57,7 @@
                    web::WebFrame* sender_frame);
 
   // Executes JavaScript asynchronously on the page.
-  void ExecuteJavascript(const base::string16& javascript);
+  void ExecuteJavascript(const std::u16string& javascript);
 
   // A map of message name -> message handling callback.
   typedef std::map<std::string, MessageCallback> MessageCallbackMap;
diff --git a/ios/web/webui/web_ui_ios_impl.mm b/ios/web/webui/web_ui_ios_impl.mm
index a2d5c75d..7a616a19 100644
--- a/ios/web/webui/web_ui_ios_impl.mm
+++ b/ios/web/webui/web_ui_ios_impl.mm
@@ -30,10 +30,10 @@
 namespace web {
 
 // static
-base::string16 WebUIIOS::GetJavascriptCall(
+std::u16string WebUIIOS::GetJavascriptCall(
     const std::string& function_name,
     const std::vector<const base::Value*>& arg_list) {
-  base::string16 parameters;
+  std::u16string parameters;
   std::string json;
   for (size_t i = 0; i < arg_list.size(); ++i) {
     if (i > 0)
@@ -166,7 +166,7 @@
   handlers_.push_back(std::move(handler));
 }
 
-void WebUIIOSImpl::ExecuteJavascript(const base::string16& javascript) {
+void WebUIIOSImpl::ExecuteJavascript(const std::u16string& javascript) {
   web_state_->ExecuteJavaScript(javascript);
 }
 
diff --git a/ios/web/webui/web_ui_ios_message_handler.cc b/ios/web/webui/web_ui_ios_message_handler.cc
index 8fe950e..333a8bf 100644
--- a/ios/web/webui/web_ui_ios_message_handler.cc
+++ b/ios/web/webui/web_ui_ios_message_handler.cc
@@ -36,13 +36,13 @@
   return false;
 }
 
-base::string16 WebUIIOSMessageHandler::ExtractStringValue(
+std::u16string WebUIIOSMessageHandler::ExtractStringValue(
     const base::ListValue* value) {
-  base::string16 string16_value;
+  std::u16string string16_value;
   if (value->GetString(0, &string16_value))
     return string16_value;
   NOTREACHED();
-  return base::string16();
+  return std::u16string();
 }
 
 }  // namespace web
diff --git a/ios/web_view/internal/autofill/cwv_autofill_client_ios_bridge.h b/ios/web_view/internal/autofill/cwv_autofill_client_ios_bridge.h
index 10c4727..b44572ff 100644
--- a/ios/web_view/internal/autofill/cwv_autofill_client_ios_bridge.h
+++ b/ios/web_view/internal/autofill/cwv_autofill_client_ios_bridge.h
@@ -37,17 +37,17 @@
 
 // Bridge For AutofillClient's method |ConfirmAccountNameFixFlow|.
 - (void)
-    confirmCreditCardAccountName:(const base::string16&)name
+    confirmCreditCardAccountName:(const std::u16string&)name
                         callback:
-                            (base::OnceCallback<void(const base::string16&)>)
+                            (base::OnceCallback<void(const std::u16string&)>)
                                 callback;
 
 // Bridge For AutofillClient's method |ConfirmExpirationDateFixFlow|.
 - (void)confirmCreditCardExpirationWithCard:(const autofill::CreditCard&)card
                                    callback:
                                        (base::OnceCallback<void(
-                                            const base::string16&,
-                                            const base::string16&)>)callback;
+                                            const std::u16string&,
+                                            const std::u16string&)>)callback;
 
 // Bridge for AutofillClient's method |CreditCardUploadCompleted|.
 - (void)handleCreditCardUploadCompleted:(BOOL)cardSaved;
diff --git a/ios/web_view/internal/autofill/cwv_autofill_controller.mm b/ios/web_view/internal/autofill/cwv_autofill_controller.mm
index dde002e..7b4a8a1 100644
--- a/ios/web_view/internal/autofill/cwv_autofill_controller.mm
+++ b/ios/web_view/internal/autofill/cwv_autofill_controller.mm
@@ -339,9 +339,9 @@
 }
 
 - (void)
-    confirmCreditCardAccountName:(const base::string16&)name
+    confirmCreditCardAccountName:(const std::u16string&)name
                         callback:
-                            (base::OnceCallback<void(const base::string16&)>)
+                            (base::OnceCallback<void(const std::u16string&)>)
                                 callback {
   if (![_delegate respondsToSelector:@selector(autofillController:
                                          confirmCreditCardNameWithFixer:)]) {
@@ -357,8 +357,8 @@
 - (void)confirmCreditCardExpirationWithCard:(const autofill::CreditCard&)card
                                    callback:
                                        (base::OnceCallback<void(
-                                            const base::string16&,
-                                            const base::string16&)>)callback {
+                                            const std::u16string&,
+                                            const std::u16string&)>)callback {
   if (![_delegate respondsToSelector:@selector
                   (autofillController:confirmCreditCardExpirationWithFixer:)]) {
     return;
diff --git a/ios/web_view/internal/autofill/cwv_credit_card_expiration_fixer.mm b/ios/web_view/internal/autofill/cwv_credit_card_expiration_fixer.mm
index 80eb907..145ba669 100644
--- a/ios/web_view/internal/autofill/cwv_credit_card_expiration_fixer.mm
+++ b/ios/web_view/internal/autofill/cwv_credit_card_expiration_fixer.mm
@@ -40,8 +40,8 @@
 
 - (instancetype)initWithCreditCard:(const autofill::CreditCard&)creditCard
                           callback:
-                              (base::OnceCallback<void(const base::string16&,
-                                                       const base::string16&)>)
+                              (base::OnceCallback<void(const std::u16string&,
+                                                       const std::u16string&)>)
                                   callback {
   self = [super init];
   if (self) {
diff --git a/ios/web_view/internal/autofill/cwv_credit_card_expiration_fixer_internal.h b/ios/web_view/internal/autofill/cwv_credit_card_expiration_fixer_internal.h
index e6902570..1a347ad 100644
--- a/ios/web_view/internal/autofill/cwv_credit_card_expiration_fixer_internal.h
+++ b/ios/web_view/internal/autofill/cwv_credit_card_expiration_fixer_internal.h
@@ -24,8 +24,8 @@
 // with a month and year in MM and YYYY format.
 - (instancetype)
     initWithCreditCard:(const autofill::CreditCard&)creditCard
-              callback:(base::OnceCallback<void(const base::string16&,
-                                                const base::string16&)>)callback
+              callback:(base::OnceCallback<void(const std::u16string&,
+                                                const std::u16string&)>)callback
     NS_DESIGNATED_INITIALIZER;
 
 @end
diff --git a/ios/web_view/internal/autofill/cwv_credit_card_expiration_fixer_unittest.mm b/ios/web_view/internal/autofill/cwv_credit_card_expiration_fixer_unittest.mm
index 0c9f5bd..e7e8384 100644
--- a/ios/web_view/internal/autofill/cwv_credit_card_expiration_fixer_unittest.mm
+++ b/ios/web_view/internal/autofill/cwv_credit_card_expiration_fixer_unittest.mm
@@ -23,8 +23,8 @@
 
 class CWVCreditCardExpirationFixerTest : public TestWithLocaleAndResources {
  public:
-  void AcceptExpiration(const base::string16& month,
-                        const base::string16& year) {
+  void AcceptExpiration(const std::u16string& month,
+                        const std::u16string& year) {
     _accepted_month = base::SysUTF16ToNSString(month);
     _accepted_year = base::SysUTF16ToNSString(year);
   }
@@ -51,7 +51,7 @@
 // Tests CWVCreditCardExpirationFixer properly accepts a valid expiration.
 TEST_F(CWVCreditCardExpirationFixerTest, AcceptValidExpiration) {
   autofill::CreditCard card = autofill::test::GetCreditCard();
-  base::OnceCallback<void(const base::string16&, const base::string16&)>
+  base::OnceCallback<void(const std::u16string&, const std::u16string&)>
       callback =
           base::BindOnce(&CWVCreditCardExpirationFixerTest::AcceptExpiration,
                          base::Unretained(this));
@@ -69,7 +69,7 @@
 // Tests CWVCreditCardExpirationFixer properly rejects invalid expirations.
 TEST_F(CWVCreditCardExpirationFixerTest, RejectsInvalidExpirations) {
   autofill::CreditCard card = autofill::test::GetCreditCard();
-  base::OnceCallback<void(const base::string16&, const base::string16&)>
+  base::OnceCallback<void(const std::u16string&, const std::u16string&)>
       callback =
           base::BindOnce(&CWVCreditCardExpirationFixerTest::AcceptExpiration,
                          base::Unretained(this));
diff --git a/ios/web_view/internal/autofill/cwv_credit_card_name_fixer.mm b/ios/web_view/internal/autofill/cwv_credit_card_name_fixer.mm
index 9419c39..a65e33b 100644
--- a/ios/web_view/internal/autofill/cwv_credit_card_name_fixer.mm
+++ b/ios/web_view/internal/autofill/cwv_credit_card_name_fixer.mm
@@ -35,7 +35,7 @@
 }
 
 - (instancetype)initWithName:(NSString*)name
-                    callback:(base::OnceCallback<void(const base::string16&)>)
+                    callback:(base::OnceCallback<void(const std::u16string&)>)
                                  callback {
   self = [super init];
   if (self) {
diff --git a/ios/web_view/internal/autofill/cwv_credit_card_name_fixer_internal.h b/ios/web_view/internal/autofill/cwv_credit_card_name_fixer_internal.h
index 63f7562..b6acc23 100644
--- a/ios/web_view/internal/autofill/cwv_credit_card_name_fixer_internal.h
+++ b/ios/web_view/internal/autofill/cwv_credit_card_name_fixer_internal.h
@@ -17,7 +17,7 @@
 // Initialize with a suggested |name| and a |callback| to be invoked with the
 // chosen name.
 - (instancetype)initWithName:(NSString*)name
-                    callback:(base::OnceCallback<void(const base::string16&)>)
+                    callback:(base::OnceCallback<void(const std::u16string&)>)
                                  callback NS_DESIGNATED_INITIALIZER;
 
 @end
diff --git a/ios/web_view/internal/autofill/cwv_credit_card_name_fixer_unittest.mm b/ios/web_view/internal/autofill/cwv_credit_card_name_fixer_unittest.mm
index a17804a1..35f5853 100644
--- a/ios/web_view/internal/autofill/cwv_credit_card_name_fixer_unittest.mm
+++ b/ios/web_view/internal/autofill/cwv_credit_card_name_fixer_unittest.mm
@@ -21,7 +21,7 @@
 
 class CWVCreditCardNameFixerTest : public TestWithLocaleAndResources {
  public:
-  void AcceptNameCallback(const base::string16& name) {
+  void AcceptNameCallback(const std::u16string& name) {
     accepted_name_ = base::SysUTF16ToNSString(name);
   }
   NSString* accepted_name_;
@@ -47,7 +47,7 @@
 TEST_F(CWVCreditCardNameFixerTest, AcceptName) {
   NSString* inferred_name = @"John Doe";
   NSString* accepted_name = @"Jane Doe";
-  base::OnceCallback<void(const base::string16&)> callback = base::BindOnce(
+  base::OnceCallback<void(const std::u16string&)> callback = base::BindOnce(
       &CWVCreditCardNameFixerTest::AcceptNameCallback, base::Unretained(this));
   CWVCreditCardNameFixer* fixer =
       [[CWVCreditCardNameFixer alloc] initWithName:inferred_name
diff --git a/ios/web_view/internal/autofill/cwv_credit_card_verifier.mm b/ios/web_view/internal/autofill/cwv_credit_card_verifier.mm
index 11f9382..565fba7 100644
--- a/ios/web_view/internal/autofill/cwv_credit_card_verifier.mm
+++ b/ios/web_view/internal/autofill/cwv_credit_card_verifier.mm
@@ -67,7 +67,7 @@
   void DisableAndWaitForVerification() override {
     // No op.
   }
-  void GotVerificationResult(const base::string16& error_message,
+  void GotVerificationResult(const std::u16string& error_message,
                              bool allow_retry) override {
     NSString* ns_error_message = base::SysUTF16ToNSString(error_message);
     [verifier_ didReceiveVerificationResultWithErrorMessage:ns_error_message
diff --git a/ios/web_view/internal/autofill/web_view_autofill_client_ios.h b/ios/web_view/internal/autofill/web_view_autofill_client_ios.h
index e3385177..8e7ae21 100644
--- a/ios/web_view/internal/autofill/web_view_autofill_client_ios.h
+++ b/ios/web_view/internal/autofill/web_view_autofill_client_ios.h
@@ -68,10 +68,10 @@
                         base::WeakPtr<CardUnmaskDelegate> delegate) override;
   void OnUnmaskVerificationResult(PaymentsRpcResult result) override;
   void ConfirmAccountNameFixFlow(
-      base::OnceCallback<void(const base::string16&)> callback) override;
+      base::OnceCallback<void(const std::u16string&)> callback) override;
   void ConfirmExpirationDateFixFlow(
       const CreditCard& card,
-      base::OnceCallback<void(const base::string16&, const base::string16&)>
+      base::OnceCallback<void(const std::u16string&, const std::u16string&)>
           callback) override;
   void ConfirmSaveCreditCardLocally(
       const CreditCard& card,
@@ -94,8 +94,8 @@
       const AutofillClient::PopupOpenArgs& open_args,
       base::WeakPtr<AutofillPopupDelegate> delegate) override;
   void UpdateAutofillPopupDataListValues(
-      const std::vector<base::string16>& values,
-      const std::vector<base::string16>& labels) override;
+      const std::vector<std::u16string>& values,
+      const std::vector<std::u16string>& labels) override;
   base::span<const Suggestion> GetPopupSuggestions() const override;
   void PinPopupView() override;
   AutofillClient::PopupOpenArgs GetReopenPopupArgs() const override;
@@ -106,8 +106,8 @@
   void PropagateAutofillPredictions(
       content::RenderFrameHost* rfh,
       const std::vector<FormStructure*>& forms) override;
-  void DidFillOrPreviewField(const base::string16& autofilled_value,
-                             const base::string16& profile_full_name) override;
+  void DidFillOrPreviewField(const std::u16string& autofilled_value,
+                             const std::u16string& profile_full_name) override;
   bool IsContextSecure() const override;
   bool ShouldShowSigninPromo() override;
   bool AreServerCardsSupported() const override;
diff --git a/ios/web_view/internal/autofill/web_view_autofill_client_ios.mm b/ios/web_view/internal/autofill/web_view_autofill_client_ios.mm
index 02c84c54..6e60a08 100644
--- a/ios/web_view/internal/autofill/web_view_autofill_client_ios.mm
+++ b/ios/web_view/internal/autofill/web_view_autofill_client_ios.mm
@@ -182,21 +182,21 @@
 }
 
 void WebViewAutofillClientIOS::ConfirmAccountNameFixFlow(
-    base::OnceCallback<void(const base::string16&)> callback) {
+    base::OnceCallback<void(const std::u16string&)> callback) {
   base::Optional<AccountInfo> primary_account_info =
       identity_manager_->FindExtendedAccountInfoForAccountWithRefreshToken(
           identity_manager_->GetPrimaryAccountInfo(
               signin::ConsentLevel::kSync));
-  base::string16 account_name =
+  std::u16string account_name =
       primary_account_info ? base::UTF8ToUTF16(primary_account_info->full_name)
-                           : base::string16();
+                           : std::u16string();
   [bridge_ confirmCreditCardAccountName:account_name
                                callback:std::move(callback)];
 }
 
 void WebViewAutofillClientIOS::ConfirmExpirationDateFixFlow(
     const CreditCard& card,
-    base::OnceCallback<void(const base::string16&, const base::string16&)>
+    base::OnceCallback<void(const std::u16string&, const std::u16string&)>
         callback) {
   [bridge_ confirmCreditCardExpirationWithCard:card
                                       callback:std::move(callback)];
@@ -248,8 +248,8 @@
 }
 
 void WebViewAutofillClientIOS::UpdateAutofillPopupDataListValues(
-    const std::vector<base::string16>& values,
-    const std::vector<base::string16>& labels) {
+    const std::vector<std::u16string>& values,
+    const std::vector<std::u16string>& labels) {
   // No op. ios/web_view does not support display datalist.
 }
 
@@ -290,8 +290,8 @@
 }
 
 void WebViewAutofillClientIOS::DidFillOrPreviewField(
-    const base::string16& autofilled_value,
-    const base::string16& profile_full_name) {}
+    const std::u16string& autofilled_value,
+    const std::u16string& profile_full_name) {}
 
 bool WebViewAutofillClientIOS::IsContextSecure() const {
   return IsContextSecureForWebState(web_state_);
diff --git a/ios/web_view/internal/passwords/web_view_password_manager_client.h b/ios/web_view/internal/passwords/web_view_password_manager_client.h
index 4515020..2a540d7 100644
--- a/ios/web_view/internal/passwords/web_view_password_manager_client.h
+++ b/ios/web_view/internal/passwords/web_view_password_manager_client.h
@@ -96,7 +96,7 @@
       password_manager::CredentialLeakType leak_type,
       password_manager::CompromisedSitesCount saved_sites,
       const GURL& origin,
-      const base::string16& username) override;
+      const std::u16string& username) override;
   bool IsSavingAndFillingEnabled(const GURL& url) const override;
   bool IsCommittedMainFrameSecure() const override;
   const GURL& GetLastCommittedURL() const override;
diff --git a/ios/web_view/internal/passwords/web_view_password_manager_client.mm b/ios/web_view/internal/passwords/web_view_password_manager_client.mm
index e82470c..3ddd6d9 100644
--- a/ios/web_view/internal/passwords/web_view_password_manager_client.mm
+++ b/ios/web_view/internal/passwords/web_view_password_manager_client.mm
@@ -213,7 +213,7 @@
     password_manager::CredentialLeakType leak_type,
     password_manager::CompromisedSitesCount saved_sites,
     const GURL& origin,
-    const base::string16& username) {
+    const std::u16string& username) {
   [bridge_ showPasswordBreachForLeakType:leak_type URL:origin];
 }
 
diff --git a/ios/web_view/internal/passwords/web_view_password_manager_driver.h b/ios/web_view/internal/passwords/web_view_password_manager_driver.h
index c55e736..84b2181 100644
--- a/ios/web_view/internal/passwords/web_view_password_manager_driver.h
+++ b/ios/web_view/internal/passwords/web_view_password_manager_driver.h
@@ -33,11 +33,11 @@
       bool should_show_popup_without_passwords) override;
   void FormEligibleForGenerationFound(
       const autofill::PasswordFormGenerationData& form) override;
-  void GeneratedPasswordAccepted(const base::string16& password) override;
-  void FillSuggestion(const base::string16& username,
-                      const base::string16& password) override;
-  void PreviewSuggestion(const base::string16& username,
-                         const base::string16& password) override;
+  void GeneratedPasswordAccepted(const std::u16string& password) override;
+  void FillSuggestion(const std::u16string& username,
+                      const std::u16string& password) override;
+  void PreviewSuggestion(const std::u16string& username,
+                         const std::u16string& password) override;
   void ClearPreviewedForm() override;
   password_manager::PasswordGenerationFrameHelper* GetPasswordGenerationHelper()
       override;
diff --git a/ios/web_view/internal/passwords/web_view_password_manager_driver.mm b/ios/web_view/internal/passwords/web_view_password_manager_driver.mm
index 0a9ff57..b4f5013 100644
--- a/ios/web_view/internal/passwords/web_view_password_manager_driver.mm
+++ b/ios/web_view/internal/passwords/web_view_password_manager_driver.mm
@@ -51,19 +51,19 @@
 }
 
 void WebViewPasswordManagerDriver::GeneratedPasswordAccepted(
-    const base::string16& password) {
+    const std::u16string& password) {
   NOTIMPLEMENTED();
 }
 
 void WebViewPasswordManagerDriver::FillSuggestion(
-    const base::string16& username,
-    const base::string16& password) {
+    const std::u16string& username,
+    const std::u16string& password) {
   NOTIMPLEMENTED();
 }
 
 void WebViewPasswordManagerDriver::PreviewSuggestion(
-    const base::string16& username,
-    const base::string16& password) {
+    const std::u16string& username,
+    const std::u16string& password) {
   NOTIMPLEMENTED();
 }
 
diff --git a/ios/web_view/internal/translate/cwv_translation_controller.mm b/ios/web_view/internal/translate/cwv_translation_controller.mm
index 18a1852..992bf623 100644
--- a/ios/web_view/internal/translate/cwv_translation_controller.mm
+++ b/ios/web_view/internal/translate/cwv_translation_controller.mm
@@ -295,9 +295,9 @@
     std::string locale = translate::TranslateDownloadManager::GetInstance()
                              ->application_locale();
     for (const std::string& languageCode : languageCodes) {
-      base::string16 localizedName =
+      std::u16string localizedName =
           l10n_util::GetDisplayNameForLocale(languageCode, locale, true);
-      base::string16 nativeName =
+      std::u16string nativeName =
           l10n_util::GetDisplayNameForLocale(languageCode, languageCode, true);
       CWVTranslationLanguage* language =
           [[CWVTranslationLanguage alloc] initWithLanguageCode:languageCode
diff --git a/ios/web_view/internal/translate/cwv_translation_language.mm b/ios/web_view/internal/translate/cwv_translation_language.mm
index c249cd6..65e89bb 100644
--- a/ios/web_view/internal/translate/cwv_translation_language.mm
+++ b/ios/web_view/internal/translate/cwv_translation_language.mm
@@ -20,8 +20,8 @@
 @synthesize nativeName = _nativeName;
 
 - (instancetype)initWithLanguageCode:(const std::string&)languageCode
-                       localizedName:(const base::string16&)localizedName
-                          nativeName:(const base::string16&)nativeName {
+                       localizedName:(const std::u16string&)localizedName
+                          nativeName:(const std::u16string&)nativeName {
   self = [super init];
   if (self) {
     _languageCode = base::SysUTF8ToNSString(languageCode);
diff --git a/ios/web_view/internal/translate/cwv_translation_language_internal.h b/ios/web_view/internal/translate/cwv_translation_language_internal.h
index c0a0e9a..16f1113 100644
--- a/ios/web_view/internal/translate/cwv_translation_language_internal.h
+++ b/ios/web_view/internal/translate/cwv_translation_language_internal.h
@@ -16,8 +16,8 @@
 @interface CWVTranslationLanguage ()
 
 - (instancetype)initWithLanguageCode:(const std::string&)languageCode
-                       localizedName:(const base::string16&)localizedName
-                          nativeName:(const base::string16&)nativeName
+                       localizedName:(const std::u16string&)localizedName
+                          nativeName:(const std::u16string&)nativeName
     NS_DESIGNATED_INITIALIZER;
 
 @end
diff --git a/ios/web_view/internal/web_view_web_client.h b/ios/web_view/internal/web_view_web_client.h
index 07d5f037..a6ab78c 100644
--- a/ios/web_view/internal/web_view_web_client.h
+++ b/ios/web_view/internal/web_view_web_client.h
@@ -31,7 +31,7 @@
       web::BrowserState* browser_state) const override;
   NSString* GetDocumentStartScriptForMainFrame(
       web::BrowserState* browser_state) const override;
-  base::string16 GetPluginNotSupportedText() const override;
+  std::u16string GetPluginNotSupportedText() const override;
   void AllowCertificateError(web::WebState* web_state,
                              int cert_error,
                              const net::SSLInfo& ssl_info,
diff --git a/ios/web_view/internal/web_view_web_client.mm b/ios/web_view/internal/web_view_web_client.mm
index c1787b2..cd698f6 100644
--- a/ios/web_view/internal/web_view_web_client.mm
+++ b/ios/web_view/internal/web_view_web_client.mm
@@ -107,7 +107,7 @@
   return [scripts componentsJoinedByString:@";"];
 }
 
-base::string16 WebViewWebClient::GetPluginNotSupportedText() const {
+std::u16string WebViewWebClient::GetPluginNotSupportedText() const {
   return l10n_util::GetStringUTF16(IDS_PLUGIN_NOT_SUPPORTED);
 }
 
diff --git a/ipc/ipc_fuzzing_tests.cc b/ipc/ipc_fuzzing_tests.cc
index d9a2ef6..360b10f 100644
--- a/ipc/ipc_fuzzing_tests.cc
+++ b/ipc/ipc_fuzzing_tests.cc
@@ -26,13 +26,13 @@
 #define IPC_MESSAGE_START TestMsgStart
 
 // Generic message class that is an int followed by a string16.
-IPC_MESSAGE_CONTROL2(MsgClassIS, int, base::string16)
+IPC_MESSAGE_CONTROL2(MsgClassIS, int, std::u16string)
 
 // Generic message class that is a string16 followed by an int.
-IPC_MESSAGE_CONTROL2(MsgClassSI, base::string16, int)
+IPC_MESSAGE_CONTROL2(MsgClassSI, std::u16string, int)
 
 // Message to create a mutex in the IPC server, using the received name.
-IPC_MESSAGE_CONTROL2(MsgDoMutex, base::string16, int)
+IPC_MESSAGE_CONTROL2(MsgDoMutex, std::u16string, int)
 
 // Used to generate an ID for a message that should not exist.
 IPC_MESSAGE_CONTROL0(MsgUnhandled)
@@ -63,7 +63,7 @@
   m.WriteInt(v2);
 
   base::PickleIterator iter(m);
-  base::string16 vs;
+  std::u16string vs;
   EXPECT_FALSE(iter.ReadString16(&vs));
 }
 
@@ -176,13 +176,13 @@
   }
 
  private:
-  void OnMsgClassISMessage(int value, const base::string16& text) {
+  void OnMsgClassISMessage(int value, const std::u16string& text) {
     UseData(MsgClassIS::ID, value, text);
     RoundtripAckReply(FUZZER_ROUTING_ID, MsgClassIS::ID, value);
     Cleanup();
   }
 
-  void OnMsgClassSIMessage(const base::string16& text, int value) {
+  void OnMsgClassSIMessage(const std::u16string& text, int value) {
     UseData(MsgClassSI::ID, value, text);
     RoundtripAckReply(FUZZER_ROUTING_ID, MsgClassSI::ID, value);
     Cleanup();
@@ -208,7 +208,7 @@
     Cleanup();
   }
 
-  void UseData(int caller, int value, const base::string16& text) {
+  void UseData(int caller, int value, const std::u16string& text) {
     std::ostringstream os;
     os << "IPC fuzzer:" << caller << " [" << value << " "
        << base::UTF16ToUTF8(text) << "]\n";
diff --git a/ipc/ipc_message_unittest.cc b/ipc/ipc_message_unittest.cc
index 63503a3c..33fa3e3 100644
--- a/ipc/ipc_message_unittest.cc
+++ b/ipc/ipc_message_unittest.cc
@@ -37,7 +37,7 @@
 TEST(IPCMessageTest, BasicMessageTest) {
   int v1 = 10;
   std::string v2("foobar");
-  base::string16 v3(base::ASCIIToUTF16("hello world"));
+  std::u16string v3(base::ASCIIToUTF16("hello world"));
 
   IPC::Message m(0, 1, IPC::Message::PRIORITY_NORMAL);
   m.WriteInt(v1);
@@ -48,7 +48,7 @@
 
   int vi;
   std::string vs;
-  base::string16 vs16;
+  std::u16string vs16;
 
   EXPECT_TRUE(iter.ReadInt(&vi));
   EXPECT_EQ(v1, vi);
diff --git a/ipc/ipc_message_utils.cc b/ipc/ipc_message_utils.cc
index 2c699cb..f9477ed 100644
--- a/ipc/ipc_message_utils.cc
+++ b/ipc/ipc_message_utils.cc
@@ -410,7 +410,7 @@
   l->append(p);
 }
 
-void ParamTraits<base::string16>::Log(const param_type& p, std::string* l) {
+void ParamTraits<std::u16string>::Log(const param_type& p, std::string* l) {
   l->append(base::UTF16ToUTF8(p));
 }
 
@@ -1214,7 +1214,7 @@
 bool ParamTraits<base::NullableString16>::Read(const base::Pickle* m,
                                                base::PickleIterator* iter,
                                                param_type* r) {
-  base::string16 string;
+  std::u16string string;
   if (!ReadParam(m, iter, &string))
     return false;
   bool is_null;
diff --git a/ipc/ipc_message_utils.h b/ipc/ipc_message_utils.h
index 756b35f..6b18d47 100644
--- a/ipc/ipc_message_utils.h
+++ b/ipc/ipc_message_utils.h
@@ -333,8 +333,8 @@
 };
 
 template <>
-struct ParamTraits<base::string16> {
-  typedef base::string16 param_type;
+struct ParamTraits<std::u16string> {
+  typedef std::u16string param_type;
   static void Write(base::Pickle* m, const param_type& p) {
     m->WriteString16(p);
   }
diff --git a/media/base/android/media_player_bridge.cc b/media/base/android/media_player_bridge.cc
index 41d0ab6..e034fdd 100644
--- a/media/base/android/media_player_bridge.cc
+++ b/media/base/android/media_player_bridge.cc
@@ -314,8 +314,8 @@
 }
 
 void MediaPlayerBridge::OnAuthCredentialsRetrieved(
-    const base::string16& username,
-    const base::string16& password) {
+    const std::u16string& username,
+    const std::u16string& password) {
   GURL::ReplacementsW replacements;
   if (!username.empty()) {
     replacements.SetUsernameStr(username);
diff --git a/media/base/android/media_player_bridge.h b/media/base/android/media_player_bridge.h
index 5264872..95958a4 100644
--- a/media/base/android/media_player_bridge.h
+++ b/media/base/android/media_player_bridge.h
@@ -173,8 +173,8 @@
 
   // Callback function passed to |resource_getter_|. Called when the auth
   // credentials are retrieved.
-  void OnAuthCredentialsRetrieved(const base::string16& username,
-                                  const base::string16& password);
+  void OnAuthCredentialsRetrieved(const std::u16string& username,
+                                  const std::u16string& password);
 
   // Extract the media metadata from a url, asynchronously.
   // OnMediaMetadataExtracted() will be called when this call finishes.
diff --git a/media/base/android/media_resource_getter.h b/media/base/android/media_resource_getter.h
index 62b9b78..85a79258 100644
--- a/media/base/android/media_resource_getter.h
+++ b/media/base/android/media_resource_getter.h
@@ -32,7 +32,7 @@
   typedef base::OnceCallback<void(const std::string&)> GetPlatformPathCB;
 
   // Callback to get the auth credentials. Args: username and password.
-  typedef base::OnceCallback<void(const base::string16&, const base::string16&)>
+  typedef base::OnceCallback<void(const std::u16string&, const std::u16string&)>
       GetAuthCredentialsCB;
 
   // Callback to get the media metadata. Args: duration, width, height, and
diff --git a/media/base/fake_localized_strings.cc b/media/base/fake_localized_strings.cc
index a497483..8106754 100644
--- a/media/base/fake_localized_strings.cc
+++ b/media/base/fake_localized_strings.cc
@@ -7,7 +7,7 @@
 
 namespace media {
 
-base::string16 FakeLocalizedStringProvider(MessageId message_id) {
+std::u16string FakeLocalizedStringProvider(MessageId message_id) {
   if (message_id == DEFAULT_AUDIO_DEVICE_NAME)
     return base::ASCIIToUTF16("Default");
 
diff --git a/media/base/localized_strings.cc b/media/base/localized_strings.cc
index 613accc..8642212 100644
--- a/media/base/localized_strings.cc
+++ b/media/base/localized_strings.cc
@@ -20,9 +20,9 @@
   return base::UTF16ToUTF8(GetLocalizedStringUTF16(message_id));
 }
 
-base::string16 GetLocalizedStringUTF16(MessageId message_id) {
+std::u16string GetLocalizedStringUTF16(MessageId message_id) {
   return g_localized_string_provider ? g_localized_string_provider(message_id)
-                                     : base::string16();
+                                     : std::u16string();
 }
 #endif
 
diff --git a/media/base/localized_strings.h b/media/base/localized_strings.h
index 4a0d36ce..d392d51b 100644
--- a/media/base/localized_strings.h
+++ b/media/base/localized_strings.h
@@ -29,7 +29,7 @@
 // Implementations are expected to convert MessageIds to generated_resources.grd
 // IDs and extract the matching string from Chrome's resource bundle (e.g.
 // through l10n_util::GetStringUTF16).
-using LocalizedStringProvider = base::string16 (*)(MessageId message_id);
+using LocalizedStringProvider = std::u16string (*)(MessageId message_id);
 
 // Initializes the global LocalizedStringProvider function.
 MEDIA_EXPORT void SetLocalizedStringProvider(LocalizedStringProvider func);
@@ -42,7 +42,7 @@
 // Returns an empty string if the LocalizedStringProvider has not been
 // initialized or if the ID is unrecognized.
 MEDIA_EXPORT std::string GetLocalizedStringUTF8(MessageId message_id);
-base::string16 GetLocalizedStringUTF16(MessageId message_id);
+std::u16string GetLocalizedStringUTF16(MessageId message_id);
 #endif
 
 }  // namespace media
diff --git a/media/blink/webcontentdecryptionmodule_impl.cc b/media/blink/webcontentdecryptionmodule_impl.cc
index b1f01ee..dd815c6 100644
--- a/media/blink/webcontentdecryptionmodule_impl.cc
+++ b/media/blink/webcontentdecryptionmodule_impl.cc
@@ -71,7 +71,7 @@
 
 void WebContentDecryptionModuleImpl::Create(
     media::CdmFactory* cdm_factory,
-    const base::string16& key_system,
+    const std::u16string& key_system,
     const blink::WebSecurityOrigin& security_origin,
     const CdmConfig& cdm_config,
     WebCdmCreatedCB web_cdm_created_cb) {
diff --git a/media/blink/webcontentdecryptionmodule_impl.h b/media/blink/webcontentdecryptionmodule_impl.h
index fddf586..c5e5e22 100644
--- a/media/blink/webcontentdecryptionmodule_impl.h
+++ b/media/blink/webcontentdecryptionmodule_impl.h
@@ -38,7 +38,7 @@
     : public blink::WebContentDecryptionModule {
  public:
   static void Create(CdmFactory* cdm_factory,
-                     const base::string16& key_system,
+                     const std::u16string& key_system,
                      const blink::WebSecurityOrigin& security_origin,
                      const CdmConfig& cdm_config,
                      WebCdmCreatedCB web_cdm_created_cb);
diff --git a/media/gpu/windows/dxva_video_decode_accelerator_win.cc b/media/gpu/windows/dxva_video_decode_accelerator_win.cc
index 2dfebdf..7e1dece2 100644
--- a/media/gpu/windows/dxva_video_decode_accelerator_win.cc
+++ b/media/gpu/windows/dxva_video_decode_accelerator_win.cc
@@ -1478,8 +1478,8 @@
         FileVersionInfo::CreateFileVersionInfoForModule(decoder_dll));
     RETURN_ON_FAILURE(version_info, "unable to get version of msmpeg2vdec.dll",
                       false);
-    base::string16 file_version = version_info->file_version();
-    RETURN_ON_FAILURE(file_version.find(u"6.1.7140") == base::string16::npos,
+    std::u16string file_version = version_info->file_version();
+    RETURN_ON_FAILURE(file_version.find(u"6.1.7140") == std::u16string::npos,
                       "blocked version of msmpeg2vdec.dll 6.1.7140", false);
     codec_ = kCodecH264;
     clsid = __uuidof(CMSH264DecoderMFT);
diff --git a/mojo/public/cpp/base/string16_mojom_traits.cc b/mojo/public/cpp/base/string16_mojom_traits.cc
index 237a7c9..482b07a 100644
--- a/mojo/public/cpp/base/string16_mojom_traits.cc
+++ b/mojo/public/cpp/base/string16_mojom_traits.cc
@@ -9,9 +9,9 @@
 namespace mojo {
 
 // static
-bool StructTraits<mojo_base::mojom::String16DataView, base::string16>::Read(
+bool StructTraits<mojo_base::mojom::String16DataView, std::u16string>::Read(
     mojo_base::mojom::String16DataView data,
-    base::string16* out) {
+    std::u16string* out) {
   ArrayDataView<uint16_t> view;
   data.GetDataDataView(&view);
   out->assign(reinterpret_cast<const char16_t*>(view.data()), view.size());
@@ -20,23 +20,23 @@
 
 // static
 mojo_base::BigBuffer
-StructTraits<mojo_base::mojom::BigString16DataView, base::string16>::data(
-    const base::string16& str) {
+StructTraits<mojo_base::mojom::BigString16DataView, std::u16string>::data(
+    const std::u16string& str) {
   const auto* bytes = reinterpret_cast<const uint8_t*>(str.data());
   return mojo_base::BigBuffer(
       base::make_span(bytes, str.size() * sizeof(char16_t)));
 }
 
 // static
-bool StructTraits<mojo_base::mojom::BigString16DataView, base::string16>::Read(
+bool StructTraits<mojo_base::mojom::BigString16DataView, std::u16string>::Read(
     mojo_base::mojom::BigString16DataView data,
-    base::string16* out) {
+    std::u16string* out) {
   mojo_base::BigBuffer buffer;
   if (!data.ReadData(&buffer))
     return false;
   if (buffer.size() % sizeof(char16_t))
     return false;
-  *out = base::string16(reinterpret_cast<const char16_t*>(buffer.data()),
+  *out = std::u16string(reinterpret_cast<const char16_t*>(buffer.data()),
                         buffer.size() / sizeof(char16_t));
   return true;
 }
diff --git a/mojo/public/cpp/base/string16_mojom_traits.h b/mojo/public/cpp/base/string16_mojom_traits.h
index d9f53131bf..0c6f072a 100644
--- a/mojo/public/cpp/base/string16_mojom_traits.h
+++ b/mojo/public/cpp/base/string16_mojom_traits.h
@@ -27,23 +27,23 @@
 
 template <>
 struct COMPONENT_EXPORT(MOJO_BASE_TRAITS)
-    StructTraits<mojo_base::mojom::String16DataView, base::string16> {
-  static base::span<const uint16_t> data(const base::string16& str) {
+    StructTraits<mojo_base::mojom::String16DataView, std::u16string> {
+  static base::span<const uint16_t> data(const std::u16string& str) {
     return StructTraits<mojo_base::mojom::String16DataView,
                         base::StringPiece16>::data(str);
   }
 
   static bool Read(mojo_base::mojom::String16DataView data,
-                   base::string16* out);
+                   std::u16string* out);
 };
 
 template <>
 struct COMPONENT_EXPORT(MOJO_BASE_TRAITS)
-    StructTraits<mojo_base::mojom::BigString16DataView, base::string16> {
-  static mojo_base::BigBuffer data(const base::string16& str);
+    StructTraits<mojo_base::mojom::BigString16DataView, std::u16string> {
+  static mojo_base::BigBuffer data(const std::u16string& str);
 
   static bool Read(mojo_base::mojom::BigString16DataView data,
-                   base::string16* out);
+                   std::u16string* out);
 };
 
 }  // namespace mojo
diff --git a/mojo/public/cpp/base/string16_unittest.cc b/mojo/public/cpp/base/string16_unittest.cc
index 41f8983..49ae9b4 100644
--- a/mojo/public/cpp/base/string16_unittest.cc
+++ b/mojo/public/cpp/base/string16_unittest.cc
@@ -17,29 +17,29 @@
 namespace string16_unittest {
 
 TEST(String16Test, Empty) {
-  base::string16 in;
-  base::string16 out;
+  std::u16string in;
+  std::u16string out;
   ASSERT_TRUE(mojo::test::SerializeAndDeserialize<mojom::String16>(in, out));
   EXPECT_EQ(in, out);
 }
 
 TEST(String16Test, NonEmpty) {
-  base::string16 in = base::ASCIIToUTF16("hello world");
-  base::string16 out;
+  std::u16string in = base::ASCIIToUTF16("hello world");
+  std::u16string out;
   ASSERT_TRUE(mojo::test::SerializeAndDeserialize<mojom::String16>(in, out));
   EXPECT_EQ(in, out);
 }
 
 TEST(BigString16Test, Empty) {
-  base::string16 in;
-  base::string16 out;
+  std::u16string in;
+  std::u16string out;
   ASSERT_TRUE(mojo::test::SerializeAndDeserialize<mojom::BigString16>(in, out));
   EXPECT_EQ(in, out);
 }
 
 TEST(BigString16Test, Short) {
-  base::string16 in = base::ASCIIToUTF16("hello world");
-  base::string16 out;
+  std::u16string in = base::ASCIIToUTF16("hello world");
+  std::u16string out;
   ASSERT_TRUE(mojo::test::SerializeAndDeserialize<mojom::BigString16>(in, out));
   EXPECT_EQ(in, out);
 }
@@ -47,10 +47,10 @@
 TEST(BigString16Test, Long) {
   constexpr size_t kLargeStringSize = 1024 * 1024;
 
-  base::string16 in(kLargeStringSize, 0);
+  std::u16string in(kLargeStringSize, 0);
   base::RandBytes(&in[0], kLargeStringSize);
 
-  base::string16 out;
+  std::u16string out;
   ASSERT_TRUE(mojo::test::SerializeAndDeserialize<mojom::BigString16>(in, out));
   EXPECT_EQ(in, out);
 }
diff --git a/mojo/public/mojom/base/BUILD.gn b/mojo/public/mojom/base/BUILD.gn
index 53acc61..9d63736 100644
--- a/mojo/public/mojom/base/BUILD.gn
+++ b/mojo/public/mojom/base/BUILD.gn
@@ -392,11 +392,11 @@
       types = [
         {
           mojom = "mojo_base.mojom.String16"
-          cpp = "::base::string16"
+          cpp = "::std::u16string"
         },
         {
           mojom = "mojo_base.mojom.BigString16"
-          cpp = "::base::string16"
+          cpp = "::std::u16string"
         },
       ]
       traits_headers = [ "//mojo/public/cpp/base/string16_mojom_traits.h" ]
diff --git a/mojo/public/mojom/base/file_path.mojom b/mojo/public/mojom/base/file_path.mojom
index d6d78c4..dd8ecdc 100644
--- a/mojo/public/mojom/base/file_path.mojom
+++ b/mojo/public/mojom/base/file_path.mojom
@@ -11,7 +11,7 @@
 
   // This duplicates the contents of mojo_base.mojom.String16. String16 isn't
   // used here due to typemapping dependency problems. base::FilePath is
-  // used for the typemap for both variants, but base::string16 and WTF::String
+  // used for the typemap for both variants, but std::u16string and WTF::String
   // are used for mojo_base.mojom.String16 typemapping. This mismatch causes
   // problems with dependencies.
   [EnableIf=file_path_is_string16]
diff --git a/mojo/public/mojom/base/string16.mojom b/mojo/public/mojom/base/string16.mojom
index 2a380843..c8b2186 100644
--- a/mojo/public/mojom/base/string16.mojom
+++ b/mojo/public/mojom/base/string16.mojom
@@ -6,7 +6,7 @@
 
 import "mojo/public/mojom/base/big_buffer.mojom";
 
-// Corresponds to |base::string16| in base/strings/string16.h
+// Corresponds to |std::u16string| in base/strings/string16.h
 // Corresponds to |WTF::String| in
 // third_party/WebKit/Source/platform/wtf/text/WTFString.h.
 [Stable]
diff --git a/net/base/auth.cc b/net/base/auth.cc
index d14a663b..3af2751 100644
--- a/net/base/auth.cc
+++ b/net/base/auth.cc
@@ -22,16 +22,14 @@
 
 AuthCredentials::AuthCredentials() = default;
 
-AuthCredentials::AuthCredentials(const base::string16& username,
-                                 const base::string16& password)
-    : username_(username),
-      password_(password) {
-}
+AuthCredentials::AuthCredentials(const std::u16string& username,
+                                 const std::u16string& password)
+    : username_(username), password_(password) {}
 
 AuthCredentials::~AuthCredentials() = default;
 
-void AuthCredentials::Set(const base::string16& username,
-                          const base::string16& password) {
+void AuthCredentials::Set(const std::u16string& username,
+                          const std::u16string& password) {
   username_ = username;
   password_ = password;
 }
diff --git a/net/base/auth.h b/net/base/auth.h
index 7762d7855..15d2b4e 100644
--- a/net/base/auth.h
+++ b/net/base/auth.h
@@ -50,12 +50,12 @@
 class NET_EXPORT AuthCredentials {
  public:
   AuthCredentials();
-  AuthCredentials(const base::string16& username,
-                  const base::string16& password);
+  AuthCredentials(const std::u16string& username,
+                  const std::u16string& password);
   ~AuthCredentials();
 
   // Set the |username| and |password|.
-  void Set(const base::string16& username, const base::string16& password);
+  void Set(const std::u16string& username, const std::u16string& password);
 
   // Determines if |this| is equivalent to |other|.
   bool Equals(const AuthCredentials& other) const;
@@ -63,19 +63,19 @@
   // Returns true if all credentials are empty.
   bool Empty() const;
 
-  const base::string16& username() const { return username_; }
-  const base::string16& password() const { return password_; }
+  const std::u16string& username() const { return username_; }
+  const std::u16string& password() const { return password_; }
 
  private:
   // The username to provide, possibly empty. This should be ASCII only to
   // minimize compatibility problems, but arbitrary UTF-16 strings are allowed
   // and will be attempted.
-  base::string16 username_;
+  std::u16string username_;
 
   // The password to provide, possibly empty. This should be ASCII only to
   // minimize compatibility problems, but arbitrary UTF-16 strings are allowed
   // and will be attempted.
-  base::string16 password_;
+  std::u16string password_;
 
   // Intentionally allowing the implicit copy constructor and assignment
   // operators.
diff --git a/net/base/directory_listing.cc b/net/base/directory_listing.cc
index a0e66ef..d4d7589 100644
--- a/net/base/directory_listing.cc
+++ b/net/base/directory_listing.cc
@@ -17,7 +17,7 @@
 
 namespace net {
 
-std::string GetDirectoryListingHeader(const base::string16& title) {
+std::string GetDirectoryListingHeader(const std::u16string& title) {
   scoped_refptr<base::RefCountedMemory> header(
       NetModule::GetResource(IDR_DIR_HEADER_HTML));
   // This can be null in unit tests.
@@ -34,7 +34,7 @@
   return result;
 }
 
-std::string GetDirectoryListingEntry(const base::string16& name,
+std::string GetDirectoryListingEntry(const std::u16string& name,
                                      const std::string& raw_bytes,
                                      bool is_dir,
                                      int64_t size,
@@ -60,7 +60,7 @@
   raw_size_string_stream << size << ",";
   result.append(raw_size_string_stream.str());
 
-  base::string16 size_string;
+  std::u16string size_string;
   if (size >= 0)
     size_string = base::FormatBytesUnlocalized(size);
   base::EscapeJSONString(size_string, true, &result);
@@ -68,7 +68,7 @@
   result.append(",");
 
   // |modified| can be NULL in FTP listings.
-  base::string16 modified_str;
+  std::u16string modified_str;
   if (modified.is_null()) {
     result.append("0,");
   } else {
diff --git a/net/base/directory_listing.h b/net/base/directory_listing.h
index 7776d186..6fb5c64 100644
--- a/net/base/directory_listing.h
+++ b/net/base/directory_listing.h
@@ -19,7 +19,7 @@
 
 // Call these functions to get the html snippet for a directory listing.
 // The return values of these functions are in UTF-8.
-NET_EXPORT std::string GetDirectoryListingHeader(const base::string16& title);
+NET_EXPORT std::string GetDirectoryListingHeader(const std::u16string& title);
 
 // Given the name of a file in a directory (ftp or local) and
 // other information (is_dir, size, modification time), it returns
@@ -33,7 +33,7 @@
 // will be used.
 //
 // Both |name| and |raw_bytes| are escaped internally.
-NET_EXPORT std::string GetDirectoryListingEntry(const base::string16& name,
+NET_EXPORT std::string GetDirectoryListingEntry(const std::u16string& name,
                                                 const std::string& raw_bytes,
                                                 bool is_dir,
                                                 int64_t size,
diff --git a/net/base/escape.cc b/net/base/escape.cc
index 9d13001..a529886 100644
--- a/net/base/escape.cc
+++ b/net/base/escape.cc
@@ -190,7 +190,7 @@
   return EscapeForHTMLImpl(input);
 }
 
-base::string16 EscapeForHTML(base::StringPiece16 input) {
+std::u16string EscapeForHTML(base::StringPiece16 input) {
   return EscapeForHTMLImpl(input);
 }
 
@@ -201,7 +201,7 @@
   return base::UnescapeURLComponent(escaped_text, rules);
 }
 
-base::string16 UnescapeAndDecodeUTF8URLComponentWithAdjustments(
+std::u16string UnescapeAndDecodeUTF8URLComponentWithAdjustments(
     base::StringPiece text,
     UnescapeRule::Type rules,
     base::OffsetAdjuster::Adjustments* adjustments) {
@@ -221,7 +221,7 @@
       escaped_text, fail_on_path_separators, unescaped_text);
 }
 
-base::string16 UnescapeForHTML(base::StringPiece16 input) {
+std::u16string UnescapeForHTML(base::StringPiece16 input) {
   static const struct {
     const char* ampersand_code;
     const char replacement;
@@ -232,12 +232,12 @@
   constexpr size_t kEscapeToCharsCount = base::size(kEscapeToChars);
 
   if (input.find(base::ASCIIToUTF16("&")) == std::string::npos)
-    return base::string16(input);
+    return std::u16string(input);
 
-  base::string16 ampersand_chars[kEscapeToCharsCount];
-  base::string16 text(input);
-  for (base::string16::iterator iter = text.begin();
-       iter != text.end(); ++iter) {
+  std::u16string ampersand_chars[kEscapeToCharsCount];
+  std::u16string text(input);
+  for (std::u16string::iterator iter = text.begin(); iter != text.end();
+       ++iter) {
     if (*iter == '&') {
       // Potential ampersand encode char.
       size_t index = iter - text.begin();
diff --git a/net/base/escape.h b/net/base/escape.h
index 03130ff..f241f396 100644
--- a/net/base/escape.h
+++ b/net/base/escape.h
@@ -68,7 +68,7 @@
 
 // Escapes chars that might cause this text to be interpreted as HTML tags.
 NET_EXPORT std::string EscapeForHTML(base::StringPiece text);
-NET_EXPORT base::string16 EscapeForHTML(base::StringPiece16 text);
+NET_EXPORT std::u16string EscapeForHTML(base::StringPiece16 text);
 
 // Unescaping ------------------------------------------------------------------
 
@@ -94,10 +94,10 @@
 // Unescapes the given substring as a URL, and then tries to interpret the
 // result as being encoded as UTF-8. If the result is convertible into UTF-8, it
 // will be returned as converted. If it is not, the original escaped string will
-// be converted into a base::string16 and returned.  |adjustments| provides
+// be converted into a std::u16string and returned.  |adjustments| provides
 // information on how the original string was adjusted to get the string
 // returned.
-NET_EXPORT base::string16 UnescapeAndDecodeUTF8URLComponentWithAdjustments(
+NET_EXPORT std::u16string UnescapeAndDecodeUTF8URLComponentWithAdjustments(
     base::StringPiece text,
     UnescapeRule::Type rules,
     base::OffsetAdjuster::Adjustments* adjustments);
@@ -125,7 +125,7 @@
 
 // Unescapes the following ampersand character codes from |text|:
 // &lt; &gt; &amp; &quot; &#39;
-NET_EXPORT base::string16 UnescapeForHTML(base::StringPiece16 text);
+NET_EXPORT std::u16string UnescapeForHTML(base::StringPiece16 text);
 
 }  // namespace net
 
diff --git a/net/base/escape_unittest.cc b/net/base/escape_unittest.cc
index 9600a6afe..a9c447ec 100644
--- a/net/base/escape_unittest.cc
+++ b/net/base/escape_unittest.cc
@@ -134,7 +134,7 @@
       {"&amp; &", "& &"},
   };
   for (const auto& test : tests) {
-    base::string16 result = UnescapeForHTML(base::ASCIIToUTF16(test.input));
+    std::u16string result = UnescapeForHTML(base::ASCIIToUTF16(test.input));
     EXPECT_EQ(base::ASCIIToUTF16(test.expected_output), result);
   }
 }
diff --git a/net/base/filename_util.h b/net/base/filename_util.h
index d6b33cc9..c0d7292 100644
--- a/net/base/filename_util.h
+++ b/net/base/filename_util.h
@@ -65,7 +65,7 @@
 //
 // Note: |mime_type| should only be specified if this function is called from a
 // thread that allows IO.
-NET_EXPORT base::string16 GetSuggestedFilename(
+NET_EXPORT std::u16string GetSuggestedFilename(
     const GURL& url,
     const std::string& content_disposition,
     const std::string& referrer_charset,
diff --git a/net/base/filename_util_icu.cc b/net/base/filename_util_icu.cc
index 6d942be8..b00c7da 100644
--- a/net/base/filename_util_icu.cc
+++ b/net/base/filename_util_icu.cc
@@ -17,7 +17,7 @@
 namespace net {
 
 bool IsSafePortablePathComponent(const base::FilePath& component) {
-  base::string16 component16;
+  std::u16string component16;
   base::FilePath::StringType sanitized = component.value();
   SanitizeGeneratedFileName(&sanitized, true);
   base::FilePath::StringType extension = component.Extension();
@@ -46,7 +46,7 @@
   return IsSafePortablePathComponent(path.BaseName());
 }
 
-base::string16 GetSuggestedFilename(const GURL& url,
+std::u16string GetSuggestedFilename(const GURL& url,
                                     const std::string& content_disposition,
                                     const std::string& referrer_charset,
                                     const std::string& suggested_name,
diff --git a/net/base/filename_util_internal.cc b/net/base/filename_util_internal.cc
index 3cb42b5..90b8b40 100644
--- a/net/base/filename_util_internal.cc
+++ b/net/base/filename_util_internal.cc
@@ -133,7 +133,7 @@
   if (!base::IsStringUTF8(decoded_filename)) {
     // TODO(jshin): this is probably not robust enough. To be sure, we need
     // encoding detection.
-    base::string16 utf16_output;
+    std::u16string utf16_output;
     if (!referrer_charset.empty() &&
         ConvertToUTF16(unescaped_url_filename, referrer_charset.c_str(),
                        &utf16_output)) {
@@ -205,7 +205,7 @@
   *file_name = file_name->ReplaceExtension(extension);
 }
 
-bool FilePathToString16(const base::FilePath& path, base::string16* converted) {
+bool FilePathToString16(const base::FilePath& path, std::u16string* converted) {
 #if defined(OS_WIN)
   converted->assign(path.value().begin(), path.value().end());
   return true;
@@ -216,7 +216,7 @@
 #endif
 }
 
-base::string16 GetSuggestedFilenameImpl(
+std::u16string GetSuggestedFilenameImpl(
     const GURL& url,
     const std::string& content_disposition,
     const std::string& referrer_charset,
@@ -293,7 +293,7 @@
   else
     GenerateSafeFileName(mime_type, overwrite_extension, &result);
 
-  base::string16 result16;
+  std::u16string result16;
   if (!FilePathToString16(result, &result16)) {
     result = base::FilePath(default_name_str);
     if (!FilePathToString16(result, &result16)) {
@@ -313,7 +313,7 @@
     const std::string& default_file_name,
     bool should_replace_extension,
     ReplaceIllegalCharactersFunction replace_illegal_characters_function) {
-  base::string16 file_name = GetSuggestedFilenameImpl(
+  std::u16string file_name = GetSuggestedFilenameImpl(
       url, content_disposition, referrer_charset, suggested_name, mime_type,
       default_file_name, should_replace_extension,
       replace_illegal_characters_function);
diff --git a/net/base/filename_util_internal.h b/net/base/filename_util_internal.h
index ae71568..7f984f9 100644
--- a/net/base/filename_util_internal.h
+++ b/net/base/filename_util_internal.h
@@ -28,13 +28,13 @@
                          bool ignore_extension,
                          base::FilePath* file_name);
 
-bool FilePathToString16(const base::FilePath& path, base::string16* converted);
+bool FilePathToString16(const base::FilePath& path, std::u16string* converted);
 
 // Similar to GetSuggestedFilename(), but takes a function to replace illegal
 // characters. If |should_replace_extension| is true, the file extension
 // extracted from a URL will always be considered unreliable and the file
 // extension will be determined by |mime_type|.
-base::string16 GetSuggestedFilenameImpl(
+std::u16string GetSuggestedFilenameImpl(
     const GURL& url,
     const std::string& content_disposition,
     const std::string& referrer_charset,
diff --git a/net/base/filename_util_unittest.cc b/net/base/filename_util_unittest.cc
index 37a60cb..c1d732e 100644
--- a/net/base/filename_util_unittest.cc
+++ b/net/base/filename_util_unittest.cc
@@ -36,7 +36,7 @@
 };
 
 // The expected filenames are coded as wchar_t for convenience.
-// TODO(https://crbug.com/911896): Make these char16_t once base::string16 is
+// TODO(https://crbug.com/911896): Make these char16_t once std::u16string is
 // std::u16string.
 std::wstring FilePathAsWString(const base::FilePath& path) {
 #if defined(OS_WIN)
diff --git a/net/base/load_states.h b/net/base/load_states.h
index 06381d2..d894510 100644
--- a/net/base/load_states.h
+++ b/net/base/load_states.h
@@ -26,9 +26,9 @@
 // This class provides an easy way to hold a load state with an extra parameter.
 struct LoadStateWithParam {
   LoadState state;
-  base::string16 param;
+  std::u16string param;
   LoadStateWithParam() : state(LOAD_STATE_IDLE) {}
-  LoadStateWithParam(LoadState state, const base::string16& param)
+  LoadStateWithParam(LoadState state, const std::u16string& param)
       : state(state), param(param) {}
 };
 
diff --git a/net/base/net_string_util.h b/net/base/net_string_util.h
index e1ba4303..f6a17cd2 100644
--- a/net/base/net_string_util.h
+++ b/net/base/net_string_util.h
@@ -34,18 +34,18 @@
 // On failure, returns false and |output| is cleared.
 bool ConvertToUTF16(base::StringPiece text,
                     const char* charset,
-                    base::string16* output);
+                    std::u16string* output);
 
 // Converts |text| using |charset| to UTF-16, and writes it to |output|.
 // Any characters that can not be converted are replaced with U+FFFD.
 bool ConvertToUTF16WithSubstitutions(base::StringPiece text,
                                      const char* charset,
-                                     base::string16* output);
+                                     std::u16string* output);
 
 // Converts |str| to uppercase using the default locale, and writes it to
 // |output|. On failure returns false and |output| is cleared.
 NET_EXPORT_PRIVATE bool ToUpper(base::StringPiece16 str,
-                                base::string16* output);
+                                std::u16string* output);
 
 }  // namespace net
 
diff --git a/net/base/net_string_util_icu.cc b/net/base/net_string_util_icu.cc
index c3ef136..c3b6044 100644
--- a/net/base/net_string_util_icu.cc
+++ b/net/base/net_string_util_icu.cc
@@ -51,19 +51,19 @@
 
 bool ConvertToUTF16(base::StringPiece text,
                     const char* charset,
-                    base::string16* output) {
+                    std::u16string* output) {
   return base::CodepageToUTF16(text, charset,
                                base::OnStringConversionError::FAIL, output);
 }
 
 bool ConvertToUTF16WithSubstitutions(base::StringPiece text,
                                      const char* charset,
-                                     base::string16* output) {
+                                     std::u16string* output) {
   return base::CodepageToUTF16(
       text, charset, base::OnStringConversionError::SUBSTITUTE, output);
 }
 
-bool ToUpper(base::StringPiece16 str, base::string16* output) {
+bool ToUpper(base::StringPiece16 str, std::u16string* output) {
   *output = base::i18n::ToUpper(str);
   return true;
 }
diff --git a/net/base/net_string_util_icu_alternatives_android.cc b/net/base/net_string_util_icu_alternatives_android.cc
index 86c9e35..25c4dea7 100644
--- a/net/base/net_string_util_icu_alternatives_android.cc
+++ b/net/base/net_string_util_icu_alternatives_android.cc
@@ -98,7 +98,7 @@
 
 bool ConvertToUTF16(base::StringPiece text,
                     const char* charset,
-                    base::string16* output) {
+                    std::u16string* output) {
   output->clear();
   ScopedJavaLocalRef<jstring> java_result = ConvertToJstring(text, charset);
   if (java_result.is_null())
@@ -109,7 +109,7 @@
 
 bool ConvertToUTF16WithSubstitutions(base::StringPiece text,
                                      const char* charset,
-                                     base::string16* output) {
+                                     std::u16string* output) {
   output->clear();
   ScopedJavaLocalRef<jstring> java_result =
       ConvertToJstringWithSubstitutions(text, charset);
@@ -119,7 +119,7 @@
   return true;
 }
 
-bool ToUpper(base::StringPiece16 str, base::string16* output) {
+bool ToUpper(base::StringPiece16 str, std::u16string* output) {
   output->clear();
   JNIEnv* env = base::android::AttachCurrentThread();
   ScopedJavaLocalRef<jstring> java_new_str(
diff --git a/net/base/net_string_util_icu_alternatives_ios.mm b/net/base/net_string_util_icu_alternatives_ios.mm
index 883546f..66d3c84 100644
--- a/net/base/net_string_util_icu_alternatives_ios.mm
+++ b/net/base/net_string_util_icu_alternatives_ios.mm
@@ -63,19 +63,19 @@
 
 bool ConvertToUTF16(base::StringPiece text,
                     const char* charset,
-                    base::string16* output) {
+                    std::u16string* output) {
   DCHECK(false) << "Not implemented yet.";
   return false;
 }
 
 bool ConvertToUTF16WithSubstitutions(base::StringPiece text,
                                      const char* charset,
-                                     base::string16* output) {
+                                     std::u16string* output) {
   DCHECK(false) << "Not implemented yet.";
   return false;
 }
 
-bool ToUpper(base::StringPiece16 str, base::string16* output) {
+bool ToUpper(base::StringPiece16 str, std::u16string* output) {
   base::ScopedCFTypeRef<CFStringRef> cfstring(base::SysUTF16ToCFStringRef(str));
   base::ScopedCFTypeRef<CFMutableStringRef> mutable_cfstring(
       CFStringCreateMutableCopy(kCFAllocatorDefault, 0, cfstring.get()));
diff --git a/net/base/net_string_util_unittest.cc b/net/base/net_string_util_unittest.cc
index adfe9cb..77cb193 100644
--- a/net/base/net_string_util_unittest.cc
+++ b/net/base/net_string_util_unittest.cc
@@ -13,33 +13,33 @@
 namespace net {
 
 TEST(NetStringUtilTest, ToUpperEmpty) {
-  base::string16 in;
-  base::string16 out;
-  base::string16 expected;
+  std::u16string in;
+  std::u16string out;
+  std::u16string expected;
   ASSERT_TRUE(ToUpper(in, &out));
   ASSERT_EQ(expected, out);
 }
 
 TEST(NetStringUtilTest, ToUpperSingleChar) {
-  base::string16 in(base::WideToUTF16(L"a"));
-  base::string16 out;
-  base::string16 expected(base::WideToUTF16(L"A"));
+  std::u16string in(base::WideToUTF16(L"a"));
+  std::u16string out;
+  std::u16string expected(base::WideToUTF16(L"A"));
   ASSERT_TRUE(ToUpper(in, &out));
   ASSERT_EQ(expected, out);
 }
 
 TEST(NetStringUtilTest, ToUpperSimple) {
-  base::string16 in(base::WideToUTF16(L"hello world"));
-  base::string16 out;
-  base::string16 expected(base::WideToUTF16(L"HELLO WORLD"));
+  std::u16string in(base::WideToUTF16(L"hello world"));
+  std::u16string out;
+  std::u16string expected(base::WideToUTF16(L"HELLO WORLD"));
   ASSERT_TRUE(ToUpper(in, &out));
   ASSERT_EQ(expected, out);
 }
 
 TEST(NetStringUtilTest, ToUpperAlreadyUpper) {
-  base::string16 in(base::WideToUTF16(L"HELLO WORLD"));
-  base::string16 out;
-  base::string16 expected(base::WideToUTF16(L"HELLO WORLD"));
+  std::u16string in(base::WideToUTF16(L"HELLO WORLD"));
+  std::u16string out;
+  std::u16string expected(base::WideToUTF16(L"HELLO WORLD"));
   ASSERT_TRUE(ToUpper(in, &out));
   ASSERT_EQ(expected, out);
 }
diff --git a/net/base/network_delegate.cc b/net/base/network_delegate.cc
index 02e2fba..e8a345b 100644
--- a/net/base/network_delegate.cc
+++ b/net/base/network_delegate.cc
@@ -95,7 +95,7 @@
 }
 
 void NetworkDelegate::NotifyPACScriptError(int line_number,
-                                           const base::string16& error) {
+                                           const std::u16string& error) {
   DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
   OnPACScriptError(line_number, error);
 }
diff --git a/net/base/network_delegate.h b/net/base/network_delegate.h
index c00f0cc..069b8f5 100644
--- a/net/base/network_delegate.h
+++ b/net/base/network_delegate.h
@@ -71,7 +71,7 @@
   void NotifyResponseStarted(URLRequest* request, int net_error);
   void NotifyCompleted(URLRequest* request, bool started, int net_error);
   void NotifyURLRequestDestroyed(URLRequest* request);
-  void NotifyPACScriptError(int line_number, const base::string16& error);
+  void NotifyPACScriptError(int line_number, const std::u16string& error);
   bool CanGetCookies(const URLRequest& request,
                      bool allowed_from_caller);
   bool CanSetCookie(const URLRequest& request,
@@ -196,7 +196,7 @@
 
   // Corresponds to ProxyResolverJSBindings::OnError.
   virtual void OnPACScriptError(int line_number,
-                                const base::string16& error) = 0;
+                                const std::u16string& error) = 0;
 
   // Called when reading cookies to allow the network delegate to block access
   // to the cookie. This method will never be invoked when
diff --git a/net/base/network_delegate_impl.cc b/net/base/network_delegate_impl.cc
index 822bedc..b944aae 100644
--- a/net/base/network_delegate_impl.cc
+++ b/net/base/network_delegate_impl.cc
@@ -45,8 +45,7 @@
 }
 
 void NetworkDelegateImpl::OnPACScriptError(int line_number,
-                                           const base::string16& error) {
-}
+                                           const std::u16string& error) {}
 
 bool NetworkDelegateImpl::OnCanGetCookies(const URLRequest& request,
                                           bool allowed_from_caller) {
diff --git a/net/base/network_delegate_impl.h b/net/base/network_delegate_impl.h
index e6523c8..25cb5a9 100644
--- a/net/base/network_delegate_impl.h
+++ b/net/base/network_delegate_impl.h
@@ -60,7 +60,7 @@
 
   void OnURLRequestDestroyed(URLRequest* request) override;
 
-  void OnPACScriptError(int line_number, const base::string16& error) override;
+  void OnPACScriptError(int line_number, const std::u16string& error) override;
 
   bool OnCanGetCookies(const URLRequest& request,
                        bool allowed_from_caller) override;
diff --git a/net/base/registry_controlled_domains/registry_controlled_domain.cc b/net/base/registry_controlled_domains/registry_controlled_domain.cc
index 9120e25e..0c44e8b7 100644
--- a/net/base/registry_controlled_domains/registry_controlled_domain.cc
+++ b/net/base/registry_controlled_domains/registry_controlled_domain.cc
@@ -452,7 +452,7 @@
 size_t PermissiveGetHostRegistryLength(base::StringPiece16 host,
                                        UnknownRegistryFilter unknown_filter,
                                        PrivateRegistryFilter private_filter) {
-  return DoPermissiveGetHostRegistryLength<base::string16>(host, unknown_filter,
+  return DoPermissiveGetHostRegistryLength<std::u16string>(host, unknown_filter,
                                                            private_filter);
 }
 
diff --git a/net/base/url_util.cc b/net/base/url_util.cc
index bba9026..ded072c 100644
--- a/net/base/url_util.cc
+++ b/net/base/url_util.cc
@@ -44,11 +44,11 @@
 // unescaped" to a valid UTF-8 string, return that string, as UTF-16. Otherwise,
 // convert it as-is to UTF-16. "Safely unescaped" is defined as having no
 // escaped character between '0x00' and '0x1F', inclusive.
-base::string16 UnescapeIdentityString(base::StringPiece escaped_text) {
+std::u16string UnescapeIdentityString(base::StringPiece escaped_text) {
   std::string unescaped_text;
   if (base::UnescapeBinaryURLComponentSafe(
           escaped_text, false /* fail_on_path_separators */, &unescaped_text)) {
-    base::string16 result;
+    std::u16string result;
     if (base::UTF8ToUTF16(unescaped_text.data(), unescaped_text.length(),
                           &result)) {
       return result;
@@ -420,8 +420,8 @@
 }
 
 void GetIdentityFromURL(const GURL& url,
-                        base::string16* username,
-                        base::string16* password) {
+                        std::u16string* username,
+                        std::u16string* password) {
   *username = UnescapeIdentityString(url.username());
   *password = UnescapeIdentityString(url.password());
 }
diff --git a/net/base/url_util.h b/net/base/url_util.h
index fe54c90b..d4a3464 100644
--- a/net/base/url_util.h
+++ b/net/base/url_util.h
@@ -192,8 +192,8 @@
 // Extracts the unescaped username/password from |url|, saving the results
 // into |*username| and |*password|.
 NET_EXPORT_PRIVATE void GetIdentityFromURL(const GURL& url,
-                                           base::string16* username,
-                                           base::string16* password);
+                                           std::u16string* username,
+                                           std::u16string* password);
 
 // Returns true if the url's host is a Google server. This should only be used
 // for histograms and shouldn't be used to affect behavior.
diff --git a/net/base/url_util_unittest.cc b/net/base/url_util_unittest.cc
index c35b8b0..ce263b6 100644
--- a/net/base/url_util_unittest.cc
+++ b/net/base/url_util_unittest.cc
@@ -667,7 +667,7 @@
     SCOPED_TRACE(test.input_url);
     GURL url(test.input_url);
 
-    base::string16 username, password;
+    std::u16string username, password;
     GetIdentityFromURL(url, &username, &password);
 
     EXPECT_EQ(base::UTF8ToUTF16(test.expected_username), username);
@@ -683,7 +683,7 @@
   EXPECT_EQ("%E4%BD%A0%E5%A5%BD", url.password());
 
   // Extract the unescaped identity.
-  base::string16 username, password;
+  std::u16string username, password;
   GetIdentityFromURL(url, &username, &password);
 
   // Verify that it was decoded as UTF8.
diff --git a/net/cert/cert_verify_proc_win.cc b/net/cert/cert_verify_proc_win.cc
index 4836665..be167e9 100644
--- a/net/cert/cert_verify_proc_win.cc
+++ b/net/cert/cert_verify_proc_win.cc
@@ -1118,7 +1118,7 @@
   if (CertSubjectCommonNameHasNull(cert_list.get()))
     verify_result->cert_status |= CERT_STATUS_INVALID;
 
-  base::string16 hostname16 = base::ASCIIToUTF16(hostname);
+  std::u16string hostname16 = base::ASCIIToUTF16(hostname);
 
   SSL_EXTRA_CERT_CHAIN_POLICY_PARA extra_policy_para;
   memset(&extra_policy_para, 0, sizeof(extra_policy_para));
diff --git a/net/cert/internal/parse_name.cc b/net/cert/internal/parse_name.cc
index 37eed4414..e3258b1 100644
--- a/net/cert/internal/parse_name.cc
+++ b/net/cert/internal/parse_name.cc
@@ -25,7 +25,7 @@
   if (in.Length() % 2 != 0)
     return false;
 
-  base::string16 in_16bit;
+  std::u16string in_16bit;
   if (in.Length()) {
     memcpy(base::WriteInto(&in_16bit, in.Length() / 2 + 1), in.UnsafeData(),
            in.Length());
diff --git a/net/cert/nss_cert_database.cc b/net/cert/nss_cert_database.cc
index 3335e02..7ec30518 100644
--- a/net/cert/nss_cert_database.cc
+++ b/net/cert/nss_cert_database.cc
@@ -192,7 +192,7 @@
 int NSSCertDatabase::ImportFromPKCS12(
     PK11SlotInfo* slot_info,
     const std::string& data,
-    const base::string16& password,
+    const std::u16string& password,
     bool is_extractable,
     ScopedCERTCertificateList* imported_certs) {
   DVLOG(1) << __func__ << " "
@@ -210,7 +210,7 @@
 }
 
 int NSSCertDatabase::ExportToPKCS12(const ScopedCERTCertificateList& certs,
-                                    const base::string16& password,
+                                    const std::u16string& password,
                                     std::string* output) const {
   return psm::nsPKCS12Blob_Export(output, certs, password);
 }
diff --git a/net/cert/nss_cert_database.h b/net/cert/nss_cert_database.h
index 0e7ad5e..3ea86679 100644
--- a/net/cert/nss_cert_database.h
+++ b/net/cert/nss_cert_database.h
@@ -195,7 +195,7 @@
   // of certs that were imported.
   int ImportFromPKCS12(PK11SlotInfo* slot_info,
                        const std::string& data,
-                       const base::string16& password,
+                       const std::u16string& password,
                        bool is_extractable,
                        ScopedCERTCertificateList* imported_certs);
 
@@ -203,7 +203,7 @@
   // storing into |output|.
   // Returns the number of certificates successfully exported.
   int ExportToPKCS12(const ScopedCERTCertificateList& certs,
-                     const base::string16& password,
+                     const std::u16string& password,
                      std::string* output) const;
 
   // Uses similar logic to nsNSSCertificateDB::handleCACertDownload to find the
diff --git a/net/cert/nss_cert_database_unittest.cc b/net/cert/nss_cert_database_unittest.cc
index ddf3839..40b2c1d 100644
--- a/net/cert/nss_cert_database_unittest.cc
+++ b/net/cert/nss_cert_database_unittest.cc
@@ -158,7 +158,7 @@
 
   EXPECT_EQ(
       ERR_PKCS12_IMPORT_BAD_PASSWORD,
-      cert_db_->ImportFromPKCS12(GetPublicSlot(), pkcs12_data, base::string16(),
+      cert_db_->ImportFromPKCS12(GetPublicSlot(), pkcs12_data, std::u16string(),
                                  true,  // is_extractable
                                  nullptr));
 
@@ -255,7 +255,7 @@
 
   EXPECT_EQ(
       ERR_PKCS12_IMPORT_INVALID_FILE,
-      cert_db_->ImportFromPKCS12(GetPublicSlot(), pkcs12_data, base::string16(),
+      cert_db_->ImportFromPKCS12(GetPublicSlot(), pkcs12_data, std::u16string(),
                                  true,  // is_extractable
                                  nullptr));
 
@@ -267,7 +267,7 @@
   std::string pkcs12_data = ReadTestFile("client-empty-password.p12");
 
   EXPECT_EQ(OK, cert_db_->ImportFromPKCS12(GetPublicSlot(), pkcs12_data,
-                                           base::string16(),
+                                           std::u16string(),
                                            true,  // is_extractable
                                            nullptr));
   EXPECT_EQ(1U, ListCerts().size());
@@ -277,7 +277,7 @@
   std::string pkcs12_data = ReadTestFile("client-null-password.p12");
 
   EXPECT_EQ(OK, cert_db_->ImportFromPKCS12(GetPublicSlot(), pkcs12_data,
-                                           base::string16(),
+                                           std::u16string(),
                                            true,  // is_extractable
                                            nullptr));
   EXPECT_EQ(1U, ListCerts().size());
diff --git a/net/ftp/ftp_auth_cache_unittest.cc b/net/ftp/ftp_auth_cache_unittest.cc
index af3ea7c..a17f601 100644
--- a/net/ftp/ftp_auth_cache_unittest.cc
+++ b/net/ftp/ftp_auth_cache_unittest.cc
@@ -17,17 +17,17 @@
 
 namespace {
 
-const base::string16 kBogus(ASCIIToUTF16("bogus"));
-const base::string16 kOthername(ASCIIToUTF16("othername"));
-const base::string16 kOtherword(ASCIIToUTF16("otherword"));
-const base::string16 kPassword(ASCIIToUTF16("password"));
-const base::string16 kPassword1(ASCIIToUTF16("password1"));
-const base::string16 kPassword2(ASCIIToUTF16("password2"));
-const base::string16 kPassword3(ASCIIToUTF16("password3"));
-const base::string16 kUsername(ASCIIToUTF16("username"));
-const base::string16 kUsername1(ASCIIToUTF16("username1"));
-const base::string16 kUsername2(ASCIIToUTF16("username2"));
-const base::string16 kUsername3(ASCIIToUTF16("username3"));
+const std::u16string kBogus(ASCIIToUTF16("bogus"));
+const std::u16string kOthername(ASCIIToUTF16("othername"));
+const std::u16string kOtherword(ASCIIToUTF16("otherword"));
+const std::u16string kPassword(ASCIIToUTF16("password"));
+const std::u16string kPassword1(ASCIIToUTF16("password1"));
+const std::u16string kPassword2(ASCIIToUTF16("password2"));
+const std::u16string kPassword3(ASCIIToUTF16("password3"));
+const std::u16string kUsername(ASCIIToUTF16("username"));
+const std::u16string kUsername1(ASCIIToUTF16("username1"));
+const std::u16string kUsername2(ASCIIToUTF16("username2"));
+const std::u16string kUsername3(ASCIIToUTF16("username3"));
 
 }  // namespace
 
diff --git a/net/ftp/ftp_directory_listing_parser.cc b/net/ftp/ftp_directory_listing_parser.cc
index 8911808..be8afe40 100644
--- a/net/ftp/ftp_directory_listing_parser.cc
+++ b/net/ftp/ftp_directory_listing_parser.cc
@@ -39,13 +39,13 @@
 
 // Parses |text| as an FTP directory listing. Fills in |entries|
 // and |server_type| and returns network error code.
-int ParseListing(const base::string16& text,
-                 const base::string16& newline_separator,
+int ParseListing(const std::u16string& text,
+                 const std::u16string& newline_separator,
                  const std::string& encoding,
                  const base::Time& current_time,
                  std::vector<FtpDirectoryListingEntry>* entries,
                  FtpServerType* server_type) {
-  std::vector<base::string16> lines = base::SplitStringUsingSubstr(
+  std::vector<std::u16string> lines = base::SplitStringUsingSubstr(
       text, newline_separator, base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL);
 
   struct {
@@ -89,7 +89,7 @@
     return ERR_ENCODING_DETECTION_FAILED;
   const char* encoding_name = encoding.c_str();
 
-  base::string16 converted_text;
+  std::u16string converted_text;
   if (base::CodepageToUTF16(text, encoding_name,
                             base::OnStringConversionError::SUBSTITUTE,
                             &converted_text)) {
diff --git a/net/ftp/ftp_directory_listing_parser.h b/net/ftp/ftp_directory_listing_parser.h
index bcf9a7c0..4c04d34 100644
--- a/net/ftp/ftp_directory_listing_parser.h
+++ b/net/ftp/ftp_directory_listing_parser.h
@@ -27,7 +27,7 @@
   FtpDirectoryListingEntry();
 
   Type type;
-  base::string16 name;  // Name (UTF-16-encoded).
+  std::u16string name;   // Name (UTF-16-encoded).
   std::string raw_name;  // Name in original character encoding.
   int64_t size;          // File size, in bytes. -1 if not applicable.
 
diff --git a/net/ftp/ftp_directory_listing_parser_ls.cc b/net/ftp/ftp_directory_listing_parser_ls.cc
index 9ce1973..6157a68 100644
--- a/net/ftp/ftp_directory_listing_parser_ls.cc
+++ b/net/ftp/ftp_directory_listing_parser_ls.cc
@@ -18,13 +18,13 @@
 
 namespace {
 
-bool TwoColumnDateListingToTime(const base::string16& date,
-                                const base::string16& time,
+bool TwoColumnDateListingToTime(const std::u16string& date,
+                                const std::u16string& time,
                                 base::Time* result) {
   base::Time::Exploded time_exploded = { 0 };
 
   // Date should be in format YYYY-MM-DD.
-  std::vector<base::string16> date_parts =
+  std::vector<std::u16string> date_parts =
       base::SplitString(date, base::ASCIIToUTF16("-"), base::TRIM_WHITESPACE,
                         base::SPLIT_WANT_ALL);
   if (date_parts.size() != 3)
@@ -40,7 +40,7 @@
   if (time.length() != 5)
     return false;
 
-  std::vector<base::string16> time_parts =
+  std::vector<std::u16string> time_parts =
       base::SplitString(time, base::ASCIIToUTF16(":"), base::TRIM_WHITESPACE,
                         base::SPLIT_WANT_ALL);
   if (time_parts.size() != 2)
@@ -59,10 +59,10 @@
 // Returns the column index of the end of the date listing and detected
 // last modification time.
 bool DetectColumnOffsetSizeAndModificationTime(
-    const std::vector<base::string16>& columns,
+    const std::vector<std::u16string>& columns,
     const base::Time& current_time,
     size_t* offset,
-    base::string16* size,
+    std::u16string* size,
     base::Time* modification_time) {
   // The column offset can be arbitrarily large if some fields
   // like owner or group name contain spaces. Try offsets from left to right
@@ -118,7 +118,7 @@
 }  // namespace
 
 bool ParseFtpDirectoryListingLs(
-    const std::vector<base::string16>& lines,
+    const std::vector<std::u16string>& lines,
     const base::Time& current_time,
     std::vector<FtpDirectoryListingEntry>* entries) {
   // True after we have received a "total n" listing header, where n is an
@@ -129,7 +129,7 @@
     if (lines[i].empty())
       continue;
 
-    std::vector<base::string16> columns = base::SplitString(
+    std::vector<std::u16string> columns = base::SplitString(
         base::CollapseWhitespace(lines[i], false), base::ASCIIToUTF16(" "),
         base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL);
 
@@ -154,7 +154,7 @@
     FtpDirectoryListingEntry entry;
 
     size_t column_offset;
-    base::string16 size;
+    std::u16string size;
     if (!DetectColumnOffsetSizeAndModificationTime(columns,
                                                    current_time,
                                                    &column_offset,
@@ -164,7 +164,7 @@
       // All those messages have in common is the string ".:",
       // where "." means the current directory, and ":" separates it
       // from the rest of the message, which may be empty.
-      if (lines[i].find(base::ASCIIToUTF16(".:")) != base::string16::npos)
+      if (lines[i].find(base::ASCIIToUTF16(".:")) != std::u16string::npos)
         continue;
 
       return false;
@@ -212,12 +212,12 @@
                                                     column_offset + 1);
 
     if (entry.type == FtpDirectoryListingEntry::SYMLINK) {
-      base::string16::size_type pos =
+      std::u16string::size_type pos =
           entry.name.rfind(base::ASCIIToUTF16(" -> "));
 
       // We don't require the " -> " to be present. Some FTP servers don't send
       // the symlink target, possibly for security reasons.
-      if (pos != base::string16::npos)
+      if (pos != std::u16string::npos)
         entry.name = entry.name.substr(0, pos);
     }
 
diff --git a/net/ftp/ftp_directory_listing_parser_ls.h b/net/ftp/ftp_directory_listing_parser_ls.h
index bc9e40d..f73eb26 100644
--- a/net/ftp/ftp_directory_listing_parser_ls.h
+++ b/net/ftp/ftp_directory_listing_parser_ls.h
@@ -21,7 +21,7 @@
 
 // Parses "ls -l" FTP directory listing. Returns true on success.
 NET_EXPORT_PRIVATE bool ParseFtpDirectoryListingLs(
-    const std::vector<base::string16>& lines,
+    const std::vector<std::u16string>& lines,
     const base::Time& current_time,
     std::vector<FtpDirectoryListingEntry>* entries);
 
diff --git a/net/ftp/ftp_directory_listing_parser_unittest.h b/net/ftp/ftp_directory_listing_parser_unittest.h
index f010299..9dfc44a 100644
--- a/net/ftp/ftp_directory_listing_parser_unittest.h
+++ b/net/ftp/ftp_directory_listing_parser_unittest.h
@@ -32,8 +32,8 @@
  protected:
   FtpDirectoryListingParserTest() {}
 
-  std::vector<base::string16> GetSingleLineTestCase(const std::string& text) {
-    std::vector<base::string16> lines;
+  std::vector<std::u16string> GetSingleLineTestCase(const std::string& text) {
+    std::vector<std::u16string> lines;
     lines.push_back(base::UTF8ToUTF16(text));
     return lines;
   }
diff --git a/net/ftp/ftp_directory_listing_parser_vms.cc b/net/ftp/ftp_directory_listing_parser_vms.cc
index e487338..ca2fc510 100644
--- a/net/ftp/ftp_directory_listing_parser_vms.cc
+++ b/net/ftp/ftp_directory_listing_parser_vms.cc
@@ -22,12 +22,12 @@
 
 // Converts the filename component in listing to the filename we can display.
 // Returns true on success.
-bool ParseVmsFilename(const base::string16& raw_filename,
-                      base::string16* parsed_filename,
+bool ParseVmsFilename(const std::u16string& raw_filename,
+                      std::u16string* parsed_filename,
                       FtpDirectoryListingEntry::Type* type) {
   // On VMS, the files and directories are versioned. The version number is
   // separated from the file name by a semicolon. Example: ANNOUNCE.TXT;2.
-  std::vector<base::string16> listing_parts =
+  std::vector<std::u16string> listing_parts =
       base::SplitString(raw_filename, base::ASCIIToUTF16(";"),
                         base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL);
   if (listing_parts.size() != 2)
@@ -42,7 +42,7 @@
   // for directories; it's awkward for non-VMS users. Also, VMS is
   // case-insensitive, but generally uses uppercase characters. This may look
   // awkward, so we convert them to lower case.
-  std::vector<base::string16> filename_parts =
+  std::vector<std::u16string> filename_parts =
       base::SplitString(listing_parts[0], base::ASCIIToUTF16("."),
                         base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL);
   if (filename_parts.size() != 2)
@@ -75,7 +75,7 @@
   return true;
 }
 
-bool ParseVmsFilesize(const base::string16& input, int64_t* size) {
+bool ParseVmsFilesize(const std::u16string& input, int64_t* size) {
   if (base::ContainsOnlyChars(input, base::ASCIIToUTF16("*"))) {
     // Response consisting of asterisks means unknown size.
     *size = -1;
@@ -105,14 +105,14 @@
   return ApproximateFilesizeFromBlockCount(blocks_used, size);
 }
 
-bool LooksLikeVmsFileProtectionListingPart(const base::string16& input) {
+bool LooksLikeVmsFileProtectionListingPart(const std::u16string& input) {
   if (input.length() > 4)
     return false;
 
   // On VMS there are four different permission bits: Read, Write, Execute,
   // and Delete. They appear in that order in the permission listing.
   std::string pattern("RWED");
-  base::string16 match(input);
+  std::u16string match(input);
   while (!match.empty() && !pattern.empty()) {
     if (match[0] == pattern[0])
       match = match.substr(1);
@@ -121,7 +121,7 @@
   return match.empty();
 }
 
-bool LooksLikeVmsFileProtectionListing(const base::string16& input) {
+bool LooksLikeVmsFileProtectionListing(const std::u16string& input) {
   if (input.length() < 2)
     return false;
   if (input.front() != '(' || input.back() != ')')
@@ -129,7 +129,7 @@
 
   // We expect four parts of the file protection listing: for System, Owner,
   // Group, and World.
-  std::vector<base::string16> parts = base::SplitString(
+  std::vector<std::u16string> parts = base::SplitString(
       base::StringPiece16(input).substr(1, input.length() - 2),
       base::ASCIIToUTF16(","), base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL);
   if (parts.size() != 4)
@@ -141,13 +141,13 @@
       LooksLikeVmsFileProtectionListingPart(parts[3]);
 }
 
-bool LooksLikeVmsUserIdentificationCode(const base::string16& input) {
+bool LooksLikeVmsUserIdentificationCode(const std::u16string& input) {
   if (input.length() < 2)
     return false;
   return input.front() == '[' && input.back() == ']';
 }
 
-bool LooksLikeVMSError(const base::string16& text) {
+bool LooksLikeVMSError(const std::u16string& text) {
   static const char* const kPermissionDeniedMessages[] = {
     "%RMS-E-FNF",  // File not found.
     "%RMS-E-PRV",  // Access denied.
@@ -157,14 +157,14 @@
 
   for (size_t i = 0; i < base::size(kPermissionDeniedMessages); i++) {
     if (text.find(base::ASCIIToUTF16(kPermissionDeniedMessages[i])) !=
-        base::string16::npos)
+        std::u16string::npos)
       return true;
   }
 
   return false;
 }
 
-bool VmsDateListingToTime(const std::vector<base::string16>& columns,
+bool VmsDateListingToTime(const std::vector<std::u16string>& columns,
                           base::Time* time) {
   DCHECK_EQ(4U, columns.size());
 
@@ -178,7 +178,7 @@
     return false;
   if (!base::StringToInt(date_parts[0], &time_exploded.day_of_month))
     return false;
-  if (!FtpUtil::AbbreviatedMonthToNumber(base::string16(date_parts[1]),
+  if (!FtpUtil::AbbreviatedMonthToNumber(std::u16string(date_parts[1]),
                                          &time_exploded.month))
     return false;
   if (!base::StringToInt(date_parts[2], &time_exploded.year))
@@ -186,7 +186,7 @@
 
   // Time can be in format HH:MM, HH:MM:SS, or HH:MM:SS.mm. Try to recognize the
   // last type first. Do not parse the seconds, they will be ignored anyway.
-  base::string16 time_column(columns[3]);
+  std::u16string time_column(columns[3]);
   if (time_column.length() == 11 && time_column[8] == '.')
     time_column = time_column.substr(0, 8);
   if (time_column.length() == 8 && time_column[5] == ':')
@@ -210,7 +210,7 @@
 }  // namespace
 
 bool ParseFtpDirectoryListingVms(
-    const std::vector<base::string16>& lines,
+    const std::vector<std::u16string>& lines,
     std::vector<FtpDirectoryListingEntry>* entries) {
   // The first non-empty line is the listing header. It often
   // starts with "Directory ", but not always. We set a flag after
@@ -222,7 +222,7 @@
   // to distinguish it from "ls -l" format).
   bool seen_error = false;
 
-  base::string16 total_of = base::ASCIIToUTF16("Total of ");
+  std::u16string total_of = base::ASCIIToUTF16("Total of ");
   char16_t space[2] = {' ', 0};
   for (size_t i = 0; i < lines.size(); i++) {
     if (lines[i].empty())
@@ -247,9 +247,9 @@
       continue;
     }
 
-    std::vector<base::string16> columns = base::SplitString(
-        base::CollapseWhitespace(lines[i], false), space,
-        base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL);
+    std::vector<std::u16string> columns =
+        base::SplitString(base::CollapseWhitespace(lines[i], false), space,
+                          base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL);
 
     if (columns.size() == 1) {
       // There can be no continuation if the current line is the last one.
diff --git a/net/ftp/ftp_directory_listing_parser_vms.h b/net/ftp/ftp_directory_listing_parser_vms.h
index d83b967..ed248ea 100644
--- a/net/ftp/ftp_directory_listing_parser_vms.h
+++ b/net/ftp/ftp_directory_listing_parser_vms.h
@@ -17,7 +17,7 @@
 
 // Parses VMS FTP directory listing. Returns true on success.
 NET_EXPORT_PRIVATE bool ParseFtpDirectoryListingVms(
-    const std::vector<base::string16>& lines,
+    const std::vector<std::u16string>& lines,
     std::vector<FtpDirectoryListingEntry>* entries);
 
 }  // namespace net
diff --git a/net/ftp/ftp_directory_listing_parser_vms_unittest.cc b/net/ftp/ftp_directory_listing_parser_vms_unittest.cc
index 83549bf..ab7ea0bd 100644
--- a/net/ftp/ftp_directory_listing_parser_vms_unittest.cc
+++ b/net/ftp/ftp_directory_listing_parser_vms_unittest.cc
@@ -54,7 +54,7 @@
     SCOPED_TRACE(base::StringPrintf("Test[%" PRIuS "]: %s", i,
                                     good_cases[i].input));
 
-    std::vector<base::string16> lines(
+    std::vector<std::u16string> lines(
         GetSingleLineTestCase(good_cases[i].input));
 
     // The parser requires a directory header before accepting regular input.
@@ -119,7 +119,7 @@
   for (size_t i = 0; i < base::size(bad_cases); i++) {
     SCOPED_TRACE(base::StringPrintf("Test[%" PRIuS "]: %s", i, bad_cases[i]));
 
-    std::vector<base::string16> lines(GetSingleLineTestCase(bad_cases[i]));
+    std::vector<std::u16string> lines(GetSingleLineTestCase(bad_cases[i]));
 
     // The parser requires a directory header before accepting regular input.
     lines.insert(lines.begin(),
@@ -144,7 +144,7 @@
   for (size_t i = 0; i < base::size(bad_cases); i++) {
     SCOPED_TRACE(base::StringPrintf("Test[%" PRIuS "]: %s", i, bad_cases[i]));
 
-    std::vector<base::string16> lines(
+    std::vector<std::u16string> lines(
         GetSingleLineTestCase("README.TXT;4  2  18-APR-2000 10:40:39.90"));
 
     // The parser requires a directory header before accepting regular input.
@@ -174,20 +174,20 @@
 }
 
 TEST_F(FtpDirectoryListingParserVmsTest, EmptyColumnZero) {
-  std::vector<base::string16> lines;
+  std::vector<std::u16string> lines;
 
   // The parser requires a directory header before accepting regular input.
   lines.push_back(ASCIIToUTF16("garbage"));
 
   char16_t data[] = {0x0};
-  lines.push_back(base::string16(data, 1));
+  lines.push_back(std::u16string(data, 1));
 
   std::vector<FtpDirectoryListingEntry> entries;
   EXPECT_FALSE(ParseFtpDirectoryListingVms(lines, &entries));
 }
 
 TEST_F(FtpDirectoryListingParserVmsTest, EmptyColumnWhitespace) {
-  std::vector<base::string16> lines;
+  std::vector<std::u16string> lines;
 
   // The parser requires a directory header before accepting regular input.
   lines.push_back(ASCIIToUTF16("garbage"));
diff --git a/net/ftp/ftp_directory_listing_parser_windows.cc b/net/ftp/ftp_directory_listing_parser_windows.cc
index 25ceaf70..546a2a9 100644
--- a/net/ftp/ftp_directory_listing_parser_windows.cc
+++ b/net/ftp/ftp_directory_listing_parser_windows.cc
@@ -17,13 +17,13 @@
 namespace net {
 
 bool ParseFtpDirectoryListingWindows(
-    const std::vector<base::string16>& lines,
+    const std::vector<std::u16string>& lines,
     std::vector<FtpDirectoryListingEntry>* entries) {
   for (size_t i = 0; i < lines.size(); i++) {
     if (lines[i].empty())
       continue;
 
-    std::vector<base::string16> columns = base::SplitString(
+    std::vector<std::u16string> columns = base::SplitString(
         base::CollapseWhitespace(lines[i], false), base::ASCIIToUTF16(" "),
         base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL);
 
diff --git a/net/ftp/ftp_directory_listing_parser_windows.h b/net/ftp/ftp_directory_listing_parser_windows.h
index e006fb95..c4640d4 100644
--- a/net/ftp/ftp_directory_listing_parser_windows.h
+++ b/net/ftp/ftp_directory_listing_parser_windows.h
@@ -17,7 +17,7 @@
 
 // Parses Windows FTP directory listing. Returns true on success.
 NET_EXPORT_PRIVATE bool ParseFtpDirectoryListingWindows(
-    const std::vector<base::string16>& lines,
+    const std::vector<std::u16string>& lines,
     std::vector<FtpDirectoryListingEntry>* entries);
 
 }  // namespace net
diff --git a/net/ftp/ftp_network_transaction.cc b/net/ftp/ftp_network_transaction.cc
index 23da0522..6ab5954 100644
--- a/net/ftp/ftp_network_transaction.cc
+++ b/net/ftp/ftp_network_transaction.cc
@@ -270,8 +270,8 @@
   ctrl_response_buffer_ = std::make_unique<FtpCtrlResponseBuffer>(net_log_);
 
   if (request_->url.has_username()) {
-    base::string16 username;
-    base::string16 password;
+    std::u16string username;
+    std::u16string password;
     GetIdentityFromURL(request_->url, &username, &password);
     credentials_.Set(username, password);
   } else {
diff --git a/net/ftp/ftp_util.cc b/net/ftp/ftp_util.cc
index 9cc6158..cf7b935 100644
--- a/net/ftp/ftp_util.cc
+++ b/net/ftp/ftp_util.cc
@@ -139,10 +139,10 @@
 
   // Converts abbreviated month name |text| to its number (in range 1-12).
   // On success returns true and puts the number in |number|.
-  bool GetMonthNumber(const base::string16& text, int* number) {
+  bool GetMonthNumber(const std::u16string& text, int* number) {
     // Ignore the case of the month names. The simplest way to handle that
     // is to make everything lowercase.
-    base::string16 text_lower(base::i18n::ToLower(text));
+    std::u16string text_lower(base::i18n::ToLower(text));
 
     if (map_.find(text_lower) == map_.end())
       return false;
@@ -176,7 +176,7 @@
           format_symbols.getShortMonths(months_count);
 
       for (int32_t month = 0; month < months_count; month++) {
-        base::string16 month_name(
+        std::u16string month_name(
             base::i18n::UnicodeStringToString16(months[month]));
 
         // Ignore the case of the month names. The simplest way to handle that
@@ -212,7 +212,7 @@
   }
 
   // Maps lowercase month names to numbers in range 1-12.
-  std::map<base::string16, int> map_;
+  std::map<std::u16string, int> map_;
 
   DISALLOW_COPY_AND_ASSIGN(AbbreviatedMonthsMap);
 };
@@ -220,15 +220,15 @@
 }  // namespace
 
 // static
-bool FtpUtil::AbbreviatedMonthToNumber(const base::string16& text,
+bool FtpUtil::AbbreviatedMonthToNumber(const std::u16string& text,
                                        int* number) {
   return AbbreviatedMonthsMap::GetInstance()->GetMonthNumber(text, number);
 }
 
 // static
-bool FtpUtil::LsDateListingToTime(const base::string16& month,
-                                  const base::string16& day,
-                                  const base::string16& rest,
+bool FtpUtil::LsDateListingToTime(const std::u16string& month,
+                                  const std::u16string& day,
+                                  const std::u16string& rest,
                                   const base::Time& current_time,
                                   base::Time* result) {
   base::Time::Exploded time_exploded = { 0 };
@@ -255,7 +255,7 @@
       return false;
 
     size_t colon_pos = rest.find(':');
-    if (colon_pos == base::string16::npos)
+    if (colon_pos == std::u16string::npos)
       return false;
     if (colon_pos > 2)
       return false;
@@ -291,8 +291,8 @@
 }
 
 // static
-bool FtpUtil::WindowsDateListingToTime(const base::string16& date,
-                                       const base::string16& time,
+bool FtpUtil::WindowsDateListingToTime(const std::u16string& date,
+                                       const std::u16string& time,
                                        base::Time* result) {
   base::Time::Exploded time_exploded = { 0 };
 
@@ -336,7 +336,7 @@
   if (time.length() > 5) {
     if (time.length() != 7)
       return false;
-    base::string16 am_or_pm(time.substr(5, 2));
+    std::u16string am_or_pm(time.substr(5, 2));
     if (base::EqualsASCII(am_or_pm, "PM")) {
       if (time_exploded.hour < 12)
         time_exploded.hour += 12;
@@ -353,7 +353,7 @@
 }
 
 // static
-base::string16 FtpUtil::GetStringPartAfterColumns(const base::string16& text,
+std::u16string FtpUtil::GetStringPartAfterColumns(const std::u16string& text,
                                                   int columns) {
   base::i18n::UTF16CharIterator iter(text);
 
@@ -367,7 +367,7 @@
       iter.Advance();
   }
 
-  base::string16 result(text.substr(iter.array_pos()));
+  std::u16string result(text.substr(iter.array_pos()));
   base::TrimWhitespace(result, base::TRIM_ALL, &result);
   return result;
 }
diff --git a/net/ftp/ftp_util.h b/net/ftp/ftp_util.h
index 3e8a899..b0bbb36d 100644
--- a/net/ftp/ftp_util.h
+++ b/net/ftp/ftp_util.h
@@ -30,26 +30,26 @@
   // Converts abbreviated month (like Nov) to its number (in range 1-12).
   // Note: in some locales abbreviations are more than three letters long,
   // and this function also handles them correctly.
-  static bool AbbreviatedMonthToNumber(const base::string16& text, int* number);
+  static bool AbbreviatedMonthToNumber(const std::u16string& text, int* number);
 
   // Converts a "ls -l" date listing to time. The listing comes in three
   // columns. The first one contains month, the second one contains day
   // of month. The third one is either a time (and then we guess the year based
   // on |current_time|), or is a year (and then we don't know the time).
-  static bool LsDateListingToTime(const base::string16& month,
-                                  const base::string16& day,
-                                  const base::string16& rest,
+  static bool LsDateListingToTime(const std::u16string& month,
+                                  const std::u16string& day,
+                                  const std::u16string& rest,
                                   const base::Time& current_time,
                                   base::Time* result);
 
   // Converts a Windows date listing to time. Returns true on success.
-  static bool WindowsDateListingToTime(const base::string16& date,
-                                       const base::string16& time,
+  static bool WindowsDateListingToTime(const std::u16string& date,
+                                       const std::u16string& time,
                                        base::Time* result);
 
   // Skips |columns| columns from |text| (whitespace-delimited), and returns the
   // remaining part, without leading/trailing whitespace.
-  static base::string16 GetStringPartAfterColumns(const base::string16& text,
+  static std::u16string GetStringPartAfterColumns(const std::u16string& text,
                                                   int columns);
 };
 
diff --git a/net/http/http_auth_cache_unittest.cc b/net/http/http_auth_cache_unittest.cc
index 18dc408..d7860de 100644
--- a/net/http/http_auth_cache_unittest.cc
+++ b/net/http/http_auth_cache_unittest.cc
@@ -27,17 +27,17 @@
 const char kRealm3[] = "Realm3";
 const char kRealm4[] = "Realm4";
 const char kRealm5[] = "Realm5";
-const base::string16 k123(ASCIIToUTF16("123"));
-const base::string16 k1234(ASCIIToUTF16("1234"));
-const base::string16 k12345(ASCIIToUTF16("12345"));
-const base::string16 kAdmin(ASCIIToUTF16("admin"));
-const base::string16 kAlice(ASCIIToUTF16("alice"));
-const base::string16 kAlice2(ASCIIToUTF16("alice2"));
-const base::string16 kAlice3(ASCIIToUTF16("alice3"));
-const base::string16 kPassword(ASCIIToUTF16("password"));
-const base::string16 kRoot(ASCIIToUTF16("root"));
-const base::string16 kUsername(ASCIIToUTF16("username"));
-const base::string16 kWileCoyote(ASCIIToUTF16("wilecoyote"));
+const std::u16string k123(ASCIIToUTF16("123"));
+const std::u16string k1234(ASCIIToUTF16("1234"));
+const std::u16string k12345(ASCIIToUTF16("12345"));
+const std::u16string kAdmin(ASCIIToUTF16("admin"));
+const std::u16string kAlice(ASCIIToUTF16("alice"));
+const std::u16string kAlice2(ASCIIToUTF16("alice2"));
+const std::u16string kAlice3(ASCIIToUTF16("alice3"));
+const std::u16string kPassword(ASCIIToUTF16("password"));
+const std::u16string kRoot(ASCIIToUTF16("root"));
+const std::u16string kUsername(ASCIIToUTF16("username"));
+const std::u16string kWileCoyote(ASCIIToUTF16("wilecoyote"));
 
 AuthCredentials CreateASCIICredentials(const char* username,
                                        const char* password) {
@@ -237,10 +237,10 @@
 
 // Make sure server and proxy credentials are treated separately.
 TEST(HttpAuthCacheTest, SeparateByTarget) {
-  const base::string16 kServerUser = ASCIIToUTF16("server_user");
-  const base::string16 kServerPass = ASCIIToUTF16("server_pass");
-  const base::string16 kProxyUser = ASCIIToUTF16("proxy_user");
-  const base::string16 kProxyPass = ASCIIToUTF16("proxy_pass");
+  const std::u16string kServerUser = ASCIIToUTF16("server_user");
+  const std::u16string kServerPass = ASCIIToUTF16("server_pass");
+  const std::u16string kProxyUser = ASCIIToUTF16("proxy_user");
+  const std::u16string kProxyPass = ASCIIToUTF16("proxy_pass");
 
   const char kServerPath[] = "/foo/bar/index.html";
 
@@ -336,10 +336,10 @@
   GURL kPseudoOrigin("http://www.google.com");
   const char kPath[] = "/";
 
-  const base::string16 kUser1 = ASCIIToUTF16("user1");
-  const base::string16 kPass1 = ASCIIToUTF16("pass1");
-  const base::string16 kUser2 = ASCIIToUTF16("user2");
-  const base::string16 kPass2 = ASCIIToUTF16("pass2");
+  const std::u16string kUser1 = ASCIIToUTF16("user1");
+  const std::u16string kPass1 = ASCIIToUTF16("pass1");
+  const std::u16string kUser2 = ASCIIToUTF16("user2");
+  const std::u16string kPass2 = ASCIIToUTF16("pass2");
 
   for (bool key_entries_by_network_isolation_key : {false, true}) {
     HttpAuthCache cache(key_entries_by_network_isolation_key);
@@ -435,10 +435,10 @@
   GURL kPseudoOrigin("http://www.google.com");
   const char kPath[] = "/";
 
-  const base::string16 kUser1 = ASCIIToUTF16("user1");
-  const base::string16 kPass1 = ASCIIToUTF16("pass1");
-  const base::string16 kUser2 = ASCIIToUTF16("user2");
-  const base::string16 kPass2 = ASCIIToUTF16("pass2");
+  const std::u16string kUser1 = ASCIIToUTF16("user1");
+  const std::u16string kPass1 = ASCIIToUTF16("pass1");
+  const std::u16string kUser2 = ASCIIToUTF16("user2");
+  const std::u16string kPass2 = ASCIIToUTF16("pass2");
 
   for (bool key_entries_by_network_isolation_key : {false, true}) {
     HttpAuthCache cache(key_entries_by_network_isolation_key);
@@ -508,10 +508,10 @@
   GURL kOrigin("http://www.google.com");
   const char kPath[] = "/";
 
-  const base::string16 kUser1 = ASCIIToUTF16("user1");
-  const base::string16 kPass1 = ASCIIToUTF16("pass1");
-  const base::string16 kUser2 = ASCIIToUTF16("user2");
-  const base::string16 kPass2 = ASCIIToUTF16("pass2");
+  const std::u16string kUser1 = ASCIIToUTF16("user1");
+  const std::u16string kPass1 = ASCIIToUTF16("pass1");
+  const std::u16string kUser2 = ASCIIToUTF16("user2");
+  const std::u16string kPass2 = ASCIIToUTF16("pass2");
 
   for (bool initially_key_entries_by_network_isolation_key : {false, true}) {
     for (bool to_key_entries_by_network_isolation_key : {false, true}) {
diff --git a/net/http/http_auth_controller.cc b/net/http/http_auth_controller.cc
index 85ca36e..8ffeca7 100644
--- a/net/http/http_auth_controller.cc
+++ b/net/http/http_auth_controller.cc
@@ -510,8 +510,8 @@
     identity_.source = HttpAuth::IDENT_SRC_URL;
     identity_.invalid = false;
     // Extract the username:password from the URL.
-    base::string16 username;
-    base::string16 password;
+    std::u16string username;
+    std::u16string password;
     GetIdentityFromURL(auth_url_, &username, &password);
     identity_.credentials.Set(username, password);
     embedded_identity_used_ = true;
diff --git a/net/http/http_auth_controller_unittest.cc b/net/http/http_auth_controller_unittest.cc
index a6dc2f8..1ca7d0f 100644
--- a/net/http/http_auth_controller_unittest.cc
+++ b/net/http/http_auth_controller_unittest.cc
@@ -284,8 +284,8 @@
   ASSERT_EQ(OK, controller->HandleAuthChallenge(headers, null_ssl_info, false,
                                                 false, dummy_log));
   ASSERT_TRUE(controller->HaveAuthHandler());
-  controller->ResetAuth(AuthCredentials(base::ASCIIToUTF16("Hello"),
-                        base::string16()));
+  controller->ResetAuth(
+      AuthCredentials(base::ASCIIToUTF16("Hello"), std::u16string()));
   EXPECT_TRUE(controller->HaveAuth());
   EXPECT_TRUE(controller->IsAuthSchemeDisabled(HttpAuth::AUTH_SCHEME_MOCK));
   EXPECT_FALSE(controller->IsAuthSchemeDisabled(HttpAuth::AUTH_SCHEME_BASIC));
diff --git a/net/http/http_auth_handler_ntlm_portable_unittest.cc b/net/http/http_auth_handler_ntlm_portable_unittest.cc
index 593ead4..15ece500 100644
--- a/net/http/http_auth_handler_ntlm_portable_unittest.cc
+++ b/net/http/http_auth_handler_ntlm_portable_unittest.cc
@@ -115,7 +115,7 @@
   // no assumptions about the underlying encoding. This will fail if there
   // are an odd number of bytes in the payload.
   void ReadString16Payload(ntlm::NtlmBufferReader* reader,
-                           base::string16* str) {
+                           std::u16string* str) {
     ntlm::SecurityBuffer sec_buf;
     EXPECT_TRUE(reader->ReadSecurityBuffer(&sec_buf));
     EXPECT_EQ(0, sec_buf.length % 2);
diff --git a/net/http/http_auth_ntlm_mechanism.cc b/net/http/http_auth_ntlm_mechanism.cc
index b4b944d0..95ab598c 100644
--- a/net/http/http_auth_ntlm_mechanism.cc
+++ b/net/http/http_auth_ntlm_mechanism.cc
@@ -133,12 +133,12 @@
 
   // The username may be in the form "DOMAIN\user".  Parse it into the two
   // components.
-  base::string16 domain;
-  base::string16 user;
-  const base::string16& username = credentials->username();
+  std::u16string domain;
+  std::u16string user;
+  const std::u16string& username = credentials->username();
   const char16_t backslash_character = '\\';
   size_t backslash_idx = username.find(backslash_character);
-  if (backslash_idx == base::string16::npos) {
+  if (backslash_idx == std::u16string::npos) {
     user = username;
   } else {
     domain = username.substr(0, backslash_idx);
diff --git a/net/http/http_auth_sspi_win.cc b/net/http/http_auth_sspi_win.cc
index 0716b6e..e55a34e 100644
--- a/net/http/http_auth_sspi_win.cc
+++ b/net/http/http_auth_sspi_win.cc
@@ -34,8 +34,8 @@
   return params;
 }
 
-base::Value AcquireCredentialsHandleParams(const base::string16* domain,
-                                           const base::string16* user,
+base::Value AcquireCredentialsHandleParams(const std::u16string* domain,
+                                           const std::u16string* user,
                                            Error result,
                                            SECURITY_STATUS status) {
   base::Value params{base::Value::Type::DICTIONARY};
@@ -129,9 +129,9 @@
 }
 
 Error AcquireExplicitCredentials(SSPILibrary* library,
-                                 const base::string16& domain,
-                                 const base::string16& user,
-                                 const base::string16& password,
+                                 const std::u16string& domain,
+                                 const std::u16string& user,
+                                 const std::u16string& password,
                                  const NetLogWithSource& net_log,
                                  CredHandle* cred) {
   SEC_WINNT_AUTH_IDENTITY identity;
@@ -451,8 +451,8 @@
   DCHECK(!SecIsValidHandle(&cred_));
   int rv = OK;
   if (credentials) {
-    base::string16 domain;
-    base::string16 user;
+    std::u16string domain;
+    std::u16string user;
     SplitDomainAndUser(credentials->username(), &domain, &user);
     rv = AcquireExplicitCredentials(library_, domain, user,
                                     credentials->password(), net_log, &cred_);
@@ -556,7 +556,7 @@
 
   // This returns a token that is passed to the remote server.
   DWORD context_attributes = 0;
-  base::string16 spn16 = base::ASCIIToUTF16(spn);
+  std::u16string spn16 = base::ASCIIToUTF16(spn);
   SECURITY_STATUS status = library_->InitializeSecurityContext(
       &cred_,                          // phCredential
       ctxt_ptr,                        // phContext
@@ -590,14 +590,14 @@
   return OK;
 }
 
-void SplitDomainAndUser(const base::string16& combined,
-                        base::string16* domain,
-                        base::string16* user) {
+void SplitDomainAndUser(const std::u16string& combined,
+                        std::u16string* domain,
+                        std::u16string* user) {
   // |combined| may be in the form "user" or "DOMAIN\user".
   // Separate the two parts if they exist.
   // TODO(cbentzel): I believe user@domain is also a valid form.
   size_t backslash_idx = combined.find(L'\\');
-  if (backslash_idx == base::string16::npos) {
+  if (backslash_idx == std::u16string::npos) {
     domain->clear();
     *user = combined;
   } else {
diff --git a/net/http/http_auth_sspi_win.h b/net/http/http_auth_sspi_win.h
index 3955d720..644d5e6a 100644
--- a/net/http/http_auth_sspi_win.h
+++ b/net/http/http_auth_sspi_win.h
@@ -189,9 +189,9 @@
 // If |combined| is of form "bar", |domain| will be empty and |user| will
 // contain "bar".
 // |domain| and |user| must be non-nullptr.
-NET_EXPORT_PRIVATE void SplitDomainAndUser(const base::string16& combined,
-                                           base::string16* domain,
-                                           base::string16* user);
+NET_EXPORT_PRIVATE void SplitDomainAndUser(const std::u16string& combined,
+                                           std::u16string* domain,
+                                           std::u16string* user);
 
 }  // namespace net
 
diff --git a/net/http/http_auth_sspi_win_unittest.cc b/net/http/http_auth_sspi_win_unittest.cc
index ed4d2415..8f5a97d 100644
--- a/net/http/http_auth_sspi_win_unittest.cc
+++ b/net/http/http_auth_sspi_win_unittest.cc
@@ -28,11 +28,11 @@
 
 namespace {
 
-void MatchDomainUserAfterSplit(const base::string16& combined,
-                               const base::string16& expected_domain,
-                               const base::string16& expected_user) {
-  base::string16 actual_domain;
-  base::string16 actual_user;
+void MatchDomainUserAfterSplit(const std::u16string& combined,
+                               const std::u16string& expected_domain,
+                               const std::u16string& expected_user) {
+  std::u16string actual_domain;
+  std::u16string actual_user;
   SplitDomainAndUser(combined, &actual_domain, &actual_user);
   EXPECT_EQ(expected_domain, actual_domain);
   EXPECT_EQ(expected_user, actual_user);
diff --git a/net/http/http_content_disposition.cc b/net/http/http_content_disposition.cc
index 66a9daa..a2ba307 100644
--- a/net/http/http_content_disposition.cc
+++ b/net/http/http_content_disposition.cc
@@ -94,7 +94,7 @@
     if (base::IsStringUTF8(encoded_word)) {
       *output = encoded_word;
     } else {
-      base::string16 utf16_output;
+      std::u16string utf16_output;
       if (!referrer_charset.empty() &&
           ConvertToUTF16(encoded_word, referrer_charset.c_str(),
                          &utf16_output)) {
diff --git a/net/http/http_network_transaction_unittest.cc b/net/http/http_network_transaction_unittest.cc
index f9eb6690..ee97499 100644
--- a/net/http/http_network_transaction_unittest.cc
+++ b/net/http/http_network_transaction_unittest.cc
@@ -152,17 +152,17 @@
 
 namespace {
 
-const base::string16 kBar(ASCIIToUTF16("bar"));
-const base::string16 kBar2(ASCIIToUTF16("bar2"));
-const base::string16 kBar3(ASCIIToUTF16("bar3"));
-const base::string16 kBaz(ASCIIToUTF16("baz"));
-const base::string16 kFirst(ASCIIToUTF16("first"));
-const base::string16 kFoo(ASCIIToUTF16("foo"));
-const base::string16 kFoo2(ASCIIToUTF16("foo2"));
-const base::string16 kFoo3(ASCIIToUTF16("foo3"));
-const base::string16 kFou(ASCIIToUTF16("fou"));
-const base::string16 kSecond(ASCIIToUTF16("second"));
-const base::string16 kWrongPassword(ASCIIToUTF16("wrongpassword"));
+const std::u16string kBar(ASCIIToUTF16("bar"));
+const std::u16string kBar2(ASCIIToUTF16("bar2"));
+const std::u16string kBar3(ASCIIToUTF16("bar3"));
+const std::u16string kBaz(ASCIIToUTF16("baz"));
+const std::u16string kFirst(ASCIIToUTF16("first"));
+const std::u16string kFoo(ASCIIToUTF16("foo"));
+const std::u16string kFoo2(ASCIIToUTF16("foo2"));
+const std::u16string kFoo3(ASCIIToUTF16("foo3"));
+const std::u16string kFou(ASCIIToUTF16("fou"));
+const std::u16string kSecond(ASCIIToUTF16("second"));
+const std::u16string kWrongPassword(ASCIIToUTF16("wrongpassword"));
 
 const char kAlternativeServiceHttpHeader[] =
     "Alt-Svc: h2=\"mail.example.org:443\"\r\n";
diff --git a/net/http/http_proxy_connect_job_unittest.cc b/net/http/http_proxy_connect_job_unittest.cc
index 6abad01..d349c597 100644
--- a/net/http/http_proxy_connect_job_unittest.cc
+++ b/net/http/http_proxy_connect_job_unittest.cc
@@ -769,8 +769,8 @@
 // Test the case where auth credentials are cached.
 TEST_P(HttpProxyConnectJobTest, HaveAuth) {
   // Prepopulate auth cache.
-  const base::string16 kFoo(base::ASCIIToUTF16("foo"));
-  const base::string16 kBar(base::ASCIIToUTF16("bar"));
+  const std::u16string kFoo(base::ASCIIToUTF16("foo"));
+  const std::u16string kBar(base::ASCIIToUTF16("bar"));
   GURL proxy_url(GetParam() == HTTP
                      ? (std::string("http://") + kHttpProxyHost)
                      : (std::string("https://") + kHttpsProxyHost));
diff --git a/net/http/mock_sspi_library_win.cc b/net/http/mock_sspi_library_win.cc
index 1c7d866..2fcbf19e 100644
--- a/net/http/mock_sspi_library_win.cc
+++ b/net/http/mock_sspi_library_win.cc
@@ -29,8 +29,8 @@
 int uniquifier_ = 0;
 
 struct MockCredential {
-  base::string16 source_principal;
-  base::string16 package;
+  std::u16string source_principal;
+  std::u16string package;
   bool has_explicit_credentials = false;
   int uniquifier = ++uniquifier_;
 
@@ -61,7 +61,7 @@
 
 struct MockContext {
   MockCredential* credential = nullptr;
-  base::string16 target_principal;
+  std::u16string target_principal;
   int uniquifier = ++uniquifier_;
   int rounds = 0;
 
diff --git a/net/http/url_security_manager_win.cc b/net/http/url_security_manager_win.cc
index 4286ba7..9a61f13 100644
--- a/net/http/url_security_manager_win.cc
+++ b/net/http/url_security_manager_win.cc
@@ -54,7 +54,7 @@
   if (!const_cast<URLSecurityManagerWin*>(this)->EnsureSystemSecurityManager())
     return false;
 
-  base::string16 url16 = base::ASCIIToUTF16(auth_origin.spec());
+  std::u16string url16 = base::ASCIIToUTF16(auth_origin.spec());
   DWORD policy = 0;
   HRESULT hr;
   hr = security_manager_->ProcessUrlAction(
diff --git a/net/ntlm/ntlm.cc b/net/ntlm/ntlm.cc
index fb28581..c35bdae 100644
--- a/net/ntlm/ntlm.cc
+++ b/net/ntlm/ntlm.cc
@@ -108,7 +108,7 @@
                            std::move(channel_bindings_hash));
 
     // Convert the SPN to little endian unicode.
-    base::string16 spn16 = base::UTF8ToUTF16(spn);
+    std::u16string spn16 = base::UTF8ToUTF16(spn);
     NtlmBufferWriter spn_writer(spn16.length() * 2);
     bool spn_writer_result =
         spn_writer.WriteUtf16String(spn16) && spn_writer.IsEndOfBuffer();
@@ -173,7 +173,7 @@
   memset(keys.data() + 19, 0, 5);
 }
 
-void GenerateNtlmHashV1(const base::string16& password,
+void GenerateNtlmHashV1(const std::u16string& password,
                         base::span<uint8_t, kNtlmHashLen> hash) {
   size_t length = password.length() * 2;
   NtlmBufferWriter writer(length);
@@ -218,7 +218,7 @@
 }
 
 void GenerateNtlmResponseV1(
-    const base::string16& password,
+    const std::u16string& password,
     base::span<const uint8_t, kChallengeLen> server_challenge,
     base::span<uint8_t, kResponseLenV1> ntlm_response) {
   uint8_t ntlm_hash[kNtlmHashLen];
@@ -227,7 +227,7 @@
 }
 
 void GenerateResponsesV1(
-    const base::string16& password,
+    const std::u16string& password,
     base::span<const uint8_t, kChallengeLen> server_challenge,
     base::span<uint8_t, kResponseLenV1> lm_response,
     base::span<uint8_t, kResponseLenV1> ntlm_response) {
@@ -259,7 +259,7 @@
 }
 
 void GenerateNtlmResponseV1WithSessionSecurity(
-    const base::string16& password,
+    const std::u16string& password,
     base::span<const uint8_t, kChallengeLen> server_challenge,
     base::span<const uint8_t, kChallengeLen> client_challenge,
     base::span<uint8_t, kResponseLenV1> ntlm_response) {
@@ -278,7 +278,7 @@
 }
 
 void GenerateResponsesV1WithSessionSecurity(
-    const base::string16& password,
+    const std::u16string& password,
     base::span<const uint8_t, kChallengeLen> server_challenge,
     base::span<const uint8_t, kChallengeLen> client_challenge,
     base::span<uint8_t, kResponseLenV1> lm_response,
@@ -288,13 +288,13 @@
                                             client_challenge, ntlm_response);
 }
 
-void GenerateNtlmHashV2(const base::string16& domain,
-                        const base::string16& username,
-                        const base::string16& password,
+void GenerateNtlmHashV2(const std::u16string& domain,
+                        const std::u16string& username,
+                        const std::u16string& password,
                         base::span<uint8_t, kNtlmHashLen> v2_hash) {
   // NOTE: According to [MS-NLMP] Section 3.3.2 only the username and not the
   // domain is uppercased.
-  base::string16 upper_username;
+  std::u16string upper_username;
   bool result = ToUpper(username, &upper_username);
   DCHECK(result);
 
diff --git a/net/ntlm/ntlm.h b/net/ntlm/ntlm.h
index 6839701..b58d22e 100644
--- a/net/ntlm/ntlm.h
+++ b/net/ntlm/ntlm.h
@@ -38,7 +38,7 @@
 // Generates the NTLMv1 Hash and writes the |kNtlmHashLen| byte result to
 // |hash|. Defined by NTOWFv1() in [MS-NLMP] Section 3.3.1.
 NET_EXPORT_PRIVATE void GenerateNtlmHashV1(
-    const base::string16& password,
+    const std::u16string& password,
     base::span<uint8_t, kNtlmHashLen> hash);
 
 // Generates the |kResponseLenV1| byte NTLMv1 response field according to the
@@ -52,7 +52,7 @@
 // security. Defined by ComputeResponse() in [MS-NLMP] Section 3.3.1 for the
 // case where NTLMSSP_NEGOTIATE_EXTENDED_SESSIONSECURITY is not set.
 NET_EXPORT_PRIVATE void GenerateNtlmResponseV1(
-    const base::string16& password,
+    const std::u16string& password,
     base::span<const uint8_t, kChallengeLen> server_challenge,
     base::span<uint8_t, kResponseLenV1> ntlm_response);
 
@@ -68,7 +68,7 @@
 // The default flags include this flag and the client will not be
 // downgraded by the server.
 NET_EXPORT_PRIVATE void GenerateResponsesV1(
-    const base::string16& password,
+    const std::u16string& password,
     base::span<const uint8_t, kChallengeLen> server_challenge,
     base::span<uint8_t, kResponseLenV1> lm_response,
     base::span<uint8_t, kResponseLenV1> ntlm_response);
@@ -95,7 +95,7 @@
 // Defined by ComputeResponse() in [MS-NLMP] Section 3.3.1 for the
 // case where NTLMSSP_NEGOTIATE_EXTENDED_SESSIONSECURITY is set.
 NET_EXPORT_PRIVATE void GenerateNtlmResponseV1WithSessionSecurity(
-    const base::string16& password,
+    const std::u16string& password,
     base::span<const uint8_t, kChallengeLen> server_challenge,
     base::span<const uint8_t, kChallengeLen> client_challenge,
     base::span<uint8_t, kResponseLenV1> ntlm_response);
@@ -106,7 +106,7 @@
 // |ntlm_response| is the result of |GenerateNtlmResponseV1WithSessionSecurity|.
 // See [MS-NLMP] Section 3.3.1.
 NET_EXPORT_PRIVATE void GenerateResponsesV1WithSessionSecurity(
-    const base::string16& password,
+    const std::u16string& password,
     base::span<const uint8_t, kChallengeLen> server_challenge,
     base::span<const uint8_t, kChallengeLen> client_challenge,
     base::span<uint8_t, kResponseLenV1> lm_response,
@@ -114,9 +114,9 @@
 
 // Generates the NTLMv2 Hash and writes it into |v2_hash|.
 NET_EXPORT_PRIVATE void GenerateNtlmHashV2(
-    const base::string16& domain,
-    const base::string16& username,
-    const base::string16& password,
+    const std::u16string& domain,
+    const std::u16string& username,
+    const std::u16string& password,
     base::span<uint8_t, kNtlmHashLen> v2_hash);
 
 // In this implementation the Proof Input is the first 28 bytes of what
diff --git a/net/ntlm/ntlm_buffer_writer.cc b/net/ntlm/ntlm_buffer_writer.cc
index 8fec1ee8..efbbfb4 100644
--- a/net/ntlm/ntlm_buffer_writer.cc
+++ b/net/ntlm/ntlm_buffer_writer.cc
@@ -108,17 +108,17 @@
   return WriteBytes(base::as_bytes(base::make_span(str)));
 }
 
-bool NtlmBufferWriter::WriteUtf16AsUtf8String(const base::string16& str) {
+bool NtlmBufferWriter::WriteUtf16AsUtf8String(const std::u16string& str) {
   std::string utf8 = base::UTF16ToUTF8(str);
   return WriteUtf8String(utf8);
 }
 
 bool NtlmBufferWriter::WriteUtf8AsUtf16String(const std::string& str) {
-  base::string16 unicode = base::UTF8ToUTF16(str);
+  std::u16string unicode = base::UTF8ToUTF16(str);
   return WriteUtf16String(unicode);
 }
 
-bool NtlmBufferWriter::WriteUtf16String(const base::string16& str) {
+bool NtlmBufferWriter::WriteUtf16String(const std::u16string& str) {
   if (str.size() > std::numeric_limits<size_t>::max() / 2)
     return false;
 
diff --git a/net/ntlm/ntlm_buffer_writer.h b/net/ntlm/ntlm_buffer_writer.h
index 0c6e67b..61481cc 100644
--- a/net/ntlm/ntlm_buffer_writer.h
+++ b/net/ntlm/ntlm_buffer_writer.h
@@ -129,7 +129,7 @@
   // input to hash the encoding doesn't matter. In practice, only a very old or
   // non-Windows server might trigger this code path since we always attempt
   // to negotiate Unicode and servers are supposed to honor that request.
-  bool WriteUtf16AsUtf8String(const base::string16& str) WARN_UNUSED_RESULT;
+  bool WriteUtf16AsUtf8String(const std::u16string& str) WARN_UNUSED_RESULT;
 
   // Treats |str| as UTF8, converts to UTF-16 and writes it with little-endian
   // byte order to the buffer.
@@ -148,7 +148,7 @@
   // Writes UTF-16 LE characters to the buffer. For these strings, such as
   // username and the domain the actual encoding isn't important; they are just
   // treated as additional bytes of input to the hash.
-  bool WriteUtf16String(const base::string16& str) WARN_UNUSED_RESULT;
+  bool WriteUtf16String(const std::u16string& str) WARN_UNUSED_RESULT;
 
   // Writes the 8 byte NTLM signature "NTLMSSP\0" into the buffer.
   bool WriteSignature() WARN_UNUSED_RESULT;
diff --git a/net/ntlm/ntlm_buffer_writer_unittest.cc b/net/ntlm/ntlm_buffer_writer_unittest.cc
index 813c6b6..75675b40 100644
--- a/net/ntlm/ntlm_buffer_writer_unittest.cc
+++ b/net/ntlm/ntlm_buffer_writer_unittest.cc
@@ -200,7 +200,7 @@
 TEST(NtlmBufferWriterTest, WriteUtf16String) {
   uint8_t expected[16] = {'1', 0, '2', 0, '3', 0, '4', 0,
                           '5', 0, '6', 0, '7', 0, '8', 0};
-  base::string16 value = base::ASCIIToUTF16("12345678");
+  std::u16string value = base::ASCIIToUTF16("12345678");
 
   NtlmBufferWriter writer(value.size() * 2);
 
@@ -212,7 +212,7 @@
 }
 
 TEST(NtlmBufferWriterTest, WriteUtf16StringPastEob) {
-  base::string16 str = base::ASCIIToUTF16("12345678");
+  std::u16string str = base::ASCIIToUTF16("12345678");
   NtlmBufferWriter writer((str.length() * 2) - 1);
 
   ASSERT_FALSE(writer.WriteUtf16String(str));
diff --git a/net/ntlm/ntlm_client.cc b/net/ntlm/ntlm_client.cc
index 4d93a919..4a160bb 100644
--- a/net/ntlm/ntlm_client.cc
+++ b/net/ntlm/ntlm_client.cc
@@ -99,8 +99,8 @@
 
 bool WriteStringPayloads(NtlmBufferWriter* authenticate_writer,
                          bool is_unicode,
-                         const base::string16& domain,
-                         const base::string16& username,
+                         const std::u16string& domain,
+                         const std::u16string& username,
                          const std::string& hostname) {
   if (is_unicode) {
     return authenticate_writer->WriteUtf16String(domain) &&
@@ -115,11 +115,11 @@
 
 // Returns the size in bytes of a string16 depending whether unicode
 // was negotiated.
-size_t GetStringPayloadLength(const base::string16& str, bool is_unicode) {
+size_t GetStringPayloadLength(const std::u16string& str, bool is_unicode) {
   if (is_unicode)
     return str.length() * 2;
 
-  // When |WriteUtf16AsUtf8String| is called with a |base::string16|, the string
+  // When |WriteUtf16AsUtf8String| is called with a |std::u16string|, the string
   // is converted to UTF8. Do the conversion to ensure that the character
   // count is correct.
   return base::UTF16ToUTF8(str).length();
@@ -184,9 +184,9 @@
 }
 
 std::vector<uint8_t> NtlmClient::GenerateAuthenticateMessage(
-    const base::string16& domain,
-    const base::string16& username,
-    const base::string16& password,
+    const std::u16string& domain,
+    const std::u16string& username,
+    const std::u16string& password,
     const std::string& hostname,
     const std::string& channel_bindings,
     const std::string& spn,
@@ -348,8 +348,8 @@
 
 bool NtlmClient::CalculatePayloadLayout(
     bool is_unicode,
-    const base::string16& domain,
-    const base::string16& username,
+    const std::u16string& domain,
+    const std::u16string& username,
     const std::string& hostname,
     size_t updated_target_info_len,
     SecurityBuffer* lm_info,
diff --git a/net/ntlm/ntlm_client.h b/net/ntlm/ntlm_client.h
index 385ccbe..b2dae0f 100644
--- a/net/ntlm/ntlm_client.h
+++ b/net/ntlm/ntlm_client.h
@@ -87,9 +87,9 @@
   //
   // [1] - https://technet.microsoft.com/en-us/library/jj852267(v=ws.11).aspx
   std::vector<uint8_t> GenerateAuthenticateMessage(
-      const base::string16& domain,
-      const base::string16& username,
-      const base::string16& password,
+      const std::u16string& domain,
+      const std::u16string& username,
+      const std::u16string& password,
       const std::string& hostname,
       const std::string& channel_bindings,
       const std::string& spn,
@@ -101,9 +101,9 @@
   // |spn|, or |client_time|. See |GenerateAuthenticateMessage| for more
   // details.
   std::vector<uint8_t> GenerateAuthenticateMessageV1(
-      const base::string16& domain,
-      const base::string16& username,
-      const base::string16& password,
+      const std::u16string& domain,
+      const std::u16string& username,
+      const std::u16string& password,
       const std::string& hostname,
       base::span<const uint8_t, 8> client_challenge,
       base::span<const uint8_t> server_challenge_message) const {
@@ -120,14 +120,14 @@
   // negotiated.
   size_t CalculateAuthenticateMessageLength(
       bool is_unicode,
-      const base::string16& domain,
-      const base::string16& username,
+      const std::u16string& domain,
+      const std::u16string& username,
       const std::string& hostname,
       size_t updated_target_info_len) const;
 
   bool CalculatePayloadLayout(bool is_unicode,
-                              const base::string16& domain,
-                              const base::string16& username,
+                              const std::u16string& domain,
+                              const std::u16string& username,
                               const std::string& hostname,
                               size_t updated_target_info_len,
                               SecurityBuffer* lm_info,
diff --git a/net/ntlm/ntlm_client_fuzzer.cc b/net/ntlm/ntlm_client_fuzzer.cc
index c4f1ce5..549f180 100644
--- a/net/ntlm/ntlm_client_fuzzer.cc
+++ b/net/ntlm/ntlm_client_fuzzer.cc
@@ -14,10 +14,10 @@
 #include "net/ntlm/ntlm_client.h"
 #include "net/ntlm/ntlm_test_data.h"
 
-base::string16 ConsumeRandomLengthString16(FuzzedDataProvider& data_provider,
+std::u16string ConsumeRandomLengthString16(FuzzedDataProvider& data_provider,
                                            size_t max_chars) {
   std::string bytes = data_provider.ConsumeRandomLengthString(max_chars * 2);
-  return base::string16(reinterpret_cast<const char16_t*>(bytes.data()),
+  return std::u16string(reinterpret_cast<const char16_t*>(bytes.data()),
                         bytes.size() / 2);
 }
 
@@ -30,11 +30,11 @@
   // Generate the input strings and challenge message. The strings will have a
   // maximum length 1 character longer than the maximum that |NtlmClient| will
   // accept to allow exploring the error cases.
-  base::string16 domain =
+  std::u16string domain =
       ConsumeRandomLengthString16(fdp, net::ntlm::kMaxFqdnLen + 1);
-  base::string16 username =
+  std::u16string username =
       ConsumeRandomLengthString16(fdp, net::ntlm::kMaxUsernameLen + 1);
-  base::string16 password =
+  std::u16string password =
       ConsumeRandomLengthString16(fdp, net::ntlm::kMaxPasswordLen + 1);
   std::string hostname =
       fdp.ConsumeRandomLengthString(net::ntlm::kMaxFqdnLen + 1);
diff --git a/net/ntlm/ntlm_client_unittest.cc b/net/ntlm/ntlm_client_unittest.cc
index b516cd5..a67f397 100644
--- a/net/ntlm/ntlm_client_unittest.cc
+++ b/net/ntlm/ntlm_client_unittest.cc
@@ -66,7 +66,7 @@
 // Reads bytes from a payload and assigns them to a string16. This makes
 // no assumptions about the underlying encoding. This will fail if there
 // are an odd number of bytes in the payload.
-bool ReadString16Payload(NtlmBufferReader* reader, base::string16* str) {
+bool ReadString16Payload(NtlmBufferReader* reader, std::u16string* str) {
   SecurityBuffer sec_buf;
   if (!reader->ReadSecurityBuffer(&sec_buf) || (sec_buf.length % 2 != 0))
     return false;
@@ -379,9 +379,9 @@
   ASSERT_EQ(0, memcmp(test::kExpectedNtlmResponseWithV1SS, actual_ntlm_response,
                       kResponseLenV1));
 
-  base::string16 domain;
-  base::string16 username;
-  base::string16 hostname;
+  std::u16string domain;
+  std::u16string username;
+  std::u16string hostname;
   ASSERT_TRUE(ReadString16Payload(&reader, &domain));
   ASSERT_EQ(test::kNtlmDomain, domain);
   ASSERT_TRUE(ReadString16Payload(&reader, &username));
diff --git a/net/ntlm/ntlm_unittest.cc b/net/ntlm/ntlm_unittest.cc
index 3be996b..ef1b4de 100644
--- a/net/ntlm/ntlm_unittest.cc
+++ b/net/ntlm/ntlm_unittest.cc
@@ -107,8 +107,8 @@
 }
 
 TEST(NtlmTest, GenerateNtlmHashV1PasswordChangesHash) {
-  base::string16 password1 = base::UTF8ToUTF16("pwd01");
-  base::string16 password2 = base::UTF8ToUTF16("pwd02");
+  std::u16string password1 = base::UTF8ToUTF16("pwd01");
+  std::u16string password2 = base::UTF8ToUTF16("pwd02");
   uint8_t hash1[kNtlmHashLen];
   uint8_t hash2[kNtlmHashLen];
 
diff --git a/net/proxy_resolution/dhcp_pac_file_fetcher.cc b/net/proxy_resolution/dhcp_pac_file_fetcher.cc
index 0e2ccf3..0399e24 100644
--- a/net/proxy_resolution/dhcp_pac_file_fetcher.cc
+++ b/net/proxy_resolution/dhcp_pac_file_fetcher.cc
@@ -21,7 +21,7 @@
 DoNothingDhcpPacFileFetcher::~DoNothingDhcpPacFileFetcher() = default;
 
 int DoNothingDhcpPacFileFetcher::Fetch(
-    base::string16* utf16_text,
+    std::u16string* utf16_text,
     CompletionOnceCallback callback,
     const NetLogWithSource& net_log,
     const NetworkTrafficAnnotationTag traffic_annotation) {
diff --git a/net/proxy_resolution/dhcp_pac_file_fetcher.h b/net/proxy_resolution/dhcp_pac_file_fetcher.h
index 8c1a6434..3be28bd7 100644
--- a/net/proxy_resolution/dhcp_pac_file_fetcher.h
+++ b/net/proxy_resolution/dhcp_pac_file_fetcher.h
@@ -62,7 +62,7 @@
   // deleting |this|), then no callback is invoked.
   //
   // Only one fetch is allowed to be outstanding at a time.
-  virtual int Fetch(base::string16* utf16_text,
+  virtual int Fetch(std::u16string* utf16_text,
                     CompletionOnceCallback callback,
                     const NetLogWithSource& net_log,
                     const NetworkTrafficAnnotationTag traffic_annotation) = 0;
@@ -98,7 +98,7 @@
   DoNothingDhcpPacFileFetcher();
   ~DoNothingDhcpPacFileFetcher() override;
 
-  int Fetch(base::string16* utf16_text,
+  int Fetch(std::u16string* utf16_text,
             CompletionOnceCallback callback,
             const NetLogWithSource& net_log,
             const NetworkTrafficAnnotationTag traffic_annotation) override;
diff --git a/net/proxy_resolution/mock_pac_file_fetcher.cc b/net/proxy_resolution/mock_pac_file_fetcher.cc
index a03a1fc..f712aff 100644
--- a/net/proxy_resolution/mock_pac_file_fetcher.cc
+++ b/net/proxy_resolution/mock_pac_file_fetcher.cc
@@ -23,7 +23,7 @@
 // PacFileFetcher implementation.
 int MockPacFileFetcher::Fetch(
     const GURL& url,
-    base::string16* text,
+    std::u16string* text,
     CompletionOnceCallback callback,
     const NetworkTrafficAnnotationTag traffic_annotation) {
   DCHECK(!has_pending_request());
diff --git a/net/proxy_resolution/mock_pac_file_fetcher.h b/net/proxy_resolution/mock_pac_file_fetcher.h
index 7213ad39..5b546bf 100644
--- a/net/proxy_resolution/mock_pac_file_fetcher.h
+++ b/net/proxy_resolution/mock_pac_file_fetcher.h
@@ -26,7 +26,7 @@
 
   // PacFileFetcher implementation.
   int Fetch(const GURL& url,
-            base::string16* text,
+            std::u16string* text,
             CompletionOnceCallback callback,
             const NetworkTrafficAnnotationTag traffic_annotation) override;
   void Cancel() override;
@@ -43,7 +43,7 @@
  private:
   GURL pending_request_url_;
   CompletionOnceCallback pending_request_callback_;
-  base::string16* pending_request_text_;
+  std::u16string* pending_request_text_;
   base::OnceClosure on_fetch_complete_;
   bool is_shutdown_;
 };
diff --git a/net/proxy_resolution/network_delegate_error_observer.cc b/net/proxy_resolution/network_delegate_error_observer.cc
index 9998540..fdd9c16 100644
--- a/net/proxy_resolution/network_delegate_error_observer.cc
+++ b/net/proxy_resolution/network_delegate_error_observer.cc
@@ -21,7 +21,7 @@
   Core(NetworkDelegate* network_delegate,
        base::SingleThreadTaskRunner* origin_runner);
 
-  void NotifyPACScriptError(int line_number, const base::string16& error);
+  void NotifyPACScriptError(int line_number, const std::u16string& error);
 
   void Shutdown();
 
@@ -47,7 +47,7 @@
 
 void NetworkDelegateErrorObserver::Core::NotifyPACScriptError(
     int line_number,
-    const base::string16& error) {
+    const std::u16string& error) {
   if (!origin_runner_->BelongsToCurrentThread()) {
     origin_runner_->PostTask(
         FROM_HERE,
@@ -86,7 +86,7 @@
 
 void NetworkDelegateErrorObserver::OnPACScriptError(
     int line_number,
-    const base::string16& error) {
+    const std::u16string& error) {
   core_->NotifyPACScriptError(line_number, error);
 }
 
diff --git a/net/proxy_resolution/network_delegate_error_observer.h b/net/proxy_resolution/network_delegate_error_observer.h
index 1d8264a..67534c3 100644
--- a/net/proxy_resolution/network_delegate_error_observer.h
+++ b/net/proxy_resolution/network_delegate_error_observer.h
@@ -35,7 +35,7 @@
       const scoped_refptr<base::SingleThreadTaskRunner>& origin_runner);
 
   // ProxyResolverErrorObserver implementation.
-  void OnPACScriptError(int line_number, const base::string16& error) override;
+  void OnPACScriptError(int line_number, const std::u16string& error) override;
 
  private:
   class Core;
diff --git a/net/proxy_resolution/network_delegate_error_observer_unittest.cc b/net/proxy_resolution/network_delegate_error_observer_unittest.cc
index c9448fd..bd3ce6b 100644
--- a/net/proxy_resolution/network_delegate_error_observer_unittest.cc
+++ b/net/proxy_resolution/network_delegate_error_observer_unittest.cc
@@ -55,7 +55,7 @@
   void OnCompleted(URLRequest* request, bool started, int net_error) override {}
   void OnURLRequestDestroyed(URLRequest* request) override {}
 
-  void OnPACScriptError(int line_number, const base::string16& error) override {
+  void OnPACScriptError(int line_number, const std::u16string& error) override {
     got_pac_error_ = true;
   }
   bool OnCanGetCookies(const URLRequest& request,
@@ -84,7 +84,7 @@
   thread.task_runner()->PostTask(
       FROM_HERE,
       base::BindOnce(&NetworkDelegateErrorObserver::OnPACScriptError,
-                     base::Unretained(&observer), 42, base::string16()));
+                     base::Unretained(&observer), 42, std::u16string()));
   thread.Stop();
   base::RunLoop().RunUntilIdle();
   ASSERT_TRUE(network_delegate.got_pac_error());
@@ -100,7 +100,7 @@
   thread.task_runner()->PostTask(
       FROM_HERE,
       base::BindOnce(&NetworkDelegateErrorObserver::OnPACScriptError,
-                     base::Unretained(&observer), 42, base::string16()));
+                     base::Unretained(&observer), 42, std::u16string()));
   thread.Stop();
   base::RunLoop().RunUntilIdle();
   // Shouldn't have crashed until here...
diff --git a/net/proxy_resolution/pac_file_data.cc b/net/proxy_resolution/pac_file_data.cc
index fdbccba8..6e695f5 100644
--- a/net/proxy_resolution/pac_file_data.cc
+++ b/net/proxy_resolution/pac_file_data.cc
@@ -15,21 +15,21 @@
 }
 
 // static
-scoped_refptr<PacFileData> PacFileData::FromUTF16(const base::string16& utf16) {
+scoped_refptr<PacFileData> PacFileData::FromUTF16(const std::u16string& utf16) {
   return new PacFileData(TYPE_SCRIPT_CONTENTS, GURL(), utf16);
 }
 
 // static
 scoped_refptr<PacFileData> PacFileData::FromURL(const GURL& url) {
-  return new PacFileData(TYPE_SCRIPT_URL, url, base::string16());
+  return new PacFileData(TYPE_SCRIPT_URL, url, std::u16string());
 }
 
 // static
 scoped_refptr<PacFileData> PacFileData::ForAutoDetect() {
-  return new PacFileData(TYPE_AUTO_DETECT, GURL(), base::string16());
+  return new PacFileData(TYPE_AUTO_DETECT, GURL(), std::u16string());
 }
 
-const base::string16& PacFileData::utf16() const {
+const std::u16string& PacFileData::utf16() const {
   DCHECK_EQ(TYPE_SCRIPT_CONTENTS, type_);
   return utf16_;
 }
@@ -57,7 +57,7 @@
 
 PacFileData::PacFileData(Type type,
                          const GURL& url,
-                         const base::string16& utf16)
+                         const std::u16string& utf16)
     : type_(type), url_(url), utf16_(utf16) {}
 
 PacFileData::~PacFileData() = default;
diff --git a/net/proxy_resolution/pac_file_data.h b/net/proxy_resolution/pac_file_data.h
index 8436440..ba2d208a 100644
--- a/net/proxy_resolution/pac_file_data.h
+++ b/net/proxy_resolution/pac_file_data.h
@@ -33,7 +33,7 @@
   static scoped_refptr<PacFileData> FromUTF8(const std::string& utf8);
 
   // Creates a script data given the UTF16 bytes of the content.
-  static scoped_refptr<PacFileData> FromUTF16(const base::string16& utf16);
+  static scoped_refptr<PacFileData> FromUTF16(const std::u16string& utf16);
 
   // Creates a script data given a URL to the PAC script.
   static scoped_refptr<PacFileData> FromURL(const GURL& url);
@@ -45,7 +45,7 @@
 
   // Returns the contents of the script as UTF16.
   // (only valid for type() == TYPE_SCRIPT_CONTENTS).
-  const base::string16& utf16() const;
+  const std::u16string& utf16() const;
 
   // Returns the URL of the script.
   // (only valid for type() == TYPE_SCRIPT_URL).
@@ -56,12 +56,12 @@
 
  private:
   friend class base::RefCountedThreadSafe<PacFileData>;
-  PacFileData(Type type, const GURL& url, const base::string16& utf16);
+  PacFileData(Type type, const GURL& url, const std::u16string& utf16);
   virtual ~PacFileData();
 
   const Type type_;
   const GURL url_;
-  const base::string16 utf16_;
+  const std::u16string utf16_;
 };
 
 }  // namespace net
diff --git a/net/proxy_resolution/pac_file_decider.cc b/net/proxy_resolution/pac_file_decider.cc
index 016c90c..ed4e191 100644
--- a/net/proxy_resolution/pac_file_decider.cc
+++ b/net/proxy_resolution/pac_file_decider.cc
@@ -32,7 +32,7 @@
 
 namespace {
 
-bool LooksLikePacScript(const base::string16& script) {
+bool LooksLikePacScript(const std::u16string& script) {
   // Note: this is only an approximation! It may not always work correctly,
   // however it is very likely that legitimate scripts have this exact string,
   // since they must minimally define a function of this name. Conversely, a
@@ -40,7 +40,7 @@
   //
   // An exact test would have to load the script in a javascript evaluator.
   return script.find(base::ASCIIToUTF16("FindProxyForURL")) !=
-         base::string16::npos;
+         std::u16string::npos;
 }
 
 // This is the hard-coded location used by the DNS portion of web proxy
diff --git a/net/proxy_resolution/pac_file_decider.h b/net/proxy_resolution/pac_file_decider.h
index cea23292..77c32d6 100644
--- a/net/proxy_resolution/pac_file_decider.h
+++ b/net/proxy_resolution/pac_file_decider.h
@@ -187,7 +187,7 @@
   size_t current_pac_source_index_;
 
   // Filled when the PAC script fetch completes.
-  base::string16 pac_script_;
+  std::u16string pac_script_;
 
   // Flag indicating whether the caller requested a mandatory PAC script
   // (i.e. fallback to direct connections are prohibited).
diff --git a/net/proxy_resolution/pac_file_decider_unittest.cc b/net/proxy_resolution/pac_file_decider_unittest.cc
index 35b51dc..088d629 100644
--- a/net/proxy_resolution/pac_file_decider_unittest.cc
+++ b/net/proxy_resolution/pac_file_decider_unittest.cc
@@ -55,12 +55,12 @@
           fetch_error(fetch_error),
           is_valid_script(is_valid_script) {}
 
-    base::string16 text() const {
+    std::u16string text() const {
       if (is_valid_script)
         return base::UTF8ToUTF16(url.spec() + "!FindProxyForURL");
       if (fetch_error == OK)
         return base::UTF8ToUTF16(url.spec() + "!invalid-script");
-      return base::string16();
+      return std::u16string();
     }
 
     GURL url;
@@ -92,7 +92,7 @@
     return rules_[0];
   }
 
-  const Rule& GetRuleByText(const base::string16& text) const {
+  const Rule& GetRuleByText(const std::u16string& text) const {
     for (auto it = rules_.begin(); it != rules_.end(); ++it) {
       if (it->text() == text)
         return *it;
@@ -117,7 +117,7 @@
 
   // PacFileFetcher implementation.
   int Fetch(const GURL& url,
-            base::string16* text,
+            std::u16string* text,
             CompletionOnceCallback callback,
             const NetworkTrafficAnnotationTag traffic_annotation) override {
     const Rules::Rule& rule = rules_->GetRuleByUrl(url);
@@ -147,7 +147,7 @@
   MockDhcpPacFileFetcher();
   ~MockDhcpPacFileFetcher() override;
 
-  int Fetch(base::string16* utf16_text,
+  int Fetch(std::u16string* utf16_text,
             CompletionOnceCallback callback,
             const NetLogWithSource& net_log,
             const NetworkTrafficAnnotationTag traffic_annotation) override;
@@ -157,11 +157,11 @@
 
   virtual void SetPacURL(const GURL& url);
 
-  virtual void CompleteRequests(int result, const base::string16& script);
+  virtual void CompleteRequests(int result, const std::u16string& script);
 
  private:
   CompletionOnceCallback callback_;
-  base::string16* utf16_text_;
+  std::u16string* utf16_text_;
   GURL gurl_;
   DISALLOW_COPY_AND_ASSIGN(MockDhcpPacFileFetcher);
 };
@@ -171,7 +171,7 @@
 MockDhcpPacFileFetcher::~MockDhcpPacFileFetcher() = default;
 
 int MockDhcpPacFileFetcher::Fetch(
-    base::string16* utf16_text,
+    std::u16string* utf16_text,
     CompletionOnceCallback callback,
     const NetLogWithSource& net_log,
     const NetworkTrafficAnnotationTag traffic_annotation) {
@@ -193,7 +193,7 @@
 }
 
 void MockDhcpPacFileFetcher::CompleteRequests(int result,
-                                              const base::string16& script) {
+                                              const std::u16string& script) {
   *utf16_text_ = script;
   std::move(callback_).Run(result);
 }
@@ -429,7 +429,7 @@
 TEST_F(PacFileDeciderQuickCheckTest, QuickCheckInhibitsDhcp) {
   MockDhcpPacFileFetcher dhcp_fetcher;
   const char* kPac = "function FindProxyForURL(u,h) { return \"DIRECT\"; }";
-  base::string16 pac_contents = base::UTF8ToUTF16(kPac);
+  std::u16string pac_contents = base::UTF8ToUTF16(kPac);
   GURL url("http://foobar/baz");
   dhcp_fetcher.SetPacURL(url);
   decider_.reset(new PacFileDecider(&fetcher_, &dhcp_fetcher, nullptr));
@@ -709,10 +709,10 @@
 
 class SynchronousSuccessDhcpFetcher : public DhcpPacFileFetcher {
  public:
-  explicit SynchronousSuccessDhcpFetcher(const base::string16& expected_text)
+  explicit SynchronousSuccessDhcpFetcher(const std::u16string& expected_text)
       : gurl_("http://dhcppac/"), expected_text_(expected_text) {}
 
-  int Fetch(base::string16* utf16_text,
+  int Fetch(std::u16string* utf16_text,
             CompletionOnceCallback callback,
             const NetLogWithSource& net_log,
             const NetworkTrafficAnnotationTag traffic_annotation) override {
@@ -726,11 +726,11 @@
 
   const GURL& GetPacURL() const override { return gurl_; }
 
-  const base::string16& expected_text() const { return expected_text_; }
+  const std::u16string& expected_text() const { return expected_text_; }
 
  private:
   GURL gurl_;
-  base::string16 expected_text_;
+  std::u16string expected_text_;
 
   DISALLOW_COPY_AND_ASSIGN(SynchronousSuccessDhcpFetcher);
 };
@@ -798,7 +798,7 @@
   AsyncFailDhcpFetcher() = default;
   ~AsyncFailDhcpFetcher() override = default;
 
-  int Fetch(base::string16* utf16_text,
+  int Fetch(std::u16string* utf16_text,
             CompletionOnceCallback callback,
             const NetLogWithSource& net_log,
             const NetworkTrafficAnnotationTag traffic_annotation) override {
diff --git a/net/proxy_resolution/pac_file_fetcher.h b/net/proxy_resolution/pac_file_fetcher.h
index dbebddd..500e257 100644
--- a/net/proxy_resolution/pac_file_fetcher.h
+++ b/net/proxy_resolution/pac_file_fetcher.h
@@ -48,7 +48,7 @@
   //
   // Only one fetch is allowed to be outstanding at a time.
   virtual int Fetch(const GURL& url,
-                    base::string16* utf16_text,
+                    std::u16string* utf16_text,
                     CompletionOnceCallback callback,
                     const NetworkTrafficAnnotationTag traffic_annotation) = 0;
 
diff --git a/net/proxy_resolution/pac_file_fetcher_impl.cc b/net/proxy_resolution/pac_file_fetcher_impl.cc
index 4a388eb7..a44cc6bb 100644
--- a/net/proxy_resolution/pac_file_fetcher_impl.cc
+++ b/net/proxy_resolution/pac_file_fetcher_impl.cc
@@ -78,7 +78,7 @@
 // If |charset| is empty, then we don't know what it was and guess.
 void ConvertResponseToUTF16(const std::string& charset,
                             const std::string& bytes,
-                            base::string16* utf16) {
+                            std::u16string* utf16) {
   if (charset.empty()) {
     // Guess the charset by looking at the BOM.
     base::StringPiece bytes_str(bytes);
@@ -141,7 +141,7 @@
 
 int PacFileFetcherImpl::Fetch(
     const GURL& url,
-    base::string16* text,
+    std::u16string* text,
     CompletionOnceCallback callback,
     const NetworkTrafficAnnotationTag traffic_annotation) {
   // It is invalid to call Fetch() while a request is already in progress.
diff --git a/net/proxy_resolution/pac_file_fetcher_impl.h b/net/proxy_resolution/pac_file_fetcher_impl.h
index 0ceea27..fe4bf06c 100644
--- a/net/proxy_resolution/pac_file_fetcher_impl.h
+++ b/net/proxy_resolution/pac_file_fetcher_impl.h
@@ -61,7 +61,7 @@
 
   // PacFileFetcher methods:
   int Fetch(const GURL& url,
-            base::string16* text,
+            std::u16string* text,
             CompletionOnceCallback callback,
             const NetworkTrafficAnnotationTag traffic_annotation) override;
   void Cancel() override;
@@ -141,7 +141,7 @@
 
   // This buffer is owned by the owner of |callback|, and will be filled with
   // UTF16 response on completion.
-  base::string16* result_text_;
+  std::u16string* result_text_;
 
   // The maximum number of bytes to allow in responses.
   size_t max_response_bytes_;
diff --git a/net/proxy_resolution/pac_file_fetcher_impl_unittest.cc b/net/proxy_resolution/pac_file_fetcher_impl_unittest.cc
index 8d9fa834..45b00cae 100644
--- a/net/proxy_resolution/pac_file_fetcher_impl_unittest.cc
+++ b/net/proxy_resolution/pac_file_fetcher_impl_unittest.cc
@@ -72,7 +72,7 @@
 
 struct FetchResult {
   int code;
-  base::string16 text;
+  std::u16string text;
 };
 
 // A non-mock URL request which can access http:// urls.
@@ -171,7 +171,7 @@
 
   void OnURLRequestDestroyed(URLRequest* request) override {}
 
-  void OnPACScriptError(int line_number, const base::string16& error) override {
+  void OnPACScriptError(int line_number, const std::u16string& error) override {
   }
 
   bool OnCanGetCookies(const URLRequest& request,
@@ -207,7 +207,7 @@
 
   // Fetch a file that exists, however the PacFileFetcherImpl does not allow use
   // of file://.
-  base::string16 text;
+  std::u16string text;
   TestCompletionCallback callback;
   int result =
       pac_fetcher->Fetch(GetTestFileUrl("pac.txt"), &text, callback.callback(),
@@ -223,7 +223,7 @@
 
   GURL url(test_server_.GetURL("/redirect-to-file"));
 
-  base::string16 text;
+  std::u16string text;
   TestCompletionCallback callback;
   int result = pac_fetcher->Fetch(url, &text, callback.callback(),
                                   TRAFFIC_ANNOTATION_FOR_TESTS);
@@ -240,7 +240,7 @@
 
   {  // Fetch a PAC with mime type "text/plain"
     GURL url(test_server_.GetURL("/pac.txt"));
-    base::string16 text;
+    std::u16string text;
     TestCompletionCallback callback;
     int result = pac_fetcher->Fetch(url, &text, callback.callback(),
                                     TRAFFIC_ANNOTATION_FOR_TESTS);
@@ -250,7 +250,7 @@
   }
   {  // Fetch a PAC with mime type "text/html"
     GURL url(test_server_.GetURL("/pac.html"));
-    base::string16 text;
+    std::u16string text;
     TestCompletionCallback callback;
     int result = pac_fetcher->Fetch(url, &text, callback.callback(),
                                     TRAFFIC_ANNOTATION_FOR_TESTS);
@@ -260,7 +260,7 @@
   }
   {  // Fetch a PAC with mime type "application/x-ns-proxy-autoconfig"
     GURL url(test_server_.GetURL("/pac.nsproxy"));
-    base::string16 text;
+    std::u16string text;
     TestCompletionCallback callback;
     int result = pac_fetcher->Fetch(url, &text, callback.callback(),
                                     TRAFFIC_ANNOTATION_FOR_TESTS);
@@ -277,7 +277,7 @@
 
   {  // Fetch a PAC which gives a 500 -- FAIL
     GURL url(test_server_.GetURL("/500.pac"));
-    base::string16 text;
+    std::u16string text;
     TestCompletionCallback callback;
     int result = pac_fetcher->Fetch(url, &text, callback.callback(),
                                     TRAFFIC_ANNOTATION_FOR_TESTS);
@@ -288,7 +288,7 @@
   }
   {  // Fetch a PAC which gives a 404 -- FAIL
     GURL url(test_server_.GetURL("/404.pac"));
-    base::string16 text;
+    std::u16string text;
     TestCompletionCallback callback;
     int result = pac_fetcher->Fetch(url, &text, callback.callback(),
                                     TRAFFIC_ANNOTATION_FOR_TESTS);
@@ -307,7 +307,7 @@
   // Fetch PAC scripts via HTTP with a Content-Disposition header -- should
   // have no effect.
   GURL url(test_server_.GetURL("/downloadable.pac"));
-  base::string16 text;
+  std::u16string text;
   TestCompletionCallback callback;
   int result = pac_fetcher->Fetch(url, &text, callback.callback(),
                                   TRAFFIC_ANNOTATION_FOR_TESTS);
@@ -333,7 +333,7 @@
   auto pac_fetcher = PacFileFetcherImpl::Create(&context_);
 
   GURL url(test_server_.GetURL(kHost, "/downloadable.pac"));
-  base::string16 text;
+  std::u16string text;
   TestCompletionCallback callback;
   int result = pac_fetcher->Fetch(url, &text, callback.callback(),
                                   TRAFFIC_ANNOTATION_FOR_TESTS);
@@ -377,7 +377,7 @@
   // Fetch a PAC script whose HTTP headers make it cacheable for 1 hour.
   GURL url(test_server_.GetURL("/cacheable_1hr.pac"));
   {
-    base::string16 text;
+    std::u16string text;
     TestCompletionCallback callback;
     int result = pac_fetcher->Fetch(url, &text, callback.callback(),
                                     TRAFFIC_ANNOTATION_FOR_TESTS);
@@ -393,7 +393,7 @@
   // call should fail, thus indicating that the file was not fetched from the
   // local cache.
   {
-    base::string16 text;
+    std::u16string text;
     TestCompletionCallback callback;
     int result = pac_fetcher->Fetch(url, &text, callback.callback(),
                                     TRAFFIC_ANNOTATION_FOR_TESTS);
@@ -415,7 +415,7 @@
   // Try fetching URL that is 101 bytes large. We should abort the request
   // after 50 bytes have been read, and fail with a too large error.
   GURL url = test_server_.GetURL("/large-pac.nsproxy");
-  base::string16 text;
+  std::u16string text;
   TestCompletionCallback callback;
   int result = pac_fetcher->Fetch(url, &text, callback.callback(),
                                   TRAFFIC_ANNOTATION_FOR_TESTS);
@@ -428,7 +428,7 @@
 
   {  // Make sure we can still fetch regular URLs.
     GURL url(test_server_.GetURL("/pac.nsproxy"));
-    base::string16 text;
+    std::u16string text;
     TestCompletionCallback callback;
     int result = pac_fetcher->Fetch(url, &text, callback.callback(),
                                     TRAFFIC_ANNOTATION_FOR_TESTS);
@@ -445,7 +445,7 @@
   auto pac_fetcher = PacFileFetcherImpl::Create(&context_);
 
   GURL url(test_server_.GetURL("/empty"));
-  base::string16 text;
+  std::u16string text;
   TestCompletionCallback callback;
   int result = pac_fetcher->Fetch(url, &text, callback.callback(),
                                   TRAFFIC_ANNOTATION_FOR_TESTS);
@@ -467,7 +467,7 @@
   // after 500 ms, and fail with a timeout error.
   {
     GURL url(test_server_.GetURL("/slow/proxy.pac?1.2"));
-    base::string16 text;
+    std::u16string text;
     TestCompletionCallback callback;
     int result = pac_fetcher->Fetch(url, &text, callback.callback(),
                                     TRAFFIC_ANNOTATION_FOR_TESTS);
@@ -481,7 +481,7 @@
 
   {  // Make sure we can still fetch regular URLs.
     GURL url(test_server_.GetURL("/pac.nsproxy"));
-    base::string16 text;
+    std::u16string text;
     TestCompletionCallback callback;
     int result = pac_fetcher->Fetch(url, &text, callback.callback(),
                                     TRAFFIC_ANNOTATION_FOR_TESTS);
@@ -502,7 +502,7 @@
   // Test a response that is gzip-encoded -- should get inflated.
   {
     GURL url(test_server_.GetURL("/gzipped_pac"));
-    base::string16 text;
+    std::u16string text;
     TestCompletionCallback callback;
     int result = pac_fetcher->Fetch(url, &text, callback.callback(),
                                     TRAFFIC_ANNOTATION_FOR_TESTS);
@@ -515,7 +515,7 @@
   // be converted to UTF8.
   {
     GURL url(test_server_.GetURL("/utf16be_pac"));
-    base::string16 text;
+    std::u16string text;
     TestCompletionCallback callback;
     int result = pac_fetcher->Fetch(url, &text, callback.callback(),
                                     TRAFFIC_ANNOTATION_FOR_TESTS);
@@ -527,7 +527,7 @@
   // Test a response that lacks a charset, however starts with a UTF8 BOM.
   {
     GURL url(test_server_.GetURL("/utf8_bom"));
-    base::string16 text;
+    std::u16string text;
     TestCompletionCallback callback;
     int result = pac_fetcher->Fetch(url, &text, callback.callback(),
                                     TRAFFIC_ANNOTATION_FOR_TESTS);
@@ -554,7 +554,7 @@
   // Test fetching a "data:"-url containing a base64 encoded PAC script.
   {
     GURL url(kEncodedUrl);
-    base::string16 text;
+    std::u16string text;
     TestCompletionCallback callback;
     int result = pac_fetcher->Fetch(url, &text, callback.callback(),
                                     TRAFFIC_ANNOTATION_FOR_TESTS);
@@ -568,7 +568,7 @@
   // Test a broken "data:"-url containing a base64 encoded PAC script.
   {
     GURL url(kEncodedUrlBroken);
-    base::string16 text;
+    std::u16string text;
     TestCompletionCallback callback;
     int result = pac_fetcher->Fetch(url, &text, callback.callback(),
                                     TRAFFIC_ANNOTATION_FOR_TESTS);
@@ -593,7 +593,7 @@
   std::vector<std::unique_ptr<PacFileFetcherImpl>> pac_fetchers;
 
   TestCompletionCallback callback;
-  base::string16 text;
+  std::u16string text;
   for (int i = 0; i < num_requests; i++) {
     auto pac_fetcher = PacFileFetcherImpl::Create(&context_);
     GURL url(test_server_.GetURL("/hung"));
@@ -618,7 +618,7 @@
   ASSERT_TRUE(test_server_.Start());
 
   auto pac_fetcher = PacFileFetcherImpl::Create(&context_);
-  base::string16 text;
+  std::u16string text;
   TestCompletionCallback callback;
   int result =
       pac_fetcher->Fetch(test_server_.GetURL("/hung"), &text,
@@ -647,7 +647,7 @@
   auto pac_fetcher = PacFileFetcherImpl::Create(&context_);
   pac_fetcher->OnShutdown();
 
-  base::string16 text;
+  std::u16string text;
   TestCompletionCallback callback;
   int result =
       pac_fetcher->Fetch(test_server_.GetURL("/hung"), &text,
diff --git a/net/proxy_resolution/proxy_resolver_error_observer.h b/net/proxy_resolution/proxy_resolver_error_observer.h
index 7eeb80e7..0cb2594 100644
--- a/net/proxy_resolution/proxy_resolver_error_observer.h
+++ b/net/proxy_resolution/proxy_resolver_error_observer.h
@@ -28,7 +28,7 @@
   // be called concurrently, however it will be called from a different
   // thread than the proxy resolver's origin thread.
   virtual void OnPACScriptError(int line_number,
-                                const base::string16& error) = 0;
+                                const std::u16string& error) = 0;
 
  private:
   DISALLOW_COPY_AND_ASSIGN(ProxyResolverErrorObserver);
diff --git a/net/proxy_resolution/win/dhcp_pac_file_adapter_fetcher_win.cc b/net/proxy_resolution/win/dhcp_pac_file_adapter_fetcher_win.cc
index ae9d038..e35787b 100644
--- a/net/proxy_resolution/win/dhcp_pac_file_adapter_fetcher_win.cc
+++ b/net/proxy_resolution/win/dhcp_pac_file_adapter_fetcher_win.cc
@@ -54,7 +54,7 @@
   DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
   DCHECK_EQ(state_, STATE_START);
   result_ = ERR_IO_PENDING;
-  pac_script_ = base::string16();
+  pac_script_ = std::u16string();
   state_ = STATE_WAIT_DHCP;
   callback_ = std::move(callback);
 
@@ -104,7 +104,7 @@
   return result_;
 }
 
-base::string16 DhcpPacFileAdapterFetcher::GetPacScript() const {
+std::u16string DhcpPacFileAdapterFetcher::GetPacScript() const {
   DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
   return pac_script_;
 }
diff --git a/net/proxy_resolution/win/dhcp_pac_file_adapter_fetcher_win.h b/net/proxy_resolution/win/dhcp_pac_file_adapter_fetcher_win.h
index 08ab7dc..d4f66f3 100644
--- a/net/proxy_resolution/win/dhcp_pac_file_adapter_fetcher_win.h
+++ b/net/proxy_resolution/win/dhcp_pac_file_adapter_fetcher_win.h
@@ -67,7 +67,7 @@
   // Returns the contents of the PAC file retrieved.  Only valid if
   // |IsComplete()| is true.  Returns the empty string if |GetResult()|
   // returns anything other than OK.
-  virtual base::string16 GetPacScript() const;
+  virtual std::u16string GetPacScript() const;
 
   // Returns the PAC URL retrieved from DHCP.  Only guaranteed to be
   // valid if |IsComplete()| is true.  Returns an empty URL if no URL was
@@ -170,7 +170,7 @@
   int result_;
 
   // Empty string or the PAC script downloaded.
-  base::string16 pac_script_;
+  std::u16string pac_script_;
 
   // Empty URL or the PAC URL configured in DHCP.
   GURL pac_url_;
diff --git a/net/proxy_resolution/win/dhcp_pac_file_adapter_fetcher_win_unittest.cc b/net/proxy_resolution/win/dhcp_pac_file_adapter_fetcher_win_unittest.cc
index 9da520a6..883b2bf 100644
--- a/net/proxy_resolution/win/dhcp_pac_file_adapter_fetcher_win_unittest.cc
+++ b/net/proxy_resolution/win/dhcp_pac_file_adapter_fetcher_win_unittest.cc
@@ -172,7 +172,7 @@
   TestCompletionCallback callback_;
   std::unique_ptr<URLRequestContext> url_request_context_;
   std::unique_ptr<MockDhcpPacFileAdapterFetcher> fetcher_;
-  base::string16 pac_text_;
+  std::u16string pac_text_;
 };
 
 TEST(DhcpPacFileAdapterFetcher, NormalCaseURLNotInDhcp) {
@@ -184,7 +184,7 @@
   client.WaitForResult(ERR_PAC_NOT_IN_DHCP);
   ASSERT_TRUE(client.fetcher_->DidFinish());
   EXPECT_THAT(client.fetcher_->GetResult(), IsError(ERR_PAC_NOT_IN_DHCP));
-  EXPECT_EQ(base::string16(), client.fetcher_->GetPacScript());
+  EXPECT_EQ(std::u16string(), client.fetcher_->GetPacScript());
 }
 
 TEST(DhcpPacFileAdapterFetcher, NormalCaseURLInDhcp) {
@@ -195,7 +195,7 @@
   client.WaitForResult(OK);
   ASSERT_TRUE(client.fetcher_->DidFinish());
   EXPECT_THAT(client.fetcher_->GetResult(), IsOk());
-  EXPECT_EQ(base::string16(u"bingo"), client.fetcher_->GetPacScript());
+  EXPECT_EQ(std::u16string(u"bingo"), client.fetcher_->GetPacScript());
   EXPECT_EQ(GURL(kPacUrl), client.fetcher_->GetPacURL());
 }
 
@@ -220,7 +220,7 @@
 
   ASSERT_TRUE(client.fetcher_->DidFinish());
   EXPECT_THAT(client.fetcher_->GetResult(), IsError(ERR_TIMED_OUT));
-  EXPECT_EQ(base::string16(), client.fetcher_->GetPacScript());
+  EXPECT_EQ(std::u16string(), client.fetcher_->GetPacScript());
   EXPECT_EQ(GURL(), client.fetcher_->GetPacURL());
   client.FinishTestAllowCleanup();
 }
@@ -235,7 +235,7 @@
   ASSERT_FALSE(client.fetcher_->DidFinish());
   ASSERT_TRUE(client.fetcher_->WasCancelled());
   EXPECT_THAT(client.fetcher_->GetResult(), IsError(ERR_ABORTED));
-  EXPECT_EQ(base::string16(), client.fetcher_->GetPacScript());
+  EXPECT_EQ(std::u16string(), client.fetcher_->GetPacScript());
   EXPECT_EQ(GURL(), client.fetcher_->GetPacURL());
   client.FinishTestAllowCleanup();
 }
@@ -258,7 +258,7 @@
   ASSERT_FALSE(client.fetcher_->DidFinish());
   ASSERT_TRUE(client.fetcher_->WasCancelled());
   EXPECT_THAT(client.fetcher_->GetResult(), IsError(ERR_ABORTED));
-  EXPECT_EQ(base::string16(), client.fetcher_->GetPacScript());
+  EXPECT_EQ(std::u16string(), client.fetcher_->GetPacScript());
   // GetPacURL() still returns the URL fetched in this case.
   EXPECT_EQ(GURL(kPacUrl), client.fetcher_->GetPacURL());
   client.FinishTestAllowCleanup();
@@ -275,7 +275,7 @@
   // are identical expectations to the NormalCaseURLInDhcp test.
   ASSERT_TRUE(client.fetcher_->DidFinish());
   EXPECT_THAT(client.fetcher_->GetResult(), IsOk());
-  EXPECT_EQ(base::string16(u"bingo"), client.fetcher_->GetPacScript());
+  EXPECT_EQ(std::u16string(u"bingo"), client.fetcher_->GetPacScript());
   EXPECT_EQ(GURL(kPacUrl), client.fetcher_->GetPacURL());
   client.FinishTestAllowCleanup();
 }
@@ -320,7 +320,7 @@
   client.WaitForResult(OK);
   ASSERT_TRUE(client.fetcher_->DidFinish());
   EXPECT_THAT(client.fetcher_->GetResult(), IsOk());
-  EXPECT_EQ(base::string16(u"-downloadable.pac-\n"),
+  EXPECT_EQ(std::u16string(u"-downloadable.pac-\n"),
             client.fetcher_->GetPacScript());
   EXPECT_EQ(configured_url,
             client.fetcher_->GetPacURL());
diff --git a/net/proxy_resolution/win/dhcp_pac_file_fetcher_win.cc b/net/proxy_resolution/win/dhcp_pac_file_fetcher_win.cc
index 7fa0262..f2cff5a 100644
--- a/net/proxy_resolution/win/dhcp_pac_file_fetcher_win.cc
+++ b/net/proxy_resolution/win/dhcp_pac_file_fetcher_win.cc
@@ -269,7 +269,7 @@
 }
 
 int DhcpPacFileFetcherWin::Fetch(
-    base::string16* utf16_text,
+    std::u16string* utf16_text,
     CompletionOnceCallback callback,
     const NetLogWithSource& net_log,
     const NetworkTrafficAnnotationTag traffic_annotation) {
diff --git a/net/proxy_resolution/win/dhcp_pac_file_fetcher_win.h b/net/proxy_resolution/win/dhcp_pac_file_fetcher_win.h
index 32f83f16..b9f75296 100644
--- a/net/proxy_resolution/win/dhcp_pac_file_fetcher_win.h
+++ b/net/proxy_resolution/win/dhcp_pac_file_fetcher_win.h
@@ -43,7 +43,7 @@
   ~DhcpPacFileFetcherWin() override;
 
   // DhcpPacFileFetcher implementation.
-  int Fetch(base::string16* utf16_text,
+  int Fetch(std::u16string* utf16_text,
             CompletionOnceCallback callback,
             const NetLogWithSource& net_log,
             const NetworkTrafficAnnotationTag traffic_annotation) override;
@@ -175,7 +175,7 @@
 
   // Pointer to string we will write results to. Not valid in states
   // START and DONE.
-  base::string16* destination_string_;
+  std::u16string* destination_string_;
 
   // PAC URL retrieved from DHCP, if any. Valid only in state STATE_DONE.
   GURL pac_url_;
diff --git a/net/proxy_resolution/win/dhcp_pac_file_fetcher_win_unittest.cc b/net/proxy_resolution/win/dhcp_pac_file_fetcher_win_unittest.cc
index 817be5bcd..5da23d5 100644
--- a/net/proxy_resolution/win/dhcp_pac_file_fetcher_win_unittest.cc
+++ b/net/proxy_resolution/win/dhcp_pac_file_fetcher_win_unittest.cc
@@ -116,7 +116,7 @@
   std::unique_ptr<URLRequestContext> context_;
   std::unique_ptr<DhcpPacFileFetcherWin> fetcher_;
   bool finished_;
-  base::string16 pac_text_;
+  std::u16string pac_text_;
   base::OneShotTimer timeout_;
   base::OneShotTimer cancel_timer_;
   bool on_completion_is_error_;
@@ -240,15 +240,13 @@
     return result_;
   }
 
-  base::string16 GetPacScript() const override {
-    return pac_script_;
-  }
+  std::u16string GetPacScript() const override { return pac_script_; }
 
   void OnTimer() { std::move(callback_).Run(result_); }
 
   void Configure(bool did_finish,
                  int result,
-                 base::string16 pac_script,
+                 std::u16string pac_script,
                  int fetch_delay_ms) {
     did_finish_ = did_finish;
     result_ = result;
@@ -259,7 +257,7 @@
  private:
   bool did_finish_;
   int result_;
-  base::string16 pac_script_;
+  std::u16string pac_script_;
   int fetch_delay_ms_;
   CompletionOnceCallback callback_;
   base::OneShotTimer timer_;
@@ -311,7 +309,7 @@
   void ConfigureAndPushBackAdapter(const std::string& adapter_name,
                                    bool did_finish,
                                    int result,
-                                   base::string16 pac_script,
+                                   std::u16string pac_script,
                                    base::TimeDelta fetch_delay) {
     std::unique_ptr<DummyDhcpPacFileAdapterFetcher> adapter_fetcher(
         new DummyDhcpPacFileAdapterFetcher(url_request_context(),
@@ -436,7 +434,7 @@
   MockDhcpPacFileFetcherWin fetcher_;
   bool finished_;
   int result_;
-  base::string16 pac_text_;
+  std::u16string pac_text_;
 };
 
 // We separate out each test's logic so that we can easily implement
@@ -462,7 +460,7 @@
 
 void TestNormalCaseURLConfiguredMultipleAdapters(FetcherClient* client) {
   client->fetcher_.ConfigureAndPushBackAdapter(
-      "most_preferred", true, ERR_PAC_NOT_IN_DHCP, base::string16(),
+      "most_preferred", true, ERR_PAC_NOT_IN_DHCP, std::u16string(),
       base::TimeDelta::FromMilliseconds(1));
   client->fetcher_.ConfigureAndPushBackAdapter(
       "second", true, OK, u"bingo", base::TimeDelta::FromMilliseconds(50));
@@ -484,7 +482,7 @@
 void TestNormalCaseURLConfiguredMultipleAdaptersWithTimeout(
     FetcherClient* client) {
   client->fetcher_.ConfigureAndPushBackAdapter(
-      "most_preferred", true, ERR_PAC_NOT_IN_DHCP, base::string16(),
+      "most_preferred", true, ERR_PAC_NOT_IN_DHCP, std::u16string(),
       base::TimeDelta::FromMilliseconds(1));
   // This will time out.
   client->fetcher_.ConfigureAndPushBackAdapter("second", false, ERR_IO_PENDING,
@@ -509,7 +507,7 @@
 void TestFailureCaseURLConfiguredMultipleAdaptersWithTimeout(
     FetcherClient* client) {
   client->fetcher_.ConfigureAndPushBackAdapter(
-      "most_preferred", true, ERR_PAC_NOT_IN_DHCP, base::string16(),
+      "most_preferred", true, ERR_PAC_NOT_IN_DHCP, std::u16string(),
       base::TimeDelta::FromMilliseconds(1));
   // This will time out.
   client->fetcher_.ConfigureAndPushBackAdapter("second", false, ERR_IO_PENDING,
@@ -518,15 +516,15 @@
   // This is the first non-ERR_PAC_NOT_IN_DHCP error and as such
   // should be chosen.
   client->fetcher_.ConfigureAndPushBackAdapter(
-      "third", true, ERR_HTTP_RESPONSE_CODE_FAILURE, base::string16(),
+      "third", true, ERR_HTTP_RESPONSE_CODE_FAILURE, std::u16string(),
       base::TimeDelta::FromMilliseconds(1));
   client->fetcher_.ConfigureAndPushBackAdapter(
-      "fourth", true, ERR_NOT_IMPLEMENTED, base::string16(),
+      "fourth", true, ERR_NOT_IMPLEMENTED, std::u16string(),
       base::TimeDelta::FromMilliseconds(1));
   client->RunTest();
   client->RunMessageLoopUntilComplete();
   ASSERT_THAT(client->result_, IsError(ERR_HTTP_RESPONSE_CODE_FAILURE));
-  ASSERT_EQ(base::string16(), client->pac_text_);
+  ASSERT_EQ(std::u16string(), client->pac_text_);
 }
 
 TEST(DhcpPacFileFetcherWin,
@@ -539,7 +537,7 @@
 
 void TestFailureCaseNoURLConfigured(FetcherClient* client) {
   client->fetcher_.ConfigureAndPushBackAdapter(
-      "most_preferred", true, ERR_PAC_NOT_IN_DHCP, base::string16(),
+      "most_preferred", true, ERR_PAC_NOT_IN_DHCP, std::u16string(),
       base::TimeDelta::FromMilliseconds(1));
   // This will time out.
   client->fetcher_.ConfigureAndPushBackAdapter("second", false, ERR_IO_PENDING,
@@ -548,12 +546,12 @@
   // This is the first non-ERR_PAC_NOT_IN_DHCP error and as such
   // should be chosen.
   client->fetcher_.ConfigureAndPushBackAdapter(
-      "third", true, ERR_PAC_NOT_IN_DHCP, base::string16(),
+      "third", true, ERR_PAC_NOT_IN_DHCP, std::u16string(),
       base::TimeDelta::FromMilliseconds(1));
   client->RunTest();
   client->RunMessageLoopUntilComplete();
   ASSERT_THAT(client->result_, IsError(ERR_PAC_NOT_IN_DHCP));
-  ASSERT_EQ(base::string16(), client->pac_text_);
+  ASSERT_EQ(std::u16string(), client->pac_text_);
 }
 
 TEST(DhcpPacFileFetcherWin, FailureCaseNoURLConfigured) {
@@ -567,7 +565,7 @@
   client->RunTest();
   client->RunMessageLoopUntilComplete();
   ASSERT_THAT(client->result_, IsError(ERR_PAC_NOT_IN_DHCP));
-  ASSERT_EQ(base::string16(), client->pac_text_);
+  ASSERT_EQ(std::u16string(), client->pac_text_);
   ASSERT_EQ(0, client->fetcher_.num_fetchers_created_);
 }
 
@@ -584,7 +582,7 @@
   // time.  Verify that we complete quickly and do not wait for the slow
   // adapters, i.e. we finish before timeout.
   client->fetcher_.ConfigureAndPushBackAdapter(
-      "1", true, ERR_PAC_NOT_IN_DHCP, base::string16(),
+      "1", true, ERR_PAC_NOT_IN_DHCP, std::u16string(),
       base::TimeDelta::FromMilliseconds(1));
   client->fetcher_.ConfigureAndPushBackAdapter(
       "2", true, OK, u"bingo", base::TimeDelta::FromMilliseconds(1));
diff --git a/net/proxy_resolution/win/proxy_resolver_winhttp.cc b/net/proxy_resolution/win/proxy_resolver_winhttp.cc
index 87da260b..0366023 100644
--- a/net/proxy_resolution/win/proxy_resolver_winhttp.cc
+++ b/net/proxy_resolution/win/proxy_resolver_winhttp.cc
@@ -120,7 +120,7 @@
   WINHTTP_AUTOPROXY_OPTIONS options = {0};
   options.fAutoLogonIfChallenged = FALSE;
   options.dwFlags = WINHTTP_AUTOPROXY_CONFIG_URL;
-  base::string16 pac_url16 = base::ASCIIToUTF16(pac_url_.spec());
+  std::u16string pac_url16 = base::ASCIIToUTF16(pac_url_.spec());
   options.lpszAutoConfigUrl = base::as_wcstr(pac_url16);
 
   WINHTTP_PROXY_INFO info = {0};
diff --git a/net/quic/platform/impl/quic_flags_test.cc b/net/quic/platform/impl/quic_flags_test.cc
index caf45b2..770ad57 100644
--- a/net/quic/platform/impl/quic_flags_test.cc
+++ b/net/quic/platform/impl/quic_flags_test.cc
@@ -48,10 +48,10 @@
   }
 
   // Overload for platforms where base::CommandLine::StringType ==
-  // base::string16.
+  // std::u16string.
   static void FillCommandLineArgs(int argc,
                                   const char* const* argv,
-                                  std::vector<base::string16>* v) {
+                                  std::vector<std::u16string>* v) {
     for (int i = 0; i < argc; ++i) {
       v->push_back(base::UTF8ToUTF16(argv[i]));
     }
diff --git a/net/quic/quic_network_transaction_unittest.cc b/net/quic/quic_network_transaction_unittest.cc
index 4b28c46..bc26e63 100644
--- a/net/quic/quic_network_transaction_unittest.cc
+++ b/net/quic/quic_network_transaction_unittest.cc
@@ -8416,8 +8416,8 @@
 // Test the request-challenge-retry sequence for basic auth, over a QUIC
 // connection when setting up a QUIC proxy tunnel.
 TEST_P(QuicNetworkTransactionTest, QuicProxyAuth) {
-  const base::string16 kBaz(base::ASCIIToUTF16("baz"));
-  const base::string16 kFoo(base::ASCIIToUTF16("foo"));
+  const std::u16string kBaz(base::ASCIIToUTF16("baz"));
+  const std::u16string kFoo(base::ASCIIToUTF16("foo"));
 
   // On the second pass, the body read of the auth challenge is synchronous, so
   // IsConnectedAndIdle returns false.  The socket should still be drained and
diff --git a/net/quic/quic_proxy_client_socket_unittest.cc b/net/quic/quic_proxy_client_socket_unittest.cc
index 9c481e20..c783922 100644
--- a/net/quic/quic_proxy_client_socket_unittest.cc
+++ b/net/quic/quic_proxy_client_socket_unittest.cc
@@ -747,8 +747,8 @@
   Initialize();
 
   // Add auth to cache
-  const base::string16 kFoo(base::ASCIIToUTF16("foo"));
-  const base::string16 kBar(base::ASCIIToUTF16("bar"));
+  const std::u16string kFoo(base::ASCIIToUTF16("foo"));
+  const std::u16string kBar(base::ASCIIToUTF16("bar"));
   http_auth_cache_.Add(GURL(kProxyUrl), HttpAuth::AUTH_PROXY, "MyRealm1",
                        HttpAuth::AUTH_SCHEME_BASIC, NetworkIsolationKey(),
                        "Basic realm=MyRealm1", AuthCredentials(kFoo, kBar),
diff --git a/net/socket/ssl_connect_job_unittest.cc b/net/socket/ssl_connect_job_unittest.cc
index ac17b0c..e0a3417 100644
--- a/net/socket/ssl_connect_job_unittest.cc
+++ b/net/socket/ssl_connect_job_unittest.cc
@@ -140,8 +140,8 @@
   }
 
   void AddAuthToCache() {
-    const base::string16 kFoo(base::ASCIIToUTF16("foo"));
-    const base::string16 kBar(base::ASCIIToUTF16("bar"));
+    const std::u16string kFoo(base::ASCIIToUTF16("foo"));
+    const std::u16string kBar(base::ASCIIToUTF16("bar"));
     session_->http_auth_cache()->Add(
         GURL("http://proxy:443/"), HttpAuth::AUTH_PROXY, "MyRealm1",
         HttpAuth::AUTH_SCHEME_BASIC, NetworkIsolationKey(),
diff --git a/net/spdy/spdy_proxy_client_socket_unittest.cc b/net/spdy/spdy_proxy_client_socket_unittest.cc
index fdf4930..56ae7e2 100644
--- a/net/spdy/spdy_proxy_client_socket_unittest.cc
+++ b/net/spdy/spdy_proxy_client_socket_unittest.cc
@@ -157,8 +157,8 @@
   void AssertWriteLength(int len);
 
   void AddAuthToCache() {
-    const base::string16 kFoo(base::ASCIIToUTF16("foo"));
-    const base::string16 kBar(base::ASCIIToUTF16("bar"));
+    const std::u16string kFoo(base::ASCIIToUTF16("foo"));
+    const std::u16string kBar(base::ASCIIToUTF16("bar"));
     session_->http_auth_cache()->Add(
         GURL(kProxyUrl), HttpAuth::AUTH_PROXY, "MyRealm1",
         HttpAuth::AUTH_SCHEME_BASIC, NetworkIsolationKey(),
diff --git a/net/third_party/mozilla_security_manager/nsPKCS12Blob.cpp b/net/third_party/mozilla_security_manager/nsPKCS12Blob.cpp
index 16ae514..1484e450 100644
--- a/net/third_party/mozilla_security_manager/nsPKCS12Blob.cpp
+++ b/net/third_party/mozilla_security_manager/nsPKCS12Blob.cpp
@@ -145,7 +145,7 @@
 // Based on nsPKCS12Blob::ImportFromFileHelper.
 int nsPKCS12Blob_ImportHelper(const char* pkcs12_data,
                               size_t pkcs12_len,
-                              const base::string16& password,
+                              const std::u16string& password,
                               bool is_extractable,
                               bool try_zero_length_secitem,
                               PK11SlotInfo* slot,
@@ -283,7 +283,6 @@
   return import_result;
 }
 
-
 // Attempt to read the CKA_EXTRACTABLE attribute on a private key inside
 // a token. On success, store the attribute in |extractable| and return
 // SECSuccess.
@@ -341,7 +340,7 @@
 int nsPKCS12Blob_Import(PK11SlotInfo* slot,
                         const char* pkcs12_data,
                         size_t pkcs12_len,
-                        const base::string16& password,
+                        const std::u16string& password,
                         bool is_extractable,
                         net::ScopedCERTCertificateList* imported_certs) {
   int rv = nsPKCS12Blob_ImportHelper(pkcs12_data, pkcs12_len, password,
@@ -376,7 +375,7 @@
 //       set appropriate error codes
 int nsPKCS12Blob_Export(std::string* output,
                         const net::ScopedCERTCertificateList& certs,
-                        const base::string16& password) {
+                        const std::u16string& password) {
   int return_count = 0;
   SECStatus srv = SECSuccess;
   SEC_PKCS12ExportContext *ecx = NULL;
diff --git a/net/third_party/mozilla_security_manager/nsPKCS12Blob.h b/net/third_party/mozilla_security_manager/nsPKCS12Blob.h
index 352ccf6..6c572f72 100644
--- a/net/third_party/mozilla_security_manager/nsPKCS12Blob.h
+++ b/net/third_party/mozilla_security_manager/nsPKCS12Blob.h
@@ -62,7 +62,7 @@
 int nsPKCS12Blob_Import(PK11SlotInfo* slot,
                         const char* pkcs12_data,
                         size_t pkcs12_len,
-                        const base::string16& password,
+                        const std::u16string& password,
                         bool is_extractable,
                         net::ScopedCERTCertificateList* imported_certs);
 
@@ -71,7 +71,7 @@
 // TODO(mattm): provide better error return status?
 int nsPKCS12Blob_Export(std::string* output,
                         const net::ScopedCERTCertificateList& certs,
-                        const base::string16& password);
+                        const std::u16string& password);
 
 }  // namespace mozilla_security_manager
 
diff --git a/net/url_request/url_request.cc b/net/url_request/url_request.cc
index 0931be2..9e4626b4 100644
--- a/net/url_request/url_request.cc
+++ b/net/url_request/url_request.cc
@@ -263,10 +263,10 @@
     return LoadStateWithParam(LOAD_STATE_WAITING_FOR_DELEGATE,
                               use_blocked_by_as_load_param_
                                   ? base::UTF8ToUTF16(blocked_by_)
-                                  : base::string16());
+                                  : std::u16string());
   }
   return LoadStateWithParam(job_.get() ? job_->GetLoadState() : LOAD_STATE_IDLE,
-                            base::string16());
+                            std::u16string());
 }
 
 base::Value URLRequest::GetStateAsValue() const {
diff --git a/net/url_request/url_request_context_builder.cc b/net/url_request/url_request_context_builder.cc
index d6f1215..b92dcc4 100644
--- a/net/url_request/url_request_context_builder.cc
+++ b/net/url_request/url_request_context_builder.cc
@@ -104,7 +104,7 @@
 
   void OnURLRequestDestroyed(URLRequest* request) override {}
 
-  void OnPACScriptError(int line_number, const base::string16& error) override {
+  void OnPACScriptError(int line_number, const std::u16string& error) override {
   }
 
   bool OnCanGetCookies(const URLRequest& request,
diff --git a/net/url_request/url_request_test_util.cc b/net/url_request/url_request_test_util.cc
index 6478f7e..2d7f355 100644
--- a/net/url_request/url_request_test_util.cc
+++ b/net/url_request/url_request_test_util.cc
@@ -599,8 +599,7 @@
 }
 
 void TestNetworkDelegate::OnPACScriptError(int line_number,
-                                           const base::string16& error) {
-}
+                                           const std::u16string& error) {}
 
 bool TestNetworkDelegate::OnCanGetCookies(const URLRequest& request,
                                           bool allowed_from_caller) {
diff --git a/net/url_request/url_request_test_util.h b/net/url_request/url_request_test_util.h
index 76d96379..b7efd52 100644
--- a/net/url_request/url_request_test_util.h
+++ b/net/url_request/url_request_test_util.h
@@ -362,7 +362,7 @@
   void OnResponseStarted(URLRequest* request, int net_error) override;
   void OnCompleted(URLRequest* request, bool started, int net_error) override;
   void OnURLRequestDestroyed(URLRequest* request) override;
-  void OnPACScriptError(int line_number, const base::string16& error) override;
+  void OnPACScriptError(int line_number, const std::u16string& error) override;
   bool OnCanGetCookies(const URLRequest& request,
                        bool allowed_from_caller) override;
   bool OnCanSetCookie(const URLRequest& request,
diff --git a/net/url_request/url_request_unittest.cc b/net/url_request/url_request_unittest.cc
index 6dfc872..6009bb5 100644
--- a/net/url_request/url_request_unittest.cc
+++ b/net/url_request/url_request_unittest.cc
@@ -186,9 +186,9 @@
 #include "net/http/transport_security_state_static_unittest_default.h"
 }
 
-const base::string16 kChrome(ASCIIToUTF16("chrome"));
-const base::string16 kSecret(ASCIIToUTF16("secret"));
-const base::string16 kUser(ASCIIToUTF16("user"));
+const std::u16string kChrome(ASCIIToUTF16("chrome"));
+const std::u16string kSecret(ASCIIToUTF16("secret"));
+const std::u16string kUser(ASCIIToUTF16("user"));
 
 const base::FilePath::CharType kTestFilePath[] =
     FILE_PATH_LITERAL("net/data/url_request_unittest");
@@ -4802,7 +4802,7 @@
     LoadStateWithParam load_state = url_request_->GetLoadState();
     EXPECT_EQ(expected_third_load_state_, load_state.state);
     if (expected_second_load_state_ == LOAD_STATE_WAITING_FOR_DELEGATE)
-      EXPECT_EQ(base::string16(), load_state.param);
+      EXPECT_EQ(std::u16string(), load_state.param);
     std::move(callback_).Run();
   }
 
@@ -4972,7 +4972,7 @@
         &request_delegate, TRAFFIC_ANNOTATION_FOR_TESTS));
     LoadStateWithParam load_state = r->GetLoadState();
     EXPECT_EQ(LOAD_STATE_IDLE, load_state.state);
-    EXPECT_EQ(base::string16(), load_state.param);
+    EXPECT_EQ(std::u16string(), load_state.param);
 
     AsyncDelegateLogger::Run(
         r.get(), LOAD_STATE_WAITING_FOR_DELEGATE,
@@ -5013,7 +5013,7 @@
         &request_delegate, TRAFFIC_ANNOTATION_FOR_TESTS));
     LoadStateWithParam load_state = r->GetLoadState();
     EXPECT_EQ(LOAD_STATE_IDLE, load_state.state);
-    EXPECT_EQ(base::string16(), load_state.param);
+    EXPECT_EQ(std::u16string(), load_state.param);
 
     r->Start();
     request_delegate.RunUntilComplete();
@@ -5067,7 +5067,7 @@
         DEFAULT_PRIORITY, &request_delegate, TRAFFIC_ANNOTATION_FOR_TESTS));
     LoadStateWithParam load_state = r->GetLoadState();
     EXPECT_EQ(LOAD_STATE_IDLE, load_state.state);
-    EXPECT_EQ(base::string16(), load_state.param);
+    EXPECT_EQ(std::u16string(), load_state.param);
 
     r->Start();
     request_delegate.RunUntilComplete();
diff --git a/pdf/document_attachment_info.h b/pdf/document_attachment_info.h
index ff26335..9a4f2b0 100644
--- a/pdf/document_attachment_info.h
+++ b/pdf/document_attachment_info.h
@@ -19,18 +19,18 @@
   ~DocumentAttachmentInfo();
 
   // The attachment's name.
-  base::string16 name;
+  std::u16string name;
 
   // The attachment's size in bytes.
   uint32_t size_bytes = 0;
 
   // The creation date of the attachment. It stores the arbitrary string saved
   // in field "CreationDate".
-  base::string16 creation_date;
+  std::u16string creation_date;
 
   // Last modified date of the attachment. It stores the arbitrary string saved
   // in field "ModDate".
-  base::string16 modified_date;
+  std::u16string modified_date;
 
   // The flag that indicates whether the attachment can be retrieved
   // successfully.
diff --git a/pdf/out_of_process_instance.cc b/pdf/out_of_process_instance.cc
index c1171fe..5935047 100644
--- a/pdf/out_of_process_instance.cc
+++ b/pdf/out_of_process_instance.cc
@@ -504,7 +504,7 @@
 }
 
 // Converts |version| to a formatted string.
-base::string16 GetFormattedVersion(PdfVersion version) {
+std::u16string GetFormattedVersion(PdfVersion version) {
   double value = 0;
   switch (version) {
     case PdfVersion::k1_0:
@@ -536,7 +536,7 @@
       break;
     case PdfVersion::kUnknown:
     case PdfVersion::k1_8:  // Not an actual version
-      return base::string16();
+      return std::u16string();
   }
   // The default case is excluded from the above switch statement to ensure that
   // all supported versions are determinantly handled.
@@ -1608,7 +1608,7 @@
   const DocumentMetadata& document_metadata = engine()->GetDocumentMetadata();
   pp::VarDictionary metadata_data;
 
-  base::string16 version = GetFormattedVersion(document_metadata.version);
+  std::u16string version = GetFormattedVersion(document_metadata.version);
   if (!version.empty())
     metadata_data.Set(pp::Var(kJSVersion), pp::Var(base::UTF16ToUTF8(version)));
 
diff --git a/pdf/pdfium/findtext_unittest.cc b/pdf/pdfium/findtext_unittest.cc
index 6b59ef2..acca90d 100644
--- a/pdf/pdfium/findtext_unittest.cc
+++ b/pdf/pdfium/findtext_unittest.cc
@@ -31,15 +31,15 @@
                                                const char16_t* term,
                                                bool case_sensitive) override {
     EXPECT_TRUE(case_sensitive);
-    base::string16 haystack = base::string16(string);
-    base::string16 needle = base::string16(term);
+    std::u16string haystack = std::u16string(string);
+    std::u16string needle = std::u16string(term);
 
     std::vector<SearchStringResult> results;
 
     size_t pos = 0;
     while (1) {
       pos = haystack.find(needle, pos);
-      if (pos == base::string16::npos)
+      if (pos == std::u16string::npos)
         break;
 
       SearchStringResult result;
@@ -145,7 +145,7 @@
   }
 
   // don't, using right apostrophe instead of a single quotation mark
-  base::string16 term = {'d', 'o', 'n', 0x2019, 't'};
+  std::u16string term = {'d', 'o', 'n', 0x2019, 't'};
   engine->StartFind(base::UTF16ToUTF8(term), /*case_sensitive=*/true);
 }
 
diff --git a/pdf/pdfium/pdfium_api_string_buffer_adapter.cc b/pdf/pdfium/pdfium_api_string_buffer_adapter.cc
index 0eb8a43..35da69a 100644
--- a/pdf/pdfium/pdfium_api_string_buffer_adapter.cc
+++ b/pdf/pdfium/pdfium_api_string_buffer_adapter.cc
@@ -52,7 +52,7 @@
 }
 
 PDFiumAPIStringBufferSizeInBytesAdapter::
-    PDFiumAPIStringBufferSizeInBytesAdapter(base::string16* str,
+    PDFiumAPIStringBufferSizeInBytesAdapter(std::u16string* str,
                                             size_t expected_size,
                                             bool check_expected_size)
     : adapter_(str, expected_size / sizeof(char16_t), check_expected_size) {
@@ -73,7 +73,7 @@
 
 // explicit instantiations
 template class PDFiumAPIStringBufferAdapter<std::string>;
-template class PDFiumAPIStringBufferAdapter<base::string16>;
+template class PDFiumAPIStringBufferAdapter<std::u16string>;
 
 }  // namespace internal
 
diff --git a/pdf/pdfium/pdfium_api_string_buffer_adapter.h b/pdf/pdfium/pdfium_api_string_buffer_adapter.h
index e5e3ff5..8205606 100644
--- a/pdf/pdfium/pdfium_api_string_buffer_adapter.h
+++ b/pdf/pdfium/pdfium_api_string_buffer_adapter.h
@@ -75,7 +75,7 @@
   // character in bytes.
   // |check_expected_size| whether to check the actual number of bytes
   // written into |str| against |expected_size| when calling Close().
-  PDFiumAPIStringBufferSizeInBytesAdapter(base::string16* str,
+  PDFiumAPIStringBufferSizeInBytesAdapter(std::u16string* str,
                                           size_t expected_size,
                                           bool check_expected_size);
   ~PDFiumAPIStringBufferSizeInBytesAdapter();
@@ -97,7 +97,7 @@
   }
 
  private:
-  PDFiumAPIStringBufferAdapter<base::string16> adapter_;
+  PDFiumAPIStringBufferAdapter<std::u16string> adapter_;
 };
 
 template <class AdapterType,
@@ -136,23 +136,23 @@
 // Helper function to call PDFium APIs where the output buffer is expected to
 // hold UTF-16 data, and the buffer length is specified in bytes.
 template <typename BufferType>
-base::string16 CallPDFiumWideStringBufferApi(
+std::u16string CallPDFiumWideStringBufferApi(
     base::RepeatingCallback<unsigned long(BufferType*, unsigned long)> api,
     bool check_expected_size) {
   using adapter_type = internal::PDFiumAPIStringBufferSizeInBytesAdapter;
-  return internal::CallPDFiumStringBufferApi<adapter_type, base::string16>(
+  return internal::CallPDFiumStringBufferApi<adapter_type, std::u16string>(
       api, check_expected_size);
 }
 
 // Variant of CallPDFiumWideStringBufferApi() that distinguishes between API
 // call failures and empty string return values.
 template <typename BufferType>
-base::Optional<base::string16> CallPDFiumWideStringBufferApiAndReturnOptional(
+base::Optional<std::u16string> CallPDFiumWideStringBufferApiAndReturnOptional(
     base::RepeatingCallback<unsigned long(BufferType*, unsigned long)> api,
     bool check_expected_size) {
   using adapter_type = internal::PDFiumAPIStringBufferSizeInBytesAdapter;
   return internal::CallPDFiumStringBufferApiAndReturnOptional<adapter_type,
-                                                              base::string16>(
+                                                              std::u16string>(
       api, check_expected_size);
 }
 
diff --git a/pdf/pdfium/pdfium_engine.cc b/pdf/pdfium/pdfium_engine.cc
index 69875bd7..753fc5e 100644
--- a/pdf/pdfium/pdfium_engine.cc
+++ b/pdf/pdfium/pdfium_engine.cc
@@ -145,7 +145,7 @@
 // as Adobe Reader. When a hyphen is encountered, the next non-CR/LF whitespace
 // becomes CR+LF and the hyphen is erased. If there is no whitespace between
 // two hyphens, the latter hyphen is erased and ignored.
-void FormatStringWithHyphens(base::string16* text) {
+void FormatStringWithHyphens(std::u16string* text) {
   // First pass marks all the hyphen positions.
   struct HyphenPosition {
     HyphenPosition() : position(0), next_whitespace_position(0) {}
@@ -196,7 +196,7 @@
 }
 
 // Replace CR/LF with just LF on POSIX.
-void FormatStringForOS(base::string16* text) {
+void FormatStringForOS(std::u16string* text) {
 #if defined(OS_POSIX)
   static constexpr char16_t kCr[] = {L'\r', L'\0'};
   static constexpr char16_t kBlank[] = {L'\0'};
@@ -377,14 +377,14 @@
   }
 }
 
-base::string16 GetAttachmentAttribute(FPDF_ATTACHMENT attachment,
+std::u16string GetAttachmentAttribute(FPDF_ATTACHMENT attachment,
                                       FPDF_BYTESTRING field) {
   return CallPDFiumWideStringBufferApi(
       base::BindRepeating(&FPDFAttachment_GetStringValue, attachment, field),
       /*check_expected_size=*/true);
 }
 
-base::string16 GetAttachmentName(FPDF_ATTACHMENT attachment) {
+std::u16string GetAttachmentName(FPDF_ATTACHMENT attachment) {
   return CallPDFiumWideStringBufferApi(
       base::BindRepeating(&FPDFAttachment_GetName, attachment),
       /*check_expected_size=*/true);
@@ -1130,7 +1130,7 @@
 
 void PDFiumEngine::SetFormSelectedText(FPDF_FORMHANDLE form_handle,
                                        FPDF_PAGE page) {
-  base::string16 selected_form_text16 = CallPDFiumWideStringBufferApi(
+  std::u16string selected_form_text16 = CallPDFiumWideStringBufferApi(
       base::BindRepeating(&FORM_GetSelectedText, form_handle, page),
       /*check_expected_size=*/false);
 
@@ -1718,7 +1718,7 @@
   if (last_focused_page_ == -1)
     return false;
 
-  base::string16 str = base::UTF8ToUTF16(event.GetKeyChar());
+  std::u16string str = base::UTF8ToUTF16(event.GetKeyChar());
   bool rv = !!FORM_OnChar(form(), pages_[last_focused_page_]->GetPage(), str[0],
                           event.GetModifiers());
 
@@ -1770,7 +1770,7 @@
   int current_page = next_page_to_search_;
 
   if (pages_[current_page]->available()) {
-    base::string16 str = base::UTF8ToUTF16(text);
+    std::u16string str = base::UTF8ToUTF16(text);
     // Don't use PDFium to search for now, since it doesn't support unicode
     // text. Leave the code for now to avoid bit-rot, in case it's fixed later.
     // The extra parens suppress a -Wunreachable-code warning.
@@ -1825,7 +1825,7 @@
   }
 }
 
-void PDFiumEngine::SearchUsingPDFium(const base::string16& term,
+void PDFiumEngine::SearchUsingPDFium(const std::u16string& term,
                                      bool case_sensitive,
                                      bool first_search,
                                      int character_to_start_searching_from,
@@ -1857,7 +1857,7 @@
   FPDFText_FindClose(find);
 }
 
-void PDFiumEngine::SearchUsingICU(const base::string16& term,
+void PDFiumEngine::SearchUsingICU(const std::u16string& term,
                                   bool case_sensitive,
                                   bool first_search,
                                   int character_to_start_searching_from,
@@ -1866,7 +1866,7 @@
 
   // Various types of quotions marks need to be converted to the simple ASCII
   // version for searching to get better matching.
-  base::string16 adjusted_term = term;
+  std::u16string adjusted_term = term;
   for (char16_t& c : adjusted_term)
     c = SimplifyForSearch(c);
 
@@ -1881,8 +1881,8 @@
   if (text_length <= 0)
     return;
 
-  base::string16 page_text;
-  PDFiumAPIStringBufferAdapter<base::string16> api_string_adapter(
+  std::u16string page_text;
+  PDFiumAPIStringBufferAdapter<std::u16string> api_string_adapter(
       &page_text, text_length, false);
   unsigned short* data =
       reinterpret_cast<unsigned short*>(api_string_adapter.GetData());
@@ -1891,7 +1891,7 @@
                        character_to_start_searching_from, text_length, data);
   api_string_adapter.Close(written);
 
-  base::string16 adjusted_page_text;
+  std::u16string adjusted_page_text;
   adjusted_page_text.reserve(page_text.size());
   // Values in |removed_indices| are in the adjusted text index space and
   // indicate a character was removed from the page text before the given
@@ -2177,10 +2177,10 @@
   if (!HasPermission(PDFEngine::PERMISSION_COPY))
     return std::string();
 
-  base::string16 result;
+  std::u16string result;
   for (size_t i = 0; i < selection_.size(); ++i) {
     static constexpr char16_t kNewLineChar = L'\n';
-    base::string16 current_selection_text = selection_[i].GetText();
+    std::u16string current_selection_text = selection_[i].GetText();
     if (i != 0) {
       if (selection_[i - 1].page_index() > selection_[i].page_index())
         std::swap(current_selection_text, result);
@@ -2210,7 +2210,7 @@
 void PDFiumEngine::ReplaceSelection(const std::string& text) {
   DCHECK(CanEditText());
   if (last_focused_page_ != -1) {
-    base::string16 text_wide = base::UTF8ToUTF16(text);
+    std::u16string text_wide = base::UTF8ToUTF16(text);
     FPDF_WIDESTRING text_pdf_wide =
         reinterpret_cast<FPDF_WIDESTRING>(text_wide.c_str());
 
@@ -2364,7 +2364,7 @@
 base::Value PDFiumEngine::TraverseBookmarks(FPDF_BOOKMARK bookmark,
                                             unsigned int depth) {
   base::Value dict(base::Value::Type::DICTIONARY);
-  base::string16 title = CallPDFiumWideStringBufferApi(
+  std::u16string title = CallPDFiumWideStringBufferApi(
       base::BindRepeating(&FPDFBookmark_GetTitle, bookmark),
       /*check_expected_size=*/true);
   dict.SetStringKey("title", title);
@@ -2487,7 +2487,7 @@
   FPDF_DEST dest = FPDF_GetNamedDestByName(doc(), destination.c_str());
   if (!dest) {
     // Look for a bookmark with the same name.
-    base::string16 destination_wide = base::UTF8ToUTF16(destination);
+    std::u16string destination_wide = base::UTF8ToUTF16(destination);
     FPDF_WIDESTRING destination_pdf_wide =
         reinterpret_cast<FPDF_WIDESTRING>(destination_wide.c_str());
     FPDF_BOOKMARK bookmark = FPDFBookmark_Find(doc(), destination_pdf_wide);
@@ -4055,7 +4055,7 @@
     FPDF_BYTESTRING field) const {
   DCHECK(doc());
 
-  base::string16 metadata = CallPDFiumWideStringBufferApi(
+  std::u16string metadata = CallPDFiumWideStringBufferApi(
       base::BindRepeating(&FPDF_GetMetaText, doc(), field),
       /*check_expected_size=*/false);
 
diff --git a/pdf/pdfium/pdfium_engine.h b/pdf/pdfium/pdfium_engine.h
index 3f3cf14..f72980d 100644
--- a/pdf/pdfium/pdfium_engine.h
+++ b/pdf/pdfium/pdfium_engine.h
@@ -383,14 +383,14 @@
 
   // Search a page using PDFium's methods.  Doesn't work with unicode.  This
   // function is just kept arount in case PDFium code is fixed.
-  void SearchUsingPDFium(const base::string16& term,
+  void SearchUsingPDFium(const std::u16string& term,
                          bool case_sensitive,
                          bool first_search,
                          int character_to_start_searching_from,
                          int current_page);
 
   // Search a page ourself using ICU.
-  void SearchUsingICU(const base::string16& term,
+  void SearchUsingICU(const std::u16string& term,
                       bool case_sensitive,
                       bool first_search,
                       int character_to_start_searching_from,
diff --git a/pdf/pdfium/pdfium_engine_exports.cc b/pdf/pdfium/pdfium_engine_exports.cc
index 4234d87..780361b 100644
--- a/pdf/pdfium/pdfium_engine_exports.cc
+++ b/pdf/pdfium/pdfium_engine_exports.cc
@@ -153,7 +153,7 @@
   if (children_count <= 0)
     return base::Value(base::Value::Type::NONE);
 
-  base::Optional<base::string16> opt_type =
+  base::Optional<std::u16string> opt_type =
       CallPDFiumWideStringBufferApiAndReturnOptional(
           base::BindRepeating(FPDF_StructElement_GetType, struct_elem), true);
   if (!opt_type)
@@ -162,14 +162,14 @@
   base::Value result(base::Value::Type::DICTIONARY);
   result.SetStringKey("type", *opt_type);
 
-  base::Optional<base::string16> opt_alt =
+  base::Optional<std::u16string> opt_alt =
       CallPDFiumWideStringBufferApiAndReturnOptional(
           base::BindRepeating(FPDF_StructElement_GetAltText, struct_elem),
           true);
   if (opt_alt)
     result.SetStringKey("alt", *opt_alt);
 
-  base::Optional<base::string16> opt_lang =
+  base::Optional<std::u16string> opt_lang =
       CallPDFiumWideStringBufferApiAndReturnOptional(
           base::BindRepeating(FPDF_StructElement_GetLang, struct_elem), true);
   if (opt_lang)
diff --git a/pdf/pdfium/pdfium_form_filler.cc b/pdf/pdfium/pdfium_form_filler.cc
index 171d842..205cfb2 100644
--- a/pdf/pdfium/pdfium_form_filler.cc
+++ b/pdf/pdfium/pdfium_form_filler.cc
@@ -610,7 +610,7 @@
 
   PDFiumEngine* engine = GetEngine(param);
   std::string rv = engine->client_->Prompt(question_str, default_str);
-  base::string16 rv_16 = base::UTF8ToUTF16(rv);
+  std::u16string rv_16 = base::UTF8ToUTF16(rv);
   int rv_bytes = rv_16.size() * sizeof(char16_t);
   if (response) {
     int bytes_to_copy = rv_bytes < length ? rv_bytes : length;
diff --git a/pdf/pdfium/pdfium_page.cc b/pdf/pdfium/pdfium_page.cc
index 1f66fca..48dd14c0 100644
--- a/pdf/pdfium/pdfium_page.cc
+++ b/pdf/pdfium/pdfium_page.cc
@@ -1008,10 +1008,10 @@
   for (int i = 0; i < count; ++i) {
     // WARNING: FPDFLink_GetURL() is not compatible with
     // CallPDFiumWideStringBufferApi().
-    base::string16 url;
+    std::u16string url;
     int url_length = FPDFLink_GetURL(links.get(), i, nullptr, 0);
     if (url_length > 0) {
-      PDFiumAPIStringBufferAdapter<base::string16> api_string_adapter(
+      PDFiumAPIStringBufferAdapter<std::u16string> api_string_adapter(
           &url, url_length, true);
       unsigned short* data =
           reinterpret_cast<unsigned short*>(api_string_adapter.GetData());
diff --git a/pdf/pdfium/pdfium_range.cc b/pdf/pdfium/pdfium_range.cc
index cbb5a0f..eda743c2 100644
--- a/pdf/pdfium/pdfium_range.cc
+++ b/pdf/pdfium/pdfium_range.cc
@@ -94,16 +94,16 @@
   return cached_screen_rects_;
 }
 
-base::string16 PDFiumRange::GetText() const {
+std::u16string PDFiumRange::GetText() const {
   int index = char_index_;
   int count = char_count_;
-  base::string16 rv;
+  std::u16string rv;
   if (count == 0)
     return rv;
 
   AdjustForBackwardsRange(&index, &count);
   if (count > 0) {
-    PDFiumAPIStringBufferAdapter<base::string16> api_string_adapter(&rv, count,
+    PDFiumAPIStringBufferAdapter<std::u16string> api_string_adapter(&rv, count,
                                                                     false);
     unsigned short* data =
         reinterpret_cast<unsigned short*>(api_string_adapter.GetData());
diff --git a/pdf/pdfium/pdfium_range.h b/pdf/pdfium/pdfium_range.h
index d4fbccb..b45e0ec 100644
--- a/pdf/pdfium/pdfium_range.h
+++ b/pdf/pdfium/pdfium_range.h
@@ -46,7 +46,7 @@
       PageOrientation orientation) const;
 
   // Gets the string of characters in this range.
-  base::string16 GetText() const;
+  std::u16string GetText() const;
 
  private:
   PDFiumPage* page_;
diff --git a/ppapi/proxy/pdf_resource_unittest.cc b/ppapi/proxy/pdf_resource_unittest.cc
index e1fc80b..f70149e8 100644
--- a/ppapi/proxy/pdf_resource_unittest.cc
+++ b/ppapi/proxy/pdf_resource_unittest.cc
@@ -34,8 +34,8 @@
       Connection(&sink(), &sink(), 0), pp_instance());
   pdf_resource->SetLocaleForTest("en-US@collation=search");
 
-  base::string16 input;
-  base::string16 term;
+  std::u16string input;
+  std::u16string term;
   base::UTF8ToUTF16("abcdefabcdef", 12, &input);
   base::UTF8ToUTF16("bc", 2, &term);
 
diff --git a/ppapi/proxy/ppapi_messages.h b/ppapi/proxy/ppapi_messages.h
index 4335858..7f65b61 100644
--- a/ppapi/proxy/ppapi_messages.h
+++ b/ppapi/proxy/ppapi_messages.h
@@ -2120,7 +2120,7 @@
 
 // Called by the plugin when its selection changes.
 IPC_MESSAGE_CONTROL1(PpapiHostMsg_PDF_SetSelectedText,
-                     base::string16 /* selected_text */)
+                     std::u16string /* selected_text */)
 
 // Called by the plugin to set the link under the cursor.
 IPC_MESSAGE_CONTROL1(PpapiHostMsg_PDF_SetLinkUnderCursor,
diff --git a/ppapi/shared_impl/ppapi_preferences.h b/ppapi/shared_impl/ppapi_preferences.h
index 261216d..7709ac5 100644
--- a/ppapi/shared_impl/ppapi_preferences.h
+++ b/ppapi/shared_impl/ppapi_preferences.h
@@ -15,7 +15,7 @@
 
 struct PPAPI_SHARED_EXPORT Preferences {
  public:
-  typedef std::map<std::string, base::string16> ScriptFontFamilyMap;
+  typedef std::map<std::string, std::u16string> ScriptFontFamilyMap;
 
   Preferences();
   ~Preferences();
diff --git a/ppapi/shared_impl/private/ppb_char_set_shared.cc b/ppapi/shared_impl/private/ppb_char_set_shared.cc
index e203c6f9..ec96feb 100644
--- a/ppapi/shared_impl/private/ppb_char_set_shared.cc
+++ b/ppapi/shared_impl/private/ppb_char_set_shared.cc
@@ -222,7 +222,7 @@
 
   // We can convert this call to the implementation in base to avoid code
   // duplication, although this does introduce an extra copy of the data.
-  base::string16 output;
+  std::u16string output;
   if (!base::CodepageToUTF16(std::string(input, input_len), input_char_set,
                              base_on_error, &output)) {
     *output_utf16_length = 0;
diff --git a/printing/print_dialog_gtk_interface.h b/printing/print_dialog_gtk_interface.h
index fd6a859..62de28e 100644
--- a/printing/print_dialog_gtk_interface.h
+++ b/printing/print_dialog_gtk_interface.h
@@ -40,7 +40,7 @@
   // Called from the print worker thread. Once called, the
   // PrintDialogGtkInterface instance should not be reused.
   virtual void PrintDocument(const MetafilePlayer& metafile,
-                             const base::string16& document_name) = 0;
+                             const std::u16string& document_name) = 0;
 
   // Same as AddRef/Release, but with different names since
   // PrintDialogGtkInterface does not inherit from RefCounted.
diff --git a/printing/print_settings.h b/printing/print_settings.h
index c3277c6..bdebbdf6 100644
--- a/printing/print_settings.h
+++ b/printing/print_settings.h
@@ -125,10 +125,10 @@
     return page_setup_device_units_;
   }
 
-  void set_device_name(const base::string16& device_name) {
+  void set_device_name(const std::u16string& device_name) {
     device_name_ = device_name;
   }
-  const base::string16& device_name() const { return device_name_; }
+  const std::u16string& device_name() const { return device_name_; }
 
   void set_dpi(int dpi) { dpi_ = gfx::Size(dpi, dpi); }
   void set_dpi_xy(int dpi_horizontal, int dpi_vertical) {
@@ -177,11 +177,11 @@
   }
   bool display_header_footer() const { return display_header_footer_; }
 
-  void set_title(const base::string16& title) { title_ = title; }
-  const base::string16& title() const { return title_; }
+  void set_title(const std::u16string& title) { title_ = title; }
+  const std::u16string& title() const { return title_; }
 
-  void set_url(const base::string16& url) { url_ = url; }
-  const base::string16& url() const { return url_; }
+  void set_url(const std::u16string& url) { url_ = url; }
+  const std::u16string& url() const { return url_; }
 
   void set_collate(bool collate) { collate_ = collate; }
   bool collate() const { return collate_; }
@@ -259,8 +259,8 @@
   mojom::MarginType margin_type_;
 
   // Strings to be printed as headers and footers if requested by the user.
-  base::string16 title_;
-  base::string16 url_;
+  std::u16string title_;
+  std::u16string url_;
 
   // True if the user wants headers and footers to be displayed.
   bool display_header_footer_;
@@ -281,7 +281,7 @@
   mojom::DuplexMode duplex_mode_;
 
   // Printer device name as opened by the OS.
-  base::string16 device_name_;
+  std::u16string device_name_;
 
   // Media requested by the user.
   RequestedMedia requested_media_;
diff --git a/printing/printed_document.cc b/printing/printed_document.cc
index 4ee13d0..56157b85 100644
--- a/printing/printed_document.cc
+++ b/printing/printed_document.cc
@@ -45,14 +45,14 @@
     LAZY_INSTANCE_INITIALIZER;
 
 #if defined(OS_WIN)
-void DebugDumpPageTask(const base::string16& doc_name,
+void DebugDumpPageTask(const std::u16string& doc_name,
                        const PrintedPage* page) {
   DCHECK(PrintedDocument::HasDebugDumpPath());
 
   static constexpr base::FilePath::CharType kExtension[] =
       FILE_PATH_LITERAL(".emf");
 
-  base::string16 name = doc_name;
+  std::u16string name = doc_name;
   name += base::ASCIIToUTF16(base::StringPrintf("_%04d", page->page_number()));
   base::FilePath path = PrintedDocument::CreateDebugDumpPath(name, kExtension);
   base::File file(path,
@@ -61,14 +61,14 @@
 }
 #endif  // defined(OS_WIN)
 
-void DebugDumpTask(const base::string16& doc_name,
+void DebugDumpTask(const std::u16string& doc_name,
                    const MetafilePlayer* metafile) {
   DCHECK(PrintedDocument::HasDebugDumpPath());
 
   static constexpr base::FilePath::CharType kExtension[] =
       FILE_PATH_LITERAL(".pdf");
 
-  base::string16 name = doc_name;
+  std::u16string name = doc_name;
   base::FilePath path = PrintedDocument::CreateDebugDumpPath(name, kExtension);
   base::File file(path,
                   base::File::FLAG_CREATE_ALWAYS | base::File::FLAG_WRITE);
@@ -79,7 +79,7 @@
 #endif  // defined(OS_ANDROID)
 }
 
-void DebugDumpDataTask(const base::string16& doc_name,
+void DebugDumpDataTask(const std::u16string& doc_name,
                        const base::FilePath::StringType& extension,
                        const base::RefCountedMemory* data) {
   base::FilePath path =
@@ -89,7 +89,7 @@
   base::WriteFile(path, *data);
 }
 
-void DebugDumpSettings(const base::string16& doc_name,
+void DebugDumpSettings(const std::u16string& doc_name,
                        const PrintSettings& settings) {
   base::DictionaryValue job_settings;
   PrintSettingsToJobSettingsDebug(settings, &job_settings);
@@ -107,7 +107,7 @@
 }  // namespace
 
 PrintedDocument::PrintedDocument(std::unique_ptr<PrintSettings> settings,
-                                 const base::string16& name,
+                                 const std::u16string& name,
                                  int cookie)
     : immutable_(std::move(settings), name, cookie) {
   // If there is a range, set the number of page
@@ -246,12 +246,12 @@
 
 // static
 base::FilePath PrintedDocument::CreateDebugDumpPath(
-    const base::string16& document_name,
+    const std::u16string& document_name,
     const base::FilePath::StringType& extension) {
   DCHECK(HasDebugDumpPath());
 
   // Create a filename.
-  base::string16 filename;
+  std::u16string filename;
   base::Time now(base::Time::Now());
   filename = base::TimeFormatShortDateAndTime(now);
   filename += base::ASCIIToUTF16("_");
@@ -302,7 +302,7 @@
 PrintedDocument::Mutable::~Mutable() = default;
 
 PrintedDocument::Immutable::Immutable(std::unique_ptr<PrintSettings> settings,
-                                      const base::string16& name,
+                                      const std::u16string& name,
                                       int cookie)
     : settings_(std::move(settings)), name_(name), cookie_(cookie) {}
 
diff --git a/printing/printed_document.h b/printing/printed_document.h
index 6f0ff69..be87960 100644
--- a/printing/printed_document.h
+++ b/printing/printed_document.h
@@ -39,7 +39,7 @@
   // The cookie shall be unique and has a specific relationship with its
   // originating source and settings.
   PrintedDocument(std::unique_ptr<PrintSettings> settings,
-                  const base::string16& name,
+                  const std::u16string& name,
                   int cookie);
   PrintedDocument(const PrintedDocument&) = delete;
   PrintedDocument& operator=(const PrintedDocument&) = delete;
@@ -109,7 +109,7 @@
 
   // Getters. All these items are immutable hence thread-safe.
   const PrintSettings& settings() const { return *immutable_.settings_; }
-  const base::string16& name() const { return immutable_.name_; }
+  const std::u16string& name() const { return immutable_.name_; }
   int cookie() const { return immutable_.cookie_; }
 
   // Sets a path where to dump printing output files for debugging. If never
@@ -123,7 +123,7 @@
   // |extension| should include the leading dot. e.g. ".pdf"
   // Should only be called when debug dumps are enabled.
   static base::FilePath CreateDebugDumpPath(
-      const base::string16& document_name,
+      const std::u16string& document_name,
       const base::FilePath::StringType& extension);
 
 #if defined(OS_WIN)
@@ -180,7 +180,7 @@
   // construction.
   struct Immutable {
     Immutable(std::unique_ptr<PrintSettings> settings,
-              const base::string16& name,
+              const std::u16string& name,
               int cookie);
     ~Immutable();
 
@@ -188,7 +188,7 @@
     std::unique_ptr<PrintSettings> settings_;
 
     // Document name. Immutable.
-    base::string16 name_;
+    std::u16string name_;
 
     // Cookie to uniquely identify this document. It is used to make sure that a
     // PrintedPage is correctly belonging to the PrintedDocument. Since
diff --git a/printing/printing_context.h b/printing/printing_context.h
index 268e03d..de7861c6 100644
--- a/printing/printing_context.h
+++ b/printing/printing_context.h
@@ -99,7 +99,7 @@
   // like IPC message processing! Some printers have side-effects on this call
   // like virtual printers that ask the user for the path of the saved document;
   // for example a PDF printer.
-  virtual Result NewDocument(const base::string16& document_name) = 0;
+  virtual Result NewDocument(const std::u16string& document_name) = 0;
 
   // Starts a new page.
   virtual Result NewPage() = 0;
diff --git a/printing/printing_context_android.cc b/printing/printing_context_android.cc
index 00337c6..849335e3 100644
--- a/printing/printing_context_android.cc
+++ b/printing/printing_context_android.cc
@@ -210,7 +210,7 @@
 }
 
 PrintingContext::Result PrintingContextAndroid::NewDocument(
-    const base::string16& document_name) {
+    const std::u16string& document_name) {
   DCHECK(!in_print_job_);
   in_print_job_ = true;
 
diff --git a/printing/printing_context_android.h b/printing/printing_context_android.h
index 9670159..11d6c29 100644
--- a/printing/printing_context_android.h
+++ b/printing/printing_context_android.h
@@ -63,7 +63,7 @@
   Result UpdatePrinterSettings(bool external_preview,
                                bool show_system_dialog,
                                int page_count) override;
-  Result NewDocument(const base::string16& document_name) override;
+  Result NewDocument(const std::u16string& document_name) override;
   Result NewPage() override;
   Result PageDone() override;
   Result DocumentDone() override;
diff --git a/printing/printing_context_chromeos.cc b/printing/printing_context_chromeos.cc
index 7d8a1de0..cfc42c7 100644
--- a/printing/printing_context_chromeos.cc
+++ b/printing/printing_context_chromeos.cc
@@ -400,7 +400,7 @@
 }
 
 PrintingContext::Result PrintingContextChromeos::NewDocument(
-    const base::string16& document_name) {
+    const std::u16string& document_name) {
   DCHECK(!in_print_job_);
   in_print_job_ = true;
 
diff --git a/printing/printing_context_chromeos.h b/printing/printing_context_chromeos.h
index 9149898..26bc44ac7 100644
--- a/printing/printing_context_chromeos.h
+++ b/printing/printing_context_chromeos.h
@@ -37,7 +37,7 @@
   Result UpdatePrinterSettings(bool external_preview,
                                bool show_system_dialog,
                                int page_count) override;
-  Result NewDocument(const base::string16& document_name) override;
+  Result NewDocument(const std::u16string& document_name) override;
   Result NewPage() override;
   Result PageDone() override;
   Result DocumentDone() override;
diff --git a/printing/printing_context_chromeos_unittest.cc b/printing/printing_context_chromeos_unittest.cc
index b417972..f618ff2 100644
--- a/printing/printing_context_chromeos_unittest.cc
+++ b/printing/printing_context_chromeos_unittest.cc
@@ -191,7 +191,7 @@
 TEST_F(PrintingContextTest, SettingsToCupsOptions_SendUserInfo_Secure) {
   std::string uri = "ipps://test-uri";
   ipp_status_t status = ipp_status_t::IPP_STATUS_OK;
-  base::string16 document_name = base::ASCIIToUTF16(kDocumentName);
+  std::u16string document_name = base::ASCIIToUTF16(kDocumentName);
   SetDefaultSettings(true, uri);
   std::string create_job_document_name;
   std::string create_job_username;
@@ -215,7 +215,7 @@
 TEST_F(PrintingContextTest, SettingsToCupsOptions_SendUserInfo_Insecure) {
   std::string uri = "ipp://test-uri";
   ipp_status_t status = ipp_status_t::IPP_STATUS_OK;
-  base::string16 document_name = base::ASCIIToUTF16(kDocumentName);
+  std::u16string document_name = base::ASCIIToUTF16(kDocumentName);
   std::string default_username = "chronos";
   std::string default_document_name = "-";
   SetDefaultSettings(true, uri);
@@ -241,7 +241,7 @@
 TEST_F(PrintingContextTest, SettingsToCupsOptions_DoNotSendUserInfo) {
   std::string uri = "ipps://test-uri";
   ipp_status_t status = ipp_status_t::IPP_STATUS_OK;
-  base::string16 document_name = base::ASCIIToUTF16(kDocumentName);
+  std::u16string document_name = base::ASCIIToUTF16(kDocumentName);
   std::string blank;
   SetDefaultSettings(false, uri);
   std::string create_job_document_name;
diff --git a/printing/printing_context_linux.cc b/printing/printing_context_linux.cc
index c6c1366..7d1ae78 100644
--- a/printing/printing_context_linux.cc
+++ b/printing/printing_context_linux.cc
@@ -138,7 +138,7 @@
 }
 
 PrintingContext::Result PrintingContextLinux::NewDocument(
-    const base::string16& document_name) {
+    const std::u16string& document_name) {
   DCHECK(!in_print_job_);
   in_print_job_ = true;
 
diff --git a/printing/printing_context_linux.h b/printing/printing_context_linux.h
index de2a29697..77b73ec 100644
--- a/printing/printing_context_linux.h
+++ b/printing/printing_context_linux.h
@@ -47,7 +47,7 @@
   Result UpdatePrinterSettings(bool external_preview,
                                bool show_system_dialog,
                                int page_count) override;
-  Result NewDocument(const base::string16& document_name) override;
+  Result NewDocument(const std::u16string& document_name) override;
   Result NewPage() override;
   Result PageDone() override;
   Result DocumentDone() override;
@@ -56,7 +56,7 @@
   printing::NativeDrawingContext context() const override;
 
  private:
-  base::string16 document_name_;
+  std::u16string document_name_;
   PrintDialogGtkInterface* print_dialog_;
 };
 
diff --git a/printing/printing_context_mac.h b/printing/printing_context_mac.h
index f63f7f26..00c78a7 100644
--- a/printing/printing_context_mac.h
+++ b/printing/printing_context_mac.h
@@ -34,7 +34,7 @@
   Result UpdatePrinterSettings(bool external_preview,
                                bool show_system_dialog,
                                int page_count) override;
-  Result NewDocument(const base::string16& document_name) override;
+  Result NewDocument(const std::u16string& document_name) override;
   Result NewPage() override;
   Result PageDone() override;
   Result DocumentDone() override;
diff --git a/printing/printing_context_mac.mm b/printing/printing_context_mac.mm
index aa950b5..ff9b3e08 100644
--- a/printing/printing_context_mac.mm
+++ b/printing/printing_context_mac.mm
@@ -441,7 +441,7 @@
 }
 
 PrintingContext::Result PrintingContextMac::NewDocument(
-    const base::string16& document_name) {
+    const std::u16string& document_name) {
   DCHECK(!in_print_job_);
 
   in_print_job_ = true;
diff --git a/printing/printing_context_no_system_dialog.cc b/printing/printing_context_no_system_dialog.cc
index 106314b..ab2094c 100644
--- a/printing/printing_context_no_system_dialog.cc
+++ b/printing/printing_context_no_system_dialog.cc
@@ -91,7 +91,7 @@
 }
 
 PrintingContext::Result PrintingContextNoSystemDialog::NewDocument(
-    const base::string16& document_name) {
+    const std::u16string& document_name) {
   DCHECK(!in_print_job_);
   in_print_job_ = true;
 
diff --git a/printing/printing_context_no_system_dialog.h b/printing/printing_context_no_system_dialog.h
index 0acc56b..6c61339 100644
--- a/printing/printing_context_no_system_dialog.h
+++ b/printing/printing_context_no_system_dialog.h
@@ -29,7 +29,7 @@
   Result UpdatePrinterSettings(bool external_preview,
                                bool show_system_dialog,
                                int page_count) override;
-  Result NewDocument(const base::string16& document_name) override;
+  Result NewDocument(const std::u16string& document_name) override;
   Result NewPage() override;
   Result PageDone() override;
   Result DocumentDone() override;
diff --git a/printing/printing_context_win.cc b/printing/printing_context_win.cc
index 8ed97f41..f6d936e0 100644
--- a/printing/printing_context_win.cc
+++ b/printing/printing_context_win.cc
@@ -271,7 +271,7 @@
 }
 
 PrintingContext::Result PrintingContextWin::NewDocument(
-    const base::string16& document_name) {
+    const std::u16string& document_name) {
   DCHECK(!in_print_job_);
   if (!context_)
     return OnError();
diff --git a/printing/printing_context_win.h b/printing/printing_context_win.h
index 245b0320..1bc1da9 100644
--- a/printing/printing_context_win.h
+++ b/printing/printing_context_win.h
@@ -40,7 +40,7 @@
   Result UpdatePrinterSettings(bool external_preview,
                                bool show_system_dialog,
                                int page_count) override;
-  Result NewDocument(const base::string16& document_name) override;
+  Result NewDocument(const std::u16string& document_name) override;
   Result NewPage() override;
   Result PageDone() override;
   Result DocumentDone() override;
diff --git a/printing/printing_utils.cc b/printing/printing_utils.cc
index f45f3410..e3e311e 100644
--- a/printing/printing_utils.cc
+++ b/printing/printing_utils.cc
@@ -88,9 +88,9 @@
 
 }  // namespace
 
-base::string16 SimplifyDocumentTitleWithLength(const base::string16& title,
+std::u16string SimplifyDocumentTitleWithLength(const std::u16string& title,
                                                size_t length) {
-  base::string16 no_controls(title);
+  std::u16string no_controls(title);
   no_controls.erase(
       std::remove_if(no_controls.begin(), no_controls.end(), &u_iscntrl),
       no_controls.end());
@@ -103,19 +103,19 @@
                        base::ASCIIToUTF16("_"), &no_controls);
   }
 
-  base::string16 result;
+  std::u16string result;
   gfx::ElideString(no_controls, length, &result);
   return result;
 }
 
-base::string16 FormatDocumentTitleWithOwnerAndLength(
-    const base::string16& owner,
-    const base::string16& title,
+std::u16string FormatDocumentTitleWithOwnerAndLength(
+    const std::u16string& owner,
+    const std::u16string& title,
     size_t length) {
-  const base::string16 separator = base::ASCIIToUTF16(": ");
+  const std::u16string separator = base::ASCIIToUTF16(": ");
   DCHECK_LT(separator.size(), length);
 
-  base::string16 short_title =
+  std::u16string short_title =
       SimplifyDocumentTitleWithLength(owner, length - separator.size());
   short_title += separator;
   if (short_title.size() < length) {
@@ -126,12 +126,12 @@
   return short_title;
 }
 
-base::string16 SimplifyDocumentTitle(const base::string16& title) {
+std::u16string SimplifyDocumentTitle(const std::u16string& title) {
   return SimplifyDocumentTitleWithLength(title, kMaxDocumentTitleLength);
 }
 
-base::string16 FormatDocumentTitleWithOwner(const base::string16& owner,
-                                            const base::string16& title) {
+std::u16string FormatDocumentTitleWithOwner(const std::u16string& owner,
+                                            const std::u16string& title) {
   return FormatDocumentTitleWithOwnerAndLength(owner, title,
                                                kMaxDocumentTitleLength);
 }
diff --git a/printing/printing_utils.h b/printing/printing_utils.h
index 72a1e65..7451f36 100644
--- a/printing/printing_utils.h
+++ b/printing/printing_utils.h
@@ -21,20 +21,20 @@
 namespace printing {
 
 // Simplify title to resolve issue with some drivers.
-PRINTING_EXPORT base::string16 SimplifyDocumentTitle(
-    const base::string16& title);
+PRINTING_EXPORT std::u16string SimplifyDocumentTitle(
+    const std::u16string& title);
 
-PRINTING_EXPORT base::string16 SimplifyDocumentTitleWithLength(
-    const base::string16& title,
+PRINTING_EXPORT std::u16string SimplifyDocumentTitleWithLength(
+    const std::u16string& title,
     size_t length);
 
-PRINTING_EXPORT base::string16 FormatDocumentTitleWithOwner(
-    const base::string16& owner,
-    const base::string16& title);
+PRINTING_EXPORT std::u16string FormatDocumentTitleWithOwner(
+    const std::u16string& owner,
+    const std::u16string& title);
 
-PRINTING_EXPORT base::string16 FormatDocumentTitleWithOwnerAndLength(
-    const base::string16& owner,
-    const base::string16& title,
+PRINTING_EXPORT std::u16string FormatDocumentTitleWithOwnerAndLength(
+    const std::u16string& owner,
+    const std::u16string& title,
     size_t length);
 
 // Returns the paper size (microns) most common in the locale to the nearest
diff --git a/remoting/host/chromeos/message_box.cc b/remoting/host/chromeos/message_box.cc
index d43930b..f414fc8 100644
--- a/remoting/host/chromeos/message_box.cc
+++ b/remoting/host/chromeos/message_box.cc
@@ -28,10 +28,10 @@
 class MessageBox::Core : public views::DialogDelegateView {
  public:
   METADATA_HEADER(Core);
-  Core(const base::string16& title_label,
-       const base::string16& message_label,
-       const base::string16& ok_label,
-       const base::string16& cancel_label,
+  Core(const std::u16string& title_label,
+       const std::u16string& message_label,
+       const std::u16string& ok_label,
+       const std::u16string& cancel_label,
        ResultCallback result_callback,
        MessageBox* message_box);
   Core(const Core&) = delete;
@@ -43,7 +43,7 @@
 
   // views::DialogDelegateView:
   ui::ModalType GetModalType() const override;
-  base::string16 GetWindowTitle() const override;
+  std::u16string GetWindowTitle() const override;
   views::View* GetContentsView() override;
   views::Widget* GetWidget() override;
   const views::Widget* GetWidget() const override;
@@ -53,7 +53,7 @@
   void OnMessageBoxDestroyed();
 
  private:
-  const base::string16 title_label_;
+  const std::u16string title_label_;
   ResultCallback result_callback_;
   MessageBox* message_box_;
 
@@ -61,10 +61,10 @@
   views::MessageBoxView* message_box_view_;
 };
 
-MessageBox::Core::Core(const base::string16& title_label,
-                       const base::string16& message_label,
-                       const base::string16& ok_label,
-                       const base::string16& cancel_label,
+MessageBox::Core::Core(const std::u16string& title_label,
+                       const std::u16string& message_label,
+                       const std::u16string& ok_label,
+                       const std::u16string& cancel_label,
                        ResultCallback result_callback,
                        MessageBox* message_box)
     : title_label_(title_label),
@@ -109,7 +109,7 @@
   return ui::MODAL_TYPE_SYSTEM;
 }
 
-base::string16 MessageBox::Core::GetWindowTitle() const {
+std::u16string MessageBox::Core::GetWindowTitle() const {
   return title_label_;
 }
 
@@ -142,10 +142,10 @@
 BEGIN_METADATA(MessageBox, Core, views::DialogDelegateView)
 END_METADATA
 
-MessageBox::MessageBox(const base::string16& title_label,
-                       const base::string16& message_label,
-                       const base::string16& ok_label,
-                       const base::string16& cancel_label,
+MessageBox::MessageBox(const std::u16string& title_label,
+                       const std::u16string& message_label,
+                       const std::u16string& ok_label,
+                       const std::u16string& cancel_label,
                        ResultCallback result_callback)
     : core_(new Core(title_label,
                      message_label,
diff --git a/remoting/host/chromeos/message_box.h b/remoting/host/chromeos/message_box.h
index 569b689..6c691b5 100644
--- a/remoting/host/chromeos/message_box.h
+++ b/remoting/host/chromeos/message_box.h
@@ -29,10 +29,10 @@
   // MessageBox without clicking on any buttons.
   typedef base::OnceCallback<void(Result)> ResultCallback;
 
-  MessageBox(const base::string16& title_label,
-             const base::string16& message_label,
-             const base::string16& ok_label,
-             const base::string16& cancel_label,
+  MessageBox(const std::u16string& title_label,
+             const std::u16string& message_label,
+             const std::u16string& ok_label,
+             const std::u16string& cancel_label,
              ResultCallback result_callback);
   ~MessageBox();
 
diff --git a/remoting/host/clipboard_win.cc b/remoting/host/clipboard_win.cc
index 5e34f6b..09f4f7b 100644
--- a/remoting/host/clipboard_win.cc
+++ b/remoting/host/clipboard_win.cc
@@ -168,7 +168,7 @@
     return;
   }
 
-  base::string16 text = base::UTF8ToUTF16(ReplaceLfByCrLf(event.data()));
+  std::u16string text = base::UTF8ToUTF16(ReplaceLfByCrLf(event.data()));
 
   ScopedClipboard clipboard;
   if (!clipboard.Init(window_->hwnd())) {
diff --git a/remoting/host/disconnect_window_chromeos.cc b/remoting/host/disconnect_window_chromeos.cc
index b60f3dcb..76dfd5f 100644
--- a/remoting/host/disconnect_window_chromeos.cc
+++ b/remoting/host/disconnect_window_chromeos.cc
@@ -39,7 +39,7 @@
     const base::WeakPtr<ClientSessionControl>& client_session_control) {
   // TODO(kelvinp): Clean up the NotifyScreenShareStart interface when we
   // completely retire Hangout Remote Desktop v1.
-  base::string16 helper_name;
+  std::u16string helper_name;
   ash::Shell::Get()->system_tray_notifier()->NotifyScreenShareStart(
       base::BindRepeating(&ClientSessionControl::DisconnectSession,
                           client_session_control, protocol::OK),
diff --git a/remoting/host/disconnect_window_linux.cc b/remoting/host/disconnect_window_linux.cc
index c0855a4..9f3bea5 100644
--- a/remoting/host/disconnect_window_linux.cc
+++ b/remoting/host/disconnect_window_linux.cc
@@ -267,7 +267,7 @@
 
   // Extract the user name from the JID.
   std::string client_jid = client_session_control_->client_jid();
-  base::string16 username =
+  std::u16string username =
       base::UTF8ToUTF16(client_jid.substr(0, client_jid.find('/')));
   gtk_label_set_text(
       GTK_LABEL(message_),
diff --git a/remoting/host/disconnect_window_mac.h b/remoting/host/disconnect_window_mac.h
index 5b7a9ce..75d2d90 100644
--- a/remoting/host/disconnect_window_mac.h
+++ b/remoting/host/disconnect_window_mac.h
@@ -18,7 +18,7 @@
 @interface DisconnectWindowController : NSWindowController {
  @private
   base::OnceClosure _disconnect_callback;
-  base::string16 _username;
+  std::u16string _username;
 }
 
 - (id)initWithCallback:(base::OnceClosure)disconnect_callback
diff --git a/remoting/host/input_injector_chromeos.cc b/remoting/host/input_injector_chromeos.cc
index 6c3736b..48c4fa1 100644
--- a/remoting/host/input_injector_chromeos.cc
+++ b/remoting/host/input_injector_chromeos.cc
@@ -179,7 +179,7 @@
   std::string normalized_str;
   base::ConvertToUtf8AndNormalize(event.text(), base::kCodepageUTF8,
                                   &normalized_str);
-  base::string16 utf16_string = base::UTF8ToUTF16(normalized_str);
+  std::u16string utf16_string = base::UTF8ToUTF16(normalized_str);
 
   text_input_client->InsertText(
       utf16_string,
diff --git a/remoting/host/input_injector_mac.cc b/remoting/host/input_injector_mac.cc
index f4619af..80f00c8 100644
--- a/remoting/host/input_injector_mac.cc
+++ b/remoting/host/input_injector_mac.cc
@@ -44,7 +44,7 @@
 void CreateAndPostKeyEvent(int keycode,
                            bool pressed,
                            uint64_t flags,
-                           const base::string16& unicode) {
+                           const std::u16string& unicode) {
   base::ScopedCFTypeRef<CGEventRef> eventRef(
       CGEventCreateKeyboardEvent(nullptr, keycode, pressed));
   if (eventRef) {
@@ -288,7 +288,7 @@
 
   ui_thread_task_runner_->PostTask(
       FROM_HERE, base::BindOnce(CreateAndPostKeyEvent, keycode, event.pressed(),
-                                flags, base::string16()));
+                                flags, std::u16string()));
 }
 
 void InputInjectorMac::Core::InjectTextEvent(const TextEvent& event) {
@@ -296,7 +296,7 @@
 
   WakeUpDisplay();
 
-  base::string16 text = base::UTF8ToUTF16(event.text());
+  std::u16string text = base::UTF8ToUTF16(event.text());
 
   // CGEventKeyboardSetUnicodeString appears to only process up to 20 code
   // units (and key presses are generally expected to generate a single
@@ -317,21 +317,21 @@
       // specially.
       ui_thread_task_runner_->PostTask(
           FROM_HERE, base::BindOnce(CreateAndPostKeyEvent, kVK_Return,
-                                    /*pressed=*/true, 0, base::string16()));
+                                    /*pressed=*/true, 0, std::u16string()));
       ui_thread_task_runner_->PostTask(
           FROM_HERE, base::BindOnce(CreateAndPostKeyEvent, kVK_Return,
-                                    /*pressed=*/false, 0, base::string16()));
+                                    /*pressed=*/false, 0, std::u16string()));
     } else {
       // Applications that ignore UnicodeString field will see the text event as
       // Space key.
       ui_thread_task_runner_->PostTask(
           FROM_HERE,
           base::BindOnce(CreateAndPostKeyEvent, kVK_Space,
-                         /*pressed=*/true, 0, base::string16(grapheme)));
+                         /*pressed=*/true, 0, std::u16string(grapheme)));
       ui_thread_task_runner_->PostTask(
           FROM_HERE,
           base::BindOnce(CreateAndPostKeyEvent, kVK_Space,
-                         /*pressed=*/false, 0, base::string16(grapheme)));
+                         /*pressed=*/false, 0, std::u16string(grapheme)));
     }
   }
 }
diff --git a/remoting/host/input_injector_win.cc b/remoting/host/input_injector_win.cc
index cbc781dc..57c90503 100644
--- a/remoting/host/input_injector_win.cc
+++ b/remoting/host/input_injector_win.cc
@@ -422,9 +422,9 @@
   // HostEventDispatcher should filter events missing the pressed field.
   DCHECK(event.has_text());
 
-  base::string16 text = base::UTF8ToUTF16(event.text());
-  for (base::string16::const_iterator it = text.begin();
-       it != text.end(); ++it)  {
+  std::u16string text = base::UTF8ToUTF16(event.text());
+  for (std::u16string::const_iterator it = text.begin(); it != text.end();
+       ++it) {
     if (*it == '\n') {
       // The WM_CHAR event generated for carriage return is '\r', not '\n', and
       // some applications may check for VK_RETURN explicitly, so handle
diff --git a/remoting/host/it2me/it2me_confirmation_dialog_linux.cc b/remoting/host/it2me/it2me_confirmation_dialog_linux.cc
index f0f4e1fa..4b73deeb 100644
--- a/remoting/host/it2me/it2me_confirmation_dialog_linux.cc
+++ b/remoting/host/it2me/it2me_confirmation_dialog_linux.cc
@@ -116,7 +116,7 @@
   GtkWidget* content_area =
       gtk_dialog_get_content_area(GTK_DIALOG(confirmation_window_));
 
-  base::string16 dialog_text =
+  std::u16string dialog_text =
       base::i18n::MessageFormatter::FormatWithNumberedArgs(
           l10n_util::GetStringUTF16(
               IDS_SHARE_CONFIRM_DIALOG_MESSAGE_WITH_USERNAME),
diff --git a/remoting/host/it2me/it2me_confirmation_dialog_mac.mm b/remoting/host/it2me/it2me_confirmation_dialog_mac.mm
index ab305e5..d10535d 100644
--- a/remoting/host/it2me/it2me_confirmation_dialog_mac.mm
+++ b/remoting/host/it2me/it2me_confirmation_dialog_mac.mm
@@ -27,7 +27,7 @@
 @interface It2MeConfirmationDialogMacController : NSObject {
  @private
   base::scoped_nsobject<NSAlert> _confirmation_alert;
-  base::string16 _username;
+  std::u16string _username;
   remoting::It2MeConfirmationDialog::ResultCallback _dialog_action_callback;
 }
 
@@ -138,7 +138,7 @@
 - (void)show {
   _confirmation_alert.reset([[NSAlert alloc] init]);
 
-  base::string16 dialog_text =
+  std::u16string dialog_text =
       base::i18n::MessageFormatter::FormatWithNumberedArgs(
           l10n_util::GetStringUTF16(
               IDS_SHARE_CONFIRM_DIALOG_MESSAGE_WITH_USERNAME),
diff --git a/remoting/host/mac/permission_wizard.mm b/remoting/host/mac/permission_wizard.mm
index ae28251ab..0004c38 100644
--- a/remoting/host/mac/permission_wizard.mm
+++ b/remoting/host/mac/permission_wizard.mm
@@ -392,7 +392,7 @@
 // updates the first-responder button, so it should only be called when the
 // state needs to change.
 - (void)updateUI {
-  base::string16 bundleName = base::UTF8ToUTF16(_impl->GetBundleName());
+  std::u16string bundleName = base::UTF8ToUTF16(_impl->GetBundleName());
   switch (_page) {
     case WizardPage::ACCESSIBILITY:
       _instructionText.stringValue = l10n_util::GetNSStringF(
diff --git a/remoting/host/setup/daemon_controller_delegate_win.cc b/remoting/host/setup/daemon_controller_delegate_win.cc
index 74eab11..2685638c 100644
--- a/remoting/host/setup/daemon_controller_delegate_win.cc
+++ b/remoting/host/setup/daemon_controller_delegate_win.cc
@@ -183,7 +183,7 @@
   // Extract the unprivileged fields from the configuration.
   base::DictionaryValue unprivileged_config_dict;
   for (const char* key : kUnprivilegedConfigKeys) {
-    base::string16 value;
+    std::u16string value;
     if (config_dict->GetString(key, &value)) {
       unprivileged_config_dict.SetString(key, value);
     }
diff --git a/rlz/ios/lib/machine_id_ios.cc b/rlz/ios/lib/machine_id_ios.cc
index c31641c..5ab3026b 100644
--- a/rlz/ios/lib/machine_id_ios.cc
+++ b/rlz/ios/lib/machine_id_ios.cc
@@ -10,7 +10,7 @@
 
 namespace rlz_lib {
 
-bool GetRawMachineId(base::string16* data, int* more_data) {
+bool GetRawMachineId(std::u16string* data, int* more_data) {
   *data = base::ASCIIToUTF16(ios::device_util::GetDeviceIdentifier(NULL));
   *more_data = 1;
   return true;
diff --git a/rlz/lib/machine_id.cc b/rlz/lib/machine_id.cc
index 9d7b44b..3033a25 100644
--- a/rlz/lib/machine_id.cc
+++ b/rlz/lib/machine_id.cc
@@ -49,7 +49,7 @@
     return true;
   }
 
-  base::string16 sid_string;
+  std::u16string sid_string;
   int volume_id;
   if (!GetRawMachineId(&sid_string, &volume_id))
     return false;
@@ -66,7 +66,7 @@
 
 namespace testing {
 
-bool GetMachineIdImpl(const base::string16& sid_string,
+bool GetMachineIdImpl(const std::u16string& sid_string,
                       int volume_id,
                       std::string* machine_id) {
   machine_id->clear();
@@ -81,7 +81,7 @@
     // However, the chromebase SHA1 hash function takes only an std::string as
     // input, so the unicode string needs to be converted to std::string
     // "as is".
-    size_t byte_count = sid_string.size() * sizeof(base::string16::value_type);
+    size_t byte_count = sid_string.size() * sizeof(std::u16string::value_type);
     const char* buffer = reinterpret_cast<const char*>(sid_string.c_str());
     std::string sid_string_buffer(buffer, byte_count);
 
diff --git a/rlz/lib/machine_id.h b/rlz/lib/machine_id.h
index 312f669..7a207bf4 100644
--- a/rlz/lib/machine_id.h
+++ b/rlz/lib/machine_id.h
@@ -21,10 +21,10 @@
 // Retrieves a raw machine identifier string and a machine-specific
 // 4 byte value. GetMachineId() will SHA1 |data|, append |more_data|, compute
 // the Crc8 of that, and return a hex-encoded string of that data.
-bool GetRawMachineId(base::string16* data, int* more_data);
+bool GetRawMachineId(std::u16string* data, int* more_data);
 
 namespace testing {
-bool GetMachineIdImpl(const base::string16& sid_string,
+bool GetMachineIdImpl(const std::u16string& sid_string,
                       int volume_id,
                       std::string* machine_id);
 }  // namespace testing
diff --git a/rlz/lib/machine_id_unittest.cc b/rlz/lib/machine_id_unittest.cc
index 67596f58..91c3c5a 100644
--- a/rlz/lib/machine_id_unittest.cc
+++ b/rlz/lib/machine_id_unittest.cc
@@ -15,8 +15,8 @@
 
 // This test will fail if the behavior of GetMachineId changes.
 TEST(MachineDealCodeTestMachineId, MachineId) {
-  base::string16 computer_sid(base::UTF8ToUTF16(
-        "S-1-5-21-2345599882-2448789067-1921365677"));
+  std::u16string computer_sid(
+      base::UTF8ToUTF16("S-1-5-21-2345599882-2448789067-1921365677"));
   std::string id;
   rlz_lib::testing::GetMachineIdImpl(computer_sid, -1643738288, &id);
   EXPECT_STREQ("A341BA986A7E86840688977FCF20C86E253F00919E068B50F8",
diff --git a/rlz/mac/lib/machine_id_mac.cc b/rlz/mac/lib/machine_id_mac.cc
index f27b89e..a8298c5 100644
--- a/rlz/mac/lib/machine_id_mac.cc
+++ b/rlz/mac/lib/machine_id_mac.cc
@@ -100,7 +100,7 @@
 
 }  // namespace
 
-bool GetRawMachineId(base::string16* data, int* more_data) {
+bool GetRawMachineId(std::u16string* data, int* more_data) {
   uint8_t mac_address[kIOEthernetAddressSize];
 
   data->clear();
diff --git a/rlz/win/lib/machine_id_win.cc b/rlz/win/lib/machine_id_win.cc
index df8d57d..98eab557 100644
--- a/rlz/win/lib/machine_id_win.cc
+++ b/rlz/win/lib/machine_id_win.cc
@@ -70,7 +70,7 @@
   return success != FALSE;
 }
 
-base::string16 ConvertSidToString(SID* sid) {
+std::u16string ConvertSidToString(SID* sid) {
   std::wstring sid_string;
   wchar_t* sid_buffer = NULL;
   if (ConvertSidToStringSidW(sid, &sid_buffer)) {
@@ -82,7 +82,7 @@
 
 }  // namespace
 
-bool GetRawMachineId(base::string16* sid_string, int* volume_id) {
+bool GetRawMachineId(std::u16string* sid_string, int* volume_id) {
   // Calculate the Windows SID.
 
   wchar_t computer_name[MAX_COMPUTERNAME_LENGTH + 1] = {0};
diff --git a/services/device/geolocation/position_cache_impl.cc b/services/device/geolocation/position_cache_impl.cc
index 1aa09e0..735e89c 100644
--- a/services/device/geolocation/position_cache_impl.cc
+++ b/services/device/geolocation/position_cache_impl.cc
@@ -33,10 +33,10 @@
 // static
 PositionCacheImpl::Hash PositionCacheImpl::MakeKey(const WifiData& wifi_data) {
   // Currently we use only WiFi data and base the key only on the MAC addresses.
-  base::string16 key;
+  std::u16string key;
   const size_t kCharsPerMacAddress = 6 * 3 + 1;  // e.g. "11:22:33:44:55:66|"
   key.reserve(wifi_data.access_point_data.size() * kCharsPerMacAddress);
-  const base::string16 separator(base::ASCIIToUTF16("|"));
+  const std::u16string separator(base::ASCIIToUTF16("|"));
   for (const auto& access_point_data : wifi_data.access_point_data) {
     key += separator;
     key += access_point_data.mac_address;
diff --git a/services/device/geolocation/position_cache_impl.h b/services/device/geolocation/position_cache_impl.h
index a8def7a7..ae71d8e 100644
--- a/services/device/geolocation/position_cache_impl.h
+++ b/services/device/geolocation/position_cache_impl.h
@@ -57,7 +57,7 @@
  private:
   // In order to avoid O(N) comparisons while searching for the right WifiData,
   // we hash the contents of those objects and use the hashes as cache keys.
-  using Hash = base::string16;
+  using Hash = std::u16string;
 
   class CacheEntry {
    public:
diff --git a/services/device/geolocation/wifi_data.h b/services/device/geolocation/wifi_data.h
index 604335c..d510db8 100644
--- a/services/device/geolocation/wifi_data.h
+++ b/services/device/geolocation/wifi_data.h
@@ -18,11 +18,11 @@
   ~AccessPointData();
 
   // MAC address, formatted as per MacAddressAsString16.
-  base::string16 mac_address;
+  std::u16string mac_address;
   int radio_signal_strength;  // Measured in dBm
   int channel;
   int signal_to_noise;  // Ratio in dB
-  base::string16 ssid;  // Network identifier
+  std::u16string ssid;  // Network identifier
 };
 
 // This is to allow AccessPointData to be used in std::set. We order
diff --git a/services/device/geolocation/wifi_data_provider_common.cc b/services/device/geolocation/wifi_data_provider_common.cc
index 72d2e81..d0b0787 100644
--- a/services/device/geolocation/wifi_data_provider_common.cc
+++ b/services/device/geolocation/wifi_data_provider_common.cc
@@ -12,7 +12,7 @@
 
 namespace device {
 
-base::string16 MacAddressAsString16(const uint8_t mac_as_int[6]) {
+std::u16string MacAddressAsString16(const uint8_t mac_as_int[6]) {
   // |mac_as_int| is big-endian. Write in byte chunks.
   // Format is XX-XX-XX-XX-XX-XX.
   static const char* const kMacFormatString = "%02x-%02x-%02x-%02x-%02x-%02x";
diff --git a/services/device/geolocation/wifi_data_provider_common.h b/services/device/geolocation/wifi_data_provider_common.h
index 4f50581..5ed70ac20 100644
--- a/services/device/geolocation/wifi_data_provider_common.h
+++ b/services/device/geolocation/wifi_data_provider_common.h
@@ -20,7 +20,7 @@
 namespace device {
 
 // Converts a MAC address stored as an array of uint8_t to a string.
-base::string16 MacAddressAsString16(const uint8_t mac_as_int[6]);
+std::u16string MacAddressAsString16(const uint8_t mac_as_int[6]);
 
 // Base class to promote code sharing between platform specific wifi data
 // providers. It's optional for specific platforms to derive this, but if they
diff --git a/services/device/hid/hid_connection_unittest.cc b/services/device/hid/hid_connection_unittest.cc
index a78c298..b2f1418 100644
--- a/services/device/hid/hid_connection_unittest.cc
+++ b/services/device/hid/hid_connection_unittest.cc
@@ -38,7 +38,7 @@
 //
 class DeviceCatcher : HidService::Observer {
  public:
-  DeviceCatcher(HidService* hid_service, const base::string16& serial_number)
+  DeviceCatcher(HidService* hid_service, const std::u16string& serial_number)
       : serial_number_(base::UTF16ToUTF8(serial_number)), observer_(this) {
     hid_service->GetDevices(
         base::BindOnce(&DeviceCatcher::OnEnumerationComplete,
diff --git a/services/device/public/cpp/bluetooth/bluetooth_utils.cc b/services/device/public/cpp/bluetooth/bluetooth_utils.cc
index 5b85c093..950efbb 100644
--- a/services/device/public/cpp/bluetooth/bluetooth_utils.cc
+++ b/services/device/public/cpp/bluetooth/bluetooth_utils.cc
@@ -18,7 +18,7 @@
 
 using DeviceType = mojom::BluetoothDeviceInfo::DeviceType;
 
-base::string16 GetBluetoothAddressForDisplay(
+std::u16string GetBluetoothAddressForDisplay(
     const std::array<uint8_t, 6>& address) {
   static constexpr char kAddressFormat[] =
       "%02hhX:%02hhX:%02hhX:%02hhX:%02hhX:%02hhX";
@@ -28,7 +28,7 @@
                          address[3], address[4], address[5]));
 }
 
-base::string16 GetBluetoothDeviceNameForDisplay(
+std::u16string GetBluetoothDeviceNameForDisplay(
     const mojom::BluetoothDeviceInfoPtr& device_info) {
   if (device_info->name) {
     const std::string& device_name = device_info->name.value();
@@ -124,9 +124,9 @@
 }  // namespace
 
 // Returns a a11y accessibility label of the device
-base::string16 GetBluetoothDeviceLabelForAccessibility(
+std::u16string GetBluetoothDeviceLabelForAccessibility(
     const mojom::BluetoothDeviceInfoPtr& device_info) {
-  base::string16 name_utf16 =
+  std::u16string name_utf16 =
       device::GetBluetoothAddressForDisplay(device_info->address);
   if (device_info->name) {
     const std::string& device_name = device_info->name.value();
diff --git a/services/device/public/cpp/bluetooth/bluetooth_utils.h b/services/device/public/cpp/bluetooth/bluetooth_utils.h
index 2127cb7c1..9950263 100644
--- a/services/device/public/cpp/bluetooth/bluetooth_utils.h
+++ b/services/device/public/cpp/bluetooth/bluetooth_utils.h
@@ -14,18 +14,18 @@
 namespace device {
 
 // Returns the address suitable for displaying e.g. "AA:BB:CC:DD:00:11".
-base::string16 GetBluetoothAddressForDisplay(
+std::u16string GetBluetoothAddressForDisplay(
     const std::array<uint8_t, 6>& address);
 
 // Returns the name of the device suitable for displaying, this may
 // be a synthesized string containing the address and localized type name
 // if the device has no obtained name.
-base::string16 GetBluetoothDeviceNameForDisplay(
+std::u16string GetBluetoothDeviceNameForDisplay(
     const mojom::BluetoothDeviceInfoPtr& device_info);
 
 // Returns an accessibility label for the device based on name or address and
 // device type.
-base::string16 GetBluetoothDeviceLabelForAccessibility(
+std::u16string GetBluetoothDeviceLabelForAccessibility(
     const mojom::BluetoothDeviceInfoPtr& device_info);
 
 // Returns a BluetoothUUID for a Bluetooth SPP device.
diff --git a/services/device/public/cpp/bluetooth/bluetooth_utils_unittest.cc b/services/device/public/cpp/bluetooth/bluetooth_utils_unittest.cc
index 8d352c9d..0a3b9ba 100644
--- a/services/device/public/cpp/bluetooth/bluetooth_utils_unittest.cc
+++ b/services/device/public/cpp/bluetooth/bluetooth_utils_unittest.cc
@@ -118,7 +118,7 @@
       GetBluetoothAddressForDisplay({0xAA, 0xBB, 0xCC, 0x00, 0x11, 0x22}));
 }
 
-static base::string16 LabelFromTypeWithName(
+static std::u16string LabelFromTypeWithName(
     BluetoothDeviceInfo::DeviceType type,
     const char* name = kName) {
   BluetoothDeviceInfoPtr info = BluetoothDeviceInfo::New();
diff --git a/services/device/time_zone_monitor/time_zone_monitor_android.cc b/services/device/time_zone_monitor/time_zone_monitor_android.cc
index 57f3ecf..de036027 100644
--- a/services/device/time_zone_monitor/time_zone_monitor_android.cc
+++ b/services/device/time_zone_monitor/time_zone_monitor_android.cc
@@ -33,7 +33,7 @@
     JNIEnv* env,
     const JavaParamRef<jobject>& caller) {
   // See base/i18n/icu_util.cc:InitializeIcuTimeZone() for more information.
-  base::string16 zone_id = base::android::GetDefaultTimeZoneId();
+  std::u16string zone_id = base::android::GetDefaultTimeZoneId();
   std::unique_ptr<icu::TimeZone> new_zone(icu::TimeZone::createTimeZone(
       icu::UnicodeString(false, zone_id.data(), zone_id.length())));
   UpdateIcuAndNotifyClients(std::move(new_zone));
diff --git a/services/device/usb/mojo/device_manager_test.cc b/services/device/usb/mojo/device_manager_test.cc
index fc7051d..226741b 100644
--- a/services/device/usb/mojo/device_manager_test.cc
+++ b/services/device/usb/mojo/device_manager_test.cc
@@ -43,7 +43,7 @@
                 0x0000,
                 0x000,
                 0x0100,
-                base::string16(),
+                std::u16string(),
                 base::UTF8ToUTF16(name),
                 base::UTF8ToUTF16(serial_number),
                 0,
diff --git a/services/device/usb/usb_descriptors.cc b/services/device/usb/usb_descriptors.cc
index ae0d30d..498e855 100644
--- a/services/device/usb/usb_descriptors.cc
+++ b/services/device/usb/usb_descriptors.cc
@@ -35,7 +35,7 @@
 
 namespace {
 
-using IndexMap = std::map<uint8_t, base::string16>;
+using IndexMap = std::map<uint8_t, std::u16string>;
 using IndexMapPtr = std::unique_ptr<IndexMap>;
 
 // Standard USB requests and descriptor types:
@@ -187,24 +187,24 @@
 
 void StoreStringDescriptor(IndexMap::iterator it,
                            base::OnceClosure callback,
-                           const base::string16& string) {
+                           const std::u16string& string) {
   it->second = string;
   std::move(callback).Run();
 }
 
 void OnReadStringDescriptor(
-    base::OnceCallback<void(const base::string16&)> callback,
+    base::OnceCallback<void(const std::u16string&)> callback,
     UsbTransferStatus status,
     scoped_refptr<base::RefCountedBytes> buffer,
     size_t length) {
-  base::string16 string;
+  std::u16string string;
   if (status == UsbTransferStatus::COMPLETED &&
       ParseUsbStringDescriptor(
           std::vector<uint8_t>(buffer->front(), buffer->front() + length),
           &string)) {
     std::move(callback).Run(string);
   } else {
-    std::move(callback).Run(base::string16());
+    std::move(callback).Run(std::u16string());
   }
 }
 
@@ -212,7 +212,7 @@
     scoped_refptr<UsbDeviceHandle> device_handle,
     uint8_t index,
     uint16_t language_id,
-    base::OnceCallback<void(const base::string16&)> callback) {
+    base::OnceCallback<void(const std::u16string&)> callback) {
   auto buffer = base::MakeRefCounted<base::RefCountedBytes>(255);
   device_handle->ControlTransfer(
       UsbTransferDirection::INBOUND, UsbControlTransferType::STANDARD,
@@ -225,7 +225,7 @@
 void OnReadLanguageIds(scoped_refptr<UsbDeviceHandle> device_handle,
                        IndexMapPtr index_map,
                        base::OnceCallback<void(IndexMapPtr)> callback,
-                       const base::string16& languages) {
+                       const std::u16string& languages) {
   // Default to English unless the device provides a language and then just pick
   // the first one.
   uint16_t language_id = languages.empty() ? 0x0409 : languages[0];
@@ -362,7 +362,7 @@
 }
 
 bool ParseUsbStringDescriptor(const std::vector<uint8_t>& descriptor,
-                              base::string16* output) {
+                              std::u16string* output) {
   if (descriptor.size() < 2 || descriptor[1] != kStringDescriptorType)
     return false;
 
@@ -375,7 +375,7 @@
 
   // The string is returned by the device in UTF-16LE.
   *output =
-      base::string16(reinterpret_cast<const char16_t*>(descriptor.data() + 2),
+      std::u16string(reinterpret_cast<const char16_t*>(descriptor.data() + 2),
                      (length - 2) / sizeof(char16_t));
   return true;
 }
diff --git a/services/device/usb/usb_descriptors.h b/services/device/usb/usb_descriptors.h
index 4559578..96274eb 100644
--- a/services/device/usb/usb_descriptors.h
+++ b/services/device/usb/usb_descriptors.h
@@ -56,12 +56,12 @@
     base::OnceCallback<void(std::unique_ptr<UsbDeviceDescriptor>)> callback);
 
 bool ParseUsbStringDescriptor(const std::vector<uint8_t>& descriptor,
-                              base::string16* output);
+                              std::u16string* output);
 
 void ReadUsbStringDescriptors(
     scoped_refptr<UsbDeviceHandle> device_handle,
-    std::unique_ptr<std::map<uint8_t, base::string16>> index_map,
-    base::OnceCallback<void(std::unique_ptr<std::map<uint8_t, base::string16>>)>
+    std::unique_ptr<std::map<uint8_t, std::u16string>> index_map,
+    base::OnceCallback<void(std::unique_ptr<std::map<uint8_t, std::u16string>>)>
         callback);
 
 mojom::UsbEndpointInfoPtr BuildUsbEndpointInfoPtr(const uint8_t* data);
diff --git a/services/device/usb/usb_descriptors_unittest.cc b/services/device/usb/usb_descriptors_unittest.cc
index 4f858e4..f88520f 100644
--- a/services/device/usb/usb_descriptors_unittest.cc
+++ b/services/device/usb/usb_descriptors_unittest.cc
@@ -37,7 +37,7 @@
 }
 
 void ExpectStringDescriptors(
-    std::unique_ptr<std::map<uint8_t, base::string16>> string_map) {
+    std::unique_ptr<std::map<uint8_t, std::u16string>> string_map) {
   EXPECT_EQ(3u, string_map->size());
   EXPECT_EQ(base::ASCIIToUTF16("String 1"), (*string_map)[1]);
   EXPECT_EQ(base::ASCIIToUTF16("String 2"), (*string_map)[2]);
@@ -362,7 +362,7 @@
   static const uint8_t kBuffer[] = {0x1a, 0x03, 'H', 0, 'e', 0, 'l', 0, 'l', 0,
                                     'o',  0,    ' ', 0, 'w', 0, 'o', 0, 'r', 0,
                                     'l',  0,    'd', 0, '!', 0};
-  base::string16 string;
+  std::u16string string;
   ASSERT_TRUE(ParseUsbStringDescriptor(
       std::vector<uint8_t>(kBuffer, kBuffer + sizeof(kBuffer)), &string));
   EXPECT_EQ(base::ASCIIToUTF16("Hello world!"), string);
@@ -371,7 +371,7 @@
 TEST_F(UsbDescriptorsTest, ShortStringDescriptorHeader) {
   // The buffer is just too darn short.
   static const uint8_t kBuffer[] = {0x01};
-  base::string16 string;
+  std::u16string string;
   ASSERT_FALSE(ParseUsbStringDescriptor(
       std::vector<uint8_t>(kBuffer, kBuffer + sizeof(kBuffer)), &string));
 }
@@ -379,7 +379,7 @@
 TEST_F(UsbDescriptorsTest, ShortStringDescriptor) {
   // The buffer is just too darn short.
   static const uint8_t kBuffer[] = {0x01, 0x03};
-  base::string16 string;
+  std::u16string string;
   ASSERT_FALSE(ParseUsbStringDescriptor(
       std::vector<uint8_t>(kBuffer, kBuffer + sizeof(kBuffer)), &string));
 }
@@ -388,7 +388,7 @@
   // There's an extra byte at the end of the string.
   static const uint8_t kBuffer[] = {0x0d, 0x03, 'H', 0,   'e', 0,  'l',
                                     0,    'l',  0,   'o', 0,   '!'};
-  base::string16 string;
+  std::u16string string;
   ASSERT_TRUE(ParseUsbStringDescriptor(
       std::vector<uint8_t>(kBuffer, kBuffer + sizeof(kBuffer)), &string));
   EXPECT_EQ(base::ASCIIToUTF16("Hello"), string);
@@ -397,27 +397,27 @@
 TEST_F(UsbDescriptorsTest, EmptyStringDescriptor) {
   // The string is empty.
   static const uint8_t kBuffer[] = {0x02, 0x03};
-  base::string16 string;
+  std::u16string string;
   ASSERT_TRUE(ParseUsbStringDescriptor(
       std::vector<uint8_t>(kBuffer, kBuffer + sizeof(kBuffer)), &string));
-  EXPECT_EQ(base::string16(), string);
+  EXPECT_EQ(std::u16string(), string);
 }
 
 TEST_F(UsbDescriptorsTest, OneByteStringDescriptor) {
   // The string is only one byte.
   static const uint8_t kBuffer[] = {0x03, 0x03, '?'};
-  base::string16 string;
+  std::u16string string;
   ASSERT_TRUE(ParseUsbStringDescriptor(
       std::vector<uint8_t>(kBuffer, kBuffer + sizeof(kBuffer)), &string));
-  EXPECT_EQ(base::string16(), string);
+  EXPECT_EQ(std::u16string(), string);
 }
 
 TEST_F(UsbDescriptorsTest, ReadStringDescriptors) {
-  std::unique_ptr<std::map<uint8_t, base::string16>> string_map(
-      new std::map<uint8_t, base::string16>());
-  (*string_map)[1] = base::string16();
-  (*string_map)[2] = base::string16();
-  (*string_map)[3] = base::string16();
+  std::unique_ptr<std::map<uint8_t, std::u16string>> string_map(
+      new std::map<uint8_t, std::u16string>());
+  (*string_map)[1] = std::u16string();
+  (*string_map)[2] = std::u16string();
+  (*string_map)[3] = std::u16string();
 
   scoped_refptr<MockUsbDeviceHandle> device_handle(
       new MockUsbDeviceHandle(nullptr));
diff --git a/services/device/usb/usb_device.cc b/services/device/usb/usb_device.cc
index aaf39c2..3c85d6c 100644
--- a/services/device/usb/usb_device.cc
+++ b/services/device/usb/usb_device.cc
@@ -38,9 +38,9 @@
                      uint16_t vendor_id,
                      uint16_t product_id,
                      uint16_t device_version,
-                     const base::string16& manufacturer_string,
-                     const base::string16& product_string,
-                     const base::string16& serial_number,
+                     const std::u16string& manufacturer_string,
+                     const std::u16string& product_string,
+                     const std::u16string& serial_number,
                      uint32_t bus_number,
                      uint32_t port_number) {
   device_info_ = mojom::UsbDeviceInfo::New();
diff --git a/services/device/usb/usb_device.h b/services/device/usb/usb_device.h
index 15d7430e..df62b773 100644
--- a/services/device/usb/usb_device.h
+++ b/services/device/usb/usb_device.h
@@ -65,19 +65,19 @@
   uint16_t usb_version() const;
   uint16_t device_version() const;
 
-  const base::string16& manufacturer_string() const {
+  const std::u16string& manufacturer_string() const {
     if (device_info_->manufacturer_name)
       return *device_info_->manufacturer_name;
 
     return base::EmptyString16();
   }
-  const base::string16& product_string() const {
+  const std::u16string& product_string() const {
     if (device_info_->product_name)
       return *device_info_->product_name;
 
     return base::EmptyString16();
   }
-  const base::string16& serial_number() const {
+  const std::u16string& serial_number() const {
     if (device_info_->serial_number)
       return *device_info_->serial_number;
 
@@ -125,9 +125,9 @@
             uint16_t vendor_id,
             uint16_t product_id,
             uint16_t device_version,
-            const base::string16& manufacturer_string,
-            const base::string16& product_string,
-            const base::string16& serial_number,
+            const std::u16string& manufacturer_string,
+            const std::u16string& product_string,
+            const std::u16string& serial_number,
             uint32_t bus_number,
             uint32_t port_number);
   virtual ~UsbDevice();
diff --git a/services/device/usb/usb_device_android.cc b/services/device/usb/usb_device_android.cc
index 2d4b18b..b4b917d 100644
--- a/services/device/usb/usb_device_android.cc
+++ b/services/device/usb/usb_device_android.cc
@@ -41,13 +41,13 @@
   if (build_info->sdk_int() >= base::android::SDK_VERSION_MARSHMALLOW)
     device_version = Java_ChromeUsbDevice_getDeviceVersion(env, wrapper);
 
-  base::string16 manufacturer_string;
+  std::u16string manufacturer_string;
   ScopedJavaLocalRef<jstring> manufacturer_jstring =
       Java_ChromeUsbDevice_getManufacturerName(env, wrapper);
   if (!manufacturer_jstring.is_null())
     manufacturer_string = ConvertJavaStringToUTF16(env, manufacturer_jstring);
 
-  base::string16 product_string;
+  std::u16string product_string;
   ScopedJavaLocalRef<jstring> product_jstring =
       Java_ChromeUsbDevice_getProductName(env, wrapper);
   if (!product_jstring.is_null())
@@ -55,7 +55,7 @@
 
   // Reading the serial number requires device access permission when
   // targeting the Q SDK.
-  base::string16 serial_number;
+  std::u16string serial_number;
   if (service->HasDevicePermission(wrapper) ||
       build_info->sdk_int() < base::android::SDK_VERSION_Q) {
     ScopedJavaLocalRef<jstring> serial_jstring =
@@ -113,9 +113,9 @@
                                    uint16_t vendor_id,
                                    uint16_t product_id,
                                    uint16_t device_version,
-                                   const base::string16& manufacturer_string,
-                                   const base::string16& product_string,
-                                   const base::string16& serial_number,
+                                   const std::u16string& manufacturer_string,
+                                   const std::u16string& product_string,
+                                   const std::u16string& serial_number,
                                    const JavaRef<jobject>& wrapper)
     : UsbDevice(usb_version,
                 device_class,
diff --git a/services/device/usb/usb_device_android.h b/services/device/usb/usb_device_android.h
index 3a2bb66..7c599183 100644
--- a/services/device/usb/usb_device_android.h
+++ b/services/device/usb/usb_device_android.h
@@ -38,9 +38,9 @@
                    uint16_t vendor_id,
                    uint16_t product_id,
                    uint16_t device_version,
-                   const base::string16& manufacturer_string,
-                   const base::string16& product_string,
-                   const base::string16& serial_number,
+                   const std::u16string& manufacturer_string,
+                   const std::u16string& product_string,
+                   const std::u16string& serial_number,
                    const base::android::JavaRef<jobject>& wrapper);
   ~UsbDeviceAndroid() override;
 
diff --git a/services/device/usb/usb_device_impl.cc b/services/device/usb/usb_device_impl.cc
index 91fa8a1a..208606569 100644
--- a/services/device/usb/usb_device_impl.cc
+++ b/services/device/usb/usb_device_impl.cc
@@ -37,9 +37,9 @@
                 descriptor.idVendor,
                 descriptor.idProduct,
                 descriptor.bcdDevice,
-                base::string16(),
-                base::string16(),
-                base::string16(),
+                std::u16string(),
+                std::u16string(),
+                std::u16string(),
                 libusb_get_bus_number(platform_device.get()),
                 libusb_get_port_number(platform_device.get())),
       platform_device_(std::move(platform_device)) {
diff --git a/services/device/usb/usb_device_impl.h b/services/device/usb/usb_device_impl.h
index a98f1531..a8815ce6 100644
--- a/services/device/usb/usb_device_impl.h
+++ b/services/device/usb/usb_device_impl.h
@@ -42,13 +42,13 @@
 
   // These functions are used during enumeration only. The values must not
   // change during the object's lifetime.
-  void set_manufacturer_string(const base::string16& value) {
+  void set_manufacturer_string(const std::u16string& value) {
     device_info_->manufacturer_name = value;
   }
-  void set_product_string(const base::string16& value) {
+  void set_product_string(const std::u16string& value) {
     device_info_->product_name = value;
   }
-  void set_serial_number(const base::string16& value) {
+  void set_serial_number(const std::u16string& value) {
     device_info_->serial_number = value;
   }
   void set_webusb_landing_page(const GURL& url) {
diff --git a/services/device/usb/usb_device_win.cc b/services/device/usb/usb_device_win.cc
index 13e0b884..a192321 100644
--- a/services/device/usb/usb_device_win.cc
+++ b/services/device/usb/usb_device_win.cc
@@ -106,7 +106,7 @@
   // WinUSB only supports the configuration 1.
   ActiveConfigurationChanged(1);
 
-  auto string_map = std::make_unique<std::map<uint8_t, base::string16>>();
+  auto string_map = std::make_unique<std::map<uint8_t, std::u16string>>();
   if (descriptor->i_manufacturer)
     (*string_map)[descriptor->i_manufacturer];
   if (descriptor->i_product)
@@ -128,7 +128,7 @@
     uint8_t i_manufacturer,
     uint8_t i_product,
     uint8_t i_serial_number,
-    std::unique_ptr<std::map<uint8_t, base::string16>> string_map) {
+    std::unique_ptr<std::map<uint8_t, std::u16string>> string_map) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
 
   if (i_manufacturer)
diff --git a/services/device/usb/usb_device_win.h b/services/device/usb/usb_device_win.h
index f0a268c6..6b69e73 100644
--- a/services/device/usb/usb_device_win.h
+++ b/services/device/usb/usb_device_win.h
@@ -72,7 +72,7 @@
       uint8_t i_manufacturer,
       uint8_t i_product,
       uint8_t i_serial_number,
-      std::unique_ptr<std::map<uint8_t, base::string16>> string_map);
+      std::unique_ptr<std::map<uint8_t, std::u16string>> string_map);
   void OnReadWebUsbCapabilityDescriptor(
       base::OnceCallback<void(bool)> callback,
       scoped_refptr<UsbDeviceHandle> device_handle,
diff --git a/services/device/usb/usb_service_impl.cc b/services/device/usb/usb_service_impl.cc
index 47b62dca..f56165e 100644
--- a/services/device/usb/usb_service_impl.cc
+++ b/services/device/usb/usb_service_impl.cc
@@ -145,7 +145,7 @@
     uint8_t product,
     uint8_t serial_number,
     base::OnceClosure continuation,
-    std::unique_ptr<std::map<uint8_t, base::string16>> string_map) {
+    std::unique_ptr<std::map<uint8_t, std::u16string>> string_map) {
   if (manufacturer != 0)
     device->set_manufacturer_string((*string_map)[manufacturer]);
   if (product != 0)
@@ -183,14 +183,14 @@
     base::OnceClosure completion_closure,
     scoped_refptr<UsbDeviceHandle> device_handle) {
   if (device_handle) {
-    std::unique_ptr<std::map<uint8_t, base::string16>> string_map(
-        new std::map<uint8_t, base::string16>());
+    std::unique_ptr<std::map<uint8_t, std::u16string>> string_map(
+        new std::map<uint8_t, std::u16string>());
     if (manufacturer != 0)
-      (*string_map)[manufacturer] = base::string16();
+      (*string_map)[manufacturer] = std::u16string();
     if (product != 0)
-      (*string_map)[product] = base::string16();
+      (*string_map)[product] = std::u16string();
     if (serial_number != 0)
-      (*string_map)[serial_number] = base::string16();
+      (*string_map)[serial_number] = std::u16string();
 
     int count = 0;
     if (!string_map->empty())
diff --git a/services/device/usb/usb_service_mac.cc b/services/device/usb/usb_service_mac.cc
index ecf36d7..0224599 100644
--- a/services/device/usb/usb_service_mac.cc
+++ b/services/device/usb/usb_service_mac.cc
@@ -35,7 +35,7 @@
 // These methods are similar to the ones used by HidServiceMac.
 // TODO(https://crbug.com/1104271): Move these methods into a shared utility
 // file.
-base::Optional<base::string16> GetStringProperty(io_service_t service,
+base::Optional<std::u16string> GetStringProperty(io_service_t service,
                                                  CFStringRef key) {
   base::ScopedCFTypeRef<CFStringRef> ref(base::mac::CFCast<CFStringRef>(
       IORegistryEntryCreateCFProperty(service, key, kCFAllocatorDefault, 0)));
@@ -235,19 +235,19 @@
     return;
   usb_version = property_uint16.value();
 
-  base::Optional<base::string16> property_string16 =
+  base::Optional<std::u16string> property_string16 =
       GetStringProperty(device, CFSTR(kUSBVendorString));
-  base::string16 manufacturer_string;
+  std::u16string manufacturer_string;
   if (property_string16.has_value())
     manufacturer_string = property_string16.value();
 
   property_string16 = GetStringProperty(device, CFSTR(kUSBSerialNumberString));
-  base::string16 serial_number_string;
+  std::u16string serial_number_string;
   if (property_string16.has_value())
     serial_number_string = property_string16.value();
 
   property_string16 = GetStringProperty(device, CFSTR(kUSBProductString));
-  base::string16 product_string;
+  std::u16string product_string;
   if (property_string16.has_value())
     product_string = property_string16.value();
 
diff --git a/services/device/usb/usb_string_read_fuzzer.cc b/services/device/usb/usb_string_read_fuzzer.cc
index 6e744fd4..cf900cef 100644
--- a/services/device/usb/usb_string_read_fuzzer.cc
+++ b/services/device/usb/usb_string_read_fuzzer.cc
@@ -15,15 +15,15 @@
 
 namespace device {
 
-void Done(std::unique_ptr<std::map<uint8_t, base::string16>> index_map) {}
+void Done(std::unique_ptr<std::map<uint8_t, std::u16string>> index_map) {}
 
 extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
   // Uses the first few bytes of the input to decide which strings to request.
   // Stops once it encounters 0 which is not a valid string index.
-  std::unique_ptr<std::map<uint8_t, base::string16>> index_map(
-      new std::map<uint8_t, base::string16>());
+  std::unique_ptr<std::map<uint8_t, std::u16string>> index_map(
+      new std::map<uint8_t, std::u16string>());
   for (size_t i = 0; i < size && data[i] != 0; i++)
-    (*index_map)[data[i]] = base::string16();
+    (*index_map)[data[i]] = std::u16string();
   size_t used = index_map->size() + 1;
   if (used > size)
     return 0;
diff --git a/services/media_session/public/cpp/media_image.h b/services/media_session/public/cpp/media_image.h
index 6bbfe7f..71afa19f 100644
--- a/services/media_session/public/cpp/media_image.h
+++ b/services/media_session/public/cpp/media_image.h
@@ -52,7 +52,7 @@
   // any string and doesn't have to be a valid image MIME type at this point.
   // It is up to the consumer of the object to check if the type matches a
   // supported type.
-  base::string16 type;
+  std::u16string type;
 
   // Empty if the parsing failed, the field was not present or empty.
   // The special value "any" is represented by gfx::Size(0, 0).
diff --git a/services/media_session/public/cpp/media_image_manager.cc b/services/media_session/public/cpp/media_image_manager.cc
index 6cb1fc3f..ba06a87 100644
--- a/services/media_session/public/cpp/media_image_manager.cc
+++ b/services/media_session/public/cpp/media_image_manager.cc
@@ -154,7 +154,7 @@
 
 // static
 base::Optional<double> MediaImageManager::GetImageTypeScore(
-    const base::string16& type) {
+    const std::u16string& type) {
   // These hashes are calculated in
   // MediaImageManagerTest_CheckExpectedImageTypeHashes
   switch (base::PersistentHash(type.data(), type.size() * sizeof(char16_t))) {
diff --git a/services/media_session/public/cpp/media_image_manager.h b/services/media_session/public/cpp/media_image_manager.h
index a8bc41d..6b2cc3d8 100644
--- a/services/media_session/public/cpp/media_image_manager.h
+++ b/services/media_session/public/cpp/media_image_manager.h
@@ -70,7 +70,7 @@
 
   static base::Optional<double> GetImageExtensionScore(const GURL& url);
 
-  static base::Optional<double> GetImageTypeScore(const base::string16& type);
+  static base::Optional<double> GetImageTypeScore(const std::u16string& type);
 
   const int min_size_;
   const int ideal_size_;
diff --git a/services/media_session/public/cpp/media_image_manager_unittest.cc b/services/media_session/public/cpp/media_image_manager_unittest.cc
index be40503e..88d9fd9 100644
--- a/services/media_session/public/cpp/media_image_manager_unittest.cc
+++ b/services/media_session/public/cpp/media_image_manager_unittest.cc
@@ -55,7 +55,7 @@
                                "image/png", "image/x-icon"};
 
   for (const auto& type : types) {
-    base::string16 type16 = base::ASCIIToUTF16(type);
+    std::u16string type16 = base::ASCIIToUTF16(type);
 
     // Uncomment these lines to print the hashes if new ones need to be added.
     // printf("0x%x %s\n",
diff --git a/services/media_session/public/cpp/media_metadata.h b/services/media_session/public/cpp/media_metadata.h
index c9ecd57..8dff1b8 100644
--- a/services/media_session/public/cpp/media_metadata.h
+++ b/services/media_session/public/cpp/media_metadata.h
@@ -41,18 +41,18 @@
 #endif
 
   // Title associated to the MediaSession.
-  base::string16 title;
+  std::u16string title;
 
   // Artist associated to the MediaSession.
-  base::string16 artist;
+  std::u16string artist;
 
   // Album associated to the MediaSession.
-  base::string16 album;
+  std::u16string album;
 
   // The |source_title| is a human readable title for the source of the media
   // session. This could be the name of the app or the name of the site playing
   // media.
-  base::string16 source_title;
+  std::u16string source_title;
 
   // Returns whether |this| contains no metadata.
   bool IsEmpty() const;
diff --git a/services/media_session/public/cpp/media_session_mojom_traits.h b/services/media_session/public/cpp/media_session_mojom_traits.h
index bc6e21f8..85503d3 100644
--- a/services/media_session/public/cpp/media_session_mojom_traits.h
+++ b/services/media_session/public/cpp/media_session_mojom_traits.h
@@ -26,7 +26,7 @@
     return image.src;
   }
 
-  static const base::string16& type(const media_session::MediaImage& image) {
+  static const std::u16string& type(const media_session::MediaImage& image) {
     return image.type;
   }
 
@@ -42,22 +42,22 @@
 template <>
 struct StructTraits<media_session::mojom::MediaMetadataDataView,
                     media_session::MediaMetadata> {
-  static const base::string16& title(
+  static const std::u16string& title(
       const media_session::MediaMetadata& metadata) {
     return metadata.title;
   }
 
-  static const base::string16& artist(
+  static const std::u16string& artist(
       const media_session::MediaMetadata& metadata) {
     return metadata.artist;
   }
 
-  static const base::string16& album(
+  static const std::u16string& album(
       const media_session::MediaMetadata& metadata) {
     return metadata.album;
   }
 
-  static const base::string16& source_title(
+  static const std::u16string& source_title(
       const media_session::MediaMetadata& metadata) {
     return metadata.source_title;
   }
diff --git a/services/network/dhcp_pac_file_fetcher_mojo.cc b/services/network/dhcp_pac_file_fetcher_mojo.cc
index 38f2e8a..6ccc1b0 100644
--- a/services/network/dhcp_pac_file_fetcher_mojo.cc
+++ b/services/network/dhcp_pac_file_fetcher_mojo.cc
@@ -25,7 +25,7 @@
 DhcpPacFileFetcherMojo::~DhcpPacFileFetcherMojo() = default;
 
 int DhcpPacFileFetcherMojo::Fetch(
-    base::string16* utf16_text,
+    std::u16string* utf16_text,
     net::CompletionOnceCallback callback,
     const net::NetLogWithSource& net_log,
     const net::NetworkTrafficAnnotationTag traffic_annotation) {
@@ -68,7 +68,7 @@
   pac_file_fetcher_ = std::move(pac_file_fetcher);
 }
 void DhcpPacFileFetcherMojo::ContinueFetch(
-    base::string16* utf16_text,
+    std::u16string* utf16_text,
     const net::NetworkTrafficAnnotationTag traffic_annotation,
     std::string pac_url) {
   pac_url_ = GURL(pac_url);
diff --git a/services/network/dhcp_pac_file_fetcher_mojo.h b/services/network/dhcp_pac_file_fetcher_mojo.h
index 0de1c49..388d6e1 100644
--- a/services/network/dhcp_pac_file_fetcher_mojo.h
+++ b/services/network/dhcp_pac_file_fetcher_mojo.h
@@ -41,7 +41,7 @@
   ~DhcpPacFileFetcherMojo() override;
 
   // DhcpPacFileFetcher implementation
-  int Fetch(base::string16* utf16_text,
+  int Fetch(std::u16string* utf16_text,
             net::CompletionOnceCallback callback,
             const net::NetLogWithSource& net_log,
             const net::NetworkTrafficAnnotationTag traffic_annotation) override;
@@ -54,14 +54,14 @@
       std::unique_ptr<net::PacFileFetcher> pac_file_fetcher);
 
  private:
-  void ContinueFetch(base::string16* utf16_text,
+  void ContinueFetch(std::u16string* utf16_text,
                      const net::NetworkTrafficAnnotationTag traffic_annotation,
                      std::string pac_url);
   void OnFetchCompleted(int result);
   void OnPacUrlReceived(const std::string& url);
 
   net::CompletionOnceCallback callback_;
-  base::string16* utf16_text_;
+  std::u16string* utf16_text_;
   GURL pac_url_;
   net::MutableNetworkTrafficAnnotationTag traffic_annotation_;
   std::unique_ptr<net::PacFileFetcher> pac_file_fetcher_;
diff --git a/services/network/dhcp_pac_file_fetcher_mojo_unittest.cc b/services/network/dhcp_pac_file_fetcher_mojo_unittest.cc
index 992e4d5e..fae0f65 100644
--- a/services/network/dhcp_pac_file_fetcher_mojo_unittest.cc
+++ b/services/network/dhcp_pac_file_fetcher_mojo_unittest.cc
@@ -52,7 +52,7 @@
   CreateFetcher(pac_url.spec());
 
   net::TestCompletionCallback callback;
-  base::string16 pac_text;
+  std::u16string pac_text;
   dhcp_pac_file_fetcher_mojo_->Fetch(&pac_text, callback.callback(),
                                      net::NetLogWithSource(),
                                      TRAFFIC_ANNOTATION_FOR_TESTS);
@@ -68,7 +68,7 @@
   CreateFetcher(std::string());
 
   net::TestCompletionCallback callback;
-  base::string16 pac_text;
+  std::u16string pac_text;
   dhcp_pac_file_fetcher_mojo_->Fetch(&pac_text, callback.callback(),
                                      net::NetLogWithSource(),
                                      TRAFFIC_ANNOTATION_FOR_TESTS);
diff --git a/services/network/network_context_unittest.cc b/services/network/network_context_unittest.cc
index a783ae2..0855a57a 100644
--- a/services/network/network_context_unittest.cc
+++ b/services/network/network_context_unittest.cc
@@ -1815,8 +1815,8 @@
   test_clock.SetNow(start_time);
   cache->set_clock_for_testing(&test_clock);
 
-  base::string16 user = base::ASCIIToUTF16("user");
-  base::string16 password = base::ASCIIToUTF16("pass");
+  std::u16string user = base::ASCIIToUTF16("user");
+  std::u16string password = base::ASCIIToUTF16("pass");
   cache->Add(origin, net::HttpAuth::AUTH_SERVER, "Realm1",
              net::HttpAuth::AUTH_SCHEME_BASIC, net::NetworkIsolationKey(),
              "basic realm=Realm1", net::AuthCredentials(user, password), "/");
@@ -1882,8 +1882,8 @@
   test_clock.SetNow(start_time);
   cache->set_clock_for_testing(&test_clock);
 
-  base::string16 user = base::ASCIIToUTF16("user");
-  base::string16 password = base::ASCIIToUTF16("pass");
+  std::u16string user = base::ASCIIToUTF16("user");
+  std::u16string password = base::ASCIIToUTF16("pass");
   cache->Add(origin, net::HttpAuth::AUTH_SERVER, "Realm1",
              net::HttpAuth::AUTH_SCHEME_BASIC, net::NetworkIsolationKey(),
              "basic realm=Realm1", net::AuthCredentials(user, password), "/");
@@ -1967,8 +1967,8 @@
                                   ->GetSession()
                                   ->http_auth_cache();
 
-  base::string16 user = base::ASCIIToUTF16("user");
-  base::string16 password = base::ASCIIToUTF16("pass");
+  std::u16string user = base::ASCIIToUTF16("user");
+  std::u16string password = base::ASCIIToUTF16("pass");
   cache->Add(origin, net::HttpAuth::AUTH_SERVER, "Realm",
              net::HttpAuth::AUTH_SCHEME_BASIC, network_isolation_key1,
              "basic realm=Realm", net::AuthCredentials(user, password), "/");
@@ -2027,8 +2027,8 @@
                                   ->GetSession()
                                   ->http_auth_cache();
 
-  base::string16 user = base::ASCIIToUTF16("user");
-  base::string16 password = base::ASCIIToUTF16("pass");
+  std::u16string user = base::ASCIIToUTF16("user");
+  std::u16string password = base::ASCIIToUTF16("pass");
   cache->Add(http_proxy, net::HttpAuth::AUTH_PROXY, "Realm",
              net::HttpAuth::AUTH_SCHEME_BASIC, net::NetworkIsolationKey(),
              "basic realm=Realm", net::AuthCredentials(user, password),
diff --git a/services/network/network_service_network_delegate.cc b/services/network/network_service_network_delegate.cc
index 8f65f16..cd21d0e 100644
--- a/services/network/network_service_network_delegate.cc
+++ b/services/network/network_service_network_delegate.cc
@@ -177,7 +177,7 @@
 
 void NetworkServiceNetworkDelegate::OnPACScriptError(
     int line_number,
-    const base::string16& error) {
+    const std::u16string& error) {
   if (!proxy_error_client_)
     return;
 
diff --git a/services/network/network_service_network_delegate.h b/services/network/network_service_network_delegate.h
index 0926327..1e81d8e 100644
--- a/services/network/network_service_network_delegate.h
+++ b/services/network/network_service_network_delegate.h
@@ -54,7 +54,7 @@
   void OnCompleted(net::URLRequest* request,
                    bool started,
                    int net_error) override;
-  void OnPACScriptError(int line_number, const base::string16& error) override;
+  void OnPACScriptError(int line_number, const std::u16string& error) override;
   bool OnCanGetCookies(const net::URLRequest& request,
                        bool allowed_from_caller) override;
   bool OnCanSetCookie(const net::URLRequest& request,
diff --git a/services/network/proxy_service_mojo_unittest.cc b/services/network/proxy_service_mojo_unittest.cc
index 64cdcb3b..25b3bc9 100644
--- a/services/network/proxy_service_mojo_unittest.cc
+++ b/services/network/proxy_service_mojo_unittest.cc
@@ -73,14 +73,14 @@
 
   net::EventWaiter<Event>& event_waiter() { return event_waiter_; }
 
-  void OnPACScriptError(int line_number, const base::string16& error) override;
+  void OnPACScriptError(int line_number, const std::u16string& error) override;
 
  private:
   net::EventWaiter<Event> event_waiter_;
 };
 
 void TestNetworkDelegate::OnPACScriptError(int line_number,
-                                           const base::string16& error) {
+                                           const std::u16string& error) {
   event_waiter_.NotifyEvent(PAC_SCRIPT_ERROR);
   EXPECT_EQ(3, line_number);
   EXPECT_TRUE(base::UTF16ToUTF8(error).find("error: http://foo") !=
diff --git a/services/network/public/cpp/net_ipc_param_traits.cc b/services/network/public/cpp/net_ipc_param_traits.cc
index f7f7db1..5e77522 100644
--- a/services/network/public/cpp/net_ipc_param_traits.cc
+++ b/services/network/public/cpp/net_ipc_param_traits.cc
@@ -20,9 +20,9 @@
 bool ParamTraits<net::AuthCredentials>::Read(const base::Pickle* m,
                                              base::PickleIterator* iter,
                                              param_type* r) {
-  base::string16 username;
+  std::u16string username;
   bool read_username = ReadParam(m, iter, &username);
-  base::string16 password;
+  std::u16string password;
   bool read_password = ReadParam(m, iter, &password);
 
   if (!read_username || !read_password)
diff --git a/services/preferences/public/cpp/dictionary_value_update.cc b/services/preferences/public/cpp/dictionary_value_update.cc
index 04e9098..62a07464 100644
--- a/services/preferences/public/cpp/dictionary_value_update.cc
+++ b/services/preferences/public/cpp/dictionary_value_update.cc
@@ -81,7 +81,7 @@
 }
 
 void DictionaryValueUpdate::SetString(base::StringPiece path,
-                                      const base::string16& in_value) {
+                                      const std::u16string& in_value) {
   Set(path, std::make_unique<base::Value>(in_value));
 }
 
@@ -152,7 +152,7 @@
 }
 
 bool DictionaryValueUpdate::GetString(base::StringPiece path,
-                                      base::string16* out_value) const {
+                                      std::u16string* out_value) const {
   return value_->GetString(path, out_value);
 }
 
@@ -211,7 +211,7 @@
 
 bool DictionaryValueUpdate::GetStringWithoutPathExpansion(
     base::StringPiece key,
-    base::string16* out_value) const {
+    std::u16string* out_value) const {
   return value_->GetStringWithoutPathExpansion(key, out_value);
 }
 
diff --git a/services/preferences/public/cpp/dictionary_value_update.h b/services/preferences/public/cpp/dictionary_value_update.h
index 3142ec9..2d8de14 100644
--- a/services/preferences/public/cpp/dictionary_value_update.h
+++ b/services/preferences/public/cpp/dictionary_value_update.h
@@ -65,7 +65,7 @@
   void SetInteger(base::StringPiece path, int in_value);
   void SetDouble(base::StringPiece path, double in_value);
   void SetString(base::StringPiece path, base::StringPiece in_value);
-  void SetString(base::StringPiece path, const base::string16& in_value);
+  void SetString(base::StringPiece path, const std::u16string& in_value);
   std::unique_ptr<DictionaryValueUpdate> SetDictionary(
       base::StringPiece path,
       std::unique_ptr<base::DictionaryValue> in_value);
@@ -91,7 +91,7 @@
   // doubles.
   bool GetDouble(base::StringPiece path, double* out_value) const;
   bool GetString(base::StringPiece path, std::string* out_value) const;
-  bool GetString(base::StringPiece path, base::string16* out_value) const;
+  bool GetString(base::StringPiece path, std::u16string* out_value) const;
   bool GetDictionary(base::StringPiece path,
                      const base::DictionaryValue** out_value) const;
   bool GetDictionary(base::StringPiece path,
@@ -110,7 +110,7 @@
   bool GetStringWithoutPathExpansion(base::StringPiece key,
                                      std::string* out_value) const;
   bool GetStringWithoutPathExpansion(base::StringPiece key,
-                                     base::string16* out_value) const;
+                                     std::u16string* out_value) const;
   bool GetDictionaryWithoutPathExpansion(
       base::StringPiece key,
       const base::DictionaryValue** out_value) const;
diff --git a/services/proxy_resolver/mojo_proxy_resolver_v8_tracing_bindings.h b/services/proxy_resolver/mojo_proxy_resolver_v8_tracing_bindings.h
index 1c79e005..b3cb898 100644
--- a/services/proxy_resolver/mojo_proxy_resolver_v8_tracing_bindings.h
+++ b/services/proxy_resolver/mojo_proxy_resolver_v8_tracing_bindings.h
@@ -41,12 +41,12 @@
   }
 
   // ProxyResolverV8Tracing::Bindings overrides.
-  void Alert(const base::string16& message) override {
+  void Alert(const std::u16string& message) override {
     DCHECK(thread_checker_.CalledOnValidThread());
     client_->Alert(base::UTF16ToUTF8(message));
   }
 
-  void OnError(int line_number, const base::string16& message) override {
+  void OnError(int line_number, const std::u16string& message) override {
     DCHECK(thread_checker_.CalledOnValidThread());
     client_->OnError(line_number, base::UTF16ToUTF8(message));
   }
diff --git a/services/proxy_resolver/proxy_resolver_v8.cc b/services/proxy_resolver/proxy_resolver_v8.cc
index 56a5cfb8..08fd2b1 100644
--- a/services/proxy_resolver/proxy_resolver_v8.cc
+++ b/services/proxy_resolver/proxy_resolver_v8.cc
@@ -146,10 +146,10 @@
   return result;
 }
 
-// Converts a V8 String to a UTF16 base::string16.
-base::string16 V8StringToUTF16(v8::Isolate* isolate, v8::Local<v8::String> s) {
+// Converts a V8 String to a UTF16 std::u16string.
+std::u16string V8StringToUTF16(v8::Isolate* isolate, v8::Local<v8::String> s) {
   int len = s->Length();
-  base::string16 result;
+  std::u16string result;
   // Note that the reinterpret cast is because on Windows string16 is an alias
   // to wstring, and hence has character type wchar_t not uint16_t.
   if (len > 0) {
@@ -169,7 +169,7 @@
       .ToLocalChecked();
 }
 
-// Converts a UTF16 base::string16 (wrapped by a net::PacFileData) to a
+// Converts a UTF16 std::u16string (wrapped by a net::PacFileData) to a
 // V8 string.
 v8::Local<v8::String> ScriptDataToV8String(
     v8::Isolate* isolate,
@@ -202,7 +202,7 @@
 // Stringizes a V8 object by calling its toString() method. Returns true
 // on success. This may fail if the toString() throws an exception.
 bool V8ObjectToUTF16String(v8::Local<v8::Value> object,
-                           base::string16* utf16_result,
+                           std::u16string* utf16_result,
                            v8::Isolate* isolate) {
   if (object.IsEmpty())
     return false;
@@ -223,7 +223,7 @@
   if (args.Length() == 0 || args[0].IsEmpty() || !args[0]->IsString())
     return false;
 
-  const base::string16 hostname_utf16 =
+  const std::u16string hostname_utf16 =
       V8StringToUTF16(args.GetIsolate(), v8::Local<v8::String>::Cast(args[0]));
 
   // If the hostname is already in ASCII, simply return it as is.
@@ -482,7 +482,7 @@
       return net::ERR_PAC_SCRIPT_FAILED;
     }
 
-    base::string16 ret_str =
+    std::u16string ret_str =
         V8StringToUTF16(isolate_, v8::Local<v8::String>::Cast(ret));
 
     if (!base::IsStringASCII(ret_str)) {
@@ -490,7 +490,7 @@
       //               could extend the parsing to handle IDNA hostnames by
       //               converting them to ASCII punycode.
       //               crbug.com/47234
-      base::string16 error_message =
+      std::u16string error_message =
           base::ASCIIToUTF16(
               "FindProxyForURL() returned a non-ASCII string "
               "(crbug.com/47234): ") +
@@ -636,7 +636,7 @@
   void HandleError(v8::Local<v8::Message> message) {
     v8::Local<v8::Context> context =
         v8::Local<v8::Context>::New(isolate_, v8_context_);
-    base::string16 error_message;
+    std::u16string error_message;
     int line_number = -1;
 
     if (!message.IsEmpty()) {
@@ -688,7 +688,7 @@
 
     // Like firefox we assume "undefined" if no argument was specified, and
     // disregard any arguments beyond the first.
-    base::string16 message;
+    std::u16string message;
     if (args.Length() == 0) {
       message = base::ASCIIToUTF16("undefined");
     } else {
diff --git a/services/proxy_resolver/proxy_resolver_v8.h b/services/proxy_resolver/proxy_resolver_v8.h
index 081623b..581b7d6 100644
--- a/services/proxy_resolver/proxy_resolver_v8.h
+++ b/services/proxy_resolver/proxy_resolver_v8.h
@@ -43,11 +43,11 @@
                             bool* terminate) = 0;
 
     // Handler for "alert(message)"
-    virtual void Alert(const base::string16& message) = 0;
+    virtual void Alert(const std::u16string& message) = 0;
 
     // Handler for when an error is encountered. |line_number| may be -1
     // if a line number is not applicable to this error.
-    virtual void OnError(int line_number, const base::string16& error) = 0;
+    virtual void OnError(int line_number, const std::u16string& error) = 0;
 
    protected:
     virtual ~JSBindings() {}
diff --git a/services/proxy_resolver/proxy_resolver_v8_tracing.cc b/services/proxy_resolver/proxy_resolver_v8_tracing.cc
index 84ed762..6909a3c5 100644
--- a/services/proxy_resolver/proxy_resolver_v8_tracing.cc
+++ b/services/proxy_resolver/proxy_resolver_v8_tracing.cc
@@ -134,7 +134,7 @@
   struct AlertOrError {
     bool is_alert;
     int line_number;
-    base::string16 message;
+    std::u16string message;
   };
 
   ~Job() override;
@@ -166,8 +166,8 @@
                   net::ProxyResolveDnsOperation op,
                   std::string* output,
                   bool* terminate) override;
-  void Alert(const base::string16& message) override;
-  void OnError(int line_number, const base::string16& error) override;
+  void Alert(const std::u16string& message) override;
+  void OnError(int line_number, const std::u16string& error) override;
 
   bool ResolveDnsBlocking(const std::string& host,
                           net::ProxyResolveDnsOperation op,
@@ -205,11 +205,11 @@
 
   void HandleAlertOrError(bool is_alert,
                           int line_number,
-                          const base::string16& message);
+                          const std::u16string& message);
   void DispatchBufferedAlertsAndErrors();
   void DispatchAlertOrErrorOnOriginThread(bool is_alert,
                                           int line_number,
-                                          const base::string16& message);
+                                          const std::u16string& message);
 
   // The thread which called into ProxyResolverV8TracingImpl, and on which the
   // completion callback is expected to run.
@@ -629,11 +629,11 @@
                        : ResolveDnsNonBlocking(host, op, output, terminate);
 }
 
-void Job::Alert(const base::string16& message) {
+void Job::Alert(const std::u16string& message) {
   HandleAlertOrError(true, -1, message);
 }
 
-void Job::OnError(int line_number, const base::string16& error) {
+void Job::OnError(int line_number, const std::u16string& error) {
   HandleAlertOrError(false, line_number, error);
 }
 
@@ -862,7 +862,7 @@
 
 void Job::HandleAlertOrError(bool is_alert,
                              int line_number,
-                             const base::string16& message) {
+                             const std::u16string& message) {
   CheckIsOnWorkerThread();
 
   if (cancelled_.IsSet())
@@ -907,7 +907,7 @@
 
 void Job::DispatchAlertOrErrorOnOriginThread(bool is_alert,
                                              int line_number,
-                                             const base::string16& message) {
+                                             const std::u16string& message) {
   CheckIsOnOriginThread();
 
   if (cancelled_.IsSet())
diff --git a/services/proxy_resolver/proxy_resolver_v8_tracing.h b/services/proxy_resolver/proxy_resolver_v8_tracing.h
index 99b3afe..9a5800a 100644
--- a/services/proxy_resolver/proxy_resolver_v8_tracing.h
+++ b/services/proxy_resolver/proxy_resolver_v8_tracing.h
@@ -35,10 +35,10 @@
     virtual ~Bindings() {}
 
     // Invoked in response to an alert() call by the PAC script.
-    virtual void Alert(const base::string16& message) = 0;
+    virtual void Alert(const std::u16string& message) = 0;
 
     // Invoked in response to an error in the PAC script.
-    virtual void OnError(int line_number, const base::string16& message) = 0;
+    virtual void OnError(int line_number, const std::u16string& message) = 0;
 
     // Returns a HostResolver to use for DNS resolution.
     virtual ProxyHostResolver* GetHostResolver() = 0;
diff --git a/services/proxy_resolver/proxy_resolver_v8_tracing_unittest.cc b/services/proxy_resolver/proxy_resolver_v8_tracing_unittest.cc
index e5e257b..e4dde44 100644
--- a/services/proxy_resolver/proxy_resolver_v8_tracing_unittest.cc
+++ b/services/proxy_resolver/proxy_resolver_v8_tracing_unittest.cc
@@ -80,10 +80,10 @@
   explicit MockBindings(ProxyHostResolver* host_resolver)
       : host_resolver_(host_resolver) {}
 
-  void Alert(const base::string16& message) {
+  void Alert(const std::u16string& message) {
     alerts_.push_back(base::UTF16ToASCII(message));
   }
-  void OnError(int line_number, const base::string16& error) {
+  void OnError(int line_number, const std::u16string& error) {
     waiter_.NotifyEvent(EVENT_ERROR);
     errors_.push_back(std::make_pair(line_number, base::UTF16ToASCII(error)));
     if (!error_callback_.is_null())
@@ -111,12 +111,12 @@
     explicit ForwardingBindings(MockBindings* bindings) : bindings_(bindings) {}
 
     // ProxyResolverV8Tracing::Bindings overrides.
-    void Alert(const base::string16& message) override {
+    void Alert(const std::u16string& message) override {
       DCHECK(thread_checker_.CalledOnValidThread());
       bindings_->Alert(message);
     }
 
-    void OnError(int line_number, const base::string16& error) override {
+    void OnError(int line_number, const std::u16string& error) override {
       DCHECK(thread_checker_.CalledOnValidThread());
       bindings_->OnError(line_number, error);
     }
diff --git a/services/proxy_resolver/proxy_resolver_v8_unittest.cc b/services/proxy_resolver/proxy_resolver_v8_unittest.cc
index 8fefcf9..1355390a 100644
--- a/services/proxy_resolver/proxy_resolver_v8_unittest.cc
+++ b/services/proxy_resolver/proxy_resolver_v8_unittest.cc
@@ -37,7 +37,7 @@
         my_ip_address_ex_count(0),
         should_terminate(false) {}
 
-  void Alert(const base::string16& message) override {
+  void Alert(const std::u16string& message) override {
     VLOG(1) << "PAC-alert: " << message;  // Helpful when debugging.
     alerts.push_back(base::UTF16ToUTF8(message));
   }
@@ -76,7 +76,7 @@
     return false;
   }
 
-  void OnError(int line_number, const base::string16& message) override {
+  void OnError(int line_number, const std::u16string& message) override {
     // Helpful when debugging.
     VLOG(1) << "PAC-error: [" << line_number << "] " << message;
 
diff --git a/services/service_manager/service_instance.cc b/services/service_manager/service_instance.cc
index 0c779ef..3173cd96 100644
--- a/services/service_manager/service_instance.cc
+++ b/services/service_manager/service_instance.cc
@@ -160,7 +160,7 @@
   DCHECK(!service_remote_);
   DCHECK(!process_host_);
 
-  base::string16 display_name;
+  std::u16string display_name;
   switch (manifest_.display_name.type) {
     case Manifest::DisplayName::Type::kDefault:
       display_name =
diff --git a/services/service_manager/service_manager.cc b/services/service_manager/service_manager.cc
index 4599480..a3c3dc7 100644
--- a/services/service_manager/service_manager.cc
+++ b/services/service_manager/service_manager.cc
@@ -80,7 +80,7 @@
   mojo::PendingRemote<mojom::Service> Launch(
       const Identity& identity,
       sandbox::policy::SandboxType sandbox_type,
-      const base::string16& display_name,
+      const std::u16string& display_name,
       LaunchCallback callback) override {
 #if defined(OS_IOS)
     return mojo::NullRemote();
diff --git a/services/service_manager/service_process_host.h b/services/service_manager/service_process_host.h
index 1e8fc7c5..7b22f38 100644
--- a/services/service_manager/service_process_host.h
+++ b/services/service_manager/service_process_host.h
@@ -40,7 +40,7 @@
   virtual mojo::PendingRemote<mojom::Service> Launch(
       const Identity& identity,
       sandbox::policy::SandboxType sandbox_type,
-      const base::string16& display_name,
+      const std::u16string& display_name,
       LaunchCallback callback) = 0;
 };
 
diff --git a/sql/statement.cc b/sql/statement.cc
index f59d420..b5b98a9a 100644
--- a/sql/statement.cc
+++ b/sql/statement.cc
@@ -308,16 +308,16 @@
   return result;
 }
 
-base::string16 Statement::ColumnString16(int col) const {
+std::u16string Statement::ColumnString16(int col) const {
 #if !defined(OS_ANDROID)  // TODO(crbug.com/866218): Remove this conditional
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
 #endif  // OS_ANDROID
 
   if (!CheckValid())
-    return base::string16();
+    return std::u16string();
 
   std::string s = ColumnString(col);
-  return !s.empty() ? base::UTF8ToUTF16(s) : base::string16();
+  return !s.empty() ? base::UTF8ToUTF16(s) : std::u16string();
 }
 
 int Statement::ColumnByteLength(int col) const {
@@ -359,7 +359,7 @@
   return true;
 }
 
-bool Statement::ColumnBlobAsString16(int col, base::string16* val) const {
+bool Statement::ColumnBlobAsString16(int col, std::u16string* val) const {
 #if !defined(OS_ANDROID)  // TODO(crbug.com/866218): Remove this conditional
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
 #endif  // OS_ANDROID
diff --git a/sql/statement.h b/sql/statement.h
index 4ae259b..53d2acb 100644
--- a/sql/statement.h
+++ b/sql/statement.h
@@ -147,7 +147,7 @@
   int64_t ColumnInt64(int col) const;
   double ColumnDouble(int col) const;
   std::string ColumnString(int col) const;
-  base::string16 ColumnString16(int col) const;
+  std::u16string ColumnString16(int col) const;
 
   // When reading a blob, you can get a raw pointer to the underlying data,
   // along with the length, or you can just ask us to copy the blob into a
@@ -155,7 +155,7 @@
   int ColumnByteLength(int col) const;
   const void* ColumnBlob(int col) const;
   bool ColumnBlobAsString(int col, std::string* blob) const;
-  bool ColumnBlobAsString16(int col, base::string16* val) const;
+  bool ColumnBlobAsString16(int col, std::u16string* val) const;
   bool ColumnBlobAsVector(int col, std::vector<char>* val) const;
   bool ColumnBlobAsVector(int col, std::vector<unsigned char>* val) const;
 
diff --git a/storage/browser/database/database_quota_client_unittest.cc b/storage/browser/database/database_quota_client_unittest.cc
index b0c161b..203e3541 100644
--- a/storage/browser/database/database_quota_client_unittest.cc
+++ b/storage/browser/database/database_quota_client_unittest.cc
@@ -107,7 +107,7 @@
       origin_identifier_ = origin_identifier;
     }
 
-    void AddMockDatabase(const base::string16& name, int size) {
+    void AddMockDatabase(const std::u16string& name, int size) {
       EXPECT_FALSE(base::Contains(database_sizes_, name));
       database_sizes_[name] = size;
       total_size_ += size;
diff --git a/storage/browser/database/database_tracker.cc b/storage/browser/database/database_tracker.cc
index cb40db9..44fa2e1 100644
--- a/storage/browser/database/database_tracker.cc
+++ b/storage/browser/database/database_tracker.cc
@@ -56,12 +56,12 @@
 OriginInfo::~OriginInfo() = default;
 
 void OriginInfo::GetAllDatabaseNames(
-    std::vector<base::string16>* databases) const {
+    std::vector<std::u16string>* databases) const {
   for (const auto& name_and_size : database_sizes_)
     databases->push_back(name_and_size.first);
 }
 
-int64_t OriginInfo::GetDatabaseSize(const base::string16& database_name) const {
+int64_t OriginInfo::GetDatabaseSize(const std::u16string& database_name) const {
   auto it = database_sizes_.find(database_name);
   if (it != database_sizes_.end())
     return it->second;
@@ -100,8 +100,8 @@
 }
 
 void DatabaseTracker::DatabaseOpened(const std::string& origin_identifier,
-                                     const base::string16& database_name,
-                                     const base::string16& database_description,
+                                     const std::u16string& database_name,
+                                     const std::u16string& database_description,
                                      int64_t estimated_size,
                                      int64_t* database_size) {
   DCHECK(task_runner_->RunsTasksInCurrentSequence());
@@ -129,7 +129,7 @@
 }
 
 void DatabaseTracker::DatabaseModified(const std::string& origin_identifier,
-                                       const base::string16& database_name) {
+                                       const std::u16string& database_name) {
   DCHECK(task_runner_->RunsTasksInCurrentSequence());
   if (!LazyInit())
     return;
@@ -137,7 +137,7 @@
 }
 
 void DatabaseTracker::DatabaseClosed(const std::string& origin_identifier,
-                                     const base::string16& database_name) {
+                                     const std::u16string& database_name) {
   DCHECK(task_runner_->RunsTasksInCurrentSequence());
   if (database_connections_.IsEmpty()) {
     DCHECK(!is_initialized_);
@@ -156,10 +156,9 @@
     DeleteDatabaseIfNeeded(origin_identifier, database_name);
 }
 
-void DatabaseTracker::HandleSqliteError(
-    const std::string& origin_identifier,
-    const base::string16& database_name,
-    int error) {
+void DatabaseTracker::HandleSqliteError(const std::string& origin_identifier,
+                                        const std::u16string& database_name,
+                                        int error) {
   DCHECK(task_runner_->RunsTasksInCurrentSequence());
   // We only handle errors that indicate corruption and we
   // do so with a heavy hand, we delete it. Any renderers/workers
@@ -196,7 +195,7 @@
 
 void DatabaseTracker::DeleteDatabaseIfNeeded(
     const std::string& origin_identifier,
-    const base::string16& database_name) {
+    const std::u16string& database_name) {
   DCHECK(task_runner_->RunsTasksInCurrentSequence());
   DCHECK(!database_connections_.IsDatabaseOpened(origin_identifier,
                                                  database_name));
@@ -210,7 +209,7 @@
     while (callback != deletion_callbacks_.end()) {
       auto found_origin = callback->second.find(origin_identifier);
       if (found_origin != callback->second.end()) {
-        std::set<base::string16>& databases = found_origin->second;
+        std::set<std::u16string>& databases = found_origin->second;
         databases.erase(database_name);
         if (databases.empty()) {
           callback->second.erase(found_origin);
@@ -257,7 +256,7 @@
     const std::string& origin_identifier) {
   DCHECK(task_runner_->RunsTasksInCurrentSequence());
 
-  base::string16 origin_directory;
+  std::u16string origin_directory;
 
   if (!is_incognito_) {
     origin_directory = base::UTF8ToUTF16(origin_identifier);
@@ -277,7 +276,7 @@
 
 base::FilePath DatabaseTracker::GetFullDBFilePath(
     const std::string& origin_identifier,
-    const base::string16& database_name) {
+    const std::u16string& database_name) {
   DCHECK(task_runner_->RunsTasksInCurrentSequence());
   DCHECK(!origin_identifier.empty());
   if (!LazyInit())
@@ -338,7 +337,7 @@
 
 bool DatabaseTracker::DeleteClosedDatabase(
     const std::string& origin_identifier,
-    const base::string16& database_name) {
+    const std::u16string& database_name) {
   DCHECK(task_runner_->RunsTasksInCurrentSequence());
   if (!LazyInit())
     return false;
@@ -446,13 +445,13 @@
 
 bool DatabaseTracker::IsDatabaseScheduledForDeletion(
     const std::string& origin_identifier,
-    const base::string16& database_name) {
+    const std::u16string& database_name) {
   DCHECK(task_runner_->RunsTasksInCurrentSequence());
   auto it = dbs_to_be_deleted_.find(origin_identifier);
   if (it == dbs_to_be_deleted_.end())
     return false;
 
-  const std::set<base::string16>& databases = it->second;
+  const std::set<std::u16string>& databases = it->second;
   return (databases.find(database_name) != databases.end());
 }
 
@@ -528,8 +527,8 @@
 
 void DatabaseTracker::InsertOrUpdateDatabaseDetails(
     const std::string& origin_identifier,
-    const base::string16& database_name,
-    const base::string16& database_description,
+    const std::u16string& database_name,
+    const std::u16string& database_description,
     int64_t estimated_size) {
   DCHECK(task_runner_->RunsTasksInCurrentSequence());
   DatabaseDetails details;
@@ -598,7 +597,7 @@
 }
 
 int64_t DatabaseTracker::GetDBFileSize(const std::string& origin_identifier,
-                                       const base::string16& database_name) {
+                                       const std::u16string& database_name) {
   DCHECK(task_runner_->RunsTasksInCurrentSequence());
   base::FilePath db_file_name = GetFullDBFilePath(origin_identifier,
                                                   database_name);
@@ -610,8 +609,8 @@
 
 int64_t DatabaseTracker::SeedOpenDatabaseInfo(
     const std::string& origin_id,
-    const base::string16& name,
-    const base::string16& description) {
+    const std::u16string& name,
+    const std::u16string& description) {
   DCHECK(task_runner_->RunsTasksInCurrentSequence());
   DCHECK(database_connections_.IsDatabaseOpened(origin_id, name));
   int64_t size = GetDBFileSize(origin_id, name);
@@ -625,8 +624,8 @@
 
 int64_t DatabaseTracker::UpdateOpenDatabaseInfoAndNotify(
     const std::string& origin_id,
-    const base::string16& name,
-    const base::string16* opt_description) {
+    const std::u16string& name,
+    const std::u16string* opt_description) {
   DCHECK(task_runner_->RunsTasksInCurrentSequence());
   DCHECK(database_connections_.IsDatabaseOpened(origin_id, name));
   int64_t new_size = GetDBFileSize(origin_id, name);
@@ -649,7 +648,7 @@
 
 void DatabaseTracker::ScheduleDatabaseForDeletion(
     const std::string& origin_identifier,
-    const base::string16& database_name) {
+    const std::u16string& database_name) {
   DCHECK(task_runner_->RunsTasksInCurrentSequence());
   DCHECK(database_connections_.IsDatabaseOpened(origin_identifier,
                                                 database_name));
@@ -667,13 +666,13 @@
     deletion_callbacks_.push_back(
         std::make_pair(std::move(callback), databases));
   for (const auto& origin_dbs : databases) {
-    for (const base::string16& db : origin_dbs.second)
+    for (const std::u16string& db : origin_dbs.second)
       ScheduleDatabaseForDeletion(origin_dbs.first, db);
   }
 }
 
 void DatabaseTracker::DeleteDatabase(const std::string& origin_identifier,
-                                     const base::string16& database_name,
+                                     const std::u16string& database_name,
                                      net::CompletionOnceCallback callback) {
   DCHECK(task_runner_->RunsTasksInCurrentSequence());
   DCHECK(!callback.is_null());
@@ -793,7 +792,7 @@
 }
 
 const base::File* DatabaseTracker::GetIncognitoFile(
-    const base::string16& vfs_file_name) const {
+    const std::u16string& vfs_file_name) const {
   DCHECK(task_runner_->RunsTasksInCurrentSequence());
   DCHECK(is_incognito_);
   auto it = incognito_file_handles_.find(vfs_file_name);
@@ -804,7 +803,7 @@
 }
 
 const base::File* DatabaseTracker::SaveIncognitoFile(
-    const base::string16& vfs_file_name,
+    const std::u16string& vfs_file_name,
     base::File file) {
   DCHECK(task_runner_->RunsTasksInCurrentSequence());
   DCHECK(is_incognito_);
@@ -819,7 +818,7 @@
 }
 
 void DatabaseTracker::CloseIncognitoFileHandle(
-    const base::string16& vfs_file_name) {
+    const std::u16string& vfs_file_name) {
   DCHECK(task_runner_->RunsTasksInCurrentSequence());
   DCHECK(is_incognito_);
   DCHECK(incognito_file_handles_.find(vfs_file_name) !=
@@ -833,7 +832,7 @@
 }
 
 bool DatabaseTracker::HasSavedIncognitoFileHandle(
-    const base::string16& vfs_file_name) const {
+    const std::u16string& vfs_file_name) const {
   DCHECK(task_runner_->RunsTasksInCurrentSequence());
   return (incognito_file_handles_.find(vfs_file_name) !=
           incognito_file_handles_.end());
@@ -875,7 +874,7 @@
     if (special_storage_policy_->IsStorageProtected(origin_url))
       continue;
     OriginInfo origin_info;
-    std::vector<base::string16> databases;
+    std::vector<std::u16string> databases;
     GetOriginInfo(origin, &origin_info);
     origin_info.GetAllDatabaseNames(&databases);
 
diff --git a/storage/browser/database/database_tracker.h b/storage/browser/database/database_tracker.h
index e1e34ba..0791b8f 100644
--- a/storage/browser/database/database_tracker.h
+++ b/storage/browser/database/database_tracker.h
@@ -55,8 +55,8 @@
   const std::string& GetOriginIdentifier() const { return origin_identifier_; }
   int64_t TotalSize() const { return total_size_; }
   base::Time LastModified() const { return last_modified_; }
-  void GetAllDatabaseNames(std::vector<base::string16>* databases) const;
-  int64_t GetDatabaseSize(const base::string16& database_name) const;
+  void GetAllDatabaseNames(std::vector<std::u16string>* databases) const;
+  int64_t GetDatabaseSize(const std::u16string& database_name) const;
 
  protected:
   OriginInfo(const std::string& origin_identifier, int64_t total_size);
@@ -64,7 +64,7 @@
   std::string origin_identifier_;
   int64_t total_size_;
   base::Time last_modified_;
-  std::map<base::string16, int64_t> database_sizes_;
+  std::map<std::u16string, int64_t> database_sizes_;
 };
 
 // This class manages the main database and keeps track of open databases.
@@ -79,11 +79,11 @@
   class Observer {
    public:
     virtual void OnDatabaseSizeChanged(const std::string& origin_identifier,
-                                       const base::string16& database_name,
+                                       const std::u16string& database_name,
                                        int64_t database_size) = 0;
     virtual void OnDatabaseScheduledForDeletion(
         const std::string& origin_identifier,
-        const base::string16& database_name) = 0;
+        const std::u16string& database_name) = 0;
 
    protected:
     virtual ~Observer() = default;
@@ -95,16 +95,16 @@
                   QuotaManagerProxy* quota_manager_proxy);
 
   void DatabaseOpened(const std::string& origin_identifier,
-                      const base::string16& database_name,
-                      const base::string16& database_details,
+                      const std::u16string& database_name,
+                      const std::u16string& database_details,
                       int64_t estimated_size,
                       int64_t* database_size);
   void DatabaseModified(const std::string& origin_identifier,
-                        const base::string16& database_name);
+                        const std::u16string& database_name);
   void DatabaseClosed(const std::string& origin_identifier,
-                      const base::string16& database_name);
+                      const std::u16string& database_name);
   void HandleSqliteError(const std::string& origin_identifier,
-                         const base::string16& database_name,
+                         const std::u16string& database_name,
                          int error);
 
   void CloseDatabases(const DatabaseConnections& connections);
@@ -118,7 +118,7 @@
   const base::FilePath& database_directory() const { return db_dir_; }
 
   base::FilePath GetFullDBFilePath(const std::string& origin_identifier,
-                                   const base::string16& database_name);
+                                   const std::u16string& database_name);
 
   // virtual for unit-testing only
   virtual bool GetOriginInfo(const std::string& origin_id, OriginInfo* info);
@@ -131,7 +131,7 @@
   }
 
   bool IsDatabaseScheduledForDeletion(const std::string& origin_identifier,
-                                      const base::string16& database_name);
+                                      const std::u16string& database_name);
 
   // Deletes a single database.
   //
@@ -139,7 +139,7 @@
   // net::Error, which will most likely be net::OK or net::FAILED. `callback`
   // may be called before this method returns.
   void DeleteDatabase(const std::string& origin_identifier,
-                      const base::string16& database_name,
+                      const std::u16string& database_name,
                       net::CompletionOnceCallback callback);
 
   // Deletes databases touched since `cutoff`.
@@ -165,11 +165,11 @@
 
   bool IsIncognitoProfile() const { return is_incognito_; }
 
-  const base::File* GetIncognitoFile(const base::string16& vfs_file_path) const;
-  const base::File* SaveIncognitoFile(const base::string16& vfs_file_path,
+  const base::File* GetIncognitoFile(const std::u16string& vfs_file_path) const;
+  const base::File* SaveIncognitoFile(const std::u16string& vfs_file_path,
                                       base::File file);
-  void CloseIncognitoFileHandle(const base::string16& vfs_file_path);
-  bool HasSavedIncognitoFileHandle(const base::string16& vfs_file_path) const;
+  void CloseIncognitoFileHandle(const std::u16string& vfs_file_path);
+  bool HasSavedIncognitoFileHandle(const std::u16string& vfs_file_path) const;
 
   // Shutdown the database tracker, deleting database files if the tracker is
   // used for an Incognito profile.
@@ -184,7 +184,7 @@
   friend class DatabaseTracker_TestHelper_Test;
   friend class MockDatabaseTracker;  // for testing
 
-  using DatabaseSet = std::map<std::string, std::set<base::string16>>;
+  using DatabaseSet = std::map<std::string, std::set<std::u16string>>;
 
   class CachedOriginInfo : public OriginInfo {
    public:
@@ -192,7 +192,7 @@
     void SetOriginIdentifier(const std::string& origin_identifier) {
       origin_identifier_ = origin_identifier;
     }
-    void SetDatabaseSize(const base::string16& database_name,
+    void SetDatabaseSize(const std::u16string& database_name,
                          int64_t new_size) {
       // If the name does not exist in the map, operator[] creates a new entry
       // with a default-constructed value. The default-constructed value for
@@ -222,20 +222,20 @@
   void ClearSessionOnlyOrigins();
 
   bool DeleteClosedDatabase(const std::string& origin_identifier,
-                            const base::string16& database_name);
+                            const std::u16string& database_name);
 
   // Delete all files belonging to the given origin given that no database
   // connections within this origin are open, or if |force| is true, delete
   // the meta data and rename the associated directory.
   bool DeleteOrigin(const std::string& origin_identifier, bool force);
   void DeleteDatabaseIfNeeded(const std::string& origin_identifier,
-                              const base::string16& database_name);
+                              const std::u16string& database_name);
 
   bool LazyInit();
   bool UpgradeToCurrentVersion();
   void InsertOrUpdateDatabaseDetails(const std::string& origin_identifier,
-                                     const base::string16& database_name,
-                                     const base::string16& database_details,
+                                     const std::u16string& database_name,
+                                     const std::u16string& database_details,
                                      int64_t estimated_size);
 
   void ClearAllCachedOriginInfo();
@@ -248,23 +248,22 @@
   }
 
   int64_t GetDBFileSize(const std::string& origin_identifier,
-                        const base::string16& database_name);
+                        const std::u16string& database_name);
   int64_t SeedOpenDatabaseInfo(const std::string& origin_identifier,
-                               const base::string16& database_name,
-                               const base::string16& description);
+                               const std::u16string& database_name,
+                               const std::u16string& description);
   int64_t UpdateOpenDatabaseInfoAndNotify(
       const std::string& origin_identifier,
-      const base::string16& database_name,
-      const base::string16* opt_description);
+      const std::u16string& database_name,
+      const std::u16string* opt_description);
   int64_t UpdateOpenDatabaseSizeAndNotify(const std::string& origin_identifier,
-                                          const base::string16& database_name) {
+                                          const std::u16string& database_name) {
     return UpdateOpenDatabaseInfoAndNotify(origin_identifier, database_name,
                                            nullptr);
   }
 
-
   void ScheduleDatabaseForDeletion(const std::string& origin_identifier,
-                                   const base::string16& database_name);
+                                   const std::u16string& database_name);
   // Schedule a set of open databases for deletion. If non-null, callback is
   // invoked upon completion.
   void ScheduleDatabasesForDeletion(const DatabaseSet& databases,
@@ -311,7 +310,7 @@
   // main DB and journal file that was accessed. When the Incognito profile
   // goes away (or when the browser crashes), all these handles will be
   // closed, and the files will be deleted.
-  std::map<base::string16, base::File*> incognito_file_handles_;
+  std::map<std::u16string, base::File*> incognito_file_handles_;
 
   // In a non-Incognito profile, all DBs in an origin are stored in a
   // directory named after the origin. In an Incognito profile though, we do
@@ -319,7 +318,7 @@
   // (in case the browser process crashes and those directories are not
   // deleted). So we use this map to assign directory names that do not reveal
   // this information.
-  std::map<std::string, base::string16> incognito_origin_directories_;
+  std::map<std::string, std::u16string> incognito_origin_directories_;
   int incognito_origin_directories_generator_ = 0;
 
   FRIEND_TEST_ALL_PREFIXES(DatabaseTracker, TestHelper);
diff --git a/storage/browser/database/database_tracker_unittest.cc b/storage/browser/database/database_tracker_unittest.cc
index 03a534a..c7d56288 100644
--- a/storage/browser/database/database_tracker_unittest.cc
+++ b/storage/browser/database/database_tracker_unittest.cc
@@ -51,7 +51,7 @@
 
   ~TestObserver() override = default;
   void OnDatabaseSizeChanged(const std::string& origin_identifier,
-                             const base::string16& database_name,
+                             const std::u16string& database_name,
                              int64_t database_size) override {
     if (!observe_size_changes_)
       return;
@@ -62,7 +62,7 @@
   }
   void OnDatabaseScheduledForDeletion(
       const std::string& origin_identifier,
-      const base::string16& database_name) override {
+      const std::u16string& database_name) override {
     if (!observe_scheduled_deletions_)
       return;
     new_notification_received_ = true;
@@ -75,7 +75,7 @@
     return temp_new_notification_received;
   }
   std::string GetNotificationOriginIdentifier() { return origin_identifier_; }
-  base::string16 GetNotificationDatabaseName() { return database_name_; }
+  std::u16string GetNotificationDatabaseName() { return database_name_; }
   int64_t GetNotificationDatabaseSize() { return database_size_; }
 
  private:
@@ -83,13 +83,13 @@
   bool observe_size_changes_;
   bool observe_scheduled_deletions_;
   std::string origin_identifier_;
-  base::string16 database_name_;
+  std::u16string database_name_;
   int64_t database_size_;
 };
 
 void CheckNotificationReceived(TestObserver* observer,
                                const std::string& expected_origin_identifier,
-                               const base::string16& expected_database_name,
+                               const std::u16string& expected_database_name,
                                int64_t expected_database_size) {
   EXPECT_TRUE(observer->DidReceiveNewNotification());
   EXPECT_EQ(expected_origin_identifier,
@@ -228,10 +228,10 @@
               GetIdentifierFromOrigin(GURL(kOrigin1Url));
           const std::string kOrigin2 =
               GetIdentifierFromOrigin(GURL(kOrigin2Url));
-          const base::string16 kDB1 = ASCIIToUTF16("db1");
-          const base::string16 kDB2 = ASCIIToUTF16("db2");
-          const base::string16 kDB3 = ASCIIToUTF16("db3");
-          const base::string16 kDescription =
+          const std::u16string kDB1 = ASCIIToUTF16("db1");
+          const std::u16string kDB2 = ASCIIToUTF16("db2");
+          const std::u16string kDB3 = ASCIIToUTF16("db3");
+          const std::u16string kDescription =
               ASCIIToUTF16("database_description");
 
           tracker->DatabaseOpened(kOrigin1, kDB1, kDescription, 0,
@@ -346,10 +346,10 @@
               GetIdentifierFromOrigin(GURL(kOrigin1Url));
           const std::string kOrigin2 =
               GetIdentifierFromOrigin(GURL(kOrigin2Url));
-          const base::string16 kDB1 = ASCIIToUTF16("db1");
-          const base::string16 kDB2 = ASCIIToUTF16("db2");
-          const base::string16 kDB3 = ASCIIToUTF16("db3");
-          const base::string16 kDescription =
+          const std::u16string kDB1 = ASCIIToUTF16("db1");
+          const std::u16string kDB2 = ASCIIToUTF16("db2");
+          const std::u16string kDB3 = ASCIIToUTF16("db3");
+          const std::u16string kDescription =
               ASCIIToUTF16("database_description");
 
           // Get the info for kOrigin1 and kOrigin2
@@ -473,8 +473,8 @@
   static void DatabaseTrackerQuotaIntegration(bool incognito_mode) {
     const url::Origin kOrigin(url::Origin::Create(GURL(kOrigin1Url)));
     const std::string kOriginId = GetIdentifierFromOrigin(kOrigin);
-    const base::string16 kName = ASCIIToUTF16("name");
-    const base::string16 kDescription = ASCIIToUTF16("description");
+    const std::u16string kName = ASCIIToUTF16("name");
+    const std::u16string kDescription = ASCIIToUTF16("description");
 
     base::test::TaskEnvironment task_environment;
     base::ScopedTempDir temp_dir;
@@ -600,9 +600,9 @@
     int64_t database_size = 0;
     const std::string kOrigin1 = GetIdentifierFromOrigin(GURL(kOrigin1Url));
     const std::string kOrigin2 = GetIdentifierFromOrigin(GURL(kOrigin2Url));
-    const base::string16 kDB1 = ASCIIToUTF16("db1");
-    const base::string16 kDB2 = ASCIIToUTF16("db2");
-    const base::string16 kDescription = ASCIIToUTF16("database_description");
+    const std::u16string kDB1 = ASCIIToUTF16("db1");
+    const std::u16string kDB2 = ASCIIToUTF16("db2");
+    const std::u16string kDescription = ASCIIToUTF16("database_description");
 
     // Initialize the tracker database.
     base::test::TaskEnvironment task_environment;
@@ -695,9 +695,9 @@
     int64_t database_size = 0;
     const std::string kOrigin1 = GetIdentifierFromOrigin(GURL(kOrigin1Url));
     const std::string kOrigin2 = GetIdentifierFromOrigin(GURL(kOrigin2Url));
-    const base::string16 kDB1 = ASCIIToUTF16("db1");
-    const base::string16 kDB2 = ASCIIToUTF16("db2");
-    const base::string16 kDescription = ASCIIToUTF16("database_description");
+    const std::u16string kDB1 = ASCIIToUTF16("db1");
+    const std::u16string kDB2 = ASCIIToUTF16("db2");
+    const std::u16string kDescription = ASCIIToUTF16("database_description");
 
     // Initialize the tracker database.
     base::test::TaskEnvironment task_environment;
@@ -787,9 +787,9 @@
   static void EmptyDatabaseNameIsValid() {
     const GURL kOrigin(kOrigin1Url);
     const std::string kOriginId = GetIdentifierFromOrigin(kOrigin);
-    const base::string16 kEmptyName;
-    const base::string16 kDescription(ASCIIToUTF16("description"));
-    const base::string16 kChangedDescription(
+    const std::u16string kEmptyName;
+    const std::u16string kDescription(ASCIIToUTF16("description"));
+    const std::u16string kChangedDescription(
         ASCIIToUTF16("changed_description"));
 
     // Initialize a tracker database, no need to put it on disk.
@@ -845,8 +845,8 @@
   static void HandleSqliteError() {
     const GURL kOrigin(kOrigin1Url);
     const std::string kOriginId = GetIdentifierFromOrigin(kOrigin);
-    const base::string16 kName(ASCIIToUTF16("name"));
-    const base::string16 kDescription(ASCIIToUTF16("description"));
+    const std::u16string kName(ASCIIToUTF16("name"));
+    const std::u16string kDescription(ASCIIToUTF16("description"));
 
     // Initialize a tracker database, no need to put it on disk.
     const bool kUseInMemoryTrackerDatabase = true;
diff --git a/storage/browser/database/database_util.cc b/storage/browser/database/database_util.cc
index 1488e05..5742c252 100644
--- a/storage/browser/database/database_util.cc
+++ b/storage/browser/database/database_util.cc
@@ -15,7 +15,7 @@
 
 namespace {
 
-bool IsSafeSuffix(const base::string16& suffix) {
+bool IsSafeSuffix(const std::u16string& suffix) {
   char16_t prev_c = 0;
   for (const char16_t c : suffix) {
     if (!(base::IsAsciiAlpha(c) || base::IsAsciiDigit(c) || c == '-' ||
@@ -28,15 +28,14 @@
   }
   return true;
 }
-
 }
 
 const char DatabaseUtil::kJournalFileSuffix[] = "-journal";
 
-bool DatabaseUtil::CrackVfsFileName(const base::string16& vfs_file_name,
+bool DatabaseUtil::CrackVfsFileName(const std::u16string& vfs_file_name,
                                     std::string* origin_identifier,
-                                    base::string16* database_name,
-                                    base::string16* sqlite_suffix) {
+                                    std::u16string* database_name,
+                                    std::u16string* sqlite_suffix) {
   // 'vfs_file_name' is of the form <origin_identifier>/<db_name>#<suffix>.
   // <suffix> is optional.
   DCHECK(!vfs_file_name.empty());
@@ -44,9 +43,8 @@
   size_t last_pound_index = vfs_file_name.rfind('#');
   // '/' and '#' must be present in the string. Also, the string cannot start
   // with a '/' (origin_identifier cannot be empty) and '/' must come before '#'
-  if ((first_slash_index == base::string16::npos) ||
-      (last_pound_index == base::string16::npos) ||
-      (first_slash_index == 0) ||
+  if ((first_slash_index == std::u16string::npos) ||
+      (last_pound_index == std::u16string::npos) || (first_slash_index == 0) ||
       (first_slash_index > last_pound_index)) {
     return false;
   }
@@ -56,7 +54,7 @@
   if (!IsValidOriginIdentifier(origin_id))
     return false;
 
-  base::string16 suffix = vfs_file_name.substr(
+  std::u16string suffix = vfs_file_name.substr(
       last_pound_index + 1, vfs_file_name.length() - last_pound_index - 1);
   if (!IsSafeSuffix(suffix))
     return false;
@@ -76,10 +74,11 @@
 }
 
 base::FilePath DatabaseUtil::GetFullFilePathForVfsFile(
-    DatabaseTracker* db_tracker, const base::string16& vfs_file_name) {
+    DatabaseTracker* db_tracker,
+    const std::u16string& vfs_file_name) {
   std::string origin_identifier;
-  base::string16 database_name;
-  base::string16 sqlite_suffix;
+  std::u16string database_name;
+  std::u16string sqlite_suffix;
   if (!CrackVfsFileName(vfs_file_name, &origin_identifier,
                         &database_name, &sqlite_suffix)) {
     return base::FilePath(); // invalid vfs_file_name
diff --git a/storage/browser/database/database_util.h b/storage/browser/database/database_util.h
index a78e380..e04d986 100644
--- a/storage/browser/database/database_util.h
+++ b/storage/browser/database/database_util.h
@@ -25,13 +25,13 @@
 
   // Extract various information from a database vfs_file_name.  All return
   // parameters are optional.
-  static bool CrackVfsFileName(const base::string16& vfs_file_name,
+  static bool CrackVfsFileName(const std::u16string& vfs_file_name,
                                std::string* origin_identifier,
-                               base::string16* database_name,
-                               base::string16* sqlite_suffix);
+                               std::u16string* database_name,
+                               std::u16string* sqlite_suffix);
   static base::FilePath GetFullFilePathForVfsFile(
       DatabaseTracker* db_tracker,
-      const base::string16& vfs_file_name);
+      const std::u16string& vfs_file_name);
 };
 
 }  // namespace storage
diff --git a/storage/browser/database/database_util_unittest.cc b/storage/browser/database/database_util_unittest.cc
index 2da94bd..6de6151 100644
--- a/storage/browser/database/database_util_unittest.cc
+++ b/storage/browser/database/database_util_unittest.cc
@@ -20,8 +20,8 @@
                      const char* expected_database_name = "",
                      const char* expected_sqlite_suffix = "") {
   std::string origin_identifier;
-  base::string16 database_name;
-  base::string16 sqlite_suffix;
+  std::u16string database_name;
+  std::u16string sqlite_suffix;
   EXPECT_EQ(expected_result,
             DatabaseUtil::CrackVfsFileName(ASCIIToUTF16(vfs_file_name),
                                            &origin_identifier, &database_name,
diff --git a/storage/browser/database/databases_table.cc b/storage/browser/database/databases_table.cc
index c5b3fed0..c11a78e 100644
--- a/storage/browser/database/databases_table.cc
+++ b/storage/browser/database/databases_table.cc
@@ -42,7 +42,7 @@
 }
 
 int64_t DatabasesTable::GetDatabaseID(const std::string& origin_identifier,
-                                      const base::string16& database_name) {
+                                      const std::u16string& database_name) {
   sql::Statement select_statement(db_->GetCachedStatement(
       SQL_FROM_HERE, "SELECT id FROM Databases WHERE origin = ? AND name = ?"));
   select_statement.BindString(0, origin_identifier);
@@ -56,7 +56,7 @@
 }
 
 bool DatabasesTable::GetDatabaseDetails(const std::string& origin_identifier,
-                                        const base::string16& database_name,
+                                        const std::u16string& database_name,
                                         DatabaseDetails* details) {
   DCHECK(details);
   sql::Statement select_statement(db_->GetCachedStatement(
@@ -102,7 +102,7 @@
 
 bool DatabasesTable::DeleteDatabaseDetails(
     const std::string& origin_identifier,
-    const base::string16& database_name) {
+    const std::u16string& database_name) {
   sql::Statement delete_statement(db_->GetCachedStatement(
       SQL_FROM_HERE, "DELETE FROM Databases WHERE origin = ? AND name = ?"));
   delete_statement.BindString(0, origin_identifier);
diff --git a/storage/browser/database/databases_table.h b/storage/browser/database/databases_table.h
index a68b53b..71e392d6 100644
--- a/storage/browser/database/databases_table.h
+++ b/storage/browser/database/databases_table.h
@@ -25,8 +25,8 @@
   ~DatabaseDetails();
 
   std::string origin_identifier;
-  base::string16 database_name;
-  base::string16 description;
+  std::u16string database_name;
+  std::u16string description;
   int64_t estimated_size;
 };
 
@@ -36,14 +36,14 @@
 
   bool Init();
   int64_t GetDatabaseID(const std::string& origin_identifier,
-                        const base::string16& database_name);
+                        const std::u16string& database_name);
   bool GetDatabaseDetails(const std::string& origin_identifier,
-                          const base::string16& database_name,
+                          const std::u16string& database_name,
                           DatabaseDetails* details);
   bool InsertDatabaseDetails(const DatabaseDetails& details);
   bool UpdateDatabaseDetails(const DatabaseDetails& details);
   bool DeleteDatabaseDetails(const std::string& origin_identifier,
-                             const base::string16& database_name);
+                             const std::u16string& database_name);
   bool GetAllOriginIdentifiers(std::vector<std::string>* origin_identifiers);
   bool GetAllDatabaseDetailsForOriginIdentifier(
       const std::string& origin_identifier,
diff --git a/storage/common/database/database_connections.cc b/storage/common/database/database_connections.cc
index d4a32d7..988b3f6 100644
--- a/storage/common/database/database_connections.cc
+++ b/storage/common/database/database_connections.cc
@@ -22,7 +22,7 @@
 
 bool DatabaseConnections::IsDatabaseOpened(
     const std::string& origin_identifier,
-    const base::string16& database_name) const {
+    const std::u16string& database_name) const {
   auto origin_it = connections_.find(origin_identifier);
   if (origin_it == connections_.end())
     return false;
@@ -35,16 +35,15 @@
   return (connections_.find(origin_identifier) != connections_.end());
 }
 
-bool DatabaseConnections::AddConnection(
-    const std::string& origin_identifier,
-    const base::string16& database_name) {
+bool DatabaseConnections::AddConnection(const std::string& origin_identifier,
+                                        const std::u16string& database_name) {
   int& count = connections_[origin_identifier][database_name].first;
   return ++count == 1;
 }
 
 bool DatabaseConnections::RemoveConnection(
     const std::string& origin_identifier,
-    const base::string16& database_name) {
+    const std::u16string& database_name) {
   return RemoveConnectionsHelper(origin_identifier, database_name, 1);
 }
 
@@ -52,9 +51,9 @@
   connections_.clear();
 }
 
-std::vector<std::pair<std::string, base::string16>>
+std::vector<std::pair<std::string, std::u16string>>
 DatabaseConnections::RemoveConnections(const DatabaseConnections& connections) {
-  std::vector<std::pair<std::string, base::string16>> closed_dbs;
+  std::vector<std::pair<std::string, std::u16string>> closed_dbs;
   for (const auto& origin_connections_pair : connections.connections_) {
     const DBConnections& db_connections = origin_connections_pair.second;
     for (const auto& count_size_pair : db_connections) {
@@ -71,7 +70,7 @@
 
 int64_t DatabaseConnections::GetOpenDatabaseSize(
     const std::string& origin_identifier,
-    const base::string16& database_name) const {
+    const std::u16string& database_name) const {
   auto origin_it = connections_.find(origin_identifier);
   DCHECK(origin_it != connections_.end()) << "Database not opened";
   auto it = origin_it->second.find(database_name);
@@ -81,15 +80,15 @@
 
 void DatabaseConnections::SetOpenDatabaseSize(
     const std::string& origin_identifier,
-    const base::string16& database_name,
+    const std::u16string& database_name,
     int64_t size) {
   DCHECK(IsDatabaseOpened(origin_identifier, database_name));
   connections_[origin_identifier][database_name].second = size;
 }
 
-std::vector<std::pair<std::string, base::string16>>
+std::vector<std::pair<std::string, std::u16string>>
 DatabaseConnections::ListConnections() const {
-  std::vector<std::pair<std::string, base::string16>> list;
+  std::vector<std::pair<std::string, std::u16string>> list;
   for (const auto& origin_connections_pair : connections_) {
     const DBConnections& db_connections = origin_connections_pair.second;
     for (const auto& count_size_pair : db_connections)
@@ -100,7 +99,7 @@
 
 bool DatabaseConnections::RemoveConnectionsHelper(
     const std::string& origin_identifier,
-    const base::string16& database_name,
+    const std::u16string& database_name,
     int num_connections) {
   auto origin_iterator = connections_.find(origin_identifier);
   DCHECK(origin_iterator != connections_.end());
diff --git a/storage/common/database/database_connections.h b/storage/common/database/database_connections.h
index 6636f6d..f2178c0 100644
--- a/storage/common/database/database_connections.h
+++ b/storage/common/database/database_connections.h
@@ -23,40 +23,40 @@
 
   bool IsEmpty() const;
   bool IsDatabaseOpened(const std::string& origin_identifier,
-                        const base::string16& database_name) const;
+                        const std::u16string& database_name) const;
   bool IsOriginUsed(const std::string& origin_identifier) const;
 
   // Returns true if this is the first connection.
   bool AddConnection(const std::string& origin_identifier,
-                     const base::string16& database_name);
+                     const std::u16string& database_name);
 
   // Returns true if the last connection was removed.
   bool RemoveConnection(const std::string& origin_identifier,
-                        const base::string16& database_name);
+                        const std::u16string& database_name);
 
   void RemoveAllConnections();
-  std::vector<std::pair<std::string, base::string16>> RemoveConnections(
+  std::vector<std::pair<std::string, std::u16string>> RemoveConnections(
       const DatabaseConnections& connections);
 
   // Can be called only if IsDatabaseOpened would have returned true.
   int64_t GetOpenDatabaseSize(const std::string& origin_identifier,
-                              const base::string16& database_name) const;
+                              const std::u16string& database_name) const;
   void SetOpenDatabaseSize(const std::string& origin_identifier,
-                           const base::string16& database_name,
+                           const std::u16string& database_name,
                            int64_t size);
 
   // Returns a list of the connections, <origin_id, name>.
-  std::vector<std::pair<std::string, base::string16>> ListConnections() const;
+  std::vector<std::pair<std::string, std::u16string>> ListConnections() const;
 
  private:
   // Maps database names to (open count, database size).
-  using DBConnections = std::map<base::string16, std::pair<int, int64_t>>;
+  using DBConnections = std::map<std::u16string, std::pair<int, int64_t>>;
   // Maps origin identifiers to DBConnections.
   std::map<std::string, DBConnections> connections_;
 
   // Returns true if the last connection was removed.
   bool RemoveConnectionsHelper(const std::string& origin_identifier,
-                               const base::string16& database_name,
+                               const std::u16string& database_name,
                                int num_connections);
 };
 
diff --git a/storage/common/database/database_connections_unittest.cc b/storage/common/database/database_connections_unittest.cc
index ee595f9..cbda7087 100644
--- a/storage/common/database/database_connections_unittest.cc
+++ b/storage/common/database/database_connections_unittest.cc
@@ -14,8 +14,8 @@
 
 TEST(DatabaseConnectionsTest, DatabaseConnectionsTest) {
   const std::string kOriginId("origin_id");
-  const base::string16 kName(ASCIIToUTF16("database_name"));
-  const base::string16 kName2(ASCIIToUTF16("database_name2"));
+  const std::u16string kName(ASCIIToUTF16("database_name"));
+  const std::u16string kName2(ASCIIToUTF16("database_name2"));
   const int64_t kSize = 1000;
 
   DatabaseConnections connections;
@@ -52,7 +52,7 @@
   another.AddConnection(kOriginId, kName);
   another.AddConnection(kOriginId, kName2);
 
-  std::vector<std::pair<std::string, base::string16>> closed_dbs =
+  std::vector<std::pair<std::string, std::u16string>> closed_dbs =
       connections.RemoveConnections(another);
   EXPECT_EQ(1u, closed_dbs.size());
   EXPECT_EQ(kOriginId, closed_dbs[0].first);
diff --git a/styleguide/c++/c++.md b/styleguide/c++/c++.md
index 11a3d68..d3da73ee 100644
--- a/styleguide/c++/c++.md
+++ b/styleguide/c++/c++.md
@@ -162,7 +162,7 @@
     not have been compiled with the same sizes for things like `int` and
     `size_t`. However, to the greatest degree possible, avoid letting these
     sized types bleed through the APIs of the layers in question.
-  * Don't use `std::wstring`. Use `base::string16` or `base::FilePath` instead.
+  * Don't use `std::wstring`. Use `std::u16string` or `base::FilePath` instead.
     (Windows-specific code interfacing with system APIs using `wstring` and
     `wchar_t` can still use `string16` and `char16`; it is safe to assume that
     these are equivalent to the "wide" types.)
diff --git a/testing/libfuzzer/fuzzers/language_detection_fuzzer.cc b/testing/libfuzzer/fuzzers/language_detection_fuzzer.cc
index 942fdd3..d2759fc 100644
--- a/testing/libfuzzer/fuzzers/language_detection_fuzzer.cc
+++ b/testing/libfuzzer/fuzzers/language_detection_fuzzer.cc
@@ -26,7 +26,7 @@
   std::string lang(reinterpret_cast<const char*>(data), lang_len);
   std::string html_lang(reinterpret_cast<const char*>(data + lang_len),
                         html_lang_len);
-  base::string16 text(
+  std::u16string text(
       reinterpret_cast<const char16_t*>(data + lang_len + html_lang_len),
       text_len / sizeof(char16_t));
   std::string model_detected_language;
diff --git a/third_party/blink/common/indexeddb/indexed_db_default_mojom_traits.cc b/third_party/blink/common/indexeddb/indexed_db_default_mojom_traits.cc
index 2ceea02d..ab36fe4 100644
--- a/third_party/blink/common/indexeddb/indexed_db_default_mojom_traits.cc
+++ b/third_party/blink/common/indexeddb/indexed_db_default_mojom_traits.cc
@@ -112,7 +112,7 @@
       return true;
     }
     case blink::mojom::IDBKeyDataView::Tag::STRING: {
-      base::string16 string;
+      std::u16string string;
       if (!data.ReadString(&string))
         return false;
       *out = blink::IndexedDBKey(std::move(string));
@@ -170,14 +170,14 @@
 
   switch (data_view.tag()) {
     case blink::mojom::IDBKeyPathDataDataView::Tag::STRING: {
-      base::string16 string;
+      std::u16string string;
       if (!data_view.ReadString(&string))
         return false;
       *out = blink::IndexedDBKeyPath(string);
       return true;
     }
     case blink::mojom::IDBKeyPathDataDataView::Tag::STRING_ARRAY: {
-      std::vector<base::string16> array;
+      std::vector<std::u16string> array;
       if (!data_view.ReadStringArray(&array))
         return false;
       *out = blink::IndexedDBKeyPath(array);
diff --git a/third_party/blink/common/indexeddb/indexeddb_key.cc b/third_party/blink/common/indexeddb/indexeddb_key.cc
index ff886595..4a9981dc 100644
--- a/third_party/blink/common/indexeddb/indexeddb_key.cc
+++ b/third_party/blink/common/indexeddb/indexeddb_key.cc
@@ -75,11 +75,11 @@
       size_estimate_(kOverheadSize +
                      (binary_.length() * sizeof(std::string::value_type))) {}
 
-IndexedDBKey::IndexedDBKey(base::string16 string)
+IndexedDBKey::IndexedDBKey(std::u16string string)
     : type_(mojom::IDBKeyType::String),
       string_(std::move(string)),
       size_estimate_(kOverheadSize +
-                     (string_.length() * sizeof(base::string16::value_type))) {}
+                     (string_.length() * sizeof(std::u16string::value_type))) {}
 
 IndexedDBKey::IndexedDBKey(const IndexedDBKey& other) = default;
 IndexedDBKey::~IndexedDBKey() = default;
diff --git a/third_party/blink/common/indexeddb/indexeddb_key_path.cc b/third_party/blink/common/indexeddb/indexeddb_key_path.cc
index 661815b..00983c5 100644
--- a/third_party/blink/common/indexeddb/indexeddb_key_path.cc
+++ b/third_party/blink/common/indexeddb/indexeddb_key_path.cc
@@ -12,10 +12,10 @@
 
 IndexedDBKeyPath::IndexedDBKeyPath() : type_(mojom::IDBKeyPathType::Null) {}
 
-IndexedDBKeyPath::IndexedDBKeyPath(const base::string16& string)
+IndexedDBKeyPath::IndexedDBKeyPath(const std::u16string& string)
     : type_(mojom::IDBKeyPathType::String), string_(string) {}
 
-IndexedDBKeyPath::IndexedDBKeyPath(const std::vector<base::string16>& array)
+IndexedDBKeyPath::IndexedDBKeyPath(const std::vector<std::u16string>& array)
     : type_(mojom::IDBKeyPathType::Array), array_(array) {}
 
 IndexedDBKeyPath::IndexedDBKeyPath(const IndexedDBKeyPath& other) = default;
@@ -26,12 +26,12 @@
 IndexedDBKeyPath& IndexedDBKeyPath::operator=(IndexedDBKeyPath&& other) =
     default;
 
-const std::vector<base::string16>& IndexedDBKeyPath::array() const {
+const std::vector<std::u16string>& IndexedDBKeyPath::array() const {
   DCHECK(type_ == blink::mojom::IDBKeyPathType::Array);
   return array_;
 }
 
-const base::string16& IndexedDBKeyPath::string() const {
+const std::u16string& IndexedDBKeyPath::string() const {
   DCHECK(type_ == blink::mojom::IDBKeyPathType::String);
   return string_;
 }
diff --git a/third_party/blink/common/indexeddb/indexeddb_key_unittest.cc b/third_party/blink/common/indexeddb/indexeddb_key_unittest.cc
index 328750c..cd04348 100644
--- a/third_party/blink/common/indexeddb/indexeddb_key_unittest.cc
+++ b/third_party/blink/common/indexeddb/indexeddb_key_unittest.cc
@@ -35,7 +35,7 @@
   keys.push_back(IndexedDBKey(date, mojom::IDBKeyType::Date));
   estimates.push_back(24u);  // Overhead + sizeof(double).
 
-  const base::string16 string(1024, static_cast<char16_t>('X'));
+  const std::u16string string(1024, static_cast<char16_t>('X'));
   keys.push_back(IndexedDBKey(std::move(string)));
   // Overhead + string length * sizeof(char16_t).
   estimates.push_back(2064u);
diff --git a/third_party/blink/common/indexeddb/indexeddb_metadata.cc b/third_party/blink/common/indexeddb/indexeddb_metadata.cc
index 9349732..e7e7d03 100644
--- a/third_party/blink/common/indexeddb/indexeddb_metadata.cc
+++ b/third_party/blink/common/indexeddb/indexeddb_metadata.cc
@@ -10,7 +10,7 @@
 
 IndexedDBIndexMetadata::IndexedDBIndexMetadata() = default;
 
-IndexedDBIndexMetadata::IndexedDBIndexMetadata(const base::string16& name,
+IndexedDBIndexMetadata::IndexedDBIndexMetadata(const std::u16string& name,
                                                int64_t id,
                                                const IndexedDBKeyPath& key_path,
                                                bool unique,
@@ -40,7 +40,7 @@
 }
 
 IndexedDBObjectStoreMetadata::IndexedDBObjectStoreMetadata(
-    const base::string16& name,
+    const std::u16string& name,
     int64_t id,
     const IndexedDBKeyPath& key_path,
     bool auto_increment,
@@ -75,7 +75,7 @@
 IndexedDBDatabaseMetadata::IndexedDBDatabaseMetadata() : version(NO_VERSION) {}
 
 IndexedDBDatabaseMetadata::IndexedDBDatabaseMetadata(
-    const base::string16& name,
+    const std::u16string& name,
     int64_t id,
     int64_t version,
     int64_t max_object_store_id)
diff --git a/third_party/blink/common/input/web_coalesced_input_event_mojom_traits.cc b/third_party/blink/common/input/web_coalesced_input_event_mojom_traits.cc
index cc9fdca..50fd458 100644
--- a/third_party/blink/common/input/web_coalesced_input_event_mojom_traits.cc
+++ b/third_party/blink/common/input/web_coalesced_input_event_mojom_traits.cc
@@ -14,7 +14,7 @@
 namespace mojo {
 namespace {
 
-void CopyString(char16_t* dst, const base::string16& text) {
+void CopyString(char16_t* dst, const std::u16string& text) {
   size_t pos = 0;
   for (base::i18n::UTF16CharIterator iter(text);
        !iter.end() && pos < blink::WebKeyboardEvent::kTextLengthCap - 1;
diff --git a/third_party/blink/common/manifest/manifest_mojom_traits.cc b/third_party/blink/common/manifest/manifest_mojom_traits.cc
index f48283d..ebcb3ca1b 100644
--- a/third_party/blink/common/manifest/manifest_mojom_traits.cc
+++ b/third_party/blink/common/manifest/manifest_mojom_traits.cc
@@ -16,10 +16,10 @@
 namespace mojo {
 namespace {
 
-// A wrapper around base::Optional<base::string16> so a custom StructTraits
+// A wrapper around base::Optional<std::u16string> so a custom StructTraits
 // specialization can enforce maximum string length.
 struct TruncatedString16 {
-  base::Optional<base::string16> string;
+  base::Optional<std::u16string> string;
 };
 
 // This function should be kept in sync with IsHostValidForUrlHandler in
@@ -66,7 +66,7 @@
 
     output->string.emplace();
     return StructTraits<mojo_base::mojom::String16DataView,
-                        base::string16>::Read(input, &output->string.value());
+                        std::u16string>::Read(input, &output->string.value());
   }
 };
 
diff --git a/third_party/blink/common/messaging/string_message_codec.cc b/third_party/blink/common/messaging/string_message_codec.cc
index 130cdca..e9a6544 100644
--- a/third_party/blink/common/messaging/string_message_codec.cc
+++ b/third_party/blink/common/messaging/string_message_codec.cc
@@ -73,7 +73,7 @@
   return true;
 }
 
-bool ContainsOnlyLatin1(const base::string16& data) {
+bool ContainsOnlyLatin1(const std::u16string& data) {
   char16_t x = 0;
   for (char16_t c : data)
     x |= c;
@@ -82,7 +82,7 @@
 
 }  // namespace
 
-std::vector<uint8_t> EncodeStringMessage(const base::string16& data) {
+std::vector<uint8_t> EncodeStringMessage(const std::u16string& data) {
   std::vector<uint8_t> buffer;
   WriteUint8(kVersionTag, &buffer);
   WriteUint32(kVersion, &buffer);
@@ -105,7 +105,7 @@
 }
 
 bool DecodeStringMessage(base::span<const uint8_t> encoded_data,
-                         base::string16* result) {
+                         std::u16string* result) {
   const uint8_t* ptr = encoded_data.data();
   const uint8_t* end = ptr + encoded_data.size();
   uint8_t tag;
diff --git a/third_party/blink/common/messaging/string_message_codec_unittest.cc b/third_party/blink/common/messaging/string_message_codec_unittest.cc
index e0c412a..54f90a0 100644
--- a/third_party/blink/common/messaging/string_message_codec_unittest.cc
+++ b/third_party/blink/common/messaging/string_message_codec_unittest.cc
@@ -12,9 +12,9 @@
 namespace blink {
 namespace {
 
-base::string16 DecodeWithV8(const std::vector<uint8_t>& encoded) {
+std::u16string DecodeWithV8(const std::vector<uint8_t>& encoded) {
   base::test::TaskEnvironment task_environment;
-  base::string16 result;
+  std::u16string result;
 
   v8::Isolate::CreateParams params;
   params.array_buffer_allocator =
@@ -45,7 +45,7 @@
   return result;
 }
 
-std::vector<uint8_t> EncodeWithV8(const base::string16& message) {
+std::vector<uint8_t> EncodeWithV8(const std::u16string& message) {
   base::test::TaskEnvironment task_environment;
   std::vector<uint8_t> result;
 
@@ -80,58 +80,58 @@
 }
 
 TEST(StringMessageCodecTest, SelfTest_ASCII) {
-  base::string16 message = base::ASCIIToUTF16("hello");
-  base::string16 decoded;
+  std::u16string message = base::ASCIIToUTF16("hello");
+  std::u16string decoded;
   EXPECT_TRUE(DecodeStringMessage(EncodeStringMessage(message), &decoded));
   EXPECT_EQ(message, decoded);
 }
 
 TEST(StringMessageCodecTest, SelfTest_NonASCII) {
-  base::string16 message = base::WideToUTF16(L"hello \u263A");
-  base::string16 decoded;
+  std::u16string message = base::WideToUTF16(L"hello \u263A");
+  std::u16string decoded;
   EXPECT_TRUE(DecodeStringMessage(EncodeStringMessage(message), &decoded));
   EXPECT_EQ(message, decoded);
 }
 
 TEST(StringMessageCodecTest, SelfTest_NonASCIILongEnoughToForcePadding) {
-  base::string16 message(200, 0x263A);
-  base::string16 decoded;
+  std::u16string message(200, 0x263A);
+  std::u16string decoded;
   EXPECT_TRUE(DecodeStringMessage(EncodeStringMessage(message), &decoded));
   EXPECT_EQ(message, decoded);
 }
 
 TEST(StringMessageCodecTest, SelfToV8Test_ASCII) {
-  base::string16 message = base::ASCIIToUTF16("hello");
+  std::u16string message = base::ASCIIToUTF16("hello");
   EXPECT_EQ(message, DecodeWithV8(EncodeStringMessage(message)));
 }
 
 TEST(StringMessageCodecTest, SelfToV8Test_NonASCII) {
-  base::string16 message = base::WideToUTF16(L"hello \u263A");
+  std::u16string message = base::WideToUTF16(L"hello \u263A");
   EXPECT_EQ(message, DecodeWithV8(EncodeStringMessage(message)));
 }
 
 TEST(StringMessageCodecTest, SelfToV8Test_NonASCIILongEnoughToForcePadding) {
-  base::string16 message(200, 0x263A);
+  std::u16string message(200, 0x263A);
   EXPECT_EQ(message, DecodeWithV8(EncodeStringMessage(message)));
 }
 
 TEST(StringMessageCodecTest, V8ToSelfTest_ASCII) {
-  base::string16 message = base::ASCIIToUTF16("hello");
-  base::string16 decoded;
+  std::u16string message = base::ASCIIToUTF16("hello");
+  std::u16string decoded;
   EXPECT_TRUE(DecodeStringMessage(EncodeWithV8(message), &decoded));
   EXPECT_EQ(message, decoded);
 }
 
 TEST(StringMessageCodecTest, V8ToSelfTest_NonASCII) {
-  base::string16 message = base::WideToUTF16(L"hello \u263A");
-  base::string16 decoded;
+  std::u16string message = base::WideToUTF16(L"hello \u263A");
+  std::u16string decoded;
   EXPECT_TRUE(DecodeStringMessage(EncodeWithV8(message), &decoded));
   EXPECT_EQ(message, decoded);
 }
 
 TEST(StringMessageCodecTest, V8ToSelfTest_NonASCIILongEnoughToForcePadding) {
-  base::string16 message(200, 0x263A);
-  base::string16 decoded;
+  std::u16string message(200, 0x263A);
+  std::u16string decoded;
   EXPECT_TRUE(DecodeStringMessage(EncodeWithV8(message), &decoded));
   EXPECT_EQ(message, decoded);
 }
diff --git a/third_party/blink/common/messaging/web_message_port.cc b/third_party/blink/common/messaging/web_message_port.cc
index 5a8b0b32..0af4908 100644
--- a/third_party/blink/common/messaging/web_message_port.cc
+++ b/third_party/blink/common/messaging/web_message_port.cc
@@ -19,7 +19,7 @@
     default;
 WebMessagePort::Message::~Message() = default;
 
-WebMessagePort::Message::Message(const base::string16& data) : data(data) {}
+WebMessagePort::Message::Message(const std::u16string& data) : data(data) {}
 
 WebMessagePort::Message::Message(std::vector<WebMessagePort> ports)
     : ports(std::move(ports)) {}
@@ -28,11 +28,11 @@
   ports.emplace_back(std::move(port));
 }
 
-WebMessagePort::Message::Message(const base::string16& data,
+WebMessagePort::Message::Message(const std::u16string& data,
                                  std::vector<WebMessagePort> ports)
     : data(data), ports(std::move(ports)) {}
 
-WebMessagePort::Message::Message(const base::string16& data,
+WebMessagePort::Message::Message(const std::u16string& data,
                                  WebMessagePort port)
     : data(data) {
   ports.emplace_back(std::move(port));
diff --git a/third_party/blink/common/messaging/web_message_port_unittest.cc b/third_party/blink/common/messaging/web_message_port_unittest.cc
index a2e87fd..702ef17 100644
--- a/third_party/blink/common/messaging/web_message_port_unittest.cc
+++ b/third_party/blink/common/messaging/web_message_port_unittest.cc
@@ -87,7 +87,7 @@
   EXPECT_TRUE(port1.CanPostMessage());
 
   // Send a simple string-only message one way from port 0 to port 1.
-  base::string16 message(base::UTF8ToUTF16("foo"));
+  std::u16string message(base::UTF8ToUTF16("foo"));
   {
     base::RunLoop run_loop;
     EXPECT_CALL(receiver1, OnMessage(_))
diff --git a/third_party/blink/common/page_state/page_state.cc b/third_party/blink/common/page_state/page_state.cc
index 72d1b99..11773b51 100644
--- a/third_party/blink/common/page_state/page_state.cc
+++ b/third_party/blink/common/page_state/page_state.cc
@@ -19,11 +19,11 @@
 namespace blink {
 namespace {
 
-base::FilePath ToFilePath(const base::Optional<base::string16>& s) {
+base::FilePath ToFilePath(const base::Optional<std::u16string>& s) {
   return s ? base::FilePath::FromUTF16Unsafe(*s) : base::FilePath();
 }
 
-void ToFilePathVector(const std::vector<base::Optional<base::string16>>& input,
+void ToFilePathVector(const std::vector<base::Optional<std::u16string>>& input,
                       std::vector<base::FilePath>* output) {
   output->clear();
   output->reserve(input.size());
diff --git a/third_party/blink/common/page_state/page_state_serialization.cc b/third_party/blink/common/page_state/page_state_serialization.cc
index b0914088..c44237a4 100644
--- a/third_party/blink/common/page_state/page_state_serialization.cc
+++ b/third_party/blink/common/page_state/page_state_serialization.cc
@@ -44,7 +44,7 @@
 
 void AppendFileRangeToRequestBody(
     const scoped_refptr<network::ResourceRequestBody>& request_body,
-    const base::Optional<base::string16>& file_path,
+    const base::Optional<std::u16string>& file_path,
     int file_start,
     int file_length,
     base::Time file_modification_time) {
@@ -59,7 +59,7 @@
 
 void AppendReferencedFilesFromHttpBody(
     const std::vector<network::DataElement>& elements,
-    std::vector<base::Optional<base::string16>>* referenced_files) {
+    std::vector<base::Optional<std::u16string>>* referenced_files) {
   for (size_t i = 0; i < elements.size(); ++i) {
     if (elements[i].type() == network::DataElement::Tag::kFile) {
       referenced_files->emplace_back(
@@ -69,8 +69,8 @@
 }
 
 bool AppendReferencedFilesFromDocumentState(
-    const std::vector<base::Optional<base::string16>>& document_state,
-    std::vector<base::Optional<base::string16>>* referenced_files) {
+    const std::vector<base::Optional<std::u16string>>& document_state,
+    std::vector<base::Optional<std::u16string>>* referenced_files) {
   if (document_state.empty())
     return true;
 
@@ -99,7 +99,7 @@
       return false;
 
     index++;  // Skip over name.
-    const base::Optional<base::string16>& type = document_state[index++];
+    const base::Optional<std::u16string>& type = document_state[index++];
 
     if (index >= document_state.size())
       return false;
@@ -129,7 +129,7 @@
 
 bool RecursivelyAppendReferencedFiles(
     const ExplodedFrameState& frame_state,
-    std::vector<base::Optional<base::string16>>* referenced_files) {
+    std::vector<base::Optional<std::u16string>>* referenced_files) {
   if (frame_state.http_body.request_body) {
     AppendReferencedFilesFromHttpBody(
         *frame_state.http_body.request_body->elements(), referenced_files);
@@ -290,8 +290,8 @@
   return std::string();
 }
 
-// Pickles a base::string16 as <int length>:<char*16 data> tuple>.
-void WriteString(const base::string16& str, SerializeObject* obj) {
+// Pickles a std::u16string as <int length>:<char*16 data> tuple>.
+void WriteString(const std::u16string& str, SerializeObject* obj) {
   const char16_t* data = str.data();
   size_t length_in_bytes = str.length() * sizeof(char16_t);
 
@@ -302,8 +302,8 @@
 }
 
 // If str is a null optional, this simply pickles a length of -1. Otherwise,
-// delegates to the base::string16 overload.
-void WriteString(const base::Optional<base::string16>& str,
+// delegates to the std::u16string overload.
+void WriteString(const base::Optional<std::u16string>& str,
                  SerializeObject* obj) {
   if (!str) {
     obj->pickle.WriteInt(-1);
@@ -312,7 +312,7 @@
   }
 }
 
-// This reads a serialized base::Optional<base::string16> from obj. If a string
+// This reads a serialized base::Optional<std::u16string> from obj. If a string
 // can't be read, nullptr is returned.
 const char16_t* ReadStringNoCopy(SerializeObject* obj, int* num_chars) {
   int length_in_bytes;
@@ -335,10 +335,10 @@
   return reinterpret_cast<const char16_t*>(data);
 }
 
-base::Optional<base::string16> ReadString(SerializeObject* obj) {
+base::Optional<std::u16string> ReadString(SerializeObject* obj) {
   int num_chars;
   const char16_t* chars = ReadStringNoCopy(obj, &num_chars);
-  base::Optional<base::string16> result;
+  base::Optional<std::u16string> result;
   if (chars)
     result.emplace(chars, num_chars);
   return result;
@@ -370,7 +370,7 @@
 }
 
 // Writes a Vector of strings into a SerializeObject for serialization.
-void WriteStringVector(const std::vector<base::Optional<base::string16>>& data,
+void WriteStringVector(const std::vector<base::Optional<std::u16string>>& data,
                        SerializeObject* obj) {
   WriteAndValidateVectorSize(data, obj);
   for (size_t i = 0; i < data.size(); ++i) {
@@ -379,9 +379,9 @@
 }
 
 void ReadStringVector(SerializeObject* obj,
-                      std::vector<base::Optional<base::string16>>* result) {
+                      std::vector<base::Optional<std::u16string>>* result) {
   size_t num_elements =
-      ReadAndValidateVectorSize(obj, sizeof(base::Optional<base::string16>));
+      ReadAndValidateVectorSize(obj, sizeof(base::Optional<std::u16string>));
 
   result->resize(num_elements);
   for (size_t i = 0; i < num_elements; ++i)
@@ -432,7 +432,7 @@
                                 length);
       }
     } else if (type == HTTPBodyElementType::kTypeFile) {
-      base::Optional<base::string16> file_path = ReadString(obj);
+      base::Optional<std::u16string> file_path = ReadString(obj);
       int64_t file_start = ReadInteger64(obj);
       int64_t file_length = ReadInteger64(obj);
       double file_modification_time = ReadReal(obj);
diff --git a/third_party/blink/common/page_state/page_state_serialization_unittest.cc b/third_party/blink/common/page_state/page_state_serialization_unittest.cc
index 3b5427e..2f2ee7f 100644
--- a/third_party/blink/common/page_state/page_state_serialization_unittest.cc
+++ b/third_party/blink/common/page_state/page_state_serialization_unittest.cc
@@ -143,7 +143,7 @@
 
   void PopulateHttpBody(
       ExplodedHttpBody* http_body,
-      std::vector<base::Optional<base::string16>>* referenced_files) {
+      std::vector<base::Optional<std::u16string>>* referenced_files) {
     http_body->request_body = new network::ResourceRequestBody();
     http_body->request_body->set_identifier(12345);
     http_body->contains_passwords = false;
diff --git a/third_party/blink/common/unique_name/unique_name_helper_unittest.cc b/third_party/blink/common/unique_name/unique_name_helper_unittest.cc
index b8f97de..0b8d4ac20 100644
--- a/third_party/blink/common/unique_name/unique_name_helper_unittest.cc
+++ b/third_party/blink/common/unique_name/unique_name_helper_unittest.cc
@@ -107,7 +107,7 @@
   // names to this TestFrameAdapter.
   void VerifyUpdatedFrameState(const ExplodedFrameState& frame_state) const {
     EXPECT_EQ(GetUniqueName(),
-              base::UTF16ToUTF8(frame_state.target.value_or(base::string16())));
+              base::UTF16ToUTF8(frame_state.target.value_or(std::u16string())));
 
     ASSERT_EQ(children_.size(), frame_state.children.size());
     for (size_t i = 0; i < children_.size(); ++i) {
diff --git a/third_party/blink/public/common/context_menu_data/context_menu_data.h b/third_party/blink/public/common/context_menu_data/context_menu_data.h
index a9bf4146..92c1170 100644
--- a/third_party/blink/public/common/context_menu_data/context_menu_data.h
+++ b/third_party/blink/public/common/context_menu_data/context_menu_data.h
@@ -108,10 +108,10 @@
   std::string suggested_filename;
 
   // The editable (possibily) misspelled word.
-  base::string16 misspelled_word;
+  std::u16string misspelled_word;
 
   // If misspelledWord is not empty, holds suggestions from the dictionary.
-  std::vector<base::string16> dictionary_suggestions;
+  std::vector<std::u16string> dictionary_suggestions;
 
   // Whether context is editable.
   bool is_editable;
diff --git a/third_party/blink/public/common/context_menu_data/context_menu_mojom_traits.h b/third_party/blink/public/common/context_menu_data/context_menu_mojom_traits.h
index 82676b7d..a7d9bff 100644
--- a/third_party/blink/public/common/context_menu_data/context_menu_mojom_traits.h
+++ b/third_party/blink/public/common/context_menu_data/context_menu_mojom_traits.h
@@ -56,7 +56,7 @@
     return r.link_url;
   }
 
-  static base::string16 link_text(
+  static std::u16string link_text(
       const blink::UntrustworthyContextMenuParams& r) {
     return r.link_text;
   }
@@ -84,32 +84,32 @@
     return r.media_flags;
   }
 
-  static base::string16 selection_text(
+  static std::u16string selection_text(
       const blink::UntrustworthyContextMenuParams& r) {
     return r.selection_text;
   }
 
-  static base::string16 title_text(
+  static std::u16string title_text(
       const blink::UntrustworthyContextMenuParams& r) {
     return r.title_text;
   }
 
-  static base::string16 alt_text(
+  static std::u16string alt_text(
       const blink::UntrustworthyContextMenuParams& r) {
     return r.alt_text;
   }
 
-  static base::string16 suggested_filename(
+  static std::u16string suggested_filename(
       const blink::UntrustworthyContextMenuParams& r) {
     return r.suggested_filename;
   }
 
-  static base::string16 misspelled_word(
+  static std::u16string misspelled_word(
       const blink::UntrustworthyContextMenuParams& r) {
     return r.misspelled_word;
   }
 
-  static std::vector<base::string16> dictionary_suggestions(
+  static std::vector<std::u16string> dictionary_suggestions(
       const blink::UntrustworthyContextMenuParams& r) {
     return r.dictionary_suggestions;
   }
diff --git a/third_party/blink/public/common/context_menu_data/menu_item_info.h b/third_party/blink/public/common/context_menu_data/menu_item_info.h
index 192ed6c6..489b861 100644
--- a/third_party/blink/public/common/context_menu_data/menu_item_info.h
+++ b/third_party/blink/public/common/context_menu_data/menu_item_info.h
@@ -50,8 +50,8 @@
         enabled(false),
         checked(false) {}
 
-  base::string16 label;
-  base::string16 tool_tip;
+  std::u16string label;
+  std::u16string tool_tip;
   Type type;
   unsigned action;
   base::i18n::TextDirection text_direction;
diff --git a/third_party/blink/public/common/context_menu_data/untrustworthy_context_menu_params.h b/third_party/blink/public/common/context_menu_data/untrustworthy_context_menu_params.h
index 1fbf10f..d569201 100644
--- a/third_party/blink/public/common/context_menu_data/untrustworthy_context_menu_params.h
+++ b/third_party/blink/public/common/context_menu_data/untrustworthy_context_menu_params.h
@@ -49,7 +49,7 @@
   // The text associated with the link. May be an empty string if the contents
   // of the link are an image.
   // Will be empty if |link_url| is empty.
-  base::string16 link_text;
+  std::u16string link_text;
 
   // The impression declared by the link. May be base::nullopt even if
   // |link_url| is non-empty.
@@ -73,30 +73,30 @@
   int media_flags;
 
   // This is the text of the selection that the context menu was invoked on.
-  base::string16 selection_text;
+  std::u16string selection_text;
 
   // This is the title text of the selection that the context menu was
   // invoked on.
-  base::string16 title_text;
+  std::u16string title_text;
 
   // This is the alt text of the selection that the context menu was
   // invoked on.
-  base::string16 alt_text;
+  std::u16string alt_text;
 
   // This is the suggested filename to be used when saving file through "Save
   // Link As" option of context menu.
-  base::string16 suggested_filename;
+  std::u16string suggested_filename;
 
   // The misspelled word under the cursor, if any. Used to generate the
   // |dictionary_suggestions| list.
-  base::string16 misspelled_word;
+  std::u16string misspelled_word;
 
   // Suggested replacements for a misspelled word under the cursor.
   // This vector gets populated in the render process host
   // by intercepting ViewHostMsg_ContextMenu in ResourceMessageFilter
   // and populating dictionary_suggestions if the type is EDITABLE
   // and the misspelled_word is not empty.
-  std::vector<base::string16> dictionary_suggestions;
+  std::vector<std::u16string> dictionary_suggestions;
 
   // If editable, flag for whether spell check is enabled or not.
   bool spellcheck_enabled;
diff --git a/third_party/blink/public/common/indexeddb/indexed_db_default_mojom_traits.h b/third_party/blink/public/common/indexeddb/indexed_db_default_mojom_traits.h
index 8101faf..e21f7ce 100644
--- a/third_party/blink/public/common/indexeddb/indexed_db_default_mojom_traits.h
+++ b/third_party/blink/public/common/indexeddb/indexed_db_default_mojom_traits.h
@@ -22,7 +22,7 @@
   static int64_t id(const blink::IndexedDBDatabaseMetadata& metadata) {
     return metadata.id;
   }
-  static const base::string16& name(
+  static const std::u16string& name(
       const blink::IndexedDBDatabaseMetadata& metadata) {
     return metadata.name;
   }
@@ -64,7 +64,7 @@
   static int64_t id(const blink::IndexedDBIndexMetadata& metadata) {
     return metadata.id;
   }
-  static const base::string16& name(
+  static const std::u16string& name(
       const blink::IndexedDBIndexMetadata& metadata) {
     return metadata.name;
   }
@@ -97,7 +97,7 @@
         reinterpret_cast<const uint8_t*>(key.binary().data()),
         key.binary().size());
   }
-  static const base::string16& string(const blink::IndexedDBKey& key) {
+  static const std::u16string& string(const blink::IndexedDBKey& key) {
     return key.string();
   }
   static double date(const blink::IndexedDBKey& key) { return key.date(); }
@@ -147,7 +147,7 @@
   static int64_t id(const blink::IndexedDBObjectStoreMetadata& metadata) {
     return metadata.id;
   }
-  static const base::string16& name(
+  static const std::u16string& name(
       const blink::IndexedDBObjectStoreMetadata& metadata) {
     return metadata.name;
   }
diff --git a/third_party/blink/public/common/indexeddb/indexeddb_key.h b/third_party/blink/public/common/indexeddb/indexeddb_key.h
index c3ca520..600ab821 100644
--- a/third_party/blink/public/common/indexeddb/indexeddb_key.h
+++ b/third_party/blink/public/common/indexeddb/indexeddb_key.h
@@ -30,7 +30,7 @@
   explicit IndexedDBKey(mojom::IDBKeyType);  // must be Null or Invalid
   explicit IndexedDBKey(KeyArray array);
   explicit IndexedDBKey(std::string binary);
-  explicit IndexedDBKey(base::string16 string);
+  explicit IndexedDBKey(std::u16string string);
   IndexedDBKey(double number,
                mojom::IDBKeyType type);  // must be date or number
   IndexedDBKey(const IndexedDBKey& other);
@@ -51,7 +51,7 @@
     DCHECK_EQ(type_, mojom::IDBKeyType::Binary);
     return binary_;
   }
-  const base::string16& string() const {
+  const std::u16string& string() const {
     DCHECK_EQ(type_, mojom::IDBKeyType::String);
     return string_;
   }
@@ -83,7 +83,7 @@
   mojom::IDBKeyType type_;
   std::vector<IndexedDBKey> array_;
   std::string binary_;
-  base::string16 string_;
+  std::u16string string_;
   double number_ = 0;
 
   size_t size_estimate_;
diff --git a/third_party/blink/public/common/indexeddb/indexeddb_key_path.h b/third_party/blink/public/common/indexeddb/indexeddb_key_path.h
index 973c4c4..701a586 100644
--- a/third_party/blink/public/common/indexeddb/indexeddb_key_path.h
+++ b/third_party/blink/public/common/indexeddb/indexeddb_key_path.h
@@ -18,8 +18,8 @@
 class BLINK_COMMON_EXPORT IndexedDBKeyPath {
  public:
   IndexedDBKeyPath();  // Defaults to blink::WebIDBKeyPathTypeNull.
-  explicit IndexedDBKeyPath(const base::string16&);
-  explicit IndexedDBKeyPath(const std::vector<base::string16>&);
+  explicit IndexedDBKeyPath(const std::u16string&);
+  explicit IndexedDBKeyPath(const std::vector<std::u16string>&);
   IndexedDBKeyPath(const IndexedDBKeyPath& other);
   IndexedDBKeyPath(IndexedDBKeyPath&& other);
   ~IndexedDBKeyPath();
@@ -30,13 +30,13 @@
   bool operator==(const IndexedDBKeyPath& other) const;
 
   mojom::IDBKeyPathType type() const { return type_; }
-  const std::vector<base::string16>& array() const;
-  const base::string16& string() const;
+  const std::vector<std::u16string>& array() const;
+  const std::u16string& string() const;
 
  private:
   mojom::IDBKeyPathType type_;
-  base::string16 string_;
-  std::vector<base::string16> array_;
+  std::u16string string_;
+  std::vector<std::u16string> array_;
 };
 
 }  // namespace blink
diff --git a/third_party/blink/public/common/indexeddb/indexeddb_metadata.h b/third_party/blink/public/common/indexeddb/indexeddb_metadata.h
index 7bb37c9e..40a73f5 100644
--- a/third_party/blink/public/common/indexeddb/indexeddb_metadata.h
+++ b/third_party/blink/public/common/indexeddb/indexeddb_metadata.h
@@ -20,7 +20,7 @@
   static const int64_t kInvalidId = -1;
 
   IndexedDBIndexMetadata();
-  IndexedDBIndexMetadata(const base::string16& name,
+  IndexedDBIndexMetadata(const std::u16string& name,
                          int64_t id,
                          const blink::IndexedDBKeyPath& key_path,
                          bool unique,
@@ -32,7 +32,7 @@
   IndexedDBIndexMetadata& operator=(IndexedDBIndexMetadata&& other);
   bool operator==(const IndexedDBIndexMetadata& other) const;
 
-  base::string16 name;
+  std::u16string name;
   int64_t id;
   blink::IndexedDBKeyPath key_path;
   bool unique;
@@ -44,7 +44,7 @@
   static const int64_t kMinimumIndexId = 30;
 
   IndexedDBObjectStoreMetadata();
-  IndexedDBObjectStoreMetadata(const base::string16& name,
+  IndexedDBObjectStoreMetadata(const std::u16string& name,
                                int64_t id,
                                const blink::IndexedDBKeyPath& key_path,
                                bool auto_increment,
@@ -57,7 +57,7 @@
   IndexedDBObjectStoreMetadata& operator=(IndexedDBObjectStoreMetadata&& other);
   bool operator==(const IndexedDBObjectStoreMetadata& other) const;
 
-  base::string16 name;
+  std::u16string name;
   int64_t id;
   blink::IndexedDBKeyPath key_path;
   bool auto_increment;
@@ -71,7 +71,7 @@
   enum { NO_VERSION = -1, DEFAULT_VERSION = 0 };
 
   IndexedDBDatabaseMetadata();
-  IndexedDBDatabaseMetadata(const base::string16& name,
+  IndexedDBDatabaseMetadata(const std::u16string& name,
                             int64_t id,
                             int64_t version,
                             int64_t max_object_store_id);
@@ -82,7 +82,7 @@
   IndexedDBDatabaseMetadata& operator=(IndexedDBDatabaseMetadata&& other);
   bool operator==(const IndexedDBDatabaseMetadata& other) const;
 
-  base::string16 name;
+  std::u16string name;
   int64_t id;
   int64_t version;
   int64_t max_object_store_id;
diff --git a/third_party/blink/public/common/manifest/manifest.h b/third_party/blink/public/common/manifest/manifest.h
index bce7f2d..8606862 100644
--- a/third_party/blink/public/common/manifest/manifest.h
+++ b/third_party/blink/public/common/manifest/manifest.h
@@ -45,7 +45,7 @@
     // any string and doesn't have to be a valid image MIME type at this point.
     // It is up to the consumer of the object to check if the type matches a
     // supported type.
-    base::string16 type;
+    std::u16string type;
 
     // Empty if the parsing failed, the field was not present or empty.
     // The special value "any" is represented by gfx::Size(0, 0).
@@ -62,16 +62,16 @@
     ShortcutItem();
     ~ShortcutItem();
 
-    base::string16 name;
-    base::Optional<base::string16> short_name;
-    base::Optional<base::string16> description;
+    std::u16string name;
+    base::Optional<std::u16string> short_name;
+    base::Optional<std::u16string> description;
     GURL url;
     std::vector<ImageResource> icons;
   };
 
   struct BLINK_COMMON_EXPORT FileFilter {
-    base::string16 name;
-    std::vector<base::string16> accept;
+    std::u16string name;
+    std::vector<std::u16string> accept;
   };
 
   // Structure representing a Web Share target's query parameter keys.
@@ -79,9 +79,9 @@
     ShareTargetParams();
     ~ShareTargetParams();
 
-    base::Optional<base::string16> title;
-    base::Optional<base::string16> text;
-    base::Optional<base::string16> url;
+    base::Optional<std::u16string> title;
+    base::Optional<std::u16string> text;
+    base::Optional<std::u16string> url;
     std::vector<FileFilter> files;
   };
 
@@ -107,13 +107,13 @@
   struct BLINK_COMMON_EXPORT FileHandler {
     // The URL which will be opened when the file handler is invoked.
     GURL action;
-    base::string16 name;
-    std::map<base::string16, std::vector<base::string16>> accept;
+    std::u16string name;
+    std::map<std::u16string, std::vector<std::u16string>> accept;
   };
 
   // Structure representing a Protocol Handler.
   struct BLINK_COMMON_EXPORT ProtocolHandler {
-    base::string16 protocol;
+    std::u16string protocol;
     GURL url;
   };
 
@@ -130,7 +130,7 @@
     // The platform on which the application can be found. This can be any
     // string, and is interpreted by the consumer of the object. Empty if the
     // parsing failed.
-    base::Optional<base::string16> platform;
+    base::Optional<std::u16string> platform;
 
     // URL at which the application can be found. One of |url| and |id| must be
     // present. Empty if the parsing failed or the field was not present.
@@ -139,7 +139,7 @@
     // An id which is used to represent the application on the platform. One of
     // |url| and |id| must be present. Empty if the parsing failed or the field
     // was not present.
-    base::Optional<base::string16> id;
+    base::Optional<std::u16string> id;
   };
 
   Manifest();
@@ -151,13 +151,13 @@
   bool IsEmpty() const;
 
   // Null if the parsing failed or the field was not present.
-  base::Optional<base::string16> name;
+  base::Optional<std::u16string> name;
 
   // Null if the parsing failed or the field was not present.
-  base::Optional<base::string16> short_name;
+  base::Optional<std::u16string> short_name;
 
   // Null if the parsing failed or the field was not present.
-  base::Optional<base::string16> description;
+  base::Optional<std::u16string> description;
 
   // Empty if the parsing failed or the field was not present.
   GURL start_url;
@@ -229,7 +229,7 @@
   // This is a proprietary extension of the web Manifest, double-check that it
   // is okay to use this entry.
   // Null if parsing failed or the field was not present.
-  base::Optional<base::string16> gcm_sender_id;
+  base::Optional<std::u16string> gcm_sender_id;
 
   // Empty if the parsing failed. Otherwise defaults to the start URL (or
   // document URL if start URL isn't present) with filename, query, and fragment
diff --git a/third_party/blink/public/common/manifest/manifest_mojom_traits.h b/third_party/blink/public/common/manifest/manifest_mojom_traits.h
index 2d4fdc9a..15301e1 100644
--- a/third_party/blink/public/common/manifest/manifest_mojom_traits.h
+++ b/third_party/blink/public/common/manifest/manifest_mojom_traits.h
@@ -17,7 +17,7 @@
 namespace mojo {
 namespace internal {
 
-inline base::StringPiece16 TruncateString16(const base::string16& string) {
+inline base::StringPiece16 TruncateString16(const std::u16string& string) {
   // We restrict the maximum length for all the strings inside the Manifest
   // when it is sent over Mojo. The renderer process truncates the strings
   // before sending the Manifest and the browser process validates that.
@@ -25,7 +25,7 @@
 }
 
 inline base::Optional<base::StringPiece16> TruncateOptionalString16(
-    const base::Optional<base::string16>& string) {
+    const base::Optional<std::u16string>& string) {
   if (!string)
     return base::nullopt;
 
@@ -249,7 +249,7 @@
       const ::blink::Manifest::FileFilter& share_target_file) {
     std::vector<base::StringPiece16> accept_types;
 
-    for (const base::string16& accept_type : share_target_file.accept)
+    for (const std::u16string& accept_type : share_target_file.accept)
       accept_types.push_back(internal::TruncateString16(accept_type));
 
     return accept_types;
@@ -334,12 +334,12 @@
     return entry.action;
   }
 
-  static const base::string16& name(
+  static const std::u16string& name(
       const ::blink::Manifest::FileHandler& entry) {
     return entry.name;
   }
 
-  static const std::map<base::string16, std::vector<base::string16>>& accept(
+  static const std::map<std::u16string, std::vector<std::u16string>>& accept(
       const ::blink::Manifest::FileHandler& entry) {
     return entry.accept;
   }
diff --git a/third_party/blink/public/common/messaging/string_message_codec.h b/third_party/blink/public/common/messaging/string_message_codec.h
index b289e17f..958f4aa 100644
--- a/third_party/blink/public/common/messaging/string_message_codec.h
+++ b/third_party/blink/public/common/messaging/string_message_codec.h
@@ -24,11 +24,11 @@
 // format we currently persist to disk via IndexedDB.
 
 BLINK_COMMON_EXPORT std::vector<uint8_t> EncodeStringMessage(
-    const base::string16& data);
+    const std::u16string& data);
 
 BLINK_COMMON_EXPORT bool DecodeStringMessage(
     base::span<const uint8_t> encoded_data,
-    base::string16* result);
+    std::u16string* result);
 
 }  // namespace blink
 
diff --git a/third_party/blink/public/common/messaging/web_message_port.h b/third_party/blink/public/common/messaging/web_message_port.h
index a8fc0cf..aeffe1b 100644
--- a/third_party/blink/public/common/messaging/web_message_port.h
+++ b/third_party/blink/public/common/messaging/web_message_port.h
@@ -186,7 +186,7 @@
   ~Message();
 
   // Creates a message with the given |data|.
-  explicit Message(const base::string16& data);
+  explicit Message(const std::u16string& data);
 
   // Creates a message with the given collection of |ports| to be transferred.
   explicit Message(std::vector<WebMessagePort> ports);
@@ -196,13 +196,13 @@
 
   // Creates a message with |data| and a collection of |ports| to be
   // transferred.
-  Message(const base::string16& data, std::vector<WebMessagePort> ports);
+  Message(const std::u16string& data, std::vector<WebMessagePort> ports);
 
   // Creates a message with |data| and a single |port| to be transferred.
-  Message(const base::string16& data, WebMessagePort port);
+  Message(const std::u16string& data, WebMessagePort port);
 
   // A UTF-16 message.
-  base::string16 data;
+  std::u16string data;
 
   // Other message ports that are to be transmitted as part of this message.
   std::vector<WebMessagePort> ports;
diff --git a/third_party/blink/public/common/notifications/notification_mojom_traits.h b/third_party/blink/public/common/notifications/notification_mojom_traits.h
index e20d2ba..a546a5c 100644
--- a/third_party/blink/public/common/notifications/notification_mojom_traits.h
+++ b/third_party/blink/public/common/notifications/notification_mojom_traits.h
@@ -24,7 +24,7 @@
 template <>
 struct BLINK_COMMON_EXPORT StructTraits<blink::mojom::NotificationDataDataView,
                                         blink::PlatformNotificationData> {
-  static const base::string16& title(
+  static const std::u16string& title(
       const blink::PlatformNotificationData& data) {
     return data.title;
   }
@@ -38,7 +38,7 @@
     return data.lang;
   }
 
-  static const base::string16& body(
+  static const std::u16string& body(
       const blink::PlatformNotificationData& data) {
     return data.body;
   }
diff --git a/third_party/blink/public/common/notifications/platform_notification_data.h b/third_party/blink/public/common/notifications/platform_notification_data.h
index 45cfc07..c480857 100644
--- a/third_party/blink/public/common/notifications/platform_notification_data.h
+++ b/third_party/blink/public/common/notifications/platform_notification_data.h
@@ -27,7 +27,7 @@
   ~PlatformNotificationData();
 
   // Title to be displayed with the Web Notification.
-  base::string16 title;
+  std::u16string title;
 
   // Hint to determine the directionality of the displayed notification.
   mojom::NotificationDirection direction;
@@ -36,7 +36,7 @@
   std::string lang;
 
   // Contents of the notification.
-  base::string16 body;
+  std::u16string body;
 
   // Tag of the notification. Notifications sharing both their origin and their
   // tag will replace the first displayed notification.
diff --git a/third_party/blink/public/common/page_state/page_state_serialization.h b/third_party/blink/public/common/page_state/page_state_serialization.h
index 53df6ba..1c1a896 100644
--- a/third_party/blink/public/common/page_state/page_state_serialization.h
+++ b/third_party/blink/public/common/page_state/page_state_serialization.h
@@ -26,7 +26,7 @@
 constexpr int kMaxScrollAnchorSelectorLength = 500;
 
 struct BLINK_COMMON_EXPORT ExplodedHttpBody {
-  base::Optional<base::string16> http_content_type;
+  base::Optional<std::u16string> http_content_type;
   scoped_refptr<network::ResourceRequestBody> request_body;
   bool contains_passwords;
 
@@ -35,12 +35,12 @@
 };
 
 struct BLINK_COMMON_EXPORT ExplodedFrameState {
-  base::Optional<base::string16> url_string;
-  base::Optional<base::string16> referrer;
+  base::Optional<std::u16string> url_string;
+  base::Optional<std::u16string> referrer;
   base::Optional<url::Origin> initiator_origin;
-  base::Optional<base::string16> target;
-  base::Optional<base::string16> state_object;
-  std::vector<base::Optional<base::string16>> document_state;
+  base::Optional<std::u16string> target;
+  base::Optional<std::u16string> state_object;
+  std::vector<base::Optional<std::u16string>> document_state;
   blink::mojom::ScrollRestorationType scroll_restoration_type =
       blink::mojom::ScrollRestorationType::kAuto;
   bool did_save_scroll_or_scale_state = true;
@@ -52,7 +52,7 @@
   network::mojom::ReferrerPolicy referrer_policy =
       network::mojom::ReferrerPolicy::kDefault;
   ExplodedHttpBody http_body;
-  base::Optional<base::string16> scroll_anchor_selector;
+  base::Optional<std::u16string> scroll_anchor_selector;
   gfx::PointF scroll_anchor_offset;
   uint64_t scroll_anchor_simhash = 0;
   std::vector<ExplodedFrameState> children;
@@ -71,7 +71,7 @@
   // extract referenced files from ExplodedHttpBody.  |referenced_files|
   // currently contains a list from all frames, but cannot be deserialized into
   // the files referenced by each frame.  See http://crbug.com/441966.
-  std::vector<base::Optional<base::string16>> referenced_files;
+  std::vector<base::Optional<std::u16string>> referenced_files;
   ExplodedFrameState top;
 
   ExplodedPageState();
diff --git a/third_party/blink/public/common/renderer_preferences/renderer_preferences.h b/third_party/blink/public/common/renderer_preferences/renderer_preferences.h
index 1cc39de..ea4b334 100644
--- a/third_party/blink/public/common/renderer_preferences/renderer_preferences.h
+++ b/third_party/blink/public/common/renderer_preferences/renderer_preferences.h
@@ -53,15 +53,15 @@
   std::string system_font_family_name;
 #endif
 #if defined(OS_WIN)
-  base::string16 caption_font_family_name;
+  std::u16string caption_font_family_name;
   int32_t caption_font_height{0};
-  base::string16 small_caption_font_family_name;
+  std::u16string small_caption_font_family_name;
   int32_t small_caption_font_height{0};
-  base::string16 menu_font_family_name;
+  std::u16string menu_font_family_name;
   int32_t menu_font_height{0};
-  base::string16 status_font_family_name;
+  std::u16string status_font_family_name;
   int32_t status_font_height{0};
-  base::string16 message_font_family_name;
+  std::u16string message_font_family_name;
   int32_t message_font_height{0};
   int32_t vertical_scroll_bar_width_in_dips{0};
   int32_t horizontal_scroll_bar_height_in_dips{0};
diff --git a/third_party/blink/public/common/renderer_preferences/renderer_preferences_mojom_traits.h b/third_party/blink/public/common/renderer_preferences/renderer_preferences_mojom_traits.h
index cd59b71..bca7655 100644
--- a/third_party/blink/public/common/renderer_preferences/renderer_preferences_mojom_traits.h
+++ b/third_party/blink/public/common/renderer_preferences/renderer_preferences_mojom_traits.h
@@ -169,7 +169,7 @@
 #endif
 
 #if defined(OS_WIN)
-  static const base::string16& caption_font_family_name(
+  static const std::u16string& caption_font_family_name(
       const ::blink::RendererPreferences& data) {
     return data.caption_font_family_name;
   }
@@ -177,7 +177,7 @@
       const ::blink::RendererPreferences& data) {
     return data.caption_font_height;
   }
-  static const base::string16& small_caption_font_family_name(
+  static const std::u16string& small_caption_font_family_name(
       const ::blink::RendererPreferences& data) {
     return data.small_caption_font_family_name;
   }
@@ -185,7 +185,7 @@
       const ::blink::RendererPreferences& data) {
     return data.small_caption_font_height;
   }
-  static const base::string16& menu_font_family_name(
+  static const std::u16string& menu_font_family_name(
       const ::blink::RendererPreferences& data) {
     return data.menu_font_family_name;
   }
@@ -193,7 +193,7 @@
       const ::blink::RendererPreferences& data) {
     return data.menu_font_height;
   }
-  static const base::string16& status_font_family_name(
+  static const std::u16string& status_font_family_name(
       const ::blink::RendererPreferences& data) {
     return data.status_font_family_name;
   }
@@ -201,7 +201,7 @@
       const ::blink::RendererPreferences& data) {
     return data.status_font_height;
   }
-  static const base::string16& message_font_family_name(
+  static const std::u16string& message_font_family_name(
       const ::blink::RendererPreferences& data) {
     return data.message_font_family_name;
   }
diff --git a/third_party/blink/public/common/web_preferences/web_preferences.h b/third_party/blink/public/common/web_preferences/web_preferences.h
index ab72775..e1fb30c 100644
--- a/third_party/blink/public/common/web_preferences/web_preferences.h
+++ b/third_party/blink/public/common/web_preferences/web_preferences.h
@@ -30,7 +30,7 @@
 
 // Map of ISO 15924 four-letter script code to font family.  For example,
 // "Arab" to "My Arabic Font".
-typedef std::map<std::string, base::string16> ScriptFontFamilyMap;
+typedef std::map<std::string, std::u16string> ScriptFontFamilyMap;
 
 // The ISO 15924 script code for undetermined script aka Common. It's the
 // default used on WebKit's side to get/set a font setting when no script is
diff --git a/third_party/blink/public/common/web_preferences/web_preferences_mojom_traits.h b/third_party/blink/public/common/web_preferences/web_preferences_mojom_traits.h
index 68d33ca..ae180b3 100644
--- a/third_party/blink/public/common/web_preferences/web_preferences_mojom_traits.h
+++ b/third_party/blink/public/common/web_preferences/web_preferences_mojom_traits.h
@@ -17,37 +17,37 @@
 template <>
 struct BLINK_COMMON_EXPORT StructTraits<blink::mojom::WebPreferencesDataView,
                                         blink::web_pref::WebPreferences> {
-  static const std::map<std::string, base::string16>& standard_font_family_map(
+  static const std::map<std::string, std::u16string>& standard_font_family_map(
       const blink::web_pref::WebPreferences& r) {
     return r.standard_font_family_map;
   }
 
-  static const std::map<std::string, base::string16>& fixed_font_family_map(
+  static const std::map<std::string, std::u16string>& fixed_font_family_map(
       const blink::web_pref::WebPreferences& r) {
     return r.fixed_font_family_map;
   }
 
-  static const std::map<std::string, base::string16>& serif_font_family_map(
+  static const std::map<std::string, std::u16string>& serif_font_family_map(
       const blink::web_pref::WebPreferences& r) {
     return r.serif_font_family_map;
   }
 
-  static const std::map<std::string, base::string16>&
+  static const std::map<std::string, std::u16string>&
   sans_serif_font_family_map(const blink::web_pref::WebPreferences& r) {
     return r.sans_serif_font_family_map;
   }
 
-  static const std::map<std::string, base::string16>& cursive_font_family_map(
+  static const std::map<std::string, std::u16string>& cursive_font_family_map(
       const blink::web_pref::WebPreferences& r) {
     return r.cursive_font_family_map;
   }
 
-  static const std::map<std::string, base::string16>& fantasy_font_family_map(
+  static const std::map<std::string, std::u16string>& fantasy_font_family_map(
       const blink::web_pref::WebPreferences& r) {
     return r.fantasy_font_family_map;
   }
 
-  static const std::map<std::string, base::string16>&
+  static const std::map<std::string, std::u16string>&
   pictograph_font_family_map(const blink::web_pref::WebPreferences& r) {
     return r.pictograph_font_family_map;
   }
diff --git a/third_party/blink/public/mojom/frame/frame.mojom b/third_party/blink/public/mojom/frame/frame.mojom
index 1c0f208..e064baa5 100644
--- a/third_party/blink/public/mojom/frame/frame.mojom
+++ b/third_party/blink/public/mojom/frame/frame.mojom
@@ -442,7 +442,7 @@
 
   // Notification that the text selection has changed.
   // Note: The second parameter is the character based offset of the
-  // base::string16 text in the document.
+  // std::u16string text in the document.
   TextSelectionChanged(mojo_base.mojom.BigString16 text,
                        uint32 offset,
                        gfx.mojom.Range range);
diff --git a/third_party/blink/public/platform/web_string.h b/third_party/blink/public/platform/web_string.h
index 66de0bf..65d12583 100644
--- a/third_party/blink/public/platform/web_string.h
+++ b/third_party/blink/public/platform/web_string.h
@@ -57,8 +57,8 @@
 // * WebString::FromASCII(const std::string& ascii)
 // * WebString::FromLatin1(const std::string& latin1)
 // * WebString::FromUTF8(const std::string& utf8)
-// * WebString::FromUTF16(const base::string16& utf16)
-// * WebString::FromUTF16(const base::Optional<base::string16>& utf16)
+// * WebString::FromUTF16(const std::u16string& utf16)
+// * WebString::FromUTF16(const base::Optional<std::u16string>& utf16)
 //
 // Similarly, use either of following methods to convert WebString to
 // ASCII, Latin1, UTF-8 or UTF-16:
@@ -132,15 +132,15 @@
     return FromUTF8(s.data(), s.length());
   }
 
-  base::string16 Utf16() const {
+  std::u16string Utf16() const {
     return base::Latin1OrUTF16ToUTF16(length(), Data8(), Data16());
   }
 
-  BLINK_PLATFORM_EXPORT static WebString FromUTF16(const base::string16&);
+  BLINK_PLATFORM_EXPORT static WebString FromUTF16(const std::u16string&);
   BLINK_PLATFORM_EXPORT static WebString FromUTF16(
-      const base::Optional<base::string16>&);
+      const base::Optional<std::u16string>&);
 
-  static base::Optional<base::string16> ToOptionalString16(const WebString& s) {
+  static base::Optional<std::u16string> ToOptionalString16(const WebString& s) {
     return s.IsNull() ? base::nullopt : base::make_optional(s.Utf16());
   }
 
diff --git a/third_party/blink/renderer/core/exported/web_history_entry.cc b/third_party/blink/renderer/core/exported/web_history_entry.cc
index 4af71232..82c639757 100644
--- a/third_party/blink/renderer/core/exported/web_history_entry.cc
+++ b/third_party/blink/renderer/core/exported/web_history_entry.cc
@@ -54,9 +54,9 @@
 
 namespace {
 
-WebVector<base::Optional<base::string16>> ToOptionalString16Vector(
+WebVector<base::Optional<std::u16string>> ToOptionalString16Vector(
     const WebVector<WebString>& input,
-    WebVector<base::Optional<base::string16>> output) {
+    WebVector<base::Optional<std::u16string>> output) {
   output.reserve(output.size() + input.size());
   for (const auto& i : input)
     output.emplace_back(WebString::ToOptionalString16(i));
@@ -116,7 +116,7 @@
   WebVector<WebString> document_state(state.document_state.size());
   std::transform(state.document_state.begin(), state.document_state.end(),
                  document_state.begin(),
-                 [](const base::Optional<base::string16>& s) {
+                 [](const base::Optional<std::u16string>& s) {
                    return WebString::FromUTF16(s);
                  });
   item.SetDocumentState(document_state);
diff --git a/third_party/blink/renderer/core/exported/web_view_impl.cc b/third_party/blink/renderer/core/exported/web_view_impl.cc
index d898c98..57d18d8 100644
--- a/third_party/blink/renderer/core/exported/web_view_impl.cc
+++ b/third_party/blink/renderer/core/exported/web_view_impl.cc
@@ -252,47 +252,47 @@
 };
 
 typedef void (*SetFontFamilyWrapper)(blink::WebSettings*,
-                                     const base::string16&,
+                                     const std::u16string&,
                                      UScriptCode);
 
 void SetStandardFontFamilyWrapper(WebSettings* settings,
-                                  const base::string16& font,
+                                  const std::u16string& font,
                                   UScriptCode script) {
   settings->SetStandardFontFamily(WebString::FromUTF16(font), script);
 }
 
 void SetFixedFontFamilyWrapper(WebSettings* settings,
-                               const base::string16& font,
+                               const std::u16string& font,
                                UScriptCode script) {
   settings->SetFixedFontFamily(WebString::FromUTF16(font), script);
 }
 
 void SetSerifFontFamilyWrapper(WebSettings* settings,
-                               const base::string16& font,
+                               const std::u16string& font,
                                UScriptCode script) {
   settings->SetSerifFontFamily(WebString::FromUTF16(font), script);
 }
 
 void SetSansSerifFontFamilyWrapper(WebSettings* settings,
-                                   const base::string16& font,
+                                   const std::u16string& font,
                                    UScriptCode script) {
   settings->SetSansSerifFontFamily(WebString::FromUTF16(font), script);
 }
 
 void SetCursiveFontFamilyWrapper(WebSettings* settings,
-                                 const base::string16& font,
+                                 const std::u16string& font,
                                  UScriptCode script) {
   settings->SetCursiveFontFamily(WebString::FromUTF16(font), script);
 }
 
 void SetFantasyFontFamilyWrapper(WebSettings* settings,
-                                 const base::string16& font,
+                                 const std::u16string& font,
                                  UScriptCode script) {
   settings->SetFantasyFontFamily(WebString::FromUTF16(font), script);
 }
 
 void SetPictographFontFamilyWrapper(WebSettings* settings,
-                                    const base::string16& font,
+                                    const std::u16string& font,
                                     UScriptCode script) {
   settings->SetPictographFontFamily(WebString::FromUTF16(font), script);
 }
diff --git a/third_party/blink/renderer/core/page/context_menu_controller.cc b/third_party/blink/renderer/core/page/context_menu_controller.cc
index 094a487e..ee24dee9 100644
--- a/third_party/blink/renderer/core/page/context_menu_controller.cc
+++ b/third_party/blink/renderer/core/page/context_menu_controller.cc
@@ -641,7 +641,7 @@
     if (description.length()) {
       Vector<String> suggestions;
       description.Split('\n', suggestions);
-      WebVector<base::string16> web_suggestions(suggestions.size());
+      WebVector<std::u16string> web_suggestions(suggestions.size());
       std::transform(suggestions.begin(), suggestions.end(),
                      web_suggestions.begin(), [](const String& s) {
                        return WebString::FromUTF8(s.Utf8()).Utf16();
@@ -653,7 +653,7 @@
       spell_checker.GetTextCheckerClient()->CheckSpelling(
           WebString::FromUTF16(data.misspelled_word), misspelled_offset,
           misspelled_length, &web_suggestions);
-      WebVector<base::string16> suggestions(web_suggestions.size());
+      WebVector<std::u16string> suggestions(web_suggestions.size());
       std::transform(web_suggestions.begin(), web_suggestions.end(),
                      suggestions.begin(),
                      [](const WebString& s) { return s.Utf16(); });
diff --git a/third_party/blink/renderer/modules/manifest/manifest_type_converters_unittest.cc b/third_party/blink/renderer/modules/manifest/manifest_type_converters_unittest.cc
index e82992d..ed57e1c 100644
--- a/third_party/blink/renderer/modules/manifest/manifest_type_converters_unittest.cc
+++ b/third_party/blink/renderer/modules/manifest/manifest_type_converters_unittest.cc
@@ -66,7 +66,7 @@
   EXPECT_TRUE(base::EqualsASCII(manifest.file_handlers[0].name, "name"));
   ASSERT_EQ(manifest.file_handlers[0].accept.size(), 1u);
 
-  base::string16 mime = base::UTF8ToUTF16("image/png");
+  std::u16string mime = base::UTF8ToUTF16("image/png");
   ASSERT_EQ(manifest.file_handlers[0].accept.count(mime), 1u);
   EXPECT_EQ(manifest.file_handlers[0].accept[mime].size(), 1u);
   EXPECT_TRUE(
diff --git a/third_party/blink/renderer/platform/exported/file_path_conversion.cc b/third_party/blink/renderer/platform/exported/file_path_conversion.cc
index c4b7999..bf621e7 100644
--- a/third_party/blink/renderer/platform/exported/file_path_conversion.cc
+++ b/third_party/blink/renderer/platform/exported/file_path_conversion.cc
@@ -27,7 +27,7 @@
 #else
   const LChar* data8 = str.Characters8();
   return base::FilePath::FromUTF16Unsafe(
-      base::string16(data8, data8 + str.length()));
+      std::u16string(data8, data8 + str.length()));
 #endif
 }
 
diff --git a/third_party/blink/renderer/platform/exported/web_string.cc b/third_party/blink/renderer/platform/exported/web_string.cc
index 98d077e..5dbc75c 100644
--- a/third_party/blink/renderer/platform/exported/web_string.cc
+++ b/third_party/blink/renderer/platform/exported/web_string.cc
@@ -90,11 +90,11 @@
   return String::FromUTF8(data, length);
 }
 
-WebString WebString::FromUTF16(const base::string16& s) {
+WebString WebString::FromUTF16(const std::u16string& s) {
   return WebString(s.data(), s.length());
 }
 
-WebString WebString::FromUTF16(const base::Optional<base::string16>& s) {
+WebString WebString::FromUTF16(const base::Optional<std::u16string>& s) {
   if (!s.has_value())
     return WebString();
   return WebString(s->data(), s->length());
diff --git a/third_party/blink/renderer/platform/loader/ftp_directory_listing.cc b/third_party/blink/renderer/platform/loader/ftp_directory_listing.cc
index ebe20fc..62af5529b 100644
--- a/third_party/blink/renderer/platform/loader/ftp_directory_listing.cc
+++ b/third_party/blink/renderer/platform/loader/ftp_directory_listing.cc
@@ -27,7 +27,7 @@
 
 namespace {
 
-base::string16 ConvertPathToUTF16(const std::string& path) {
+std::u16string ConvertPathToUTF16(const std::string& path) {
   // Per RFC 2640, FTP servers should use UTF-8 or its proper subset ASCII,
   // but many old FTP servers use legacy encodings. Try UTF-8 first.
   if (base::IsStringUTF8(path))
@@ -37,7 +37,7 @@
   // fail.
   std::string encoding;
   if (base::DetectEncoding(path, &encoding) && encoding != "US-ASCII") {
-    base::string16 path_utf16;
+    std::u16string path_utf16;
     if (base::CodepageToUTF16(path, encoding.c_str(),
                               base::OnStringConversionError::SUBSTITUTE,
                               &path_utf16)) {
diff --git a/third_party/blink/renderer/platform/mojo/string16_mojom_traits.cc b/third_party/blink/renderer/platform/mojo/string16_mojom_traits.cc
index 8086cfe6..b8fd45e 100644
--- a/third_party/blink/renderer/platform/mojo/string16_mojom_traits.cc
+++ b/third_party/blink/renderer/platform/mojo/string16_mojom_traits.cc
@@ -13,7 +13,7 @@
 
 namespace mojo {
 
-MaybeOwnedString16::MaybeOwnedString16(base::string16 owned_storage)
+MaybeOwnedString16::MaybeOwnedString16(std::u16string owned_storage)
     : owned_storage_(owned_storage),
       unowned_(base::make_span(
           reinterpret_cast<const uint16_t*>(owned_storage_.data()),
@@ -52,7 +52,7 @@
 mojo_base::BigBuffer StructTraits<mojo_base::mojom::BigString16DataView,
                                   WTF::String>::data(const WTF::String& input) {
   if (input.Is8Bit()) {
-    base::string16 input16(input.Characters8(),
+    std::u16string input16(input.Characters8(),
                            input.Characters8() + input.length());
     return mojo_base::BigBuffer(base::as_bytes(base::make_span(input16)));
   }
diff --git a/third_party/blink/renderer/platform/mojo/string16_mojom_traits.h b/third_party/blink/renderer/platform/mojo/string16_mojom_traits.h
index fbccb1d..16c10ad 100644
--- a/third_party/blink/renderer/platform/mojo/string16_mojom_traits.h
+++ b/third_party/blink/renderer/platform/mojo/string16_mojom_traits.h
@@ -25,7 +25,7 @@
 // that can be used for converting an 8-bit string to a 16-bit string.
 class PLATFORM_EXPORT MaybeOwnedString16 {
  public:
-  explicit MaybeOwnedString16(base::string16 owned_storage);
+  explicit MaybeOwnedString16(std::u16string owned_storage);
   explicit MaybeOwnedString16(base::span<const uint16_t> unowned);
   ~MaybeOwnedString16();
 
@@ -33,7 +33,7 @@
   size_t size() const { return unowned_.size(); }
 
  private:
-  base::string16 owned_storage_;
+  std::u16string owned_storage_;
   base::span<const uint16_t> unowned_;
 };
 
diff --git a/third_party/hunspell/fuzz/hunspell_spell_fuzzer.cc b/third_party/hunspell/fuzz/hunspell_spell_fuzzer.cc
index fbaf803..f26a127 100644
--- a/third_party/hunspell/fuzz/hunspell_spell_fuzzer.cc
+++ b/third_party/hunspell/fuzz/hunspell_spell_fuzzer.cc
@@ -23,7 +23,7 @@
 
   // hunspell is not handling invalid UTF8. To avoid that, do the same thing
   // Chromium does - convert to UTF16, and back to UTF8. Valid UTF8 guaranteed.
-  base::string16 utf16_string = base::UTF8ToUTF16(data_string);
+  std::u16string utf16_string = base::UTF8ToUTF16(data_string);
   data_string = base::UTF16ToUTF8(utf16_string);
 
   hunspell->spell(data_string);
diff --git a/third_party/hunspell/fuzz/hunspell_suggest_fuzzer.cc b/third_party/hunspell/fuzz/hunspell_suggest_fuzzer.cc
index bb0a8f60..f1e4b1f5 100644
--- a/third_party/hunspell/fuzz/hunspell_suggest_fuzzer.cc
+++ b/third_party/hunspell/fuzz/hunspell_suggest_fuzzer.cc
@@ -31,7 +31,7 @@
 
   // hunspell is not handling invalid UTF8. To avoid that, do the same thing
   // Chromium does - convert to UTF16, and back to UTF8. Valid UTF8 guaranteed.
-  base::string16 utf16_string = base::UTF8ToUTF16(data_string);
+  std::u16string utf16_string = base::UTF8ToUTF16(data_string);
   data_string = base::UTF16ToUTF8(utf16_string);
 
   std::vector<std::string> suggestions = hunspell->suggest(data_string);
diff --git a/third_party/libx11/src/KeyBind.c b/third_party/libx11/src/KeyBind.c
index 89421e41..838c30f 100644
--- a/third_party/libx11/src/KeyBind.c
+++ b/third_party/libx11/src/KeyBind.c
@@ -89,7 +89,7 @@
 void ConvertCaseImpl(uint32_t sym, uint32_t* lower, uint32_t* upper) {
   // Unicode keysym
   if ((sym & 0xff000000) == 0x01000000) {
-    base::string16 string({sym & 0x00ffffff});
+    std::u16string string({sym & 0x00ffffff});
     auto lower_string = base::i18n::ToLower(string);
     auto upper_string = base::i18n::ToUpper(string);
     *lower = lower_string[0] | 0x01000000;
diff --git a/third_party/zlib/google/zip_reader.cc b/third_party/zlib/google/zip_reader.cc
index 1e86afe..1910cf2 100644
--- a/third_party/zlib/google/zip_reader.cc
+++ b/third_party/zlib/google/zip_reader.cc
@@ -101,7 +101,7 @@
   is_unsafe_ = file_path_.ReferencesParent();
 
   // We also consider that the file name is unsafe, if it's invalid UTF-8.
-  base::string16 file_name_utf16;
+  std::u16string file_name_utf16;
   if (!base::UTF8ToUTF16(file_name_in_zip.data(), file_name_in_zip.size(),
                          &file_name_utf16)) {
     is_unsafe_ = true;
diff --git a/tools/ipc_fuzzer/fuzzer/fuzzer.cc b/tools/ipc_fuzzer/fuzzer/fuzzer.cc
index 65b4ca3..3f4bb9c5 100644
--- a/tools/ipc_fuzzer/fuzzer/fuzzer.cc
+++ b/tools/ipc_fuzzer/fuzzer/fuzzer.cc
@@ -213,8 +213,8 @@
 };
 
 template <>
-struct FuzzTraits<base::string16> {
-  static bool Fuzz(base::string16* p, Fuzzer* fuzzer) {
+struct FuzzTraits<std::u16string> {
+  static bool Fuzz(std::u16string* p, Fuzzer* fuzzer) {
     fuzzer->FuzzString16(p);
     return true;
   }
@@ -446,7 +446,7 @@
 template <>
 struct FuzzTraits<base::NullableString16> {
   static bool Fuzz(base::NullableString16* p, Fuzzer* fuzzer) {
-    base::string16 string = p->string();
+    std::u16string string = p->string();
     bool is_null = p->is_null();
     if (!FuzzParam(&string, fuzzer))
       return false;
diff --git a/tools/ipc_fuzzer/fuzzer/fuzzer.h b/tools/ipc_fuzzer/fuzzer/fuzzer.h
index 531bbe774..321a48c 100644
--- a/tools/ipc_fuzzer/fuzzer/fuzzer.h
+++ b/tools/ipc_fuzzer/fuzzer/fuzzer.h
@@ -37,7 +37,7 @@
   virtual void FuzzFloat(float* value) = 0;
   virtual void FuzzDouble(double *value) = 0;
   virtual void FuzzString(std::string* value) = 0;
-  virtual void FuzzString16(base::string16* value) = 0;
+  virtual void FuzzString16(std::u16string* value) = 0;
   virtual void FuzzData(char* data, int length) = 0;
   virtual void FuzzBytes(void* data, int data_len) = 0;
 
@@ -64,7 +64,7 @@
   void FuzzFloat(float* value) override {}
   void FuzzDouble(double* value) override {}
   void FuzzString(std::string* value) override {}
-  void FuzzString16(base::string16* value) override {}
+  void FuzzString16(std::u16string* value) override {}
   void FuzzData(char* data, int length) override {}
   void FuzzBytes(void* data, int data_len) override {}
 };
diff --git a/tools/ipc_fuzzer/fuzzer/generator.cc b/tools/ipc_fuzzer/fuzzer/generator.cc
index bcf827c7..ce6b511 100644
--- a/tools/ipc_fuzzer/fuzzer/generator.cc
+++ b/tools/ipc_fuzzer/fuzzer/generator.cc
@@ -97,8 +97,8 @@
   GenerateStringType<std::string>(value);
 }
 
-void Generator::FuzzString16(base::string16* value) {
-  GenerateStringType<base::string16>(value);
+void Generator::FuzzString16(std::u16string* value) {
+  GenerateStringType<std::u16string>(value);
 }
 
 void Generator::FuzzData(char* data, int length) {
diff --git a/tools/ipc_fuzzer/fuzzer/generator.h b/tools/ipc_fuzzer/fuzzer/generator.h
index 2e1e6a0..0d72faad 100644
--- a/tools/ipc_fuzzer/fuzzer/generator.h
+++ b/tools/ipc_fuzzer/fuzzer/generator.h
@@ -32,7 +32,7 @@
   void FuzzFloat(float* value) override;
   void FuzzDouble(double* value) override;
   void FuzzString(std::string* value) override;
-  void FuzzString16(base::string16* value) override;
+  void FuzzString16(std::u16string* value) override;
   void FuzzData(char* data, int length) override;
   void FuzzBytes(void* data, int data_len) override;
   bool ShouldGenerate() override;
diff --git a/tools/ipc_fuzzer/fuzzer/mutator.cc b/tools/ipc_fuzzer/fuzzer/mutator.cc
index 6e74d20..8ef828f 100644
--- a/tools/ipc_fuzzer/fuzzer/mutator.cc
+++ b/tools/ipc_fuzzer/fuzzer/mutator.cc
@@ -93,10 +93,9 @@
   FuzzStringType<std::string>(value, frequency_, "BORKED", std::string());
 }
 
-void Mutator::FuzzString16(base::string16* value) {
-  FuzzStringType<base::string16>(value, frequency_,
-                                 base::WideToUTF16(L"BORKED"),
-                                 base::WideToUTF16(L""));
+void Mutator::FuzzString16(std::u16string* value) {
+  FuzzStringType<std::u16string>(
+      value, frequency_, base::WideToUTF16(L"BORKED"), base::WideToUTF16(L""));
 }
 
 void Mutator::FuzzData(char* data, int length) {
diff --git a/tools/ipc_fuzzer/fuzzer/mutator.h b/tools/ipc_fuzzer/fuzzer/mutator.h
index 993b254..a6bc00d 100644
--- a/tools/ipc_fuzzer/fuzzer/mutator.h
+++ b/tools/ipc_fuzzer/fuzzer/mutator.h
@@ -32,7 +32,7 @@
   void FuzzFloat(float* value) override;
   void FuzzDouble(double* value) override;
   void FuzzString(std::string* value) override;
-  void FuzzString16(base::string16* value) override;
+  void FuzzString16(std::u16string* value) override;
   void FuzzData(char* data, int length) override;
   void FuzzBytes(void* data, int data_len) override;
   bool ShouldGenerate() override;
diff --git a/tools/json_schema_compiler/cc_generator.py b/tools/json_schema_compiler/cc_generator.py
index f37d805..6b911e1 100644
--- a/tools/json_schema_compiler/cc_generator.py
+++ b/tools/json_schema_compiler/cc_generator.py
@@ -472,7 +472,7 @@
       'const base::DictionaryValue& root_dict',
       'base::StringPiece key',
       '%(classname)s* out',
-      'base::string16* error',
+      'std::u16string* error',
       'std::vector<base::StringPiece>* error_path_reversed'
     ]
 
@@ -1003,7 +1003,7 @@
       else:
         args = ['*list', '&%(dst_var)s']
         if self._generate_error_messages:
-          c.Append('base::string16 array_parse_error;')
+          c.Append('std::u16string array_parse_error;')
           args.append('&array_parse_error')
 
         c.Append('if (!%s(%s)) {' % (
@@ -1294,7 +1294,7 @@
     if generate_error_messages is None:
       generate_error_messages = self._generate_error_messages
     if generate_error_messages:
-      params = list(params) + ['base::string16* error']
+      params = list(params) + ['std::u16string* error']
     return ', '.join(str(p) for p in params)
 
   def _GenerateArgs(self, args, generate_error_messages=None):
diff --git a/tools/json_schema_compiler/h_generator.py b/tools/json_schema_compiler/h_generator.py
index 9e86bb38..5186983c 100644
--- a/tools/json_schema_compiler/h_generator.py
+++ b/tools/json_schema_compiler/h_generator.py
@@ -387,7 +387,7 @@
       params = [
         'const base::DictionaryValue& root_dict',
         '%s* out' % classname,
-        'base::string16* error'
+        'std::u16string* error'
       ]
       comment = (
         'Parses manifest keys for this namespace. Any keys not available to the'
@@ -398,7 +398,7 @@
         'const base::DictionaryValue& root_dict',
         'base::StringPiece key',
         '%s* out' % classname,
-        'base::string16* error',
+        'std::u16string* error',
         'std::vector<base::StringPiece>* error_path_reversed'
       ]
       comment = (
@@ -477,5 +477,5 @@
     if generate_error_messages is None:
       generate_error_messages = self._generate_error_messages
     if generate_error_messages:
-      params += ('base::string16* error',)
+      params += ('std::u16string* error',)
     return ', '.join(str(p) for p in params)
diff --git a/tools/json_schema_compiler/manifest_parse_util.cc b/tools/json_schema_compiler/manifest_parse_util.cc
index 49938c7c..56b4012 100644
--- a/tools/json_schema_compiler/manifest_parse_util.cc
+++ b/tools/json_schema_compiler/manifest_parse_util.cc
@@ -24,7 +24,7 @@
                  base::Value::Type expected_type,
                  ValueTypeConverter<U> type_converter,
                  T* out,
-                 base::string16* error,
+                 std::u16string* error,
                  std::vector<base::StringPiece>* error_path_reversed) {
   DCHECK(type_converter);
   DCHECK(out);
@@ -43,7 +43,7 @@
 void PopulateInvalidEnumValueError(
     base::StringPiece key,
     const std::string& value,
-    base::string16* error,
+    std::u16string* error,
     std::vector<base::StringPiece>* error_path_reversed) {
   DCHECK(error);
   DCHECK(error->empty());
@@ -55,7 +55,7 @@
       base::StringPrintf("Specified value '%s' is invalid.", value.c_str()));
 }
 
-void PopulateFinalError(base::string16* error,
+void PopulateFinalError(std::u16string* error,
                         std::vector<base::StringPiece>* error_path_reversed) {
   DCHECK(error);
   DCHECK(error_path_reversed);
@@ -74,7 +74,7 @@
     const base::DictionaryValue& dict,
     base::StringPiece key,
     base::Value::Type expected_type,
-    base::string16* error,
+    std::u16string* error,
     std::vector<base::StringPiece>* error_path_reversed) {
   DCHECK(error);
   DCHECK(error->empty());
@@ -103,7 +103,7 @@
 bool ParseFromDictionary(const base::DictionaryValue& dict,
                          base::StringPiece key,
                          int* out,
-                         base::string16* error,
+                         std::u16string* error,
                          std::vector<base::StringPiece>* error_path_reversed) {
   return ParseHelper(dict, key, base::Value::Type::INTEGER,
                      &base::Value::GetInt, out, error, error_path_reversed);
@@ -112,7 +112,7 @@
 bool ParseFromDictionary(const base::DictionaryValue& dict,
                          base::StringPiece key,
                          bool* out,
-                         base::string16* error,
+                         std::u16string* error,
                          std::vector<base::StringPiece>* error_path_reversed) {
   return ParseHelper(dict, key, base::Value::Type::BOOLEAN,
                      &base::Value::GetBool, out, error, error_path_reversed);
@@ -121,7 +121,7 @@
 bool ParseFromDictionary(const base::DictionaryValue& dict,
                          base::StringPiece key,
                          double* out,
-                         base::string16* error,
+                         std::u16string* error,
                          std::vector<base::StringPiece>* error_path_reversed) {
   return ParseHelper(dict, key, base::Value::Type::DOUBLE,
                      &base::Value::GetDouble, out, error, error_path_reversed);
@@ -130,7 +130,7 @@
 bool ParseFromDictionary(const base::DictionaryValue& dict,
                          base::StringPiece key,
                          std::string* out,
-                         base::string16* error,
+                         std::u16string* error,
                          std::vector<base::StringPiece>* error_path_reversed) {
   return ParseHelper(dict, key, base::Value::Type::STRING,
                      &base::Value::GetString, out, error, error_path_reversed);
diff --git a/tools/json_schema_compiler/manifest_parse_util.h b/tools/json_schema_compiler/manifest_parse_util.h
index 4b000b6..28a2ed3 100644
--- a/tools/json_schema_compiler/manifest_parse_util.h
+++ b/tools/json_schema_compiler/manifest_parse_util.h
@@ -24,11 +24,11 @@
 void PopulateInvalidEnumValueError(
     base::StringPiece key,
     const std::string& value,
-    base::string16* error,
+    std::u16string* error,
     std::vector<base::StringPiece>* error_path_reversed);
 
 // Populates manifest parse |error| for the given path in |error_path_reversed|.
-void PopulateFinalError(base::string16* error,
+void PopulateFinalError(std::u16string* error,
                         std::vector<base::StringPiece>* error_path_reversed);
 
 // Returns the value at the given |key| in |dict|, ensuring that it's of the
@@ -38,7 +38,7 @@
     const base::DictionaryValue& dict,
     base::StringPiece key,
     base::Value::Type expected_type,
-    base::string16* error,
+    std::u16string* error,
     std::vector<base::StringPiece>* error_path_reversed);
 
 // Parses |out| from |dict| at the given |key|. On failure, returns false and
@@ -46,22 +46,22 @@
 bool ParseFromDictionary(const base::DictionaryValue& dict,
                          base::StringPiece key,
                          int* out,
-                         base::string16* error,
+                         std::u16string* error,
                          std::vector<base::StringPiece>* error_path_reversed);
 bool ParseFromDictionary(const base::DictionaryValue& dict,
                          base::StringPiece key,
                          bool* out,
-                         base::string16* error,
+                         std::u16string* error,
                          std::vector<base::StringPiece>* error_path_reversed);
 bool ParseFromDictionary(const base::DictionaryValue& dict,
                          base::StringPiece key,
                          double* out,
-                         base::string16* error,
+                         std::u16string* error,
                          std::vector<base::StringPiece>* error_path_reversed);
 bool ParseFromDictionary(const base::DictionaryValue& dict,
                          base::StringPiece key,
                          std::string* out,
-                         base::string16* error,
+                         std::u16string* error,
                          std::vector<base::StringPiece>* error_path_reversed);
 
 // This overload is used for lists/arrays.
@@ -69,7 +69,7 @@
 bool ParseFromDictionary(const base::DictionaryValue& dict,
                          base::StringPiece key,
                          std::vector<T>* out_ptr,
-                         base::string16* error,
+                         std::u16string* error,
                          std::vector<base::StringPiece>* error_path_reversed);
 
 // This overload is used for optional values.
@@ -77,7 +77,7 @@
 bool ParseFromDictionary(const base::DictionaryValue& dict,
                          base::StringPiece key,
                          std::unique_ptr<T>* out_ptr,
-                         base::string16* error,
+                         std::u16string* error,
                          std::vector<base::StringPiece>* error_path_reversed);
 
 // This overload is used for generated types.
@@ -85,7 +85,7 @@
 bool ParseFromDictionary(const base::DictionaryValue& dict,
                          base::StringPiece key,
                          T* out_ptr,
-                         base::string16* error,
+                         std::u16string* error,
                          std::vector<base::StringPiece>* error_path_reversed) {
   return T::ParseFromDictionary(dict, key, out_ptr, error, error_path_reversed);
 }
@@ -94,7 +94,7 @@
 bool ParseFromDictionary(const base::DictionaryValue& dict,
                          base::StringPiece key,
                          std::vector<T>* out_ptr,
-                         base::string16* error,
+                         std::u16string* error,
                          std::vector<base::StringPiece>* error_path_reversed) {
   const base::Value* value = FindKeyOfType(dict, key, base::Value::Type::LIST,
                                            error, error_path_reversed);
@@ -116,7 +116,7 @@
 bool ParseFromDictionary(const base::DictionaryValue& dict,
                          base::StringPiece key,
                          std::unique_ptr<T>* out_ptr,
-                         base::string16* error,
+                         std::u16string* error,
                          std::vector<base::StringPiece>* error_path_reversed) {
   DCHECK(out_ptr);
 
@@ -148,7 +148,7 @@
     bool is_optional_property,
     T none_value,
     T* out,
-    base::string16* error,
+    std::u16string* error,
     std::vector<base::StringPiece>* error_path_reversed) {
   DCHECK(out);
   DCHECK_EQ(none_value, *out);
diff --git a/tools/json_schema_compiler/test/error_generation_unittest.cc b/tools/json_schema_compiler/test/error_generation_unittest.cc
index 4eb7b7fc..41fd18d 100644
--- a/tools/json_schema_compiler/test/error_generation_unittest.cc
+++ b/tools/json_schema_compiler/test/error_generation_unittest.cc
@@ -18,15 +18,15 @@
 using json_schema_compiler::test_util::List;
 
 template <typename T>
-base::string16 GetPopulateError(const Value& value) {
-  base::string16 error;
+std::u16string GetPopulateError(const Value& value) {
+  std::u16string error;
   T test_type;
   T::Populate(value, &test_type, &error);
   return error;
 }
 
 testing::AssertionResult EqualsUtf16(const std::string& expected,
-                                     const base::string16& actual) {
+                                     const std::u16string& actual) {
   if (base::ASCIIToUTF16(expected) == actual)
     return testing::AssertionSuccess();
   return testing::AssertionFailure() << "\n    actual:     " << actual
@@ -83,13 +83,13 @@
   {
     std::unique_ptr<base::ListValue> params_value =
         List(std::make_unique<Value>(5));
-    base::string16 error;
+    std::u16string error;
     EXPECT_TRUE(errors::TestFunction::Params::Create(*params_value, &error));
   }
   {
     std::unique_ptr<base::ListValue> params_value =
         List(std::make_unique<Value>(5), std::make_unique<Value>(5));
-    base::string16 error;
+    std::u16string error;
     EXPECT_FALSE(errors::TestFunction::Params::Create(*params_value, &error));
     EXPECT_TRUE(EqualsUtf16("expected 1 arguments, got 2", error));
   }
@@ -101,13 +101,13 @@
   {
     std::unique_ptr<base::ListValue> params_value =
         List(std::make_unique<Value>(5));
-    base::string16 error;
+    std::u16string error;
     EXPECT_TRUE(errors::TestFunction::Params::Create(*params_value, &error));
   }
   {
     std::unique_ptr<base::ListValue> params_value =
         List(std::make_unique<Value>());
-    base::string16 error;
+    std::u16string error;
     EXPECT_FALSE(errors::TestFunction::Params::Create(*params_value, &error));
     EXPECT_TRUE(EqualsUtf16("'num' is required", error));
   }
@@ -131,7 +131,7 @@
 
 TEST(JsonSchemaCompilerErrorTest, WrongParameterCreationType) {
   {
-    base::string16 error;
+    std::u16string error;
     std::unique_ptr<base::ListValue> params_value =
         List(std::make_unique<Value>("Yeah!"));
     EXPECT_TRUE(errors::TestString::Params::Create(*params_value, &error));
@@ -139,7 +139,7 @@
   {
     std::unique_ptr<base::ListValue> params_value =
         List(std::make_unique<Value>(5));
-    base::string16 error;
+    std::u16string error;
     EXPECT_FALSE(
         errors::TestTypeInObject::Params::Create(*params_value, &error));
     EXPECT_TRUE(EqualsUtf16("'paramObject': expected dictionary, got integer",
@@ -156,7 +156,7 @@
     std::unique_ptr<base::DictionaryValue> value =
         Dictionary("otherType", std::make_unique<Value>(1.1));
     errors::ObjectType out;
-    base::string16 error;
+    std::u16string error;
     EXPECT_FALSE(errors::ObjectType::Populate(*value, &out, &error));
     EXPECT_TRUE(EqualsUtf16("'otherType': expected dictionary, got double",
         error));
@@ -240,7 +240,7 @@
         Dictionary("string", std::make_unique<Value>(1));
 
     errors::OptionalTestType out;
-    base::string16 error;
+    std::u16string error;
     EXPECT_FALSE(errors::OptionalTestType::Populate(*value, &out, &error));
     EXPECT_TRUE(EqualsUtf16("'string': expected string, got integer",
         error));
@@ -261,7 +261,7 @@
         Dictionary("data", std::make_unique<Value>(1));
 
     errors::OptionalBinaryData out;
-    base::string16 error;
+    std::u16string error;
     EXPECT_FALSE(errors::OptionalBinaryData::Populate(*value, &out, &error));
     EXPECT_TRUE(EqualsUtf16("'data': expected binary, got integer",
         error));
@@ -279,7 +279,7 @@
     std::unique_ptr<base::DictionaryValue> value =
         Dictionary("TheArray", std::make_unique<Value>(5));
     errors::ArrayObject out;
-    base::string16 error;
+    std::u16string error;
     EXPECT_FALSE(errors::ArrayObject::Populate(*value, &out, &error));
     EXPECT_TRUE(EqualsUtf16("'TheArray': expected list, got integer",
         error));
@@ -299,7 +299,7 @@
     std::unique_ptr<base::ListValue> params_value =
         List(std::make_unique<Value>(5), std::make_unique<Value>(false));
     errors::OptionalChoiceType::Integers out;
-    base::string16 error;
+    std::u16string error;
     EXPECT_FALSE(errors::OptionalChoiceType::Integers::Populate(*params_value,
                                                                 &out, &error));
     EXPECT_TRUE(
diff --git a/tools/json_schema_compiler/test/simple_api_unittest.cc b/tools/json_schema_compiler/test/simple_api_unittest.cc
index 747770c..6b61030 100644
--- a/tools/json_schema_compiler/test/simple_api_unittest.cc
+++ b/tools/json_schema_compiler/test/simple_api_unittest.cc
@@ -35,7 +35,7 @@
   ASSERT_TRUE(manifest);
 
   simple_api::ManifestKeys manifest_keys;
-  base::string16 error_16;
+  std::u16string error_16;
   bool result = simple_api::ManifestKeys::ParseFromDictionary(
       base::Value::AsDictionaryValue(*manifest), &manifest_keys, &error_16);
 
@@ -48,7 +48,7 @@
   base::Optional<base::Value> manifest = base::JSONReader::Read(manifest_json);
   ASSERT_TRUE(manifest.has_value());
 
-  base::string16 error_16;
+  std::u16string error_16;
   bool result = simple_api::ManifestKeys::ParseFromDictionary(
       base::Value::AsDictionaryValue(*manifest), manifest_keys, &error_16);
 
diff --git a/tools/json_schema_compiler/util.cc b/tools/json_schema_compiler/util.cc
index 559279e..3aace125 100644
--- a/tools/json_schema_compiler/util.cc
+++ b/tools/json_schema_compiler/util.cc
@@ -15,7 +15,7 @@
 
 bool ReportError(const base::Value& from,
                  base::Value::Type expected,
-                 base::string16* error) {
+                 std::u16string* error) {
   DCHECK(error->empty());
   *error = base::ASCIIToUTF16(base::StringPrintf(
       "expected %s, got %s", base::Value::GetTypeName(expected),
@@ -29,7 +29,7 @@
   return from.GetAsInteger(out);
 }
 
-bool PopulateItem(const base::Value& from, int* out, base::string16* error) {
+bool PopulateItem(const base::Value& from, int* out, std::u16string* error) {
   if (!from.GetAsInteger(out))
     return ReportError(from, base::Value::Type::INTEGER, error);
   return true;
@@ -39,7 +39,7 @@
   return from.GetAsBoolean(out);
 }
 
-bool PopulateItem(const base::Value& from, bool* out, base::string16* error) {
+bool PopulateItem(const base::Value& from, bool* out, std::u16string* error) {
   if (!from.GetAsBoolean(out))
     return ReportError(from, base::Value::Type::BOOLEAN, error);
   return true;
@@ -49,7 +49,7 @@
   return from.GetAsDouble(out);
 }
 
-bool PopulateItem(const base::Value& from, double* out, base::string16* error) {
+bool PopulateItem(const base::Value& from, double* out, std::u16string* error) {
   if (!from.GetAsDouble(out))
     return ReportError(from, base::Value::Type::DOUBLE, error);
   return true;
@@ -61,7 +61,7 @@
 
 bool PopulateItem(const base::Value& from,
                   std::string* out,
-                  base::string16* error) {
+                  std::u16string* error) {
   if (!from.GetAsString(out))
     return ReportError(from, base::Value::Type::STRING, error);
   return true;
@@ -76,7 +76,7 @@
 
 bool PopulateItem(const base::Value& from,
                   std::vector<uint8_t>* out,
-                  base::string16* error) {
+                  std::u16string* error) {
   if (!from.is_blob())
     return ReportError(from, base::Value::Type::BINARY, error);
   *out = from.GetBlob();
@@ -90,7 +90,7 @@
 
 bool PopulateItem(const base::Value& from,
                   std::unique_ptr<base::Value>* out,
-                  base::string16* error) {
+                  std::u16string* error) {
   *out = from.CreateDeepCopy();
   return true;
 }
@@ -106,7 +106,7 @@
 
 bool PopulateItem(const base::Value& from,
                   std::unique_ptr<base::DictionaryValue>* out,
-                  base::string16* error) {
+                  std::u16string* error) {
   const base::DictionaryValue* dict = nullptr;
   if (!from.GetAsDictionary(&dict))
     return ReportError(from, base::Value::Type::DICTIONARY, error);
diff --git a/tools/json_schema_compiler/util.h b/tools/json_schema_compiler/util.h
index 7900670f..07b6cbf 100644
--- a/tools/json_schema_compiler/util.h
+++ b/tools/json_schema_compiler/util.h
@@ -24,22 +24,22 @@
 bool PopulateItem(const base::Value& from, std::unique_ptr<base::Value>* out);
 
 bool PopulateItem(const base::Value& from, int* out);
-bool PopulateItem(const base::Value& from, int* out, base::string16* error);
+bool PopulateItem(const base::Value& from, int* out, std::u16string* error);
 bool PopulateItem(const base::Value& from, bool* out);
-bool PopulateItem(const base::Value& from, bool* out, base::string16* error);
+bool PopulateItem(const base::Value& from, bool* out, std::u16string* error);
 bool PopulateItem(const base::Value& from, double* out);
-bool PopulateItem(const base::Value& from, double* out, base::string16* error);
+bool PopulateItem(const base::Value& from, double* out, std::u16string* error);
 bool PopulateItem(const base::Value& from, std::string* out);
 bool PopulateItem(const base::Value& from,
                   std::string* out,
-                  base::string16* error);
+                  std::u16string* error);
 bool PopulateItem(const base::Value& from, std::vector<uint8_t>* out);
 bool PopulateItem(const base::Value& from,
                   std::vector<uint8_t>* out,
-                  base::string16* error);
+                  std::u16string* error);
 bool PopulateItem(const base::Value& from,
                   std::unique_ptr<base::Value>* out,
-                  base::string16* error);
+                  std::u16string* error);
 bool PopulateItem(const base::Value& from, std::unique_ptr<base::Value>* out);
 
 // This template is used for types generated by tools/json_schema_compiler.
@@ -58,7 +58,7 @@
 // This template is used for types generated by tools/json_schema_compiler with
 // error generation enabled.
 template <class T>
-bool PopulateItem(const base::Value& from, T* out, base::string16* error) {
+bool PopulateItem(const base::Value& from, T* out, std::u16string* error) {
   T obj;
   if (!T::Populate(from, &obj, error))
     return false;
@@ -88,10 +88,10 @@
 template <class T>
 bool PopulateArrayFromList(const base::ListValue& list_value,
                            std::vector<T>* out,
-                           base::string16* error) {
+                           std::u16string* error) {
   out->clear();
   T item;
-  base::string16 item_error;
+  std::u16string item_error;
   const auto& list = list_value.GetList();
   for (size_t i = 0; i < list.size(); ++i) {
     if (!PopulateItem(list[i], &item, &item_error)) {
@@ -124,7 +124,7 @@
 template <class T>
 bool PopulateOptionalArrayFromList(const base::ListValue& list,
                                    std::unique_ptr<std::vector<T>>* out,
-                                   base::string16* error) {
+                                   std::u16string* error) {
   out->reset(new std::vector<T>());
   if (!PopulateArrayFromList(list, out->get(), error)) {
     out->reset();
diff --git a/url/gurl.h b/url/gurl.h
index 247476e..a5509ca 100644
--- a/url/gurl.h
+++ b/url/gurl.h
@@ -47,7 +47,7 @@
 class COMPONENT_EXPORT(URL) GURL {
  public:
   typedef url::StringPieceReplacements<std::string> Replacements;
-  typedef url::StringPieceReplacements<base::string16> ReplacementsW;
+  typedef url::StringPieceReplacements<std::u16string> ReplacementsW;
 
   // Creates an empty, invalid URL.
   GURL();
diff --git a/url/gurl_fuzzer.cc b/url/gurl_fuzzer.cc
index ed570c29..e3676ea 100644
--- a/url/gurl_fuzzer.cc
+++ b/url/gurl_fuzzer.cc
@@ -79,7 +79,7 @@
     url_from_string_piece_part.Resolve(relative_string);
 
     if (relative_size % sizeof(char16_t) == 0) {
-      base::string16 relative_string16(
+      std::u16string relative_string16(
           reinterpret_cast<const char16_t*>(data + size_t_bytes),
           relative_size / sizeof(char16_t));
       url_from_string_piece_part.Resolve(relative_string16);
diff --git a/url/url_canon_icu_unittest.cc b/url/url_canon_icu_unittest.cc
index 4ce31d4..5e1fcf5 100644
--- a/url/url_canon_icu_unittest.cc
+++ b/url/url_canon_icu_unittest.cc
@@ -67,7 +67,7 @@
     std::string str;
     StdStringCanonOutput output(&str);
 
-    base::string16 input_str(
+    std::u16string input_str(
         test_utils::TruncateWStringToUTF16(icu_cases[i].input));
     int input_len = static_cast<int>(input_str.length());
     converter.ConvertFromUTF16(input_str.c_str(), input_len, &output);
@@ -84,7 +84,7 @@
   ICUCharsetConverter converter(conv.converter());
   for (int i = static_size - 2; i <= static_size + 2; i++) {
     // Make a string with the appropriate length.
-    base::string16 input;
+    std::u16string input;
     for (int ch = 0; ch < i; ch++)
       input.push_back('a');
 
@@ -138,7 +138,7 @@
     }
 
     if (query_cases[i].input16) {
-      base::string16 input16(
+      std::u16string input16(
           test_utils::TruncateWStringToUTF16(query_cases[i].input16));
       int len = static_cast<int>(input16.length());
       Component in_comp(0, len);
diff --git a/url/url_canon_unittest.cc b/url/url_canon_unittest.cc
index cfcf40d..2a19045a 100644
--- a/url/url_canon_unittest.cc
+++ b/url/url_canon_unittest.cc
@@ -187,7 +187,7 @@
       out_str.clear();
       StdStringCanonOutput output(&out_str);
 
-      base::string16 input_str(
+      std::u16string input_str(
           test_utils::TruncateWStringToUTF16(utf_cases[i].input16));
       int input_len = static_cast<int>(input_str.length());
       bool success = true;
@@ -206,7 +206,7 @@
 
       // UTF-16 -> UTF-8
       std::string input8_str(utf_cases[i].input8);
-      base::string16 input16_str(
+      std::u16string input16_str(
           test_utils::TruncateWStringToUTF16(utf_cases[i].input16));
       EXPECT_EQ(input8_str, base::UTF16ToUTF8(input16_str));
 
@@ -259,7 +259,7 @@
     out_str.clear();
     StdStringCanonOutput output2(&out_str);
 
-    base::string16 wide_input(base::UTF8ToUTF16(scheme_cases[i].input));
+    std::u16string wide_input(base::UTF8ToUTF16(scheme_cases[i].input));
     in_comp.len = static_cast<int>(wide_input.length());
     success = CanonicalizeScheme(wide_input.c_str(), in_comp, &output2,
                                  &out_comp);
@@ -530,7 +530,7 @@
 
     // Wide version.
     if (host_cases[i].input16) {
-      base::string16 input16(
+      std::u16string input16(
           test_utils::TruncateWStringToUTF16(host_cases[i].input16));
       int host_len = static_cast<int>(input16.length());
       Component in_comp(0, host_len);
@@ -581,7 +581,7 @@
 
     // Wide version.
     if (host_cases[i].input16) {
-      base::string16 input16(
+      std::u16string input16(
           test_utils::TruncateWStringToUTF16(host_cases[i].input16));
       int host_len = static_cast<int>(input16.length());
       Component in_comp(0, host_len);
@@ -704,7 +704,7 @@
     }
 
     // 16-bit version.
-    base::string16 input16(
+    std::u16string input16(
         test_utils::TruncateWStringToUTF16(cases[i].input16));
     component = Component(0, static_cast<int>(input16.length()));
 
@@ -857,7 +857,7 @@
     }
 
     // 16-bit version.
-    base::string16 input16(
+    std::u16string input16(
         test_utils::TruncateWStringToUTF16(cases[i].input16));
     component = Component(0, static_cast<int>(input16.length()));
 
@@ -989,7 +989,7 @@
     // Now try the wide version
     out_str.clear();
     StdStringCanonOutput output2(&out_str);
-    base::string16 wide_input(base::UTF8ToUTF16(user_info_cases[i].input));
+    std::u16string wide_input(base::UTF8ToUTF16(user_info_cases[i].input));
     success = CanonicalizeUserInfo(wide_input.c_str(),
                                    parsed.username,
                                    wide_input.c_str(),
@@ -1052,7 +1052,7 @@
     // Now try the wide version
     out_str.clear();
     StdStringCanonOutput output2(&out_str);
-    base::string16 wide_input(base::UTF8ToUTF16(port_cases[i].input));
+    std::u16string wide_input(base::UTF8ToUTF16(port_cases[i].input));
     success = CanonicalizePort(wide_input.c_str(),
                                in_comp,
                                port_cases[i].default_port,
@@ -1195,7 +1195,7 @@
     }
 
     if (path_cases[i].input16) {
-      base::string16 input16(
+      std::u16string input16(
           test_utils::TruncateWStringToUTF16(path_cases[i].input16));
       int len = static_cast<int>(input16.length());
       Component in_comp(0, len);
@@ -1288,7 +1288,7 @@
     }
 
     if (query_cases[i].input16) {
-      base::string16 input16(
+      std::u16string input16(
           test_utils::TruncateWStringToUTF16(query_cases[i].input16));
       int len = static_cast<int>(input16.length());
       Component in_comp(0, len);
@@ -1362,7 +1362,7 @@
 
     // 16-bit input
     if (ref_cases[i].input16) {
-      base::string16 input16(
+      std::u16string input16(
           test_utils::TruncateWStringToUTF16(ref_cases[i].input16));
       int len = static_cast<int>(input16.length());
       Component in_comp(0, len);
@@ -2121,12 +2121,12 @@
   const char16_t fill_char = 0xffff;
   memset(buf, fill_mem, sizeof(buf));
   EXPECT_EQ(0, _itow_s(12, buf, sizeof(buf) / 2 - 1, 10));
-  EXPECT_EQ(base::UTF8ToUTF16("12"), base::string16(buf));
+  EXPECT_EQ(base::UTF8ToUTF16("12"), std::u16string(buf));
   EXPECT_EQ(fill_char, buf[3]);
 
   // Test the edge cases - exactly the buffer size and one over
   EXPECT_EQ(0, _itow_s(1234, buf, sizeof(buf) / 2 - 1, 10));
-  EXPECT_EQ(base::UTF8ToUTF16("1234"), base::string16(buf));
+  EXPECT_EQ(base::UTF8ToUTF16("1234"), std::u16string(buf));
   EXPECT_EQ(fill_char, buf[5]);
 
   memset(buf, fill_mem, sizeof(buf));
@@ -2136,13 +2136,12 @@
   // Test the template overload (note that this will see the full buffer)
   memset(buf, fill_mem, sizeof(buf));
   EXPECT_EQ(0, _itow_s(12, buf, 10));
-  EXPECT_EQ(base::UTF8ToUTF16("12"),
-            base::string16(buf));
+  EXPECT_EQ(base::UTF8ToUTF16("12"), std::u16string(buf));
   EXPECT_EQ(fill_char, buf[3]);
 
   memset(buf, fill_mem, sizeof(buf));
   EXPECT_EQ(0, _itow_s(12345, buf, 10));
-  EXPECT_EQ(base::UTF8ToUTF16("12345"), base::string16(buf));
+  EXPECT_EQ(base::UTF8ToUTF16("12345"), std::u16string(buf));
 
   EXPECT_EQ(EINVAL, _itow_s(123456, buf, 10));
 }
@@ -2374,11 +2373,11 @@
   // Override two components, the path with something short, and the query with
   // something long enough to trigger the bug.
   Replacements<char16_t> repl;
-  base::string16 new_query;
+  std::u16string new_query;
   for (int i = 0; i < 4800; i++)
     new_query.push_back('a');
 
-  base::string16 new_path(test_utils::TruncateWStringToUTF16(L"/foo"));
+  std::u16string new_path(test_utils::TruncateWStringToUTF16(L"/foo"));
   repl.SetPath(new_path.c_str(), Component(0, 4));
   repl.SetQuery(new_query.c_str(),
                 Component(0, static_cast<int>(new_query.length())));
@@ -2428,35 +2427,35 @@
   RawCanonOutputW<1024> output;
 
   // Basic ASCII test.
-  base::string16 str = base::UTF8ToUTF16("hello");
+  std::u16string str = base::UTF8ToUTF16("hello");
   EXPECT_TRUE(IDNToASCII(str.data(), str.length(), &output));
-  EXPECT_EQ(base::UTF8ToUTF16("hello"), base::string16(output.data()));
+  EXPECT_EQ(base::UTF8ToUTF16("hello"), std::u16string(output.data()));
   output.set_length(0);
 
   // Mixed ASCII/non-ASCII.
   str = base::UTF8ToUTF16("hellö");
   EXPECT_TRUE(IDNToASCII(str.data(), str.length(), &output));
-  EXPECT_EQ(base::UTF8ToUTF16("xn--hell-8qa"), base::string16(output.data()));
+  EXPECT_EQ(base::UTF8ToUTF16("xn--hell-8qa"), std::u16string(output.data()));
   output.set_length(0);
 
   // All non-ASCII.
   str = base::UTF8ToUTF16("你好");
   EXPECT_TRUE(IDNToASCII(str.data(), str.length(), &output));
-  EXPECT_EQ(base::UTF8ToUTF16("xn--6qq79v"), base::string16(output.data()));
+  EXPECT_EQ(base::UTF8ToUTF16("xn--6qq79v"), std::u16string(output.data()));
   output.set_length(0);
 
   // Characters that need mapping (the resulting Punycode is the encoding for
   // "1⁄4").
   str = base::UTF8ToUTF16("¼");
   EXPECT_TRUE(IDNToASCII(str.data(), str.length(), &output));
-  EXPECT_EQ(base::UTF8ToUTF16("xn--14-c6t"), base::string16(output.data()));
+  EXPECT_EQ(base::UTF8ToUTF16("xn--14-c6t"), std::u16string(output.data()));
   output.set_length(0);
 
   // String to encode already starts with "xn--", and all ASCII. Should not
   // modify the string.
   str = base::UTF8ToUTF16("xn--hell-8qa");
   EXPECT_TRUE(IDNToASCII(str.data(), str.length(), &output));
-  EXPECT_EQ(base::UTF8ToUTF16("xn--hell-8qa"), base::string16(output.data()));
+  EXPECT_EQ(base::UTF8ToUTF16("xn--hell-8qa"), std::u16string(output.data()));
   output.set_length(0);
 
   // String to encode already starts with "xn--", and mixed ASCII/non-ASCII.
@@ -2567,18 +2566,18 @@
                                   Component(2, strlen(test_case.host))));
 
     // Test with UTF-16.
-    base::string16 utf16 = base::UTF8ToUTF16(test_case.host);
+    std::u16string utf16 = base::UTF8ToUTF16(test_case.host);
     EXPECT_EQ(test_case.expected_safety_status,
               CheckHostnameSafety(utf16.c_str(), Component(0, utf16.size())));
 
     // Test with UTF-16 and terminal dot.
-    base::string16 utf16_with_dot = base::UTF8ToUTF16(host_with_dot);
+    std::u16string utf16_with_dot = base::UTF8ToUTF16(host_with_dot);
     EXPECT_EQ(test_case.expected_safety_status,
               CheckHostnameSafety(utf16_with_dot.c_str(),
                                   Component(0, utf16_with_dot.size())));
 
     // Test with UTF-16 and characters that are not part of the component.
-    base::string16 utf16_with_bonus_characters =
+    std::u16string utf16_with_bonus_characters =
         base::UTF8ToUTF16(host_with_bonus_characters);
     EXPECT_EQ(test_case.expected_safety_status,
               CheckHostnameSafety(utf16_with_bonus_characters.c_str(),
diff --git a/url/url_idna_icu_alternatives_android.cc b/url/url_idna_icu_alternatives_android.cc
index cf73e06..54fa9b81 100644
--- a/url/url_idna_icu_alternatives_android.cc
+++ b/url/url_idna_icu_alternatives_android.cc
@@ -32,7 +32,7 @@
   if (java_result.is_null())
     return false;
 
-  base::string16 utf16_result =
+  std::u16string utf16_result =
       base::android::ConvertJavaStringToUTF16(java_result);
   output->Append(utf16_result.data(), static_cast<int>(utf16_result.size()));
   return true;
diff --git a/url/url_test_utils.h b/url/url_test_utils.h
index 07bfba4a..a0753d95 100644
--- a/url/url_test_utils.h
+++ b/url/url_test_utils.h
@@ -24,8 +24,8 @@
 // in base bacause it passes invalid UTF-16 characters which is important for
 // test purposes. As a result, this is not meant to handle true UTF-32 encoded
 // strings.
-inline base::string16 TruncateWStringToUTF16(const wchar_t* src) {
-  base::string16 str;
+inline std::u16string TruncateWStringToUTF16(const wchar_t* src) {
+  std::u16string str;
   int length = static_cast<int>(wcslen(src));
   for (int i = 0; i < length; ++i) {
     str.push_back(static_cast<char16_t>(src[i]));
diff --git a/url/url_util.h b/url/url_util.h
index fd2bb35c9..7673f8a 100644
--- a/url/url_util.h
+++ b/url/url_util.h
@@ -144,7 +144,7 @@
   return FindAndCompareScheme(str.data(), static_cast<int>(str.size()),
                               compare, found_scheme);
 }
-inline bool FindAndCompareScheme(const base::string16& str,
+inline bool FindAndCompareScheme(const std::u16string& str,
                                  const char* compare,
                                  Component* found_scheme) {
   return FindAndCompareScheme(str.data(), static_cast<int>(str.size()),
diff --git a/url/url_util_unittest.cc b/url/url_util_unittest.cc
index 6deadc5..ac28f692 100644
--- a/url/url_util_unittest.cc
+++ b/url/url_util_unittest.cc
@@ -239,16 +239,15 @@
     RawCanonOutputT<char16_t> output;
     DecodeURLEscapeSequences(input, strlen(input),
                              DecodeURLMode::kUTF8OrIsomorphic, &output);
-    EXPECT_EQ(decode_cases[i].output,
-              base::UTF16ToUTF8(base::string16(output.data(),
-                                               output.length())));
+    EXPECT_EQ(decode_cases[i].output, base::UTF16ToUTF8(std::u16string(
+                                          output.data(), output.length())));
 
     RawCanonOutputT<char16_t> output_utf8;
     DecodeURLEscapeSequences(input, strlen(input), DecodeURLMode::kUTF8,
                              &output_utf8);
     EXPECT_EQ(decode_cases[i].output,
               base::UTF16ToUTF8(
-                  base::string16(output_utf8.data(), output_utf8.length())));
+                  std::u16string(output_utf8.data(), output_utf8.length())));
   }
 
   // Our decode should decode %00
@@ -256,8 +255,8 @@
   RawCanonOutputT<char16_t> zero_output;
   DecodeURLEscapeSequences(zero_input, strlen(zero_input), DecodeURLMode::kUTF8,
                            &zero_output);
-  EXPECT_NE("%00", base::UTF16ToUTF8(
-      base::string16(zero_output.data(), zero_output.length())));
+  EXPECT_NE("%00", base::UTF16ToUTF8(std::u16string(zero_output.data(),
+                                                    zero_output.length())));
 
   // Test the error behavior for invalid UTF-8.
   struct Utf8DecodeCase {
@@ -282,14 +281,14 @@
     RawCanonOutputT<char16_t> output_iso;
     DecodeURLEscapeSequences(input, strlen(input),
                              DecodeURLMode::kUTF8OrIsomorphic, &output_iso);
-    EXPECT_EQ(base::string16(test.expected_iso.data()),
-              base::string16(output_iso.data(), output_iso.length()));
+    EXPECT_EQ(std::u16string(test.expected_iso.data()),
+              std::u16string(output_iso.data(), output_iso.length()));
 
     RawCanonOutputT<char16_t> output_utf8;
     DecodeURLEscapeSequences(input, strlen(input), DecodeURLMode::kUTF8,
                              &output_utf8);
-    EXPECT_EQ(base::string16(test.expected_utf8.data()),
-              base::string16(output_utf8.data(), output_utf8.length()));
+    EXPECT_EQ(std::u16string(test.expected_utf8.data()),
+              std::u16string(output_utf8.data(), output_utf8.length()));
   }
 }
 
diff --git a/weblayer/browser/autofill_client_impl.cc b/weblayer/browser/autofill_client_impl.cc
index 834bcc1a..06461af 100644
--- a/weblayer/browser/autofill_client_impl.cc
+++ b/weblayer/browser/autofill_client_impl.cc
@@ -144,7 +144,7 @@
 
 void AutofillClientImpl::ShowLocalCardMigrationResults(
     const bool has_server_error,
-    const base::string16& tip_message,
+    const std::u16string& tip_message,
     const std::vector<autofill::MigratableCreditCard>& migratable_credit_cards,
     MigrationDeleteCardCallback delete_local_card_callback) {
   NOTREACHED();
@@ -183,13 +183,13 @@
 
 #else  // defined(OS_ANDROID)
 void AutofillClientImpl::ConfirmAccountNameFixFlow(
-    base::OnceCallback<void(const base::string16&)> callback) {
+    base::OnceCallback<void(const std::u16string&)> callback) {
   NOTREACHED();
 }
 
 void AutofillClientImpl::ConfirmExpirationDateFixFlow(
     const autofill::CreditCard& card,
-    base::OnceCallback<void(const base::string16&, const base::string16&)>
+    base::OnceCallback<void(const std::u16string&, const std::u16string&)>
         callback) {
   NOTREACHED();
 }
@@ -242,8 +242,8 @@
 }
 
 void AutofillClientImpl::UpdateAutofillPopupDataListValues(
-    const std::vector<base::string16>& values,
-    const std::vector<base::string16>& labels) {
+    const std::vector<std::u16string>& values,
+    const std::vector<std::u16string>& labels) {
   NOTREACHED();
 }
 
@@ -288,8 +288,8 @@
 }
 
 void AutofillClientImpl::DidFillOrPreviewField(
-    const base::string16& autofilled_value,
-    const base::string16& profile_full_name) {
+    const std::u16string& autofilled_value,
+    const std::u16string& profile_full_name) {
   NOTREACHED();
 }
 
diff --git a/weblayer/browser/autofill_client_impl.h b/weblayer/browser/autofill_client_impl.h
index c2a431c..ea3419c2 100644
--- a/weblayer/browser/autofill_client_impl.h
+++ b/weblayer/browser/autofill_client_impl.h
@@ -64,7 +64,7 @@
       LocalCardMigrationCallback start_migrating_cards_callback) override;
   void ShowLocalCardMigrationResults(
       const bool has_server_error,
-      const base::string16& tip_message,
+      const std::u16string& tip_message,
       const std::vector<autofill::MigratableCreditCard>&
           migratable_credit_cards,
       MigrationDeleteCardCallback delete_local_card_callback) override;
@@ -82,10 +82,10 @@
       base::OnceCallback<void(const std::string&)> callback) override;
 #else  // if defined(OS_ANDROID)
   void ConfirmAccountNameFixFlow(
-      base::OnceCallback<void(const base::string16&)> callback) override;
+      base::OnceCallback<void(const std::u16string&)> callback) override;
   void ConfirmExpirationDateFixFlow(
       const autofill::CreditCard& card,
-      base::OnceCallback<void(const base::string16&, const base::string16&)>
+      base::OnceCallback<void(const std::u16string&, const std::u16string&)>
           callback) override;
 #endif
   void ConfirmSaveCreditCardLocally(
@@ -109,8 +109,8 @@
       const autofill::AutofillClient::PopupOpenArgs& open_args,
       base::WeakPtr<autofill::AutofillPopupDelegate> delegate) override;
   void UpdateAutofillPopupDataListValues(
-      const std::vector<base::string16>& values,
-      const std::vector<base::string16>& labels) override;
+      const std::vector<std::u16string>& values,
+      const std::vector<std::u16string>& labels) override;
   base::span<const autofill::Suggestion> GetPopupSuggestions() const override;
   void PinPopupView() override;
   autofill::AutofillClient::PopupOpenArgs GetReopenPopupArgs() const override;
@@ -121,8 +121,8 @@
   void PropagateAutofillPredictions(
       content::RenderFrameHost* rfh,
       const std::vector<autofill::FormStructure*>& forms) override;
-  void DidFillOrPreviewField(const base::string16& autofilled_value,
-                             const base::string16& profile_full_name) override;
+  void DidFillOrPreviewField(const std::u16string& autofilled_value,
+                             const std::u16string& profile_full_name) override;
   bool IsContextSecure() const override;
   bool ShouldShowSigninPromo() override;
   bool AreServerCardsSupported() const override;
diff --git a/weblayer/browser/errorpage_browsertest.cc b/weblayer/browser/errorpage_browsertest.cc
index 362b6357..625068b 100644
--- a/weblayer/browser/errorpage_browsertest.cc
+++ b/weblayer/browser/errorpage_browsertest.cc
@@ -34,7 +34,7 @@
 
   // Currently, interstitials for error pages are displayed only on Android.
 #if defined(OS_ANDROID)
-  base::string16 expected_title =
+  std::u16string expected_title =
       l10n_util::GetStringUTF16(IDS_ANDROID_ERROR_PAGE_WEBPAGE_NOT_AVAILABLE);
   EXPECT_EQ(expected_title, GetTitle(shell()));
 #endif
diff --git a/weblayer/browser/file_select_helper.cc b/weblayer/browser/file_select_helper.cc
index 2e462571..2ca2823 100644
--- a/weblayer/browser/file_select_helper.cc
+++ b/weblayer/browser/file_select_helper.cc
@@ -90,13 +90,13 @@
 
 #if defined(OS_ANDROID)
   // Android needs the original MIME types and an additional capture value.
-  std::pair<std::vector<base::string16>, bool> accept_types =
+  std::pair<std::vector<std::u16string>, bool> accept_types =
       std::make_pair(params->accept_types, params->use_media_capture);
 #endif
 
   // Many of these params are not used in the Android SelectFileDialog
   // implementation, so we can safely pass empty values.
-  select_file_dialog_->SelectFile(dialog_type_, base::string16(),
+  select_file_dialog_->SelectFile(dialog_type_, std::u16string(),
                                   base::FilePath(), nullptr, 0,
                                   base::FilePath::StringType(), owning_window,
 #if defined(OS_ANDROID)
diff --git a/weblayer/browser/javascript_tab_modal_dialog_manager_delegate_android.cc b/weblayer/browser/javascript_tab_modal_dialog_manager_delegate_android.cc
index 5ab42113..7d14976 100644
--- a/weblayer/browser/javascript_tab_modal_dialog_manager_delegate_android.cc
+++ b/weblayer/browser/javascript_tab_modal_dialog_manager_delegate_android.cc
@@ -20,10 +20,10 @@
 base::WeakPtr<javascript_dialogs::TabModalDialogView>
 JavaScriptTabModalDialogManagerDelegateAndroid::CreateNewDialog(
     content::WebContents* alerting_web_contents,
-    const base::string16& title,
+    const std::u16string& title,
     content::JavaScriptDialogType dialog_type,
-    const base::string16& message_text,
-    const base::string16& default_prompt_text,
+    const std::u16string& message_text,
+    const std::u16string& default_prompt_text,
     content::JavaScriptDialogManager::DialogClosedCallback
         callback_on_button_clicked,
     base::OnceClosure callback_on_cancelled) {
diff --git a/weblayer/browser/javascript_tab_modal_dialog_manager_delegate_android.h b/weblayer/browser/javascript_tab_modal_dialog_manager_delegate_android.h
index f313c10e..46264f0 100644
--- a/weblayer/browser/javascript_tab_modal_dialog_manager_delegate_android.h
+++ b/weblayer/browser/javascript_tab_modal_dialog_manager_delegate_android.h
@@ -27,10 +27,10 @@
   // javascript_dialogs::TabModalDialogManagerDelegate
   base::WeakPtr<javascript_dialogs::TabModalDialogView> CreateNewDialog(
       content::WebContents* alerting_web_contents,
-      const base::string16& title,
+      const std::u16string& title,
       content::JavaScriptDialogType dialog_type,
-      const base::string16& message_text,
-      const base::string16& default_prompt_text,
+      const std::u16string& message_text,
+      const std::u16string& default_prompt_text,
       content::JavaScriptDialogManager::DialogClosedCallback dialog_callback,
       base::OnceClosure dialog_closed_callback) override;
   void WillRunDialog() override;
diff --git a/weblayer/browser/js_communication/web_message_browsertest.cc b/weblayer/browser/js_communication/web_message_browsertest.cc
index f6e8b98..307c201 100644
--- a/weblayer/browser/js_communication/web_message_browsertest.cc
+++ b/weblayer/browser/js_communication/web_message_browsertest.cc
@@ -56,7 +56,7 @@
   }
 
   WebMessageReplyProxy* proxy() { return proxy_; }
-  std::vector<base::string16>& messages() { return messages_; }
+  std::vector<std::u16string>& messages() { return messages_; }
 
   // WebMessageHost:
   void OnPostMessage(std::unique_ptr<WebMessage> message) override {
@@ -84,7 +84,7 @@
   int back_forward_cache_state_changed_call_count_ = 0;
   base::RepeatingClosure quit_closure_;
   WebMessageReplyProxy* proxy_;
-  std::vector<base::string16> messages_;
+  std::vector<std::u16string> messages_;
   bool expected_back_forward_value_ = false;
   std::unique_ptr<base::RunLoop> state_changed_run_loop_;
 };
diff --git a/weblayer/browser/no_state_prefetch/no_state_prefetch_browsertest.cc b/weblayer/browser/no_state_prefetch/no_state_prefetch_browsertest.cc
index 4bd4256..4e2c71e 100644
--- a/weblayer/browser/no_state_prefetch/no_state_prefetch_browsertest.cc
+++ b/weblayer/browser/no_state_prefetch/no_state_prefetch_browsertest.cc
@@ -88,7 +88,7 @@
   }
 
   void NavigateToPageAndWaitForTitleChange(const GURL& navigate_to,
-                                           base::string16 expected_title) {
+                                           std::u16string expected_title) {
     content::TitleWatcher title_watcher(
         static_cast<TabImpl*>(shell()->tab())->web_contents(), expected_title);
     NavigateAndWaitForCompletion(navigate_to, shell());
diff --git a/weblayer/browser/password_manager_driver_factory.cc b/weblayer/browser/password_manager_driver_factory.cc
index 67eb3cd..b030c34 100644
--- a/weblayer/browser/password_manager_driver_factory.cc
+++ b/weblayer/browser/password_manager_driver_factory.cc
@@ -65,9 +65,9 @@
   void RecordSavePasswordProgress(const std::string& log) override {}
   void UserModifiedPasswordField() override {}
   void UserModifiedNonPasswordField(autofill::FieldRendererId renderer_id,
-                                    const base::string16& value) override {}
+                                    const std::u16string& value) override {}
   void ShowPasswordSuggestions(base::i18n::TextDirection text_direction,
-                               const base::string16& typed_username,
+                               const std::u16string& typed_username,
                                int options,
                                const gfx::RectF& bounds) override {}
   void ShowTouchToFill() override {}
diff --git a/weblayer/browser/prefetch_browsertest.cc b/weblayer/browser/prefetch_browsertest.cc
index 62ab5ce..71df436 100644
--- a/weblayer/browser/prefetch_browsertest.cc
+++ b/weblayer/browser/prefetch_browsertest.cc
@@ -50,7 +50,7 @@
     command_line->AppendSwitch(switches::kIgnoreCertificateErrors);
   }
 
-  bool RunPrefetchExperiment(GURL url, const base::string16 expected_title) {
+  bool RunPrefetchExperiment(GURL url, const std::u16string expected_title) {
     content::TitleWatcher title_watcher(
         static_cast<TabImpl*>(shell()->tab())->web_contents(), expected_title);
     NavigateAndWaitForCompletion(url, shell());
diff --git a/weblayer/browser/tab_callback_proxy.cc b/weblayer/browser/tab_callback_proxy.cc
index 5b17bab..a0920a5 100644
--- a/weblayer/browser/tab_callback_proxy.cc
+++ b/weblayer/browser/tab_callback_proxy.cc
@@ -39,7 +39,7 @@
                                             java_observer_);
 }
 
-void TabCallbackProxy::OnTitleUpdated(const base::string16& title) {
+void TabCallbackProxy::OnTitleUpdated(const std::u16string& title) {
   JNIEnv* env = AttachCurrentThread();
   Java_TabCallbackProxy_onTitleUpdated(
       env, java_observer_, base::android::ConvertUTF16ToJavaString(env, title));
diff --git a/weblayer/browser/tab_callback_proxy.h b/weblayer/browser/tab_callback_proxy.h
index 8adfd2d..0883a54 100644
--- a/weblayer/browser/tab_callback_proxy.h
+++ b/weblayer/browser/tab_callback_proxy.h
@@ -25,7 +25,7 @@
   // TabObserver:
   void DisplayedUrlChanged(const GURL& url) override;
   void OnRenderProcessGone() override;
-  void OnTitleUpdated(const base::string16& title) override;
+  void OnTitleUpdated(const std::u16string& title) override;
 
  private:
   Tab* tab_;
diff --git a/weblayer/browser/tab_impl.cc b/weblayer/browser/tab_impl.cc
index 5ce6b44..c6d4ee2 100644
--- a/weblayer/browser/tab_impl.cc
+++ b/weblayer/browser/tab_impl.cc
@@ -481,7 +481,7 @@
   return navigation_controller_.get();
 }
 
-void TabImpl::ExecuteScript(const base::string16& script,
+void TabImpl::ExecuteScript(const std::u16string& script,
                             bool use_separate_isolate,
                             JavaScriptResultCallback callback) {
   if (use_separate_isolate) {
@@ -507,9 +507,9 @@
   return data_;
 }
 
-base::string16 TabImpl::AddWebMessageHostFactory(
+std::u16string TabImpl::AddWebMessageHostFactory(
     std::unique_ptr<WebMessageHostFactory> factory,
-    const base::string16& js_object_name,
+    const std::u16string& js_object_name,
     const std::vector<std::string>& allowed_origin_rules) {
   if (!js_communication_host_) {
     js_communication_host_ =
@@ -522,13 +522,13 @@
 }
 
 void TabImpl::RemoveWebMessageHostFactory(
-    const base::string16& js_object_name) {
+    const std::u16string& js_object_name) {
   if (js_communication_host_)
     js_communication_host_->RemoveWebMessageHostFactory(js_object_name);
 }
 
 void TabImpl::ExecuteScriptWithUserGestureForTests(
-    const base::string16& script) {
+    const std::u16string& script) {
   web_contents_->GetMainFrame()->ExecuteJavaScriptWithUserGestureForTests(
       script);
 }
@@ -789,7 +789,7 @@
   auto proxy = std::make_unique<WebMessageHostFactoryProxy>(client);
   std::vector<std::string> origins;
   base::android::AppendJavaStringArrayToStringVector(env, js_origins, &origins);
-  base::string16 result = AddWebMessageHostFactory(
+  std::u16string result = AddWebMessageHostFactory(
       std::move(proxy),
       base::android::ConvertJavaStringToUTF16(env, js_object_name), origins);
   return base::android::ConvertUTF16ToJavaString(env, result);
@@ -798,7 +798,7 @@
 void TabImpl::UnregisterWebMessageCallback(
     JNIEnv* env,
     const base::android::JavaParamRef<jstring>& js_object_name) {
-  base::string16 name;
+  std::u16string name;
   base::android::ConvertJavaStringToUTF16(env, js_object_name, &name);
   RemoveWebMessageHostFactory(name);
 }
@@ -942,7 +942,7 @@
   // be fixed and INVALIDATE_TYPE_LOAD should be removed.
   if (changed_flags &
       (content::INVALIDATE_TYPE_TITLE | content::INVALIDATE_TYPE_LOAD)) {
-    base::string16 title = web_contents_->GetTitle();
+    std::u16string title = web_contents_->GetTitle();
     if (title_ != title) {
       title_ = title;
       for (auto& observer : observers_)
diff --git a/weblayer/browser/tab_impl.h b/weblayer/browser/tab_impl.h
index b672c57..350012c1 100644
--- a/weblayer/browser/tab_impl.h
+++ b/weblayer/browser/tab_impl.h
@@ -220,18 +220,18 @@
   void AddObserver(TabObserver* observer) override;
   void RemoveObserver(TabObserver* observer) override;
   NavigationController* GetNavigationController() override;
-  void ExecuteScript(const base::string16& script,
+  void ExecuteScript(const std::u16string& script,
                      bool use_separate_isolate,
                      JavaScriptResultCallback callback) override;
   const std::string& GetGuid() override;
   void SetData(const std::map<std::string, std::string>& data) override;
   const std::map<std::string, std::string>& GetData() override;
-  base::string16 AddWebMessageHostFactory(
+  std::u16string AddWebMessageHostFactory(
       std::unique_ptr<WebMessageHostFactory> factory,
-      const base::string16& js_object_name,
+      const std::u16string& js_object_name,
       const std::vector<std::string>& js_origins) override;
   void RemoveWebMessageHostFactory(
-      const base::string16& js_object_name) override;
+      const std::u16string& js_object_name) override;
   std::unique_ptr<FaviconFetcher> CreateFaviconFetcher(
       FaviconFetcherDelegate* delegate) override;
 #if !defined(OS_ANDROID)
@@ -242,7 +242,7 @@
   void SetWebPreferences(blink::web_pref::WebPreferences* prefs);
 
   // Executes |script| with a user gesture.
-  void ExecuteScriptWithUserGestureForTests(const base::string16& script);
+  void ExecuteScriptWithUserGestureForTests(const std::u16string& script);
 
   // Initializes the autofill system with |provider| for tests.
   void InitializeAutofillForTests(
@@ -409,7 +409,7 @@
   std::map<std::string, std::string> data_;
   base::ObserverList<DataObserver>::Unchecked data_observers_;
 
-  base::string16 title_;
+  std::u16string title_;
 
   std::unique_ptr<js_injection::JsCommunicationHost> js_communication_host_;
 
diff --git a/weblayer/browser/url_bar/page_info_browsertest.cc b/weblayer/browser/url_bar/page_info_browsertest.cc
index db84e8f..a003b4e 100644
--- a/weblayer/browser/url_bar/page_info_browsertest.cc
+++ b/weblayer/browser/url_bar/page_info_browsertest.cc
@@ -101,7 +101,7 @@
   std::unique_ptr<PageInfoDelegate> page_info_delegate =
       page_info::GetPageInfoClient()->CreatePageInfoDelegate(GetWebContents());
   ASSERT_TRUE(page_info_delegate);
-  base::string16 expected_embedder_name =
+  std::u16string expected_embedder_name =
       base::ASCIIToUTF16("WebLayerBrowserTests");
   EXPECT_EQ(expected_embedder_name,
             page_info_delegate->GetClientApplicationName().c_str());
diff --git a/weblayer/browser/url_bar/page_info_delegate_impl.cc b/weblayer/browser/url_bar/page_info_delegate_impl.cc
index ac4128a..79ff0dfd 100644
--- a/weblayer/browser/url_bar/page_info_delegate_impl.cc
+++ b/weblayer/browser/url_bar/page_info_delegate_impl.cc
@@ -49,10 +49,10 @@
   NOTREACHED();
 }
 
-base::string16 PageInfoDelegateImpl::GetWarningDetailText() {
+std::u16string PageInfoDelegateImpl::GetWarningDetailText() {
   // TODO(crbug.com/1052375): Implement.
   NOTREACHED();
-  return base::string16();
+  return std::u16string();
 }
 #endif
 
@@ -124,7 +124,7 @@
 }
 
 #if defined(OS_ANDROID)
-const base::string16 PageInfoDelegateImpl::GetClientApplicationName() {
+const std::u16string PageInfoDelegateImpl::GetClientApplicationName() {
   return weblayer::GetClientApplicationName();
 }
 #endif
diff --git a/weblayer/browser/url_bar/page_info_delegate_impl.h b/weblayer/browser/url_bar/page_info_delegate_impl.h
index cd01370..9b07328 100644
--- a/weblayer/browser/url_bar/page_info_delegate_impl.h
+++ b/weblayer/browser/url_bar/page_info_delegate_impl.h
@@ -30,7 +30,7 @@
       const override;
   void OnUserActionOnPasswordUi(content::WebContents* web_contents,
                                 safe_browsing::WarningAction action) override;
-  base::string16 GetWarningDetailText() override;
+  std::u16string GetWarningDetailText() override;
 #endif
   permissions::PermissionResult GetPermissionStatus(
       ContentSettingsType type,
@@ -53,7 +53,7 @@
   security_state::VisibleSecurityState GetVisibleSecurityState() override;
 
 #if defined(OS_ANDROID)
-  const base::string16 GetClientApplicationName() override;
+  const std::u16string GetClientApplicationName() override;
 #endif
 
  private:
diff --git a/weblayer/browser/url_bar/url_bar_controller_impl.cc b/weblayer/browser/url_bar/url_bar_controller_impl.cc
index 81ae2d8..a4425f0e 100644
--- a/weblayer/browser/url_bar/url_bar_controller_impl.cc
+++ b/weblayer/browser/url_bar/url_bar_controller_impl.cc
@@ -83,7 +83,7 @@
 }
 #endif
 
-base::string16 UrlBarControllerImpl::GetUrlForDisplay() {
+std::u16string UrlBarControllerImpl::GetUrlForDisplay() {
   return location_bar_model_->GetURLForDisplay();
 }
 
@@ -113,9 +113,9 @@
   return true;
 }
 
-base::string16 UrlBarControllerImpl::FormattedStringWithEquivalentMeaning(
+std::u16string UrlBarControllerImpl::FormattedStringWithEquivalentMeaning(
     const GURL& url,
-    const base::string16& formatted_url) const {
+    const std::u16string& formatted_url) const {
   return AutocompleteInput::FormattedStringWithEquivalentMeaning(
       url, formatted_url, AutocompleteSchemeClassifierImpl(), nullptr);
 }
diff --git a/weblayer/browser/url_bar/url_bar_controller_impl.h b/weblayer/browser/url_bar/url_bar_controller_impl.h
index fb05b17..d09f6a2 100644
--- a/weblayer/browser/url_bar/url_bar_controller_impl.h
+++ b/weblayer/browser/url_bar/url_bar_controller_impl.h
@@ -40,15 +40,15 @@
 #endif
 
   // UrlBarController:
-  base::string16 GetUrlForDisplay() override;
+  std::u16string GetUrlForDisplay() override;
   security_state::SecurityLevel GetConnectionSecurityLevel() override;
 
   // LocationBarModelDelegate:
   bool GetURL(GURL* url) const override;
   bool ShouldTrimDisplayUrlAfterHostName() const override;
-  base::string16 FormattedStringWithEquivalentMeaning(
+  std::u16string FormattedStringWithEquivalentMeaning(
       const GURL& url,
-      const base::string16& formatted_url) const override;
+      const std::u16string& formatted_url) const override;
 
  private:
   content::WebContents* GetActiveWebContents() const;
diff --git a/weblayer/browser/weblayer_impl_android.cc b/weblayer/browser/weblayer_impl_android.cc
index 7f124da..c696d076 100644
--- a/weblayer/browser/weblayer_impl_android.cc
+++ b/weblayer/browser/weblayer_impl_android.cc
@@ -57,7 +57,7 @@
       experiment_ids);
 }
 
-base::string16 GetClientApplicationName() {
+std::u16string GetClientApplicationName() {
   JNIEnv* env = base::android::AttachCurrentThread();
 
   return base::android::ConvertJavaStringToUTF16(
diff --git a/weblayer/browser/weblayer_impl_android.h b/weblayer/browser/weblayer_impl_android.h
index ca116fe..102fec3 100644
--- a/weblayer/browser/weblayer_impl_android.h
+++ b/weblayer/browser/weblayer_impl_android.h
@@ -12,7 +12,7 @@
 namespace weblayer {
 
 // Returns the name of the WebLayer embedder.
-base::string16 GetClientApplicationName();
+std::u16string GetClientApplicationName();
 
 }  // namespace weblayer
 
diff --git a/weblayer/common/content_client_impl.cc b/weblayer/common/content_client_impl.cc
index 4fc6bb0..9e0e960 100644
--- a/weblayer/common/content_client_impl.cc
+++ b/weblayer/common/content_client_impl.cc
@@ -23,13 +23,13 @@
 
 ContentClientImpl::~ContentClientImpl() = default;
 
-base::string16 ContentClientImpl::GetLocalizedString(int message_id) {
+std::u16string ContentClientImpl::GetLocalizedString(int message_id) {
   return l10n_util::GetStringUTF16(message_id);
 }
 
-base::string16 ContentClientImpl::GetLocalizedString(
+std::u16string ContentClientImpl::GetLocalizedString(
     int message_id,
-    const base::string16& replacement) {
+    const std::u16string& replacement) {
   return l10n_util::GetStringFUTF16(message_id, replacement);
 }
 
diff --git a/weblayer/common/content_client_impl.h b/weblayer/common/content_client_impl.h
index 37589970..d74a5b1 100644
--- a/weblayer/common/content_client_impl.h
+++ b/weblayer/common/content_client_impl.h
@@ -19,9 +19,9 @@
   ContentClientImpl();
   ~ContentClientImpl() override;
 
-  base::string16 GetLocalizedString(int message_id) override;
-  base::string16 GetLocalizedString(int message_id,
-                                    const base::string16& replacement) override;
+  std::u16string GetLocalizedString(int message_id) override;
+  std::u16string GetLocalizedString(int message_id,
+                                    const std::u16string& replacement) override;
   base::StringPiece GetDataResource(int resource_id,
                                     ui::ScaleFactor scale_factor) override;
   base::RefCountedMemory* GetDataResourceBytes(int resource_id) override;
diff --git a/weblayer/public/js_communication/web_message.h b/weblayer/public/js_communication/web_message.h
index b74e634b..db812cf 100644
--- a/weblayer/public/js_communication/web_message.h
+++ b/weblayer/public/js_communication/web_message.h
@@ -15,7 +15,7 @@
   WebMessage();
   ~WebMessage();
 
-  base::string16 message;
+  std::u16string message;
 };
 
 }  // namespace weblayer
diff --git a/weblayer/public/tab.h b/weblayer/public/tab.h
index 2485fef..f962af8 100644
--- a/weblayer/public/tab.h
+++ b/weblayer/public/tab.h
@@ -73,7 +73,7 @@
   // first-party scripts in the page, and injected scripts. Use with caution,
   // only pass false for this argument if you know this isn't an issue or you
   // need to interact with first-party scripts.
-  virtual void ExecuteScript(const base::string16& script,
+  virtual void ExecuteScript(const std::u16string& script,
                              bool use_separate_isolate,
                              JavaScriptResultCallback callback) = 0;
 
@@ -105,14 +105,14 @@
   //
   // Returns an empty string on success. On failure, the return string gives
   // an error message.
-  virtual base::string16 AddWebMessageHostFactory(
+  virtual std::u16string AddWebMessageHostFactory(
       std::unique_ptr<WebMessageHostFactory> factory,
-      const base::string16& js_object_name,
+      const std::u16string& js_object_name,
       const std::vector<std::string>& allowed_origin_rules) = 0;
 
   // Removes the WebMessageHostFactory registered under |js_object_name|.
   virtual void RemoveWebMessageHostFactory(
-      const base::string16& js_object_name) = 0;
+      const std::u16string& js_object_name) = 0;
 
   // Creates a FaviconFetcher that notifies a FaviconFetcherDelegate when
   // the favicon changes.
diff --git a/weblayer/public/tab_observer.h b/weblayer/public/tab_observer.h
index ab94e55..9cfcd4b4 100644
--- a/weblayer/public/tab_observer.h
+++ b/weblayer/public/tab_observer.h
@@ -24,7 +24,7 @@
 
   // Called when the title of this tab changes. Note before the page sets a
   // title, the title may be a portion of the Uri.
-  virtual void OnTitleUpdated(const base::string16& title) {}
+  virtual void OnTitleUpdated(const std::u16string& title) {}
 
  protected:
   virtual ~TabObserver() {}
diff --git a/weblayer/public/url_bar_controller.h b/weblayer/public/url_bar_controller.h
index d64c764..91065eed 100644
--- a/weblayer/public/url_bar_controller.h
+++ b/weblayer/public/url_bar_controller.h
@@ -19,7 +19,7 @@
   static std::unique_ptr<UrlBarController> Create(Browser* browser);
 
   virtual ~UrlBarController() {}
-  virtual base::string16 GetUrlForDisplay() = 0;
+  virtual std::u16string GetUrlForDisplay() = 0;
   virtual security_state::SecurityLevel GetConnectionSecurityLevel() = 0;
 };
 
diff --git a/weblayer/renderer/weblayer_render_frame_observer.cc b/weblayer/renderer/weblayer_render_frame_observer.cc
index 3980d4a..7cdcd93 100644
--- a/weblayer/renderer/weblayer_render_frame_observer.cc
+++ b/weblayer/renderer/weblayer_render_frame_observer.cc
@@ -135,7 +135,7 @@
   // translate helper for language detection and possible translation.
   // TODO(http://crbug.com/1163244): Update this when the corresponding usage of
   // this function in //chrome is updated.
-  base::string16 contents =
+  std::u16string contents =
       blink::WebFrameContentDumper::DumpFrameTreeAsText(frame, kMaxIndexChars)
           .Utf16();
 
diff --git a/weblayer/shell/browser/shell.h b/weblayer/shell/browser/shell.h
index 5664d767..47600ee 100644
--- a/weblayer/shell/browser/shell.h
+++ b/weblayer/shell/browser/shell.h
@@ -149,7 +149,7 @@
   void PlatformSetLoadProgress(double progress);
 
   // Set the title of shell window
-  void PlatformSetTitle(const base::string16& title);
+  void PlatformSetTitle(const std::u16string& title);
 
   std::unique_ptr<Browser> browser_;
 
diff --git a/weblayer/shell/browser/shell_android.cc b/weblayer/shell/browser/shell_android.cc
index f4b5a0c8..ebef92a 100644
--- a/weblayer/shell/browser/shell_android.cc
+++ b/weblayer/shell/browser/shell_android.cc
@@ -28,6 +28,6 @@
 
 void Shell::Close() {}
 
-void Shell::PlatformSetTitle(const base::string16& title) {}
+void Shell::PlatformSetTitle(const std::u16string& title) {}
 
 }  // namespace weblayer
diff --git a/weblayer/shell/browser/shell_views.cc b/weblayer/shell/browser/shell_views.cc
index d71da0e..5781218 100644
--- a/weblayer/shell/browser/shell_views.cc
+++ b/weblayer/shell/browser/shell_views.cc
@@ -92,7 +92,7 @@
     GetWidget()->SetBounds(bounds);
   }
 
-  void SetWindowTitle(const base::string16& title) { title_ = title; }
+  void SetWindowTitle(const std::u16string& title) { title_ = title; }
 
   void EnableUIControl(UIControl control, bool is_enabled) {
     if (control == BACK_BUTTON) {
@@ -225,7 +225,7 @@
 
   // Overridden from TextfieldController
   void ContentsChanged(views::Textfield* sender,
-                       const base::string16& new_contents) override {}
+                       const std::u16string& new_contents) override {}
 
   bool HandleKeyEvent(views::Textfield* sender,
                       const ui::KeyEvent& key_event) override {
@@ -244,7 +244,7 @@
   }
 
   // Overridden from WidgetDelegateView
-  base::string16 GetWindowTitle() const override { return title_; }
+  std::u16string GetWindowTitle() const override { return title_; }
 
   // Overridden from View
   gfx::Size GetMinimumSize() const override {
@@ -275,7 +275,7 @@
   std::unique_ptr<Shell> shell_;
 
   // Window title
-  base::string16 title_;
+  std::u16string title_;
 
   // Toolbar view contains forward/backward/reload button and URL entry
   View* toolbar_view_ = nullptr;
@@ -384,7 +384,7 @@
   window_widget_->CloseNow();
 }
 
-void Shell::PlatformSetTitle(const base::string16& title) {
+void Shell::PlatformSetTitle(const std::u16string& title) {
   ShellWindowDelegateView* delegate_view =
       static_cast<ShellWindowDelegateView*>(window_widget_->widget_delegate());
   delegate_view->SetWindowTitle(title);
diff --git a/weblayer/test/weblayer_browser_test_utils.cc b/weblayer/test/weblayer_browser_test_utils.cc
index cbb39e1d..c0fe785 100644
--- a/weblayer/test/weblayer_browser_test_utils.cc
+++ b/weblayer/test/weblayer_browser_test_utils.cc
@@ -84,7 +84,7 @@
   tab_impl->ExecuteScriptWithUserGestureForTests(base::ASCIIToUTF16(script));
 }
 
-const base::string16& GetTitle(Shell* shell) {
+const std::u16string& GetTitle(Shell* shell) {
   TabImpl* tab_impl = static_cast<TabImpl*>(shell->tab());
 
   return tab_impl->web_contents()->GetTitle();
diff --git a/weblayer/test/weblayer_browser_test_utils.h b/weblayer/test/weblayer_browser_test_utils.h
index 7ed5f2a0..7ef2a9e 100644
--- a/weblayer/test/weblayer_browser_test_utils.h
+++ b/weblayer/test/weblayer_browser_test_utils.h
@@ -61,7 +61,7 @@
 void ExecuteScriptWithUserGesture(Tab* tab, const std::string& script);
 
 /// Gets the title of the current webpage in |shell|.
-const base::string16& GetTitle(Shell* shell);
+const std::u16string& GetTitle(Shell* shell);
 
 // Sets up the autofill system to be one that simply forwards detected forms to
 // the passed-in callback.