1cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
2cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
3cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// found in the LICENSE file.
4cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
5cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#ifndef CONTENT_TEST_PPAPI_PPAPI_TEST_H_
6cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#define CONTENT_TEST_PPAPI_PPAPI_TEST_H_
7cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
8cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include <string>
9cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
10cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "base/basictypes.h"
11cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "base/compiler_specific.h"
12cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "content/public/test/content_browser_test.h"
13cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "content/public/test/javascript_test_observer.h"
14cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "net/test/spawned_test_server/spawned_test_server.h"
15cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "url/gurl.h"
16cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
17cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// This file provides test classes for writing Pepper tests for
18cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// content_browsertests. The interfaces provided here should look similar to
19cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// what's available in chrome/test/ppapi.
20cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
21cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)namespace base {
22cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class CommandLine;
23cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}
24cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
25cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)namespace content {
26cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
27cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class PPAPITestMessageHandler : public content::TestMessageHandler {
28cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) public:
29cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  PPAPITestMessageHandler();
30cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
31cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  virtual MessageResponse HandleMessage(const std::string& json) OVERRIDE;
32cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  virtual void Reset() OVERRIDE;
33cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
34cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  const std::string& message() const {
35cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    return message_;
36cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  }
37cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
38cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) private:
39cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  std::string message_;
40cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
41cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(PPAPITestMessageHandler);
42cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)};
43cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
44cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class PPAPITestBase : public ContentBrowserTest {
45cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) public:
46cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  PPAPITestBase();
47cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
48cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // ContentBrowserTest overrides.
49cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  virtual void SetUpCommandLine(base::CommandLine* command_line) OVERRIDE;
50cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
51cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  virtual std::string BuildQuery(const std::string& base,
52cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                                 const std::string& test_case) = 0;
53cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
54cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // Returns the URL to load for file: tests.
55cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  GURL GetTestFileUrl(const std::string& test_case);
56cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  virtual void RunTest(const std::string& test_case);
57cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
5846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  // Run the test and reload. This can test for clean shutdown, including
5946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  // leaked instance object vars.
6046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  virtual void RunTestAndReload(const std::string& test_case);
6146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
62cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) protected:
63cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // Runs the test for a tab given the tab that's already navigated to the
64cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // given URL.
65cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  void RunTestURL(const GURL& test_url);
66cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)};
67cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
68cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// In-process plugin test runner.  See OutOfProcessPPAPITest below for the
69cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// out-of-process version.
70cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class PPAPITest : public PPAPITestBase {
71cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) public:
72cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  PPAPITest();
73cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
74cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  virtual void SetUpCommandLine(base::CommandLine* command_line) OVERRIDE;
75cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
76cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  virtual std::string BuildQuery(const std::string& base,
77cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                                 const std::string& test_case) OVERRIDE;
78cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) protected:
79cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  bool in_process_;  // Controls the --ppapi-in-process switch.
80cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)};
81cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
82cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Variant of PPAPITest that runs plugins out-of-process to test proxy
83cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// codepaths.
84cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class OutOfProcessPPAPITest : public PPAPITest {
85cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) public:
86cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  OutOfProcessPPAPITest();
871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual void SetUp() OVERRIDE;
891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual void TearDown() OVERRIDE;
90cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)};
91cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
92cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}  // namespace
93cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
94cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#endif  // CONTENT_TEST_PPAPI_PPAPI_TEST_H_
95