1// Copyright 2014 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "mojo/embedder/test_embedder.h"
6
7#include "base/logging.h"
8#include "base/macros.h"
9#include "base/memory/scoped_ptr.h"
10#include "mojo/embedder/embedder.h"
11#include "mojo/embedder/simple_platform_support.h"
12#include "mojo/system/core.h"
13#include "mojo/system/entrypoints.h"
14#include "mojo/system/handle_table.h"
15
16namespace mojo {
17
18namespace system {
19namespace internal {
20
21bool ShutdownCheckNoLeaks(Core* core_impl) {
22  // No point in taking the lock.
23  const HandleTable::HandleToEntryMap& handle_to_entry_map =
24      core_impl->handle_table_.handle_to_entry_map_;
25
26  if (handle_to_entry_map.empty())
27    return true;
28
29  for (HandleTable::HandleToEntryMap::const_iterator it =
30           handle_to_entry_map.begin();
31       it != handle_to_entry_map.end();
32       ++it) {
33    LOG(ERROR) << "Mojo embedder shutdown: Leaking handle " << (*it).first;
34  }
35  return false;
36}
37
38}  // namespace internal
39}  // namespace system
40
41namespace embedder {
42namespace test {
43
44void InitWithSimplePlatformSupport() {
45  Init(scoped_ptr<PlatformSupport>(new SimplePlatformSupport()));
46}
47
48bool Shutdown() {
49  system::Core* core = system::entrypoints::GetCore();
50  CHECK(core);
51  system::entrypoints::SetCore(nullptr);
52
53  bool rv = system::internal::ShutdownCheckNoLeaks(core);
54  delete core;
55  return rv;
56}
57
58}  // namespace test
59}  // namespace embedder
60
61}  // namespace mojo
62