1c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// Copyright 2014 The Chromium Authors. All rights reserved.
2c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// Use of this source code is governed by a BSD-style license that can be
3c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// found in the LICENSE file.
4c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
5c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#ifndef MOJO_SHELL_SHELL_TEST_BASE_H_
6c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#define MOJO_SHELL_SHELL_TEST_BASE_H_
7c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
8c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#include <string>
9c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
10c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#include "base/macros.h"
11c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#include "base/message_loop/message_loop.h"
12c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#include "mojo/public/cpp/system/core.h"
13c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#include "mojo/shell/context.h"
14c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#include "testing/gtest/include/gtest/gtest.h"
15c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
16c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathclass GURL;
17c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
18c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathnamespace net {
19c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathnamespace test_server {
20c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathclass EmbeddedTestServer;
21c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath}
22c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath}  // namespace net
23c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
24c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathnamespace mojo {
25c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathnamespace shell {
26c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathnamespace test {
27c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
28c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathclass ShellTestBase : public testing::Test {
29c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath public:
30c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath  ShellTestBase();
31c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath  virtual ~ShellTestBase();
32c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
33c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath  virtual void SetUp() OVERRIDE;
34c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
35c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath  // |application_url| should typically be a mojo: URL (the origin will be set
36c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath  // to an "appropriate" file: URL).
37c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath  // TODO(tim): Should the test base be a ServiceProvider?
38c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath  ScopedMessagePipeHandle ConnectToService(
39c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath      const GURL& application_url,
40c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath      const std::string& service_name);
41c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
42c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath  ScopedMessagePipeHandle ConnectToServiceViaNetwork(
43c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath      const GURL& application_url,
44c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath      const std::string& service_name);
45c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
46c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath  template <typename Interface>
47c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath  void ConnectToService(const GURL& application_url,
48c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath                        InterfacePtr<Interface>* ptr) {
49c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    ptr->Bind(ConnectToService(application_url, Interface::Name_).Pass());
50c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath  }
51c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
52c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath  template <typename Interface>
53c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath  void ConnectToServiceViaNetwork(const GURL& application_url,
54c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath                        InterfacePtr<Interface>* ptr) {
55c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    ptr->Bind(
56c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath        ConnectToServiceViaNetwork(application_url, Interface::Name_).Pass());
57c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath  }
58c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
59c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath  base::MessageLoop* message_loop() { return &message_loop_; }
60c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath  Context* shell_context() { return &shell_context_; }
61c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
62c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath private:
63c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath  scoped_ptr<net::test_server::EmbeddedTestServer> test_server_;
64c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath  Context shell_context_;
65c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath  base::MessageLoop message_loop_;
66c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
67c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath  DISALLOW_COPY_AND_ASSIGN(ShellTestBase);
68c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath};
69c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
70c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath}  // namespace test
71c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath}  // namespace shell
72c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath}  // namespace mojo
73c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
74c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#endif  // MOJO_SHELL_SHELL_TEST_BASE_H_
75c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath