| // Copyright 2014 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef EXTENSIONS_BROWSER_API_UNITTEST_H_ |
| #define EXTENSIONS_BROWSER_API_UNITTEST_H_ |
| |
| #include <memory> |
| #include <string> |
| |
| #include "base/memory/ref_counted.h" |
| #include "components/sync_preferences/testing_pref_service_syncable.h" |
| #include "extensions/browser/extensions_test.h" |
| |
| namespace base { |
| class Value; |
| class DictionaryValue; |
| class ListValue; |
| } |
| |
| namespace content { |
| class WebContents; |
| } |
| |
| class UIThreadExtensionFunction; |
| |
| namespace extensions { |
| |
| // Use this class to enable calling API functions in a unittest. |
| // By default, this class will create and load an empty unpacked |extension_|, |
| // which will be used in all API function calls. This extension can be |
| // overridden using set_extension(). |
| // When calling RunFunction[AndReturn*], |args| should be in JSON format, |
| // wrapped in a list. See also RunFunction* in api_test_utils.h. |
| class ApiUnitTest : public ExtensionsTest { |
| public: |
| ApiUnitTest(); |
| ~ApiUnitTest() override; |
| |
| content::WebContents* contents() { return contents_.get(); } |
| const Extension* extension() const { return extension_.get(); } |
| scoped_refptr<Extension> extension_ref() { return extension_; } |
| void set_extension(scoped_refptr<Extension> extension) { |
| extension_ = extension; |
| } |
| |
| protected: |
| // SetUp creates and loads an empty, unpacked Extension. |
| void SetUp() override; |
| void TearDown() override; |
| |
| // Creates a background page for |extension_|, and sets it for the WebContents |
| // to be used in API calls. |
| // If |contents_| is already set, this does nothing. |
| void CreateBackgroundPage(); |
| |
| // Various ways of running an API function. These methods take ownership of |
| // |function|. |args| should be in JSON format, wrapped in a list. |
| // See also the RunFunction* methods in extension_function_test_utils.h. |
| |
| // Return the function result as a base::Value. |
| std::unique_ptr<base::Value> RunFunctionAndReturnValue( |
| UIThreadExtensionFunction* function, |
| const std::string& args); |
| |
| // Return the function result as a base::DictionaryValue, or NULL. |
| // This will EXPECT-fail if the result is not a DictionaryValue. |
| std::unique_ptr<base::DictionaryValue> RunFunctionAndReturnDictionary( |
| UIThreadExtensionFunction* function, |
| const std::string& args); |
| |
| // Return the function result as a base::ListValue, or NULL. |
| // This will EXPECT-fail if the result is not a ListValue. |
| std::unique_ptr<base::ListValue> RunFunctionAndReturnList( |
| UIThreadExtensionFunction* function, |
| const std::string& args); |
| |
| // Return an error thrown from the function, if one exists. |
| // This will EXPECT-fail if any result is returned from the function. |
| std::string RunFunctionAndReturnError(UIThreadExtensionFunction* function, |
| const std::string& args); |
| |
| // Run the function and ignore any result. |
| void RunFunction(UIThreadExtensionFunction* function, |
| const std::string& args); |
| |
| private: |
| sync_preferences::TestingPrefServiceSyncable testing_pref_service_; |
| |
| // The WebContents used to associate a RenderFrameHost with API function |
| // calls, or null. |
| std::unique_ptr<content::WebContents> contents_; |
| |
| // The Extension used when running API function calls. |
| scoped_refptr<Extension> extension_; |
| }; |
| |
| } // namespace extensions |
| |
| #endif // EXTENSIONS_BROWSER_API_UNITTEST_H_ |