Index: components/leveldb/leveldb_app.cc |
diff --git a/components/leveldb/leveldb_app.cc b/components/leveldb/leveldb_app.cc |
index 952d4f38444632a1ee5b1167a305b235802e2526..dd6fc6ff6bab898b29a3e71e1f9eb021914072b5 100644 |
--- a/components/leveldb/leveldb_app.cc |
+++ b/components/leveldb/leveldb_app.cc |
@@ -4,15 +4,31 @@ |
#include "components/leveldb/leveldb_app.h" |
+#include "base/bind.h" |
+#include "base/message_loop/message_loop.h" |
#include "components/leveldb/leveldb_service_impl.h" |
#include "mojo/shell/public/cpp/connection.h" |
namespace leveldb { |
-LevelDBApp::LevelDBApp() {} |
+scoped_ptr<mojo::ShellClient> CreateLevelDBApp() { |
+ return make_scoped_ptr(new LevelDBApp); |
+} |
+ |
+LevelDBApp::LevelDBApp() |
+ : outstanding_bindings_(0) { |
+ bindings_.set_connection_error_handler( |
+ base::Bind(&LevelDBApp::OnConnectionError, base::Unretained(this))); |
+} |
LevelDBApp::~LevelDBApp() {} |
+void LevelDBApp::OnConnectionError() { |
+ outstanding_bindings_--; |
+ if (outstanding_bindings_ == 0) |
+ base::MessageLoop::current()->QuitNow(); |
+} |
+ |
void LevelDBApp::Initialize(mojo::Connector* connector, |
const std::string& url, |
uint32_t id, |
@@ -28,6 +44,7 @@ bool LevelDBApp::AcceptConnection(mojo::Connection* connection) { |
void LevelDBApp::Create(mojo::Connection* connection, |
mojo::InterfaceRequest<LevelDBService> request) { |
+ outstanding_bindings_++; |
bindings_.AddBinding(service_.get(), std::move(request)); |
} |