Adopt base::NoDestructor for KeyedService factories

For changes under /chrome/browser/sharing

It replaces base::Singleton, following the latest recommendation
in base/ and browser_context_keyed_service_factory.h.

For factories with a trivial destructor, it makes no difference.

LSC doc:
https://docs.google.com/document/d/1x1LqRQyfBOmpMkNQBYs7QBPSxLtuiImvmgcJYI_kaS4/edit?usp=sharing

This CL was uploaded by git cl split.

R=peter@chromium.org

Bug: 925323
Change-Id: Id067fbf01dcf8047a6ad2d3dc0535257ab4978bd
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4570552
Auto-Submit: Mikel Astiz <mastiz@chromium.org>
Commit-Queue: Peter Beverloo <peter@chromium.org>
Reviewed-by: Peter Beverloo <peter@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1151243}
diff --git a/chrome/browser/sharing/sharing_message_bridge_factory.cc b/chrome/browser/sharing/sharing_message_bridge_factory.cc
index 74e5ebf0b..9aca7f1a 100644
--- a/chrome/browser/sharing/sharing_message_bridge_factory.cc
+++ b/chrome/browser/sharing/sharing_message_bridge_factory.cc
@@ -5,7 +5,7 @@
 #include "chrome/browser/sharing/sharing_message_bridge_factory.h"
 #include "chrome/browser/sharing/sharing_message_bridge_impl.h"
 
-#include "base/memory/singleton.h"
+#include "base/no_destructor.h"
 #include "chrome/common/channel_info.h"
 #include "components/sync/base/report_unrecoverable_error.h"
 #include "components/sync/model/client_tag_based_model_type_processor.h"
@@ -28,7 +28,8 @@
 
 // static
 SharingMessageBridgeFactory* SharingMessageBridgeFactory::GetInstance() {
-  return base::Singleton<SharingMessageBridgeFactory>::get();
+  static base::NoDestructor<SharingMessageBridgeFactory> instance;
+  return instance.get();
 }
 
 // static
diff --git a/chrome/browser/sharing/sharing_message_bridge_factory.h b/chrome/browser/sharing/sharing_message_bridge_factory.h
index 6e7a962..d6173e7d 100644
--- a/chrome/browser/sharing/sharing_message_bridge_factory.h
+++ b/chrome/browser/sharing/sharing_message_bridge_factory.h
@@ -9,7 +9,7 @@
 
 namespace base {
 template <typename T>
-struct DefaultSingletonTraits;
+class NoDestructor;
 }  // namespace base
 
 class SharingMessageBridge;
@@ -26,7 +26,7 @@
       content::BrowserContext* context);
 
  private:
-  friend struct base::DefaultSingletonTraits<SharingMessageBridgeFactory>;
+  friend base::NoDestructor<SharingMessageBridgeFactory>;
 
   SharingMessageBridgeFactory();
   ~SharingMessageBridgeFactory() override;
diff --git a/chrome/browser/sharing/sharing_service_factory.cc b/chrome/browser/sharing/sharing_service_factory.cc
index d41db126..b5142370 100644
--- a/chrome/browser/sharing/sharing_service_factory.cc
+++ b/chrome/browser/sharing/sharing_service_factory.cc
@@ -6,7 +6,7 @@
 
 #include <memory>
 
-#include "base/memory/singleton.h"
+#include "base/no_destructor.h"
 #include "build/build_config.h"
 #include "chrome/browser/gcm/gcm_profile_service_factory.h"
 #include "chrome/browser/gcm/instance_id/instance_id_profile_service_factory.h"
@@ -60,7 +60,8 @@
 
 // static
 SharingServiceFactory* SharingServiceFactory::GetInstance() {
-  return base::Singleton<SharingServiceFactory>::get();
+  static base::NoDestructor<SharingServiceFactory> instance;
+  return instance.get();
 }
 
 // static
diff --git a/chrome/browser/sharing/sharing_service_factory.h b/chrome/browser/sharing/sharing_service_factory.h
index f687ea54..5a210bbd 100644
--- a/chrome/browser/sharing/sharing_service_factory.h
+++ b/chrome/browser/sharing/sharing_service_factory.h
@@ -9,7 +9,7 @@
 
 namespace base {
 template <typename T>
-struct DefaultSingletonTraits;
+class NoDestructor;
 }  // namespace base
 
 namespace content {
@@ -31,7 +31,7 @@
   SharingServiceFactory& operator=(const SharingServiceFactory&) = delete;
 
  private:
-  friend struct base::DefaultSingletonTraits<SharingServiceFactory>;
+  friend base::NoDestructor<SharingServiceFactory>;
 
   SharingServiceFactory();
   ~SharingServiceFactory() override;