• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
16 namespace content {
17 class RenderViewHost;
18 }
19 
20 class PPAPITestMessageHandler : public content::TestMessageHandler {
21  public:
22   PPAPITestMessageHandler();
23 
24   virtual MessageResponse HandleMessage(const std::string& json) OVERRIDE;
25   virtual void Reset() OVERRIDE;
26 
message()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 
37 class 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.
93 class 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 
105 class 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.
112 class OutOfProcessPPAPITest : public PPAPITest {
113  public:
114   OutOfProcessPPAPITest();
115 
116   virtual void SetUpCommandLine(base::CommandLine* command_line) OVERRIDE;
117 };
118 
119 class OutOfProcessPPAPIPrivateTest : public OutOfProcessPPAPITest {
120  protected:
121   virtual void SetUpCommandLine(base::CommandLine* command_line) OVERRIDE;
122 };
123 
124 // NaCl plugin test runner for Newlib runtime.
125 class 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.
142 class PPAPINaClNewlibTest : public PPAPINaClTest {
143  public:
144   virtual std::string BuildQuery(const std::string& base,
145                                  const std::string& test_case) OVERRIDE;
146 };
147 
148 class 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.
154 class PPAPINaClGLibcTest : public PPAPINaClTest {
155  public:
156   virtual std::string BuildQuery(const std::string& base,
157                                  const std::string& test_case) OVERRIDE;
158 };
159 
160 class 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.
166 class PPAPINaClPNaClTest : public PPAPINaClTest {
167  public:
168   virtual std::string BuildQuery(const std::string& base,
169                                  const std::string& test_case) OVERRIDE;
170 };
171 
172 class 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.
178 class 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 
186 class PPAPIPrivateNaClPNaClNonSfiTest : public PPAPINaClPNaClNonSfiTest {
187  protected:
188   virtual void SetUpCommandLine(base::CommandLine* command_line) OVERRIDE;
189 };
190 
191 class 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 
199 class PPAPIBrokerInfoBarTest : public OutOfProcessPPAPITest {
200  public:
201   // PPAPITestBase override:
202   virtual void SetUpOnMainThread() OVERRIDE;
203 };
204 
205 #endif  // CHROME_TEST_PPAPI_PPAPI_TEST_H_
206