Index: services/shell/public/cpp/lib/interface_provider.cc |
diff --git a/services/shell/public/cpp/lib/interface_provider.cc b/services/shell/public/cpp/lib/interface_provider.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..6636444312992bb9b918ca02b81582c7edec688c |
--- /dev/null |
+++ b/services/shell/public/cpp/lib/interface_provider.cc |
@@ -0,0 +1,40 @@ |
+// Copyright 2016 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "services/shell/public/cpp/interface_provider.h" |
+ |
+namespace shell { |
+ |
+InterfaceProvider::InterfaceProvider( |
+ mojom::InterfaceProviderPtr interface_provider) |
+ : interface_provider_(std::move(interface_provider)), |
+ weak_factory_(this) {} |
+InterfaceProvider::~InterfaceProvider() {} |
+ |
+void InterfaceProvider::SetConnectionLostClosure( |
+ const base::Closure& connection_lost_closure) { |
+ interface_provider_.set_connection_error_handler(connection_lost_closure); |
+} |
+ |
+base::WeakPtr<InterfaceProvider> InterfaceProvider::GetWeakPtr() { |
+ return weak_factory_.GetWeakPtr(); |
+} |
+ |
+void InterfaceProvider::GetInterface( |
+ const std::string& name, |
+ mojo::ScopedMessagePipeHandle request_handle) { |
+ // Local binders can be registered via TestApi. |
+ auto it = binders_.find(name); |
+ if (it != binders_.end()) { |
+ it->second.Run(std::move(request_handle)); |
+ return; |
+ } |
+ interface_provider_->GetInterface(name, std::move(request_handle)); |
+} |
+ |
+void InterfaceProvider::ClearBinders() { |
+ binders_.clear(); |
+} |
+ |
+} // namespace shell |