1// Copyright (c) 2012 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#ifndef CHROME_TEST_PPAPI_PPAPI_TEST_H_ 6#define CHROME_TEST_PPAPI_PPAPI_TEST_H_ 7 8#include <string> 9 10#include "base/basictypes.h" 11#include "base/compiler_specific.h" 12#include "chrome/test/base/in_process_browser_test.h" 13#include "content/public/test/javascript_test_observer.h" 14#include "net/test/spawned_test_server/spawned_test_server.h" 15 16namespace content { 17class RenderViewHost; 18} 19 20class PPAPITestMessageHandler : public content::TestMessageHandler { 21 public: 22 PPAPITestMessageHandler(); 23 24 virtual MessageResponse HandleMessage(const std::string& json) OVERRIDE; 25 virtual void Reset() OVERRIDE; 26 27 const std::string& message() const { 28 return message_; 29 } 30 31 private: 32 std::string message_; 33 34 DISALLOW_COPY_AND_ASSIGN(PPAPITestMessageHandler); 35}; 36 37class PPAPITestBase : public InProcessBrowserTest { 38 public: 39 PPAPITestBase(); 40 41 // InProcessBrowserTest: 42 virtual void SetUp() OVERRIDE; 43 virtual void SetUpCommandLine(base::CommandLine* command_line) OVERRIDE; 44 virtual void SetUpOnMainThread() OVERRIDE; 45 46 virtual std::string BuildQuery(const std::string& base, 47 const std::string& test_case) = 0; 48 49 // Returns the URL to load for file: tests. 50 GURL GetTestFileUrl(const std::string& test_case); 51 virtual void RunTest(const std::string& test_case); 52 virtual void RunTestViaHTTP(const std::string& test_case); 53 virtual void RunTestWithSSLServer(const std::string& test_case); 54 virtual void RunTestWithWebSocketServer(const std::string& test_case); 55 virtual void RunTestIfAudioOutputAvailable(const std::string& test_case); 56 virtual void RunTestViaHTTPIfAudioOutputAvailable( 57 const std::string& test_case); 58 59 protected: 60 class InfoBarObserver : public content::NotificationObserver { 61 public: 62 explicit InfoBarObserver(PPAPITestBase* test_base); 63 ~InfoBarObserver(); 64 65 void ExpectInfoBarAndAccept(bool should_accept); 66 67 private: 68 // content::NotificationObserver: 69 virtual void Observe(int type, 70 const content::NotificationSource& source, 71 const content::NotificationDetails& details) OVERRIDE; 72 73 void VerifyInfoBarState(); 74 75 content::NotificationRegistrar registrar_; 76 PPAPITestBase* test_base_; 77 bool expecting_infobar_; 78 bool should_accept_; 79 }; 80 81 // Runs the test for a tab given the tab that's already navigated to the 82 // given URL. 83 void RunTestURL(const GURL& test_url); 84 // Gets the URL of the the given |test_case| for the given HTTP test server. 85 // If |extra_params| is non-empty, it will be appended as URL parameters. 86 GURL GetTestURL(const net::SpawnedTestServer& http_server, 87 const std::string& test_case, 88 const std::string& extra_params); 89}; 90 91// In-process plugin test runner. See OutOfProcessPPAPITest below for the 92// out-of-process version. 93class PPAPITest : public PPAPITestBase { 94 public: 95 PPAPITest(); 96 97 virtual void SetUpCommandLine(base::CommandLine* command_line) OVERRIDE; 98 99 virtual std::string BuildQuery(const std::string& base, 100 const std::string& test_case) OVERRIDE; 101 protected: 102 bool in_process_; // Controls the --ppapi-in-process switch. 103}; 104 105class PPAPIPrivateTest : public PPAPITest { 106 protected: 107 virtual void SetUpCommandLine(base::CommandLine* command_line) OVERRIDE; 108}; 109 110// Variant of PPAPITest that runs plugins out-of-process to test proxy 111// codepaths. 112class OutOfProcessPPAPITest : public PPAPITest { 113 public: 114 OutOfProcessPPAPITest(); 115 116 virtual void SetUpCommandLine(base::CommandLine* command_line) OVERRIDE; 117}; 118 119class OutOfProcessPPAPIPrivateTest : public OutOfProcessPPAPITest { 120 protected: 121 virtual void SetUpCommandLine(base::CommandLine* command_line) OVERRIDE; 122}; 123 124// NaCl plugin test runner for Newlib runtime. 125class PPAPINaClTest : public PPAPITestBase { 126 public: 127 virtual void SetUpCommandLine(base::CommandLine* command_line) OVERRIDE; 128 virtual void SetUpOnMainThread() OVERRIDE; 129 // PPAPITestBase overrides. 130 virtual void RunTest(const std::string& test_case) OVERRIDE; 131 virtual void RunTestViaHTTP(const std::string& test_case) OVERRIDE; 132 virtual void RunTestWithSSLServer(const std::string& test_case) OVERRIDE; 133 virtual void RunTestWithWebSocketServer( 134 const std::string& test_case) OVERRIDE; 135 virtual void RunTestIfAudioOutputAvailable( 136 const std::string& test_case) OVERRIDE; 137 virtual void RunTestViaHTTPIfAudioOutputAvailable( 138 const std::string& test_case) OVERRIDE; 139}; 140 141// NaCl plugin test runner for Newlib runtime. 142class PPAPINaClNewlibTest : public PPAPINaClTest { 143 public: 144 virtual std::string BuildQuery(const std::string& base, 145 const std::string& test_case) OVERRIDE; 146}; 147 148class PPAPIPrivateNaClNewlibTest : public PPAPINaClNewlibTest { 149 protected: 150 virtual void SetUpCommandLine(base::CommandLine* command_line) OVERRIDE; 151}; 152 153// NaCl plugin test runner for GNU-libc runtime. 154class PPAPINaClGLibcTest : public PPAPINaClTest { 155 public: 156 virtual std::string BuildQuery(const std::string& base, 157 const std::string& test_case) OVERRIDE; 158}; 159 160class PPAPIPrivateNaClGLibcTest : public PPAPINaClGLibcTest { 161 protected: 162 virtual void SetUpCommandLine(base::CommandLine* command_line) OVERRIDE; 163}; 164 165// NaCl plugin test runner for the PNaCl + Newlib runtime. 166class PPAPINaClPNaClTest : public PPAPINaClTest { 167 public: 168 virtual std::string BuildQuery(const std::string& base, 169 const std::string& test_case) OVERRIDE; 170}; 171 172class PPAPIPrivateNaClPNaClTest : public PPAPINaClPNaClTest { 173 protected: 174 virtual void SetUpCommandLine(base::CommandLine* command_line) OVERRIDE; 175}; 176 177// Test Non-SFI Mode, using PNaCl toolchain to produce nexes. 178class PPAPINaClPNaClNonSfiTest : public PPAPINaClTest { 179 public: 180 virtual void SetUpCommandLine(base::CommandLine* command_line); 181 182 virtual std::string BuildQuery(const std::string& base, 183 const std::string& test_case) OVERRIDE; 184}; 185 186class PPAPIPrivateNaClPNaClNonSfiTest : public PPAPINaClPNaClNonSfiTest { 187 protected: 188 virtual void SetUpCommandLine(base::CommandLine* command_line) OVERRIDE; 189}; 190 191class PPAPINaClTestDisallowedSockets : public PPAPITestBase { 192 public: 193 virtual void SetUpCommandLine(base::CommandLine* command_line) OVERRIDE; 194 195 virtual std::string BuildQuery(const std::string& base, 196 const std::string& test_case) OVERRIDE; 197}; 198 199class PPAPIBrokerInfoBarTest : public OutOfProcessPPAPITest { 200 public: 201 // PPAPITestBase override: 202 virtual void SetUpOnMainThread() OVERRIDE; 203}; 204 205#endif // CHROME_TEST_PPAPI_PPAPI_TEST_H_ 206