1 // Copyright 2014 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 EXTENSIONS_BROWSER_API_TEST_TEST_API_H_ 6 #define EXTENSIONS_BROWSER_API_TEST_TEST_API_H_ 7 8 #include "base/values.h" 9 #include "extensions/browser/extension_function.h" 10 11 template <typename T> 12 struct DefaultSingletonTraits; 13 14 namespace extensions { 15 16 // A function that is only available in tests. 17 // Prior to running, checks that we are in a testing process. 18 class TestExtensionFunction : public SyncExtensionFunction { 19 protected: 20 virtual ~TestExtensionFunction(); 21 22 // SyncExtensionFunction: 23 virtual bool RunSync() OVERRIDE; 24 25 virtual bool RunSafe() = 0; 26 }; 27 28 class TestNotifyPassFunction : public TestExtensionFunction { 29 public: 30 DECLARE_EXTENSION_FUNCTION("test.notifyPass", UNKNOWN) 31 32 protected: 33 virtual ~TestNotifyPassFunction(); 34 35 // TestExtensionFunction: 36 virtual bool RunSafe() OVERRIDE; 37 }; 38 39 class TestNotifyFailFunction : public TestExtensionFunction { 40 public: 41 DECLARE_EXTENSION_FUNCTION("test.notifyFail", UNKNOWN) 42 43 protected: 44 virtual ~TestNotifyFailFunction(); 45 46 // TestExtensionFunction: 47 virtual bool RunSafe() OVERRIDE; 48 }; 49 50 class TestLogFunction : public TestExtensionFunction { 51 public: 52 DECLARE_EXTENSION_FUNCTION("test.log", UNKNOWN) 53 54 protected: 55 virtual ~TestLogFunction(); 56 57 // TestExtensionFunction: 58 virtual bool RunSafe() OVERRIDE; 59 }; 60 61 class TestSendMessageFunction : public AsyncExtensionFunction { 62 public: 63 DECLARE_EXTENSION_FUNCTION("test.sendMessage", UNKNOWN) 64 65 // Sends a reply back to the calling extension. Many extensions don't need 66 // a reply and will just ignore it. 67 void Reply(const std::string& message); 68 69 // Sends an error back to the calling extension. 70 void ReplyWithError(const std::string& error); 71 72 protected: 73 virtual ~TestSendMessageFunction(); 74 75 // ExtensionFunction: 76 virtual bool RunAsync() OVERRIDE; 77 }; 78 79 class TestGetConfigFunction : public TestExtensionFunction { 80 public: 81 DECLARE_EXTENSION_FUNCTION("test.getConfig", UNKNOWN) 82 83 // Set the dictionary returned by chrome.test.getConfig(). 84 // Does not take ownership of |value|. 85 static void set_test_config_state(base::DictionaryValue* value); 86 87 protected: 88 // Tests that set configuration state do so by calling 89 // set_test_config_state() as part of test set up, and unsetting it 90 // during tear down. This singleton class holds a pointer to that 91 // state, owned by the test code. 92 class TestConfigState { 93 public: 94 static TestConfigState* GetInstance(); 95 96 void set_config_state(base::DictionaryValue* config_state) { 97 config_state_ = config_state; 98 } 99 100 const base::DictionaryValue* config_state() { return config_state_; } 101 102 private: 103 friend struct DefaultSingletonTraits<TestConfigState>; 104 TestConfigState(); 105 106 base::DictionaryValue* config_state_; 107 108 DISALLOW_COPY_AND_ASSIGN(TestConfigState); 109 }; 110 111 virtual ~TestGetConfigFunction(); 112 113 // TestExtensionFunction: 114 virtual bool RunSafe() OVERRIDE; 115 }; 116 117 class TestWaitForRoundTripFunction : public TestExtensionFunction { 118 public: 119 DECLARE_EXTENSION_FUNCTION("test.waitForRoundTrip", UNKNOWN) 120 121 protected: 122 virtual ~TestWaitForRoundTripFunction(); 123 124 // TestExtensionFunction: 125 virtual bool RunSafe() OVERRIDE; 126 }; 127 128 } // namespace extensions 129 130 #endif // EXTENSIONS_BROWSER_API_TEST_TEST_API_H_ 131