Eliminate bind callback that doesn't take a BindSourceInfo parameter.

R=rockot@chromium.org
CQ_INCLUDE_TRYBOTS=master.tryserver.chromium.linux:linux_site_isolation;master.tryserver.chromium.mac:mac_optional_gpu_tests_rel

Review-Url: https://codereview.chromium.org/2851173004
Cr-Commit-Position: refs/heads/master@{#469241}
diff --git a/content/browser/background_fetch/background_fetch_service_impl.cc b/content/browser/background_fetch/background_fetch_service_impl.cc
index 68293310..923ad1b 100644
--- a/content/browser/background_fetch/background_fetch_service_impl.cc
+++ b/content/browser/background_fetch/background_fetch_service_impl.cc
@@ -34,6 +34,7 @@
 void BackgroundFetchServiceImpl::Create(
     int render_process_id,
     scoped_refptr<BackgroundFetchContext> background_fetch_context,
+    const service_manager::BindSourceInfo& source_info,
     blink::mojom::BackgroundFetchServiceRequest request) {
   DCHECK_CURRENTLY_ON(BrowserThread::IO);
   mojo::MakeStrongBinding(
diff --git a/content/browser/background_fetch/background_fetch_service_impl.h b/content/browser/background_fetch/background_fetch_service_impl.h
index c2d6f32..2fcc1c8 100644
--- a/content/browser/background_fetch/background_fetch_service_impl.h
+++ b/content/browser/background_fetch/background_fetch_service_impl.h
@@ -15,6 +15,10 @@
 #include "content/common/content_export.h"
 #include "third_party/WebKit/public/platform/modules/background_fetch/background_fetch.mojom.h"
 
+namespace service_manager {
+struct BindSourceInfo;
+}
+
 namespace url {
 class Origin;
 }
@@ -36,6 +40,7 @@
   static void Create(
       int render_process_id,
       scoped_refptr<BackgroundFetchContext> background_fetch_context,
+      const service_manager::BindSourceInfo& source_info,
       blink::mojom::BackgroundFetchServiceRequest request);
 
   // blink::mojom::BackgroundFetchService implementation.
diff --git a/content/browser/background_sync/background_sync_context.cc b/content/browser/background_sync/background_sync_context.cc
index c1b920f..fcd80be 100644
--- a/content/browser/background_sync/background_sync_context.cc
+++ b/content/browser/background_sync/background_sync_context.cc
@@ -44,7 +44,8 @@
 }
 
 void BackgroundSyncContext::CreateService(
-    mojo::InterfaceRequest<blink::mojom::BackgroundSyncService> request) {
+    const service_manager::BindSourceInfo& source_info,
+    blink::mojom::BackgroundSyncServiceRequest request) {
   DCHECK_CURRENTLY_ON(BrowserThread::UI);
 
   BrowserThread::PostTask(
diff --git a/content/browser/background_sync/background_sync_context.h b/content/browser/background_sync/background_sync_context.h
index 4d3ecf32..453299b3 100644
--- a/content/browser/background_sync/background_sync_context.h
+++ b/content/browser/background_sync/background_sync_context.h
@@ -13,6 +13,10 @@
 #include "content/common/content_export.h"
 #include "third_party/WebKit/public/platform/modules/background_sync/background_sync.mojom.h"
 
+namespace service_manager {
+struct BindSourceInfo;
+}
+
 namespace content {
 
 class BackgroundSyncManager;
@@ -36,8 +40,8 @@
 
   // Create a BackgroundSyncServiceImpl that is owned by this. Call on the UI
   // thread.
-  void CreateService(
-      mojo::InterfaceRequest<blink::mojom::BackgroundSyncService> request);
+  void CreateService(const service_manager::BindSourceInfo& source_info,
+                     blink::mojom::BackgroundSyncServiceRequest request);
 
   // Called by BackgroundSyncServiceImpl objects so that they can
   // be deleted. Call on the IO thread.
diff --git a/content/browser/background_sync/background_sync_service_impl_unittest.cc b/content/browser/background_sync/background_sync_service_impl_unittest.cc
index 197cf17..1924a17 100644
--- a/content/browser/background_sync/background_sync_service_impl_unittest.cc
+++ b/content/browser/background_sync/background_sync_service_impl_unittest.cc
@@ -26,6 +26,7 @@
 #include "content/test/test_background_sync_context.h"
 #include "mojo/public/cpp/bindings/interface_ptr.h"
 #include "net/base/network_change_notifier.h"
+#include "services/service_manager/public/cpp/bind_source_info.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
 namespace content {
@@ -181,7 +182,8 @@
     mojo::InterfaceRequest<blink::mojom::BackgroundSyncService>
         service_request = mojo::MakeRequest(&service_ptr_);
     // Create a new BackgroundSyncServiceImpl bound to the dummy channel.
-    background_sync_context_->CreateService(std::move(service_request));
+    background_sync_context_->CreateService(service_manager::BindSourceInfo(),
+                                            std::move(service_request));
     base::RunLoop().RunUntilIdle();
 
     service_impl_ = background_sync_context_->services_.begin()->first;
diff --git a/content/browser/broadcast_channel/broadcast_channel_provider.cc b/content/browser/broadcast_channel/broadcast_channel_provider.cc
index eacaa64f..9c15120 100644
--- a/content/browser/broadcast_channel/broadcast_channel_provider.cc
+++ b/content/browser/broadcast_channel/broadcast_channel_provider.cc
@@ -66,7 +66,8 @@
 BroadcastChannelProvider::BroadcastChannelProvider() {}
 
 void BroadcastChannelProvider::Connect(
-    mojo::InterfaceRequest<blink::mojom::BroadcastChannelProvider> request) {
+    const service_manager::BindSourceInfo& source_info,
+    blink::mojom::BroadcastChannelProviderRequest request) {
   bindings_.AddBinding(this, std::move(request));
 }
 
diff --git a/content/browser/broadcast_channel/broadcast_channel_provider.h b/content/browser/broadcast_channel/broadcast_channel_provider.h
index b4fd021..9998f41 100644
--- a/content/browser/broadcast_channel/broadcast_channel_provider.h
+++ b/content/browser/broadcast_channel/broadcast_channel_provider.h
@@ -12,6 +12,10 @@
 #include "third_party/WebKit/public/platform/modules/broadcastchannel/broadcast_channel.mojom.h"
 #include "url/origin.h"
 
+namespace service_manager {
+struct BindSourceInfo;
+}
+
 namespace content {
 
 class BroadcastChannelProvider
@@ -19,8 +23,8 @@
   public blink::mojom::BroadcastChannelProvider {
  public:
   BroadcastChannelProvider();
-  void Connect(
-      mojo::InterfaceRequest<blink::mojom::BroadcastChannelProvider> request);
+  void Connect(const service_manager::BindSourceInfo& source_info,
+               blink::mojom::BroadcastChannelProviderRequest request);
 
   void ConnectToChannel(
       const url::Origin& origin,
diff --git a/content/browser/field_trial_recorder.cc b/content/browser/field_trial_recorder.cc
index 2dc77e9..41995ea 100644
--- a/content/browser/field_trial_recorder.cc
+++ b/content/browser/field_trial_recorder.cc
@@ -15,7 +15,9 @@
 FieldTrialRecorder::~FieldTrialRecorder() = default;
 
 // static
-void FieldTrialRecorder::Create(mojom::FieldTrialRecorderRequest request) {
+void FieldTrialRecorder::Create(
+    const service_manager::BindSourceInfo& source_info,
+    mojom::FieldTrialRecorderRequest request) {
   mojo::MakeStrongBinding(base::MakeUnique<FieldTrialRecorder>(),
                           std::move(request));
 }
diff --git a/content/browser/field_trial_recorder.h b/content/browser/field_trial_recorder.h
index ab425d5..6abe143 100644
--- a/content/browser/field_trial_recorder.h
+++ b/content/browser/field_trial_recorder.h
@@ -8,6 +8,10 @@
 #include "base/threading/thread_checker.h"
 #include "content/common/field_trial_recorder.mojom.h"
 
+namespace service_manager {
+struct BindSourceInfo;
+}
+
 namespace content {
 
 class FieldTrialRecorder : public mojom::FieldTrialRecorder {
@@ -15,7 +19,8 @@
   FieldTrialRecorder();
   ~FieldTrialRecorder() override;
 
-  static void Create(mojom::FieldTrialRecorderRequest request);
+  static void Create(const service_manager::BindSourceInfo& source_info,
+                     mojom::FieldTrialRecorderRequest request);
 
  private:
   // content::mojom::FieldTrialRecorder:
diff --git a/content/browser/frame_host/render_frame_host_impl.cc b/content/browser/frame_host/render_frame_host_impl.cc
index c9a6d11..15283cb 100644
--- a/content/browser/frame_host/render_frame_host_impl.cc
+++ b/content/browser/frame_host/render_frame_host_impl.cc
@@ -235,7 +235,9 @@
   RemoterFactoryImpl(int process_id, int routing_id)
       : process_id_(process_id), routing_id_(routing_id) {}
 
-  static void Bind(int process_id, int routing_id,
+  static void Bind(int process_id,
+                   int routing_id,
+                   const service_manager::BindSourceInfo& source_info,
                    media::mojom::RemoterFactoryRequest request) {
     mojo::MakeStrongBinding(
         base::MakeUnique<RemoterFactoryImpl>(process_id, routing_id),
@@ -259,7 +261,8 @@
 #endif  // BUILDFLAG(ENABLE_MEDIA_REMOTING)
 
 template <typename Interface>
-void IgnoreInterfaceRequest(mojo::InterfaceRequest<Interface> request) {
+void IgnoreInterfaceRequest(const service_manager::BindSourceInfo& source_info,
+                            mojo::InterfaceRequest<Interface> request) {
   // Intentionally ignore the interface request.
 }
 
@@ -323,7 +326,8 @@
 
 void CreateMediaPlayerRenderer(
     content::RenderFrameHost* render_frame_host,
-    mojo::InterfaceRequest<media::mojom::Renderer> request) {
+    const service_manager::BindSourceInfo& source_info,
+    media::mojom::RendererRequest request) {
   std::unique_ptr<MediaPlayerRenderer> renderer =
       base::MakeUnique<MediaPlayerRenderer>(render_frame_host);
 
@@ -2672,16 +2676,9 @@
                    base::Unretained(geolocation_service_context)));
   }
 
-  device::mojom::WakeLockContext* wake_lock_service_context =
-      delegate_ ? delegate_->GetWakeLockServiceContext() : nullptr;
-  if (wake_lock_service_context) {
-    // WakeLockServiceContext is owned by WebContentsImpl so it will outlive
-    // this RenderFrameHostImpl, hence a raw pointer can be bound to service
-    // factory callback.
-    GetInterfaceRegistry()->AddInterface<device::mojom::WakeLockService>(
-        base::Bind(&device::mojom::WakeLockContext::GetWakeLock,
-                   base::Unretained(wake_lock_service_context)));
-  }
+  GetInterfaceRegistry()->AddInterface<device::mojom::WakeLockService>(
+      base::Bind(&RenderFrameHostImpl::BindWakeLockServiceRequest,
+                 base::Unretained(this)));
 
   if (!permission_service_context_)
     permission_service_context_.reset(new PermissionServiceContext(this));
@@ -3670,6 +3667,7 @@
 }
 
 WebBluetoothServiceImpl* RenderFrameHostImpl::CreateWebBluetoothService(
+    const service_manager::BindSourceInfo& source_info,
     blink::mojom::WebBluetoothServiceRequest request) {
   // RFHI owns |web_bluetooth_services_| and |web_bluetooth_service| owns the
   // |binding_| which may run the error handler. |binding_| can't run the error
@@ -3720,6 +3718,15 @@
   media_interface_proxy_.reset();
 }
 
+void RenderFrameHostImpl::BindWakeLockServiceRequest(
+    const service_manager::BindSourceInfo& source_info,
+    device::mojom::WakeLockServiceRequest request) {
+  device::mojom::WakeLockContext* wake_lock_service_context =
+      delegate_ ? delegate_->GetWakeLockServiceContext() : nullptr;
+  if (wake_lock_service_context)
+    wake_lock_service_context->GetWakeLock(std::move(request));
+}
+
 void RenderFrameHostImpl::GetInterface(
     const std::string& interface_name,
     mojo::ScopedMessagePipeHandle interface_pipe) {
diff --git a/content/browser/frame_host/render_frame_host_impl.h b/content/browser/frame_host/render_frame_host_impl.h
index 95e7999..7485678 100644
--- a/content/browser/frame_host/render_frame_host_impl.h
+++ b/content/browser/frame_host/render_frame_host_impl.h
@@ -44,12 +44,14 @@
 #include "content/public/browser/render_frame_host.h"
 #include "content/public/common/javascript_dialog_type.h"
 #include "content/public/common/previews_state.h"
+#include "device/wake_lock/public/interfaces/wake_lock_context.mojom.h"
 #include "media/mojo/interfaces/interface_factory.mojom.h"
 #include "mojo/public/cpp/bindings/binding_set.h"
 #include "mojo/public/cpp/system/data_pipe.h"
 #include "net/http/http_response_headers.h"
 #include "third_party/WebKit/public/platform/WebFocusType.h"
 #include "third_party/WebKit/public/platform/WebInsecureRequestPolicy.h"
+#include "third_party/WebKit/public/platform/modules/bluetooth/web_bluetooth.mojom.h"
 #include "third_party/WebKit/public/web/WebTextDirection.h"
 #include "third_party/WebKit/public/web/WebTreeScopeType.h"
 #include "ui/accessibility/ax_node_data.h"
@@ -72,12 +74,6 @@
 class ListValue;
 }
 
-namespace blink {
-namespace mojom {
-class WebBluetoothService;
-}
-}
-
 namespace gfx {
 class Range;
 }
@@ -903,7 +899,8 @@
   // Creates Web Bluetooth Service owned by the frame. Returns a raw pointer
   // to it.
   WebBluetoothServiceImpl* CreateWebBluetoothService(
-      mojo::InterfaceRequest<blink::mojom::WebBluetoothService> request);
+      const service_manager::BindSourceInfo& source_info,
+      blink::mojom::WebBluetoothServiceRequest request);
 
   // Deletes the Web Bluetooth Service owned by the frame.
   void DeleteWebBluetoothService(
@@ -916,6 +913,10 @@
   // Callback for connection error on the media::mojom::InterfaceFactory client.
   void OnMediaInterfaceFactoryConnectionError();
 
+  void BindWakeLockServiceRequest(
+      const service_manager::BindSourceInfo& source_info,
+      device::mojom::WakeLockServiceRequest request);
+
   // service_manager::mojom::InterfaceProvider:
   void GetInterface(const std::string& interface_name,
                     mojo::ScopedMessagePipeHandle interface_pipe) override;
diff --git a/content/browser/gpu/gpu_process_host.cc b/content/browser/gpu/gpu_process_host.cc
index 0c3f7908..4977be2 100644
--- a/content/browser/gpu/gpu_process_host.cc
+++ b/content/browser/gpu/gpu_process_host.cc
@@ -331,7 +331,8 @@
 
 #if defined(OS_ANDROID)
 template <typename Interface>
-void BindJavaInterface(mojo::InterfaceRequest<Interface> request) {
+void BindJavaInterface(const service_manager::BindSourceInfo& source_info,
+                       mojo::InterfaceRequest<Interface> request) {
   DCHECK_CURRENTLY_ON(BrowserThread::UI);
   content::GetGlobalJavaInterfaces()->GetInterface(std::move(request));
 }
diff --git a/content/browser/hyphenation/hyphenation_impl.cc b/content/browser/hyphenation/hyphenation_impl.cc
index c4d020f..cea977084 100644
--- a/content/browser/hyphenation/hyphenation_impl.cc
+++ b/content/browser/hyphenation/hyphenation_impl.cc
@@ -60,7 +60,8 @@
 HyphenationImpl::~HyphenationImpl() {}
 
 // static
-void HyphenationImpl::Create(blink::mojom::HyphenationRequest request) {
+void HyphenationImpl::Create(const service_manager::BindSourceInfo& source_info,
+                             blink::mojom::HyphenationRequest request) {
   mojo::MakeStrongBinding(base::MakeUnique<HyphenationImpl>(),
                           std::move(request));
 }
diff --git a/content/browser/hyphenation/hyphenation_impl.h b/content/browser/hyphenation/hyphenation_impl.h
index 5847439..3c578d6 100644
--- a/content/browser/hyphenation/hyphenation_impl.h
+++ b/content/browser/hyphenation/hyphenation_impl.h
@@ -9,6 +9,10 @@
 #include "mojo/public/cpp/bindings/interface_request.h"
 #include "third_party/WebKit/public/platform/modules/hyphenation/hyphenation.mojom.h"
 
+namespace service_manager {
+struct BindSourceInfo;
+}
+
 namespace hyphenation {
 
 class HyphenationImpl : public blink::mojom::Hyphenation {
@@ -16,7 +20,8 @@
   HyphenationImpl();
   ~HyphenationImpl() override;
 
-  static void Create(blink::mojom::HyphenationRequest);
+  static void Create(const service_manager::BindSourceInfo& source_info,
+                     blink::mojom::HyphenationRequest);
 
   // Hyphenation:
   void OpenDictionary(const std::string& locale,
diff --git a/content/browser/image_capture/image_capture_impl.cc b/content/browser/image_capture/image_capture_impl.cc
index 3ce15a8..e84a2a28 100644
--- a/content/browser/image_capture/image_capture_impl.cc
+++ b/content/browser/image_capture/image_capture_impl.cc
@@ -128,7 +128,9 @@
 ImageCaptureImpl::~ImageCaptureImpl() {}
 
 // static
-void ImageCaptureImpl::Create(media::mojom::ImageCaptureRequest request) {
+void ImageCaptureImpl::Create(
+    const service_manager::BindSourceInfo& source_info,
+    media::mojom::ImageCaptureRequest request) {
   mojo::MakeStrongBinding(base::MakeUnique<ImageCaptureImpl>(),
                           std::move(request));
 }
diff --git a/content/browser/image_capture/image_capture_impl.h b/content/browser/image_capture/image_capture_impl.h
index 7ea8c320..7a6adfb 100644
--- a/content/browser/image_capture/image_capture_impl.h
+++ b/content/browser/image_capture/image_capture_impl.h
@@ -7,6 +7,10 @@
 
 #include "media/capture/mojo/image_capture.mojom.h"
 
+namespace service_manager {
+struct BindSourceInfo;
+}
+
 namespace content {
 
 class ImageCaptureImpl : public media::mojom::ImageCapture {
@@ -14,7 +18,8 @@
   ImageCaptureImpl();
   ~ImageCaptureImpl() override;
 
-  static void Create(media::mojom::ImageCaptureRequest request);
+  static void Create(const service_manager::BindSourceInfo& source_info,
+                     media::mojom::ImageCaptureRequest request);
 
   void GetCapabilities(const std::string& source_id,
                        const GetCapabilitiesCallback& callback) override;
diff --git a/content/browser/installedapp/installed_app_provider_impl_default.cc b/content/browser/installedapp/installed_app_provider_impl_default.cc
index 10e512a..ee5de28 100644
--- a/content/browser/installedapp/installed_app_provider_impl_default.cc
+++ b/content/browser/installedapp/installed_app_provider_impl_default.cc
@@ -22,7 +22,8 @@
 
 // static
 void InstalledAppProviderImplDefault::Create(
-    mojo::InterfaceRequest<blink::mojom::InstalledAppProvider> request) {
+    const service_manager::BindSourceInfo& source_info,
+    blink::mojom::InstalledAppProviderRequest request) {
   mojo::MakeStrongBinding(base::MakeUnique<InstalledAppProviderImplDefault>(),
                           std::move(request));
 }
diff --git a/content/browser/installedapp/installed_app_provider_impl_default.h b/content/browser/installedapp/installed_app_provider_impl_default.h
index 78c1e0d..bc42a7f 100644
--- a/content/browser/installedapp/installed_app_provider_impl_default.h
+++ b/content/browser/installedapp/installed_app_provider_impl_default.h
@@ -11,6 +11,10 @@
 #include "third_party/WebKit/public/platform/modules/installedapp/installed_app_provider.mojom.h"
 #include "third_party/WebKit/public/platform/modules/installedapp/related_application.mojom.h"
 
+namespace service_manager {
+struct BindSourceInfo;
+}
+
 namespace content {
 
 // The default (no-op) implementation of the InstalledAppProvider Mojo service.
@@ -27,6 +31,7 @@
       const FilterInstalledAppsCallback& callback) override;
 
   static void Create(
+      const service_manager::BindSourceInfo& source_info,
       mojo::InterfaceRequest<blink::mojom::InstalledAppProvider> request);
 };
 
diff --git a/content/browser/keyboard_lock/keyboard_lock_service_impl.cc b/content/browser/keyboard_lock/keyboard_lock_service_impl.cc
index 727bd49..f03fc6e 100644
--- a/content/browser/keyboard_lock/keyboard_lock_service_impl.cc
+++ b/content/browser/keyboard_lock/keyboard_lock_service_impl.cc
@@ -18,6 +18,7 @@
 
 // static
 void KeyboardLockServiceImpl::CreateMojoService(
+    const service_manager::BindSourceInfo& source_info,
     blink::mojom::KeyboardLockServiceRequest request) {
   mojo::MakeStrongBinding(
         base::MakeUnique<KeyboardLockServiceImpl>(),
diff --git a/content/browser/keyboard_lock/keyboard_lock_service_impl.h b/content/browser/keyboard_lock/keyboard_lock_service_impl.h
index 96d5694..bc89444 100644
--- a/content/browser/keyboard_lock/keyboard_lock_service_impl.h
+++ b/content/browser/keyboard_lock/keyboard_lock_service_impl.h
@@ -9,6 +9,10 @@
 #include "mojo/public/cpp/bindings/strong_binding.h"
 #include "third_party/WebKit/public/platform/modules/keyboard_lock/keyboard_lock.mojom.h"
 
+namespace service_manager {
+struct BindSourceInfo;
+}
+
 namespace content {
 
 class CONTENT_EXPORT KeyboardLockServiceImpl
@@ -18,6 +22,7 @@
   ~KeyboardLockServiceImpl() override;
 
   static void CreateMojoService(
+      const service_manager::BindSourceInfo& source_info,
       blink::mojom::KeyboardLockServiceRequest request);
 
   // blink::mojom::KeyboardLockService implementations.
diff --git a/content/browser/media/session/media_session_service_impl.cc b/content/browser/media/session/media_session_service_impl.cc
index 524399df..f9586e33 100644
--- a/content/browser/media/session/media_session_service_impl.cc
+++ b/content/browser/media/session/media_session_service_impl.cc
@@ -32,6 +32,7 @@
 // static
 void MediaSessionServiceImpl::Create(
     RenderFrameHost* render_frame_host,
+    const service_manager::BindSourceInfo& source_info,
     blink::mojom::MediaSessionServiceRequest request) {
   MediaSessionServiceImpl* impl =
       new MediaSessionServiceImpl(render_frame_host);
diff --git a/content/browser/media/session/media_session_service_impl.h b/content/browser/media/session/media_session_service_impl.h
index edcca6d..38131be 100644
--- a/content/browser/media/session/media_session_service_impl.h
+++ b/content/browser/media/session/media_session_service_impl.h
@@ -10,6 +10,10 @@
 #include "mojo/public/cpp/bindings/binding.h"
 #include "third_party/WebKit/public/platform/modules/mediasession/media_session.mojom.h"
 
+namespace service_manager {
+struct BindSourceInfo;
+}
+
 namespace content {
 
 class RenderFrameHost;
@@ -24,6 +28,7 @@
   ~MediaSessionServiceImpl() override;
 
   static void Create(RenderFrameHost* render_frame_host,
+                     const service_manager::BindSourceInfo& source_info,
                      blink::mojom::MediaSessionServiceRequest request);
   const blink::mojom::MediaSessionClientPtr& GetClient() { return client_; }
   RenderFrameHost* GetRenderFrameHost();
diff --git a/content/browser/mime_registry_impl.cc b/content/browser/mime_registry_impl.cc
index e2dadbb..f46161e 100644
--- a/content/browser/mime_registry_impl.cc
+++ b/content/browser/mime_registry_impl.cc
@@ -17,7 +17,9 @@
 MimeRegistryImpl::~MimeRegistryImpl() = default;
 
 // static
-void MimeRegistryImpl::Create(blink::mojom::MimeRegistryRequest request) {
+void MimeRegistryImpl::Create(
+    const service_manager::BindSourceInfo& source_info,
+    blink::mojom::MimeRegistryRequest request) {
   DCHECK_CURRENTLY_ON(BrowserThread::FILE);
   mojo::MakeStrongBinding(base::MakeUnique<MimeRegistryImpl>(),
                           std::move(request));
diff --git a/content/browser/mime_registry_impl.h b/content/browser/mime_registry_impl.h
index 733faa4..31f1df3 100644
--- a/content/browser/mime_registry_impl.h
+++ b/content/browser/mime_registry_impl.h
@@ -7,6 +7,10 @@
 
 #include "third_party/WebKit/public/platform/mime_registry.mojom.h"
 
+namespace service_manager {
+struct BindSourceInfo;
+}
+
 namespace content {
 
 class MimeRegistryImpl : public blink::mojom::MimeRegistry {
@@ -14,7 +18,8 @@
   MimeRegistryImpl();
   ~MimeRegistryImpl() override;
 
-  static void Create(blink::mojom::MimeRegistryRequest request);
+  static void Create(const service_manager::BindSourceInfo& source_info,
+                     blink::mojom::MimeRegistryRequest request);
 
  private:
   void GetMimeTypeFromExtension(
diff --git a/content/browser/notifications/platform_notification_context_impl.cc b/content/browser/notifications/platform_notification_context_impl.cc
index 0fd4ed5..8ef474c6 100644
--- a/content/browser/notifications/platform_notification_context_impl.cc
+++ b/content/browser/notifications/platform_notification_context_impl.cc
@@ -126,7 +126,8 @@
 
 void PlatformNotificationContextImpl::CreateService(
     int render_process_id,
-    mojo::InterfaceRequest<blink::mojom::NotificationService> request) {
+    const service_manager::BindSourceInfo& source_info,
+    blink::mojom::NotificationServiceRequest request) {
   DCHECK_CURRENTLY_ON(BrowserThread::UI);
   BrowserThread::PostTask(
       BrowserThread::IO, FROM_HERE,
diff --git a/content/browser/notifications/platform_notification_context_impl.h b/content/browser/notifications/platform_notification_context_impl.h
index 1193cc6..67405dc0 100644
--- a/content/browser/notifications/platform_notification_context_impl.h
+++ b/content/browser/notifications/platform_notification_context_impl.h
@@ -29,6 +29,10 @@
 class SequencedTaskRunner;
 }
 
+namespace service_manager {
+struct BindSourceInfo;
+}
+
 namespace content {
 
 class BlinkNotificationServiceImpl;
@@ -63,9 +67,9 @@
   // Creates a BlinkNotificationServiceImpl that is owned by this context. Must
   // be called on the UI thread, although the service will be created on and
   // bound to the IO thread.
-  void CreateService(
-      int render_process_id,
-      mojo::InterfaceRequest<blink::mojom::NotificationService> request);
+  void CreateService(int render_process_id,
+                     const service_manager::BindSourceInfo& source_info,
+                     blink::mojom::NotificationServiceRequest request);
 
   // Removes |service| from the list of owned services, for example because the
   // Mojo pipe disconnected. Must be called on the IO thread.
diff --git a/content/browser/payments/payment_app_content_unittest_base.cc b/content/browser/payments/payment_app_content_unittest_base.cc
index 6f9ce5a..c4f73ab1 100644
--- a/content/browser/payments/payment_app_content_unittest_base.cc
+++ b/content/browser/payments/payment_app_content_unittest_base.cc
@@ -21,6 +21,7 @@
 #include "content/public/test/test_browser_thread_bundle.h"
 #include "mojo/public/cpp/bindings/associated_interface_ptr.h"
 #include "mojo/public/cpp/bindings/interface_request.h"
+#include "services/service_manager/public/cpp/bind_source_info.h"
 
 namespace content {
 
@@ -132,7 +133,8 @@
   mojo::InterfaceRequest<payments::mojom::PaymentManager> request =
       mojo::MakeRequest(&manager);
   payment_managers_.push_back(std::move(manager));
-  payment_app_context()->CreatePaymentManager(std::move(request));
+  payment_app_context()->CreatePaymentManager(service_manager::BindSourceInfo(),
+                                              std::move(request));
   base::RunLoop().RunUntilIdle();
 
   // Find a last registered payment manager.
diff --git a/content/browser/payments/payment_app_context_impl.cc b/content/browser/payments/payment_app_context_impl.cc
index c065a8ce..e699660 100644
--- a/content/browser/payments/payment_app_context_impl.cc
+++ b/content/browser/payments/payment_app_context_impl.cc
@@ -39,7 +39,8 @@
 }
 
 void PaymentAppContextImpl::CreatePaymentManager(
-    mojo::InterfaceRequest<payments::mojom::PaymentManager> request) {
+    const service_manager::BindSourceInfo& source_info,
+    payments::mojom::PaymentManagerRequest request) {
   DCHECK_CURRENTLY_ON(BrowserThread::UI);
 
   BrowserThread::PostTask(
diff --git a/content/browser/payments/payment_app_context_impl.h b/content/browser/payments/payment_app_context_impl.h
index 259b53da..e6b99af 100644
--- a/content/browser/payments/payment_app_context_impl.h
+++ b/content/browser/payments/payment_app_context_impl.h
@@ -14,6 +14,10 @@
 #include "content/browser/payments/payment_app_database.h"
 #include "content/common/content_export.h"
 
+namespace service_manager {
+struct BindSourceInfo;
+}
+
 namespace content {
 
 class PaymentAppDatabase;
@@ -54,8 +58,8 @@
 
   // Create a PaymentManager that is owned by this. Call on the UI
   // thread.
-  void CreatePaymentManager(
-      mojo::InterfaceRequest<payments::mojom::PaymentManager> request);
+  void CreatePaymentManager(const service_manager::BindSourceInfo& source_info,
+                            payments::mojom::PaymentManagerRequest request);
 
   // Called by PaymentManager objects so that they can
   // be deleted. Call on the IO thread.
diff --git a/content/browser/permissions/permission_service_context.cc b/content/browser/permissions/permission_service_context.cc
index 717fdd2..7f0a370 100644
--- a/content/browser/permissions/permission_service_context.cc
+++ b/content/browser/permissions/permission_service_context.cc
@@ -72,7 +72,8 @@
 }
 
 void PermissionServiceContext::CreateService(
-    mojo::InterfaceRequest<blink::mojom::PermissionService> request) {
+    const service_manager::BindSourceInfo& source_info,
+    blink::mojom::PermissionServiceRequest request) {
   services_.push_back(
       base::MakeUnique<PermissionServiceImpl>(this, std::move(request)));
 }
diff --git a/content/browser/permissions/permission_service_context.h b/content/browser/permissions/permission_service_context.h
index c2fc55a..87b7592 100644
--- a/content/browser/permissions/permission_service_context.h
+++ b/content/browser/permissions/permission_service_context.h
@@ -9,12 +9,10 @@
 #include "content/public/browser/permission_type.h"
 #include "content/public/browser/web_contents_observer.h"
 #include "mojo/public/cpp/bindings/interface_request.h"
+#include "third_party/WebKit/public/platform/modules/permissions/permission.mojom.h"
 
-namespace blink {
-namespace mojom {
-class PermissionObserver;
-class PermissionService;
-}
+namespace service_manager {
+struct BindSourceInfo;
 }
 
 namespace url {
@@ -38,8 +36,8 @@
   explicit PermissionServiceContext(RenderProcessHost* render_process_host);
   ~PermissionServiceContext() override;
 
-  void CreateService(
-      mojo::InterfaceRequest<blink::mojom::PermissionService> request);
+  void CreateService(const service_manager::BindSourceInfo& source_info,
+                     blink::mojom::PermissionServiceRequest request);
 
   void CreateSubscription(
       PermissionType permission_type,
diff --git a/content/browser/presentation/presentation_service_impl.cc b/content/browser/presentation/presentation_service_impl.cc
index 4499ea22..ea75760 100644
--- a/content/browser/presentation/presentation_service_impl.cc
+++ b/content/browser/presentation/presentation_service_impl.cc
@@ -76,7 +76,8 @@
 // static
 void PresentationServiceImpl::CreateMojoService(
     RenderFrameHost* render_frame_host,
-    mojo::InterfaceRequest<blink::mojom::PresentationService> request) {
+    const service_manager::BindSourceInfo& source_info,
+    blink::mojom::PresentationServiceRequest request) {
   DVLOG(2) << "CreateMojoService";
   WebContents* web_contents =
       WebContents::FromRenderFrameHost(render_frame_host);
@@ -101,7 +102,7 @@
 }
 
 void PresentationServiceImpl::Bind(
-    mojo::InterfaceRequest<blink::mojom::PresentationService> request) {
+    blink::mojom::PresentationServiceRequest request) {
   binding_.reset(new mojo::Binding<blink::mojom::PresentationService>(
       this, std::move(request)));
 }
diff --git a/content/browser/presentation/presentation_service_impl.h b/content/browser/presentation/presentation_service_impl.h
index 4381b4a9..7f318404 100644
--- a/content/browser/presentation/presentation_service_impl.h
+++ b/content/browser/presentation/presentation_service_impl.h
@@ -29,6 +29,10 @@
 #include "third_party/WebKit/public/platform/modules/presentation/presentation.mojom.h"
 #include "url/gurl.h"
 
+namespace service_manager {
+struct BindSourceInfo;
+}
+
 namespace content {
 
 struct PresentationConnectionMessage;
@@ -58,6 +62,7 @@
   // |request|: The instance will be bound to this request. Used for Mojo setup.
   static void CreateMojoService(
       RenderFrameHost* render_frame_host,
+      const service_manager::BindSourceInfo& source_info,
       mojo::InterfaceRequest<blink::mojom::PresentationService> request);
 
  private:
@@ -179,7 +184,7 @@
       override;
 
   // Creates a binding between this object and |request|.
-  void Bind(mojo::InterfaceRequest<blink::mojom::PresentationService> request);
+  void Bind(blink::mojom::PresentationServiceRequest request);
 
   // WebContentsObserver override.
   void DidFinishNavigation(NavigationHandle* navigation_handle) override;
diff --git a/content/browser/push_messaging/push_messaging_manager.cc b/content/browser/push_messaging/push_messaging_manager.cc
index 1a79fc2b..33ee69c 100644
--- a/content/browser/push_messaging/push_messaging_manager.cc
+++ b/content/browser/push_messaging/push_messaging_manager.cc
@@ -268,7 +268,9 @@
 
 PushMessagingManager::~PushMessagingManager() {}
 
-void PushMessagingManager::BindRequest(mojom::PushMessagingRequest request) {
+void PushMessagingManager::BindRequest(
+    const service_manager::BindSourceInfo& source_info,
+    mojom::PushMessagingRequest request) {
   bindings_.AddBinding(this, std::move(request));
 }
 
diff --git a/content/browser/push_messaging/push_messaging_manager.h b/content/browser/push_messaging/push_messaging_manager.h
index 12df9b4..d89c75e2 100644
--- a/content/browser/push_messaging/push_messaging_manager.h
+++ b/content/browser/push_messaging/push_messaging_manager.h
@@ -20,6 +20,10 @@
 #include "mojo/public/cpp/bindings/binding_set.h"
 #include "url/gurl.h"
 
+namespace service_manager {
+struct BindSourceInfo;
+}
+
 namespace content {
 
 class PushMessagingService;
@@ -35,7 +39,8 @@
   PushMessagingManager(int render_process_id,
                        ServiceWorkerContextWrapper* service_worker_context);
 
-  void BindRequest(mojom::PushMessagingRequest request);
+  void BindRequest(const service_manager::BindSourceInfo& source_info,
+                   mojom::PushMessagingRequest request);
 
   // mojom::PushMessaging impl, run on IO thread.
   void Subscribe(int32_t render_frame_id,
diff --git a/content/browser/renderer_host/media/media_devices_dispatcher_host.cc b/content/browser/renderer_host/media/media_devices_dispatcher_host.cc
index 406bf95..05e47ec 100644
--- a/content/browser/renderer_host/media/media_devices_dispatcher_host.cc
+++ b/content/browser/renderer_host/media/media_devices_dispatcher_host.cc
@@ -98,6 +98,7 @@
     int render_frame_id,
     const std::string& device_id_salt,
     MediaStreamManager* media_stream_manager,
+    const service_manager::BindSourceInfo& source_info,
     ::mojom::MediaDevicesDispatcherHostRequest request) {
   DCHECK_CURRENTLY_ON(BrowserThread::IO);
   mojo::MakeStrongBinding(base::MakeUnique<MediaDevicesDispatcherHost>(
diff --git a/content/browser/renderer_host/media/media_devices_dispatcher_host.h b/content/browser/renderer_host/media/media_devices_dispatcher_host.h
index 0085491..fd06fed 100644
--- a/content/browser/renderer_host/media/media_devices_dispatcher_host.h
+++ b/content/browser/renderer_host/media/media_devices_dispatcher_host.h
@@ -18,6 +18,10 @@
 
 using ::mojom::MediaDeviceType;
 
+namespace service_manager {
+struct BindSourceInfo;
+}
+
 namespace url {
 class Origin;
 }
@@ -40,6 +44,7 @@
                      int render_frame_id,
                      const std::string& device_id_salt,
                      MediaStreamManager* media_stream_manager,
+                     const service_manager::BindSourceInfo& source_info,
                      ::mojom::MediaDevicesDispatcherHostRequest request);
 
   // ::mojom::MediaDevicesDispatcherHost implementation.
diff --git a/content/browser/renderer_host/media/video_capture_host.cc b/content/browser/renderer_host/media/video_capture_host.cc
index a51f00e5..78782180d 100644
--- a/content/browser/renderer_host/media/video_capture_host.cc
+++ b/content/browser/renderer_host/media/video_capture_host.cc
@@ -25,8 +25,10 @@
 }
 
 // static
-void VideoCaptureHost::Create(MediaStreamManager* media_stream_manager,
-                              mojom::VideoCaptureHostRequest request) {
+void VideoCaptureHost::Create(
+    MediaStreamManager* media_stream_manager,
+    const service_manager::BindSourceInfo& source_info,
+    mojom::VideoCaptureHostRequest request) {
   DVLOG(1) << __func__;
   DCHECK_CURRENTLY_ON(BrowserThread::IO);
   mojo::MakeStrongBinding(
diff --git a/content/browser/renderer_host/media/video_capture_host.h b/content/browser/renderer_host/media/video_capture_host.h
index 9669c35..4ae55e46 100644
--- a/content/browser/renderer_host/media/video_capture_host.h
+++ b/content/browser/renderer_host/media/video_capture_host.h
@@ -16,6 +16,10 @@
 #include "content/common/content_export.h"
 #include "content/common/video_capture.mojom.h"
 
+namespace service_manager {
+struct BindSourceInfo;
+}
+
 namespace content {
 class MediaStreamManager;
 
@@ -31,6 +35,7 @@
   explicit VideoCaptureHost(MediaStreamManager* media_stream_manager);
 
   static void Create(MediaStreamManager* media_stream_manager,
+                     const service_manager::BindSourceInfo& source_info,
                      mojom::VideoCaptureHostRequest request);
 
   ~VideoCaptureHost() override;
diff --git a/content/browser/renderer_host/render_process_host_impl.cc b/content/browser/renderer_host/render_process_host_impl.cc
index 5f24093..1234f79 100644
--- a/content/browser/renderer_host/render_process_host_impl.cc
+++ b/content/browser/renderer_host/render_process_host_impl.cc
@@ -451,6 +451,7 @@
 
 void CreateMemoryCoordinatorHandle(
     int render_process_id,
+    const service_manager::BindSourceInfo& source_info,
     mojom::MemoryCoordinatorHandleRequest request) {
   MemoryCoordinatorImpl::GetInstance()->CreateHandle(render_process_id,
                                                      std::move(request));
@@ -459,7 +460,9 @@
 // Forwards service requests to Service Manager since the renderer cannot launch
 // out-of-process services on is own.
 template <typename R>
-void ForwardShapeDetectionRequest(R request) {
+void ForwardShapeDetectionRequest(const service_manager::BindSourceInfo&,
+                                  R request) {
+  // TODO(beng): This should really be using the per-profile connector.
   service_manager::Connector* connector =
       ServiceManagerConnection::GetForProcess()->GetConnector();
   connector->BindInterface(shape_detection::mojom::kServiceName,
@@ -473,6 +476,7 @@
       int render_process_id,
       scoped_refptr<ResourceMessageFilter> resource_message_filter,
       scoped_refptr<ServiceWorkerContextWrapper> service_worker_context,
+      const service_manager::BindSourceInfo& source_info,
       mojom::WorkerURLLoaderFactoryProviderRequest request) {
     DCHECK(base::FeatureList::IsEnabled(features::kOffMainThreadFetch));
     mojo::MakeStrongBinding(
@@ -1336,9 +1340,9 @@
 
   // This is to support usage of WebSockets in cases in which there is no
   // associated RenderFrame (e.g., Shared Workers).
-  AddUIThreadInterface(
-      registry.get(), base::Bind(&WebSocketManager::CreateWebSocket, GetID(),
-                                 MSG_ROUTING_NONE));
+  AddUIThreadInterface(registry.get(),
+                       base::Bind(&WebSocketManager::CreateWebSocket, GetID(),
+                                  MSG_ROUTING_NONE));
 
   // Chrome browser process only provides DiscardableSharedMemory service when
   // Chrome is not running in mus+ash.
@@ -1401,7 +1405,9 @@
     listener->OnAssociatedInterfaceRequest(name, request.PassHandle());
 }
 
-void RenderProcessHostImpl::CreateMusGpuRequest(ui::mojom::GpuRequest request) {
+void RenderProcessHostImpl::CreateMusGpuRequest(
+    const service_manager::BindSourceInfo& source_info,
+    ui::mojom::GpuRequest request) {
   DCHECK_CURRENTLY_ON(BrowserThread::IO);
   if (!gpu_client_)
     gpu_client_.reset(new GpuClient(GetID()));
@@ -1409,6 +1415,7 @@
 }
 
 void RenderProcessHostImpl::CreateOffscreenCanvasProvider(
+    const service_manager::BindSourceInfo& source_info,
     blink::mojom::OffscreenCanvasProviderRequest request) {
   DCHECK_CURRENTLY_ON(BrowserThread::UI);
   if (!offscreen_canvas_provider_) {
@@ -1421,12 +1428,14 @@
 }
 
 void RenderProcessHostImpl::BindFrameSinkProvider(
+    const service_manager::BindSourceInfo& source_info,
     mojom::FrameSinkProviderRequest request) {
   frame_sink_provider_.Bind(std::move(request));
 }
 
 void RenderProcessHostImpl::CreateStoragePartitionService(
-    mojo::InterfaceRequest<mojom::StoragePartitionService> request) {
+    const service_manager::BindSourceInfo& source_info,
+    mojom::StoragePartitionServiceRequest request) {
   // DO NOT REMOVE THIS COMMAND LINE CHECK WITHOUT SECURITY REVIEW!
   if (base::CommandLine::ForCurrentProcess()->HasSwitch(
           switches::kMojoLocalStorage)) {
diff --git a/content/browser/renderer_host/render_process_host_impl.h b/content/browser/renderer_host/render_process_host_impl.h
index 5a18d33..05c8c7c 100644
--- a/content/browser/renderer_host/render_process_host_impl.h
+++ b/content/browser/renderer_host/render_process_host_impl.h
@@ -31,6 +31,7 @@
 #include "content/common/content_export.h"
 #include "content/common/indexed_db/indexed_db.mojom.h"
 #include "content/common/renderer.mojom.h"
+#include "content/common/storage_partition_service.mojom.h"
 #include "content/public/browser/render_process_host.h"
 #include "content/public/common/service_manager_connection.h"
 #include "ipc/ipc_channel_proxy.h"
@@ -78,10 +79,6 @@
 class StoragePartition;
 class StoragePartitionImpl;
 
-namespace mojom {
-class StoragePartitionService;
-}  // namespace mojom
-
 typedef base::Thread* (*RendererMainThreadFactoryFunction)(
     const InProcessChildThreadParams& params);
 
@@ -347,12 +344,16 @@
 
   void BindRouteProvider(mojom::RouteProviderAssociatedRequest request);
 
-  void CreateMusGpuRequest(ui::mojom::GpuRequest request);
+  void CreateMusGpuRequest(const service_manager::BindSourceInfo& source_info,
+                           ui::mojom::GpuRequest request);
   void CreateOffscreenCanvasProvider(
+      const service_manager::BindSourceInfo& source_info,
       blink::mojom::OffscreenCanvasProviderRequest request);
-  void BindFrameSinkProvider(mojom::FrameSinkProviderRequest request);
+  void BindFrameSinkProvider(const service_manager::BindSourceInfo& source_info,
+                             mojom::FrameSinkProviderRequest request);
   void CreateStoragePartitionService(
-      mojo::InterfaceRequest<mojom::StoragePartitionService> request);
+      const service_manager::BindSourceInfo& source_info,
+      mojom::StoragePartitionServiceRequest request);
 
   // Control message handlers.
   void OnShutdownRequest();
@@ -405,7 +406,8 @@
 
   template <typename InterfaceType>
   using AddInterfaceCallback =
-      base::Callback<void(mojo::InterfaceRequest<InterfaceType>)>;
+      base::Callback<void(const service_manager::BindSourceInfo&,
+                          mojo::InterfaceRequest<InterfaceType>)>;
 
   template <typename CallbackType>
   struct InterfaceGetter;
@@ -415,10 +417,11 @@
     static void GetInterfaceOnUIThread(
         base::WeakPtr<RenderProcessHostImpl> weak_host,
         const AddInterfaceCallback<InterfaceType>& callback,
+        const service_manager::BindSourceInfo& source_info,
         mojo::InterfaceRequest<InterfaceType> request) {
       if (!weak_host)
         return;
-      callback.Run(std::move(request));
+      callback.Run(source_info, std::move(request));
     }
   };
 
diff --git a/content/browser/websockets/websocket_manager.cc b/content/browser/websockets/websocket_manager.cc
index 8f40b37..db68bbf8 100644
--- a/content/browser/websockets/websocket_manager.cc
+++ b/content/browser/websockets/websocket_manager.cc
@@ -54,8 +54,11 @@
 };
 
 // static
-void WebSocketManager::CreateWebSocket(int process_id, int frame_id,
-                                       blink::mojom::WebSocketRequest request) {
+void WebSocketManager::CreateWebSocket(
+    int process_id,
+    int frame_id,
+    const service_manager::BindSourceInfo& source_info,
+    blink::mojom::WebSocketRequest request) {
   DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
 
   RenderProcessHost* host = RenderProcessHost::FromID(process_id);
diff --git a/content/browser/websockets/websocket_manager.h b/content/browser/websockets/websocket_manager.h
index 8f1b9c9..5fd6bc17 100644
--- a/content/browser/websockets/websocket_manager.h
+++ b/content/browser/websockets/websocket_manager.h
@@ -16,6 +16,10 @@
 #include "net/url_request/url_request_context_getter.h"
 #include "net/url_request/url_request_context_getter_observer.h"
 
+namespace service_manager {
+struct BindSourceInfo;
+}
+
 namespace content {
 class StoragePartition;
 
@@ -28,8 +32,11 @@
       NON_EXPORTED_BASE(public net::URLRequestContextGetterObserver) {
  public:
   // Called on the UI thread:
-  static void CreateWebSocket(int process_id, int frame_id,
-                              blink::mojom::WebSocketRequest request);
+  static void CreateWebSocket(
+      int process_id,
+      int frame_id,
+      const service_manager::BindSourceInfo& source_info,
+      blink::mojom::WebSocketRequest request);
 
   // net::URLRequestContextGetterObserver implementation.
   void OnContextShuttingDown() override;
diff --git a/content/browser/webui/web_ui_mojo_browsertest.cc b/content/browser/webui/web_ui_mojo_browsertest.cc
index d829b2ab..457d831 100644
--- a/content/browser/webui/web_ui_mojo_browsertest.cc
+++ b/content/browser/webui/web_ui_mojo_browsertest.cc
@@ -33,6 +33,7 @@
 #include "mojo/public/cpp/bindings/binding.h"
 #include "mojo/public/cpp/bindings/interface_request.h"
 #include "net/test/embedded_test_server/embedded_test_server.h"
+#include "services/service_manager/public/cpp/bind_source_info.h"
 #include "services/service_manager/public/cpp/binder_registry.h"
 
 namespace content {
@@ -134,7 +135,8 @@
                    base::Unretained(this)));
   }
 
-  void CreateHandler(mojo::InterfaceRequest<mojom::BrowserTarget> request) {
+  void CreateHandler(const service_manager::BindSourceInfo& source_info,
+                     mojom::BrowserTargetRequest request) {
     browser_target_ =
         base::MakeUnique<BrowserTargetImpl>(run_loop_, std::move(request));
   }
diff --git a/content/gpu/gpu_child_thread.cc b/content/gpu/gpu_child_thread.cc
index 6f5591d..91f1fcb 100644
--- a/content/gpu/gpu_child_thread.cc
+++ b/content/gpu/gpu_child_thread.cc
@@ -296,6 +296,7 @@
 }
 
 void GpuChildThread::BindServiceFactoryRequest(
+    const service_manager::BindSourceInfo& source_info,
     service_manager::mojom::ServiceFactoryRequest request) {
   DVLOG(1) << "GPU: Binding service_manager::mojom::ServiceFactoryRequest";
   DCHECK(service_factory_);
diff --git a/content/gpu/gpu_child_thread.h b/content/gpu/gpu_child_thread.h
index 55c5f0e..cfc258d 100644
--- a/content/gpu/gpu_child_thread.h
+++ b/content/gpu/gpu_child_thread.h
@@ -40,6 +40,10 @@
 class GpuWatchdogThread;
 }
 
+namespace service_manager {
+struct BindSourceInfo;
+}
+
 namespace content {
 class GpuServiceFactory;
 
@@ -104,6 +108,7 @@
                                   const std::string& group_name) override;
 
   void BindServiceFactoryRequest(
+      const service_manager::BindSourceInfo& source_info,
       service_manager::mojom::ServiceFactoryRequest request);
 
   gpu::GpuChannelManager* gpu_channel_manager() {
diff --git a/content/public/browser/provision_fetcher_impl.cc b/content/public/browser/provision_fetcher_impl.cc
index 98e06b1b..1663f3e 100644
--- a/content/public/browser/provision_fetcher_impl.cc
+++ b/content/public/browser/provision_fetcher_impl.cc
@@ -14,6 +14,7 @@
 // static
 void ProvisionFetcherImpl::Create(
     net::URLRequestContextGetter* context_getter,
+    const service_manager::BindSourceInfo& source_info,
     media::mojom::ProvisionFetcherRequest request) {
   DCHECK(context_getter);
   mojo::MakeStrongBinding(base::MakeUnique<ProvisionFetcherImpl>(
diff --git a/content/public/browser/provision_fetcher_impl.h b/content/public/browser/provision_fetcher_impl.h
index 5151b39..b3d63023 100644
--- a/content/public/browser/provision_fetcher_impl.h
+++ b/content/public/browser/provision_fetcher_impl.h
@@ -18,6 +18,10 @@
 class URLRequestContextGetter;
 }
 
+namespace service_manager {
+struct BindSourceInfo;
+}
+
 namespace content {
 
 // A media::mojom::ProvisionFetcher implementation based on
@@ -26,6 +30,7 @@
     : NON_EXPORTED_BASE(public media::mojom::ProvisionFetcher) {
  public:
   static void Create(net::URLRequestContextGetter* context_getter,
+                     const service_manager::BindSourceInfo& source_info,
                      media::mojom::ProvisionFetcherRequest request);
 
   explicit ProvisionFetcherImpl(
diff --git a/content/renderer/image_downloader/image_downloader_impl.cc b/content/renderer/image_downloader/image_downloader_impl.cc
index 0cb07d3..d40dd30 100644
--- a/content/renderer/image_downloader/image_downloader_impl.cc
+++ b/content/renderer/image_downloader/image_downloader_impl.cc
@@ -99,6 +99,7 @@
 // static
 void ImageDownloaderImpl::CreateMojoService(
     RenderFrame* render_frame,
+    const service_manager::BindSourceInfo& source_info,
     mojom::ImageDownloaderRequest request) {
   DVLOG(1) << "ImageDownloaderImpl::CreateMojoService";
   DCHECK(render_frame);
diff --git a/content/renderer/image_downloader/image_downloader_impl.h b/content/renderer/image_downloader/image_downloader_impl.h
index e244dc4..9836ab3 100644
--- a/content/renderer/image_downloader/image_downloader_impl.h
+++ b/content/renderer/image_downloader/image_downloader_impl.h
@@ -9,6 +9,10 @@
 #include "content/renderer/image_downloader/image_downloader_base.h"
 #include "mojo/public/cpp/bindings/binding.h"
 
+namespace service_manager {
+struct BindSourceInfo;
+}
+
 namespace content {
 
 class ImageDownloaderImpl : public mojom::ImageDownloader,
@@ -16,8 +20,10 @@
  public:
   ~ImageDownloaderImpl() override;
 
-  static void CreateMojoService(RenderFrame* render_frame,
-                                mojom::ImageDownloaderRequest request);
+  static void CreateMojoService(
+      RenderFrame* render_frame,
+      const service_manager::BindSourceInfo& source_info,
+      mojom::ImageDownloaderRequest request);
 
  private:
   ImageDownloaderImpl(RenderFrame* render_frame,
diff --git a/content/renderer/media/media_devices_listener_impl.cc b/content/renderer/media/media_devices_listener_impl.cc
index 8588036..40bc61b 100644
--- a/content/renderer/media/media_devices_listener_impl.cc
+++ b/content/renderer/media/media_devices_listener_impl.cc
@@ -16,6 +16,7 @@
 // static
 void MediaDevicesListenerImpl::Create(
     int render_frame_id,
+    const service_manager::BindSourceInfo& source_info,
     ::mojom::MediaDevicesListenerRequest request) {
   mojo::MakeStrongBinding(
       base::MakeUnique<MediaDevicesListenerImpl>(render_frame_id),
diff --git a/content/renderer/media/media_devices_listener_impl.h b/content/renderer/media/media_devices_listener_impl.h
index 5198457a..29b05f6 100644
--- a/content/renderer/media/media_devices_listener_impl.h
+++ b/content/renderer/media/media_devices_listener_impl.h
@@ -11,6 +11,10 @@
 #include "content/common/media/media_devices.h"
 #include "content/common/media/media_devices.mojom.h"
 
+namespace service_manager {
+struct BindSourceInfo;
+}
+
 namespace content {
 
 // This class implements a Mojo object that receives notifications about changes
@@ -19,6 +23,7 @@
     : public ::mojom::MediaDevicesListener {
  public:
   static void Create(int render_frame_id,
+                     const service_manager::BindSourceInfo& source_info,
                      ::mojom::MediaDevicesListenerRequest request);
   explicit MediaDevicesListenerImpl(int render_frame_id);
   ~MediaDevicesListenerImpl() override;
diff --git a/content/renderer/service_worker/embedded_worker_instance_client_impl.cc b/content/renderer/service_worker/embedded_worker_instance_client_impl.cc
index 7de9b33..4240771 100644
--- a/content/renderer/service_worker/embedded_worker_instance_client_impl.cc
+++ b/content/renderer/service_worker/embedded_worker_instance_client_impl.cc
@@ -31,7 +31,8 @@
 
 // static
 void EmbeddedWorkerInstanceClientImpl::Create(
-    mojo::InterfaceRequest<mojom::EmbeddedWorkerInstanceClient> request) {
+    const service_manager::BindSourceInfo& source_info,
+    mojom::EmbeddedWorkerInstanceClientRequest request) {
   // This won't be leaked because the lifetime will be managed internally.
   new EmbeddedWorkerInstanceClientImpl(std::move(request));
 }
diff --git a/content/renderer/service_worker/embedded_worker_instance_client_impl.h b/content/renderer/service_worker/embedded_worker_instance_client_impl.h
index cdc7aef2..097f32f 100644
--- a/content/renderer/service_worker/embedded_worker_instance_client_impl.h
+++ b/content/renderer/service_worker/embedded_worker_instance_client_impl.h
@@ -21,6 +21,10 @@
 
 }  // namespace blink
 
+namespace service_manager {
+struct BindSourceInfo;
+}
+
 namespace content {
 
 class EmbeddedWorkerDevToolsAgent;
@@ -31,8 +35,8 @@
 class EmbeddedWorkerInstanceClientImpl
     : public mojom::EmbeddedWorkerInstanceClient {
  public:
-  static void Create(
-      mojo::InterfaceRequest<mojom::EmbeddedWorkerInstanceClient> request);
+  static void Create(const service_manager::BindSourceInfo& source_info,
+                     mojom::EmbeddedWorkerInstanceClientRequest request);
 
   ~EmbeddedWorkerInstanceClientImpl() override;
 
diff --git a/content/shell/browser/layout_test/layout_test_bluetooth_fake_adapter_setter_impl.cc b/content/shell/browser/layout_test/layout_test_bluetooth_fake_adapter_setter_impl.cc
index 60be3f3..fa83b6a 100644
--- a/content/shell/browser/layout_test/layout_test_bluetooth_fake_adapter_setter_impl.cc
+++ b/content/shell/browser/layout_test/layout_test_bluetooth_fake_adapter_setter_impl.cc
@@ -22,6 +22,7 @@
 
 // static
 void LayoutTestBluetoothFakeAdapterSetterImpl::Create(
+    const service_manager::BindSourceInfo& source_info,
     mojom::LayoutTestBluetoothFakeAdapterSetterRequest request) {
   mojo::MakeStrongBinding(
       base::MakeUnique<LayoutTestBluetoothFakeAdapterSetterImpl>(),
diff --git a/content/shell/browser/layout_test/layout_test_bluetooth_fake_adapter_setter_impl.h b/content/shell/browser/layout_test/layout_test_bluetooth_fake_adapter_setter_impl.h
index 4ae6fa9..ead71d14 100644
--- a/content/shell/browser/layout_test/layout_test_bluetooth_fake_adapter_setter_impl.h
+++ b/content/shell/browser/layout_test/layout_test_bluetooth_fake_adapter_setter_impl.h
@@ -8,6 +8,10 @@
 #include "base/macros.h"
 #include "content/shell/common/layout_test/layout_test_bluetooth_fake_adapter_setter.mojom.h"
 
+namespace service_manager {
+struct BindSourceInfo;
+}
+
 namespace content {
 
 class LayoutTestBluetoothFakeAdapterSetterImpl
@@ -17,6 +21,7 @@
   ~LayoutTestBluetoothFakeAdapterSetterImpl() override;
 
   static void Create(
+      const service_manager::BindSourceInfo& source_info,
       mojom::LayoutTestBluetoothFakeAdapterSetterRequest request);
 
  private:
diff --git a/content/shell/browser/layout_test/layout_test_content_browser_client.cc b/content/shell/browser/layout_test/layout_test_content_browser_client.cc
index d4dd8452..1ed77c5 100644
--- a/content/shell/browser/layout_test/layout_test_content_browser_client.cc
+++ b/content/shell/browser/layout_test/layout_test_content_browser_client.cc
@@ -22,6 +22,7 @@
 #include "content/shell/common/shell_messages.h"
 #include "content/shell/renderer/layout_test/blink_test_helpers.h"
 #include "device/bluetooth/test/fake_bluetooth.h"
+#include "services/service_manager/public/cpp/bind_source_info.h"
 #include "services/service_manager/public/cpp/binder_registry.h"
 
 namespace content {
diff --git a/content/shell/renderer/shell_content_renderer_client.cc b/content/shell/renderer/shell_content_renderer_client.cc
index a9e11d6b..89545ff 100644
--- a/content/shell/renderer/shell_content_renderer_client.cc
+++ b/content/shell/renderer/shell_content_renderer_client.cc
@@ -91,7 +91,8 @@
   DISALLOW_COPY_AND_ASSIGN(TestServiceImpl);
 };
 
-void CreateTestService(mojom::TestServiceRequest request) {
+void CreateTestService(const service_manager::BindSourceInfo& source_info,
+                       mojom::TestServiceRequest request) {
   // Owns itself.
   new TestServiceImpl(std::move(request));
 }
diff --git a/content/shell/utility/shell_content_utility_client.cc b/content/shell/utility/shell_content_utility_client.cc
index 1ac9f8d..429a152 100644
--- a/content/shell/utility/shell_content_utility_client.cc
+++ b/content/shell/utility/shell_content_utility_client.cc
@@ -30,7 +30,8 @@
 
 class TestServiceImpl : public mojom::TestService {
  public:
-  static void Create(mojom::TestServiceRequest request) {
+  static void Create(const service_manager::BindSourceInfo&,
+                     mojom::TestServiceRequest request) {
     mojo::MakeStrongBinding(base::WrapUnique(new TestServiceImpl),
                             std::move(request));
   }
@@ -130,10 +131,12 @@
 void ShellContentUtilityClient::RegisterNetworkBinders(
     service_manager::BinderRegistry* registry) {
   registry->AddInterface<mojom::NetworkServiceTest>(
-      base::Bind(&ShellContentUtilityClient::Create, base::Unretained(this)));
+      base::Bind(&ShellContentUtilityClient::BindNetworkServiceTestRequest,
+                 base::Unretained(this)));
 }
 
-void ShellContentUtilityClient::Create(
+void ShellContentUtilityClient::BindNetworkServiceTestRequest(
+    const service_manager::BindSourceInfo& source_info,
     mojom::NetworkServiceTestRequest request) {
   DCHECK(!network_service_test_);
   network_service_test_ =
diff --git a/content/shell/utility/shell_content_utility_client.h b/content/shell/utility/shell_content_utility_client.h
index afb566ae..e14bd70 100644
--- a/content/shell/utility/shell_content_utility_client.h
+++ b/content/shell/utility/shell_content_utility_client.h
@@ -9,6 +9,10 @@
 #include "content/public/common/network_service_test.mojom.h"
 #include "content/public/utility/content_utility_client.h"
 
+namespace service_manager {
+struct BindSourceInfo;
+}
+
 namespace content {
 
 class ShellContentUtilityClient : public ContentUtilityClient {
@@ -23,7 +27,9 @@
       service_manager::BinderRegistry* registry) override;
 
  private:
-  void Create(mojom::NetworkServiceTestRequest request);
+  void BindNetworkServiceTestRequest(
+      const service_manager::BindSourceInfo& source_info,
+      mojom::NetworkServiceTestRequest request);
 
   std::unique_ptr<mojom::NetworkServiceTest> network_service_test_;
 
diff --git a/content/test/test_render_frame_host.cc b/content/test/test_render_frame_host.cc
index faf7ec1..8924bc2 100644
--- a/content/test/test_render_frame_host.cc
+++ b/content/test/test_render_frame_host.cc
@@ -511,6 +511,7 @@
 TestRenderFrameHost::CreateWebBluetoothServiceForTesting() {
   WebBluetoothServiceImpl* service =
       RenderFrameHostImpl::CreateWebBluetoothService(
+          service_manager::BindSourceInfo(),
           blink::mojom::WebBluetoothServiceRequest());
   return service;
 }
diff --git a/content/utility/utility_thread_impl.cc b/content/utility/utility_thread_impl.cc
index d85cd22..ec50aba8 100644
--- a/content/utility/utility_thread_impl.cc
+++ b/content/utility/utility_thread_impl.cc
@@ -128,6 +128,7 @@
 }
 
 void UtilityThreadImpl::BindServiceFactoryRequest(
+    const service_manager::BindSourceInfo& source_info,
     service_manager::mojom::ServiceFactoryRequest request) {
   DCHECK(service_factory_);
   service_factory_bindings_.AddBinding(service_factory_.get(),
diff --git a/content/utility/utility_thread_impl.h b/content/utility/utility_thread_impl.h
index bd05414..6293e08e 100644
--- a/content/utility/utility_thread_impl.h
+++ b/content/utility/utility_thread_impl.h
@@ -18,6 +18,10 @@
 #include "mojo/public/cpp/bindings/binding_set.h"
 #include "services/service_manager/public/interfaces/service_factory.mojom.h"
 
+namespace service_manager {
+struct BindSourceInfo;
+}
+
 namespace content {
 class UtilityBlinkPlatformImpl;
 class UtilityServiceFactory;
@@ -52,6 +56,7 @@
   void OnBatchModeFinished();
 
   void BindServiceFactoryRequest(
+      const service_manager::BindSourceInfo& source_info,
       service_manager::mojom::ServiceFactoryRequest request);
 
   // True when we're running in batch mode.