shell_test_base.cc revision f8ee788a64d60abd8f2d742a5fdedde054ecd910
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/shell/shell_test_base.h"
6
7#include "base/command_line.h"
8#include "base/file_util.h"
9#include "base/files/file_path.h"
10#include "base/logging.h"
11#include "base/path_service.h"
12#include "build/build_config.h"
13#include "mojo/shell/context.h"
14#include "net/base/filename_util.h"
15#include "url/gurl.h"
16
17namespace mojo {
18namespace shell {
19namespace test {
20
21ShellTestBase::ShellTestBase() {
22}
23
24ShellTestBase::~ShellTestBase() {
25}
26
27void ShellTestBase::InitMojo() {
28  DCHECK(!message_loop_);
29  DCHECK(!shell_context_);
30  message_loop_.reset(new base::MessageLoop());
31  shell_context_.reset(new Context());
32}
33
34void ShellTestBase::LaunchServiceInProcess(
35    const GURL& service_url,
36    const std::string& service_name,
37    ScopedMessagePipeHandle client_handle) {
38  DCHECK(message_loop_);
39  DCHECK(shell_context_);
40
41  base::FilePath base_dir;
42  CHECK(PathService::Get(base::DIR_EXE, &base_dir));
43  // On android, the library is bundled with the app.
44#if defined(OS_ANDROID)
45  base::FilePath service_dir;
46  CHECK(PathService::Get(base::DIR_MODULE, &service_dir));
47  // On Mac and Windows, libraries are dumped beside the executables.
48#elif defined(OS_MACOSX) || defined(OS_WIN)
49  base::FilePath service_dir(base_dir);
50#else
51  // On Linux, they're under lib/.
52  base::FilePath service_dir(base_dir.AppendASCII("lib"));
53#endif
54  shell_context_->mojo_url_resolver()->set_origin(
55      net::FilePathToFileURL(service_dir).spec());
56
57  shell_context_->service_manager()->ConnectToService(
58      service_url, service_name, client_handle.Pass(), GURL());
59}
60
61}  // namespace test
62}  // namespace shell
63}  // namespace mojo
64