summaryrefslogtreecommitdiff
path: root/mojo/edk/embedder/test_embedder.cc
diff options
context:
space:
mode:
Diffstat (limited to 'mojo/edk/embedder/test_embedder.cc')
-rw-r--r--mojo/edk/embedder/test_embedder.cc46
1 files changed, 46 insertions, 0 deletions
diff --git a/mojo/edk/embedder/test_embedder.cc b/mojo/edk/embedder/test_embedder.cc
new file mode 100644
index 0000000000..9658010586
--- /dev/null
+++ b/mojo/edk/embedder/test_embedder.cc
@@ -0,0 +1,46 @@
+// Copyright 2014 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 "mojo/edk/embedder/test_embedder.h"
+
+#include <memory>
+
+#include "base/logging.h"
+#include "mojo/edk/embedder/embedder.h"
+#include "mojo/edk/embedder/embedder_internal.h"
+#include "mojo/edk/system/core.h"
+#include "mojo/edk/system/handle_table.h"
+
+namespace mojo {
+
+namespace edk {
+namespace internal {
+
+bool ShutdownCheckNoLeaks(Core* core) {
+ std::vector<MojoHandle> leaked_handles;
+ core->GetActiveHandlesForTest(&leaked_handles);
+ if (leaked_handles.empty())
+ return true;
+ for (auto handle : leaked_handles)
+ LOG(ERROR) << "Mojo embedder shutdown: Leaking handle " << handle;
+ return false;
+}
+
+} // namespace internal
+
+namespace test {
+
+bool Shutdown() {
+ CHECK(internal::g_core);
+ bool rv = internal::ShutdownCheckNoLeaks(internal::g_core);
+ delete internal::g_core;
+ internal::g_core = nullptr;
+
+ return rv;
+}
+
+} // namespace test
+} // namespace edk
+
+} // namespace mojo