1c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Copyright (c) 2009 The Chromium Authors. All rights reserved.
2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be
3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file.
4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
5c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifndef CHROME_BROWSER_EXTENSIONS_EXTENSION_TEST_API_H_
6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define CHROME_BROWSER_EXTENSIONS_EXTENSION_TEST_API_H_
73345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#pragma once
8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
9731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick#include "base/values.h"
10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/extensions/extension_function.h"
11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsentemplate <typename T> struct DefaultSingletonTraits;
1321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass ExtensionTestPassFunction : public SyncExtensionFunction {
15731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  ~ExtensionTestPassFunction();
16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual bool RunImpl();
17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  DECLARE_EXTENSION_FUNCTION_NAME("test.notifyPass")
18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch};
19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass ExtensionTestFailFunction : public SyncExtensionFunction {
21731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  ~ExtensionTestFailFunction();
22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual bool RunImpl();
23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  DECLARE_EXTENSION_FUNCTION_NAME("test.notifyFail")
24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch};
25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass ExtensionTestLogFunction : public SyncExtensionFunction {
27731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  ~ExtensionTestLogFunction();
28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual bool RunImpl();
29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  DECLARE_EXTENSION_FUNCTION_NAME("test.log")
30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch};
31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass ExtensionTestQuotaResetFunction : public SyncExtensionFunction {
33731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  ~ExtensionTestQuotaResetFunction();
34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual bool RunImpl();
35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  DECLARE_EXTENSION_FUNCTION_NAME("test.resetQuota")
36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch};
37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass ExtensionTestCreateIncognitoTabFunction : public SyncExtensionFunction {
39731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  ~ExtensionTestCreateIncognitoTabFunction();
40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual bool RunImpl();
41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  DECLARE_EXTENSION_FUNCTION_NAME("test.createIncognitoTab")
42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch};
43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
44731df977c0511bca2206b5f333555b1205ff1f43Iain Merrickclass ExtensionTestSendMessageFunction : public AsyncExtensionFunction {
45731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick public:
46731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  // Sends a reply back to the calling extension. Many extensions don't need
47731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  // a reply and will just ignore it.
48731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  void Reply(const std::string& message);
49731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
50731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick private:
51731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  ~ExtensionTestSendMessageFunction();
523345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  virtual bool RunImpl();
533345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  DECLARE_EXTENSION_FUNCTION_NAME("test.sendMessage")
543345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick};
553345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
56731df977c0511bca2206b5f333555b1205ff1f43Iain Merrickclass ExtensionTestGetConfigFunction : public SyncExtensionFunction {
57731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick public:
58731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  // Set the dictionary returned by chrome.test.getConfig().
59731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  // Does not take ownership of |value|.
60731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  static void set_test_config_state(DictionaryValue* value);
61731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
62731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick private:
63731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  // Tests that set configuration state do so by calling
64731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  // set_test_config_state() as part of test set up, and unsetting it
65731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  // during tear down.  This singleton class holds a pointer to that
66731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  // state, owned by the test code.
67731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  class TestConfigState {
68731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick   public:
6921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    static TestConfigState* GetInstance();
7021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
71731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    void set_config_state(DictionaryValue* config_state) {
72731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      config_state_ = config_state;
73731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    }
74731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    const DictionaryValue* config_state() {
75731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      return config_state_;
76731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    }
77731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick   private:
78731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    friend struct DefaultSingletonTraits<TestConfigState>;
79731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    TestConfigState();
80731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    DictionaryValue* config_state_;
81731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    DISALLOW_COPY_AND_ASSIGN(TestConfigState);
82731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  };
83731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
84731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  ~ExtensionTestGetConfigFunction();
85731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  virtual bool RunImpl();
86731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  DECLARE_EXTENSION_FUNCTION_NAME("test.getConfig")
87731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick};
88731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
89c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // CHROME_BROWSER_EXTENSIONS_EXTENSION_TEST_API_H_
90