- add sources.
[platform/framework/web/crosswalk.git] / src / chrome / test / ppapi / ppapi_test.h
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 <list>
9 #include <string>
10
11 #include "base/basictypes.h"
12 #include "base/compiler_specific.h"
13 #include "chrome/test/base/in_process_browser_test.h"
14 #include "chrome/test/base/javascript_test_observer.h"
15 #include "net/test/spawned_test_server/spawned_test_server.h"
16
17 namespace content {
18 class RenderViewHost;
19 }
20
21 class PPAPITestMessageHandler : public TestMessageHandler {
22  public:
23   PPAPITestMessageHandler();
24
25   MessageResponse HandleMessage(const std::string& json);
26
27   virtual void Reset() OVERRIDE;
28
29   const std::string& message() const {
30     return message_;
31   }
32
33  private:
34   std::string message_;
35
36   DISALLOW_COPY_AND_ASSIGN(PPAPITestMessageHandler);
37 };
38
39 class PPAPITestBase : public InProcessBrowserTest {
40  public:
41   PPAPITestBase();
42
43   // InProcessBrowserTest:
44   virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE;
45   virtual void SetUpOnMainThread() OVERRIDE;
46
47   virtual std::string BuildQuery(const std::string& base,
48                                  const std::string& test_case) = 0;
49
50   // Returns the URL to load for file: tests.
51   GURL GetTestFileUrl(const std::string& test_case);
52   void RunTest(const std::string& test_case);
53   // Run the test and reload. This can test for clean shutdown, including leaked
54   // instance object vars.
55   void RunTestAndReload(const std::string& test_case);
56   void RunTestViaHTTP(const std::string& test_case);
57   void RunTestWithSSLServer(const std::string& test_case);
58   void RunTestWithWebSocketServer(const std::string& test_case);
59   void RunTestIfAudioOutputAvailable(const std::string& test_case);
60   void RunTestViaHTTPIfAudioOutputAvailable(const std::string& test_case);
61   std::string StripPrefixes(const std::string& test_name);
62
63  protected:
64   class InfoBarObserver : public content::NotificationObserver {
65    public:
66     InfoBarObserver();
67     ~InfoBarObserver();
68
69     virtual void Observe(int type,
70                          const content::NotificationSource& source,
71                          const content::NotificationDetails& details) OVERRIDE;
72
73     void ExpectInfoBarAndAccept(bool should_accept);
74
75    private:
76     content::NotificationRegistrar registrar_;
77     std::list<bool> expected_infobars_;
78   };
79
80   // Runs the test for a tab given the tab that's already navigated to the
81   // given URL.
82   void RunTestURL(const GURL& test_url);
83   // Gets the URL of the the given |test_case| for the given HTTP test server.
84   // If |extra_params| is non-empty, it will be appended as URL parameters.
85   GURL GetTestURL(const net::SpawnedTestServer& http_server,
86                   const std::string& test_case,
87                   const std::string& extra_params);
88
89   // Return the document root for the HTTP server on which tests will be run.
90   // The result is placed in |document_root|. False is returned upon failure.
91   bool GetHTTPDocumentRoot(base::FilePath* document_root);
92 };
93
94 // In-process plugin test runner.  See OutOfProcessPPAPITest below for the
95 // out-of-process version.
96 class PPAPITest : public PPAPITestBase {
97  public:
98   PPAPITest();
99
100   virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE;
101
102   virtual std::string BuildQuery(const std::string& base,
103                                  const std::string& test_case) OVERRIDE;
104  protected:
105   bool in_process_;  // Controls the --ppapi-in-process switch.
106 };
107
108 // Variant of PPAPITest that runs plugins out-of-process to test proxy
109 // codepaths.
110 class OutOfProcessPPAPITest : public PPAPITest {
111  public:
112   OutOfProcessPPAPITest();
113
114   virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE;
115 };
116
117 // NaCl plugin test runner for Newlib runtime.
118 class PPAPINaClTest : public PPAPITestBase {
119  public:
120   virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE;
121 };
122
123 // NaCl plugin test runner for Newlib runtime.
124 class PPAPINaClNewlibTest : public PPAPINaClTest {
125  public:
126   virtual std::string BuildQuery(const std::string& base,
127                                  const std::string& test_case) OVERRIDE;
128 };
129
130 // NaCl plugin test runner for GNU-libc runtime.
131 class PPAPINaClGLibcTest : public PPAPINaClTest {
132  public:
133   virtual std::string BuildQuery(const std::string& base,
134                                  const std::string& test_case) OVERRIDE;
135 };
136
137 // NaCl plugin test runner for the PNaCl + Newlib runtime.
138 class PPAPINaClPNaClTest : public PPAPINaClTest {
139  public:
140   virtual std::string BuildQuery(const std::string& base,
141                                  const std::string& test_case) OVERRIDE;
142 };
143
144 class PPAPINaClTestDisallowedSockets : public PPAPITestBase {
145  public:
146   virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE;
147
148   virtual std::string BuildQuery(const std::string& base,
149                                  const std::string& test_case) OVERRIDE;
150 };
151
152 class PPAPIBrokerInfoBarTest : public OutOfProcessPPAPITest {
153  public:
154   // PPAPITestBase override:
155   virtual void SetUpOnMainThread() OVERRIDE;
156 };
157
158 #endif  // CHROME_TEST_PPAPI_PPAPI_TEST_H_