[MojoJS] Support binding at context and process scope

This patch introduces the concept of "scope" to the Mojo.bindInterface
function. Context-scope corresponds to requesting an interface from the
frame or worker interface provider while process-scope means requesting
it from the process-wide interface provider.

A following change will add support for intercepting interfaces at
process-scope as only context-scope is currently supported by
MojoInterfaceInterceptor.

Bug: 
Change-Id: Ib8361aab9ae2910efe05e34e3d75b1d1dc1d6aba
Reviewed-on: https://chromium-review.googlesource.com/639630
Commit-Queue: Reilly Grant <[email protected]>
Reviewed-by: Daniel Cheng <[email protected]>
Reviewed-by: Mike West <[email protected]>
Cr-Commit-Position: refs/heads/master@{#499075}
diff --git a/content/shell/browser/shell_content_browser_client.h b/content/shell/browser/shell_content_browser_client.h
index a463177..9d077b8 100644
--- a/content/shell/browser/shell_content_browser_client.h
+++ b/content/shell/browser/shell_content_browser_client.h
@@ -99,6 +99,10 @@
   }
 
  protected:
+  virtual void ExposeInterfacesToFrame(
+      service_manager::BinderRegistryWithArgs<content::RenderFrameHost*>*
+          registry);
+
   void set_resource_dispatcher_host_delegate(
       std::unique_ptr<ShellResourceDispatcherHostDelegate> delegate) {
     resource_dispatcher_host_delegate_ = std::move(delegate);
@@ -114,7 +118,8 @@
 
   base::Closure select_client_certificate_callback_;
 
-  service_manager::BinderRegistryWithArgs<content::RenderFrameHost*>
+  std::unique_ptr<
+      service_manager::BinderRegistryWithArgs<content::RenderFrameHost*>>
       frame_interfaces_;
 
   ShellBrowserMainParts* shell_browser_main_parts_;