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