| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef EXTENSIONS_COMMON_MANIFEST_TEST_H_ | 5 #ifndef EXTENSIONS_COMMON_MANIFEST_TEST_H_ |
| 6 #define EXTENSIONS_COMMON_MANIFEST_TEST_H_ | 6 #define EXTENSIONS_COMMON_MANIFEST_TEST_H_ |
| 7 | 7 |
| 8 #include <stddef.h> | 8 #include <stddef.h> |
| 9 | 9 |
| 10 #include <memory> |
| 11 |
| 10 #include "base/macros.h" | 12 #include "base/macros.h" |
| 11 #include "base/memory/ref_counted.h" | 13 #include "base/memory/ref_counted.h" |
| 12 #include "base/memory/scoped_ptr.h" | |
| 13 #include "base/values.h" | 14 #include "base/values.h" |
| 14 #include "extensions/common/extension.h" | 15 #include "extensions/common/extension.h" |
| 15 #include "extensions/common/manifest.h" | 16 #include "extensions/common/manifest.h" |
| 16 #include "testing/gtest/include/gtest/gtest.h" | 17 #include "testing/gtest/include/gtest/gtest.h" |
| 17 | 18 |
| 18 namespace base { | 19 namespace base { |
| 19 class FilePath; | 20 class FilePath; |
| 20 } | 21 } |
| 21 | 22 |
| 22 namespace extensions { | 23 namespace extensions { |
| 23 | 24 |
| 24 // Base class for tests that parse a manifest file. | 25 // Base class for tests that parse a manifest file. |
| 25 class ManifestTest : public testing::Test { | 26 class ManifestTest : public testing::Test { |
| 26 public: | 27 public: |
| 27 ManifestTest(); | 28 ManifestTest(); |
| 28 ~ManifestTest() override; | 29 ~ManifestTest() override; |
| 29 | 30 |
| 30 protected: | 31 protected: |
| 31 // Helper class that simplifies creating methods that take either a filename | 32 // Helper class that simplifies creating methods that take either a filename |
| 32 // to a manifest or the manifest itself. | 33 // to a manifest or the manifest itself. |
| 33 class ManifestData { | 34 class ManifestData { |
| 34 public: | 35 public: |
| 35 explicit ManifestData(const char* name); | 36 explicit ManifestData(const char* name); |
| 36 ManifestData(base::DictionaryValue* manifest, const char* name); | 37 ManifestData(base::DictionaryValue* manifest, const char* name); |
| 37 explicit ManifestData(scoped_ptr<base::DictionaryValue> manifest); | 38 explicit ManifestData(std::unique_ptr<base::DictionaryValue> manifest); |
| 38 explicit ManifestData(scoped_ptr<base::DictionaryValue> manifest, | 39 explicit ManifestData(std::unique_ptr<base::DictionaryValue> manifest, |
| 39 const char* name); | 40 const char* name); |
| 40 // C++98 requires the copy constructor for a type to be visible if you | 41 // C++98 requires the copy constructor for a type to be visible if you |
| 41 // take a const-ref of a temporary for that type. Since Manifest | 42 // take a const-ref of a temporary for that type. Since Manifest |
| 42 // contains a scoped_ptr, its implicit copy constructor is declared | 43 // contains a scoped_ptr, its implicit copy constructor is declared |
| 43 // Manifest(Manifest&) according to spec 12.8.5. This breaks the first | 44 // Manifest(Manifest&) according to spec 12.8.5. This breaks the first |
| 44 // requirement and thus you cannot use it with LoadAndExpectError() or | 45 // requirement and thus you cannot use it with LoadAndExpectError() or |
| 45 // LoadAndExpectSuccess() easily. | 46 // LoadAndExpectSuccess() easily. |
| 46 // | 47 // |
| 47 // To get around this spec pedantry, we declare the copy constructor | 48 // To get around this spec pedantry, we declare the copy constructor |
| 48 // explicitly. It will never get invoked. | 49 // explicitly. It will never get invoked. |
| 49 ManifestData(const ManifestData& m); | 50 ManifestData(const ManifestData& m); |
| 50 | 51 |
| 51 ~ManifestData(); | 52 ~ManifestData(); |
| 52 | 53 |
| 53 const std::string& name() const { return name_; }; | 54 const std::string& name() const { return name_; }; |
| 54 | 55 |
| 55 base::DictionaryValue* GetManifest(base::FilePath manifest_path, | 56 base::DictionaryValue* GetManifest(base::FilePath manifest_path, |
| 56 std::string* error) const; | 57 std::string* error) const; |
| 57 | 58 |
| 58 private: | 59 private: |
| 59 const std::string name_; | 60 const std::string name_; |
| 60 mutable base::DictionaryValue* manifest_; | 61 mutable base::DictionaryValue* manifest_; |
| 61 mutable scoped_ptr<base::DictionaryValue> manifest_holder_; | 62 mutable std::unique_ptr<base::DictionaryValue> manifest_holder_; |
| 62 }; | 63 }; |
| 63 | 64 |
| 64 // Allows the test implementation to override a loaded test manifest's | 65 // Allows the test implementation to override a loaded test manifest's |
| 65 // extension ID. Useful for testing features behind a whitelist. | 66 // extension ID. Useful for testing features behind a whitelist. |
| 66 virtual std::string GetTestExtensionID() const; | 67 virtual std::string GetTestExtensionID() const; |
| 67 | 68 |
| 68 // Returns the path in which to find test manifest data files, for example | 69 // Returns the path in which to find test manifest data files, for example |
| 69 // extensions/test/data/manifest_tests. | 70 // extensions/test/data/manifest_tests. |
| 70 virtual base::FilePath GetTestDataDir(); | 71 virtual base::FilePath GetTestDataDir(); |
| 71 | 72 |
| 72 scoped_ptr<base::DictionaryValue> LoadManifest( | 73 std::unique_ptr<base::DictionaryValue> LoadManifest(char const* manifest_name, |
| 73 char const* manifest_name, | 74 std::string* error); |
| 74 std::string* error); | |
| 75 | 75 |
| 76 scoped_refptr<extensions::Extension> LoadExtension( | 76 scoped_refptr<extensions::Extension> LoadExtension( |
| 77 const ManifestData& manifest, | 77 const ManifestData& manifest, |
| 78 std::string* error, | 78 std::string* error, |
| 79 extensions::Manifest::Location location = | 79 extensions::Manifest::Location location = |
| 80 extensions::Manifest::INTERNAL, | 80 extensions::Manifest::INTERNAL, |
| 81 int flags = extensions::Extension::NO_FLAGS); | 81 int flags = extensions::Extension::NO_FLAGS); |
| 82 | 82 |
| 83 scoped_refptr<extensions::Extension> LoadAndExpectSuccess( | 83 scoped_refptr<extensions::Extension> LoadAndExpectSuccess( |
| 84 const ManifestData& manifest, | 84 const ManifestData& manifest, |
| (...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 163 | 163 |
| 164 bool enable_apps_; | 164 bool enable_apps_; |
| 165 | 165 |
| 166 private: | 166 private: |
| 167 DISALLOW_COPY_AND_ASSIGN(ManifestTest); | 167 DISALLOW_COPY_AND_ASSIGN(ManifestTest); |
| 168 }; | 168 }; |
| 169 | 169 |
| 170 } // namespace extensions | 170 } // namespace extensions |
| 171 | 171 |
| 172 #endif // EXTENSIONS_COMMON_MANIFEST_TEST_H_ | 172 #endif // EXTENSIONS_COMMON_MANIFEST_TEST_H_ |
| OLD | NEW |