Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(229)

Side by Side Diff: chrome/common/extensions/manifest_handler_unittest.cc

Issue 12253022: Manifest handler for all keys background-related. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2013 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 #include <string> 5 #include <string>
6 #include <vector> 6 #include <vector>
7 7
8 #include "base/files/file_path.h" 8 #include "base/files/file_path.h"
9 #include "base/stl_util.h" 9 #include "base/stl_util.h"
10 #include "base/utf_string_conversions.h" 10 #include "base/utf_string_conversions.h"
11 #include "chrome/common/extensions/extension.h" 11 #include "chrome/common/extensions/extension.h"
12 #include "chrome/common/extensions/extension_builder.h" 12 #include "chrome/common/extensions/extension_builder.h"
13 #include "chrome/common/extensions/manifest_handler.h" 13 #include "chrome/common/extensions/manifest_handler.h"
14 #include "chrome/common/extensions/value_builder.h" 14 #include "chrome/common/extensions/value_builder.h"
15 #include "testing/gtest/include/gtest/gtest.h" 15 #include "testing/gtest/include/gtest/gtest.h"
16 16
17 namespace extensions { 17 namespace extensions {
18 18
19 namespace {
20
21 std::vector<std::string> SingleKey(const std::string& key) {
22 return std::vector<std::string>(1, key);
23 }
24
25 } // namespace
26
19 class ManifestHandlerTest : public testing::Test { 27 class ManifestHandlerTest : public testing::Test {
20 public: 28 public:
21 class ParsingWatcher { 29 class ParsingWatcher {
22 public: 30 public:
23 // Called when a manifest handler parses. 31 // Called when a manifest handler parses.
24 void Record(const std::string& name) { 32 void Record(const std::string& name) {
25 parsed_names_.push_back(name); 33 parsed_names_.push_back(name);
26 } 34 }
27 35
28 const std::vector<std::string>& parsed_names() { 36 const std::vector<std::string>& parsed_names() {
(...skipping 17 matching lines...) Expand all
46 } 54 }
47 55
48 private: 56 private:
49 // The order of manifest handlers that we watched parsing. 57 // The order of manifest handlers that we watched parsing.
50 std::vector<std::string> parsed_names_; 58 std::vector<std::string> parsed_names_;
51 }; 59 };
52 60
53 class TestManifestHandler : public ManifestHandler { 61 class TestManifestHandler : public ManifestHandler {
54 public: 62 public:
55 TestManifestHandler(const std::string& name, 63 TestManifestHandler(const std::string& name,
64 const std::vector<std::string>& keys,
56 const std::vector<std::string>& prereqs, 65 const std::vector<std::string>& prereqs,
57 ParsingWatcher* watcher) 66 ParsingWatcher* watcher)
58 : name_(name), prereqs_(prereqs), watcher_(watcher) { 67 : name_(name), keys_(keys), prereqs_(prereqs), watcher_(watcher) {
59 } 68 }
60 69
61 virtual bool Parse(Extension* extension, string16* error) OVERRIDE { 70 virtual bool Parse(Extension* extension, string16* error) OVERRIDE {
62 watcher_->Record(name_); 71 watcher_->Record(name_);
63 return true; 72 return true;
64 } 73 }
65 74
66 virtual const std::vector<std::string>& PrerequisiteKeys() OVERRIDE { 75 virtual const std::vector<std::string> PrerequisiteKeys() const OVERRIDE {
67 return prereqs_; 76 return prereqs_;
68 } 77 }
69 78
70 protected: 79 protected:
71 std::string name_; 80 std::string name_;
81 std::vector<std::string> keys_;
72 std::vector<std::string> prereqs_; 82 std::vector<std::string> prereqs_;
73 ParsingWatcher* watcher_; 83 ParsingWatcher* watcher_;
84
85 private:
86 virtual const std::vector<std::string> Keys() const OVERRIDE {
87 return keys_;
88 }
74 }; 89 };
75 90
76 class FailingTestManifestHandler : public TestManifestHandler { 91 class FailingTestManifestHandler : public TestManifestHandler {
77 public: 92 public:
78 FailingTestManifestHandler(const std::string& name, 93 FailingTestManifestHandler(const std::string& name,
79 const std::vector<std::string> prereqs, 94 const std::vector<std::string>& keys,
95 const std::vector<std::string>& prereqs,
80 ParsingWatcher* watcher) 96 ParsingWatcher* watcher)
81 : TestManifestHandler(name, prereqs, watcher) { 97 : TestManifestHandler(name, keys, prereqs, watcher) {
82 } 98 }
83 virtual bool Parse(Extension* extension, string16* error) OVERRIDE { 99 virtual bool Parse(Extension* extension, string16* error) OVERRIDE {
84 *error = ASCIIToUTF16(name_); 100 *error = ASCIIToUTF16(name_);
85 return false; 101 return false;
86 } 102 }
87 }; 103 };
88 104
89 class AlwaysParseTestManifestHandler : public TestManifestHandler { 105 class AlwaysParseTestManifestHandler : public TestManifestHandler {
90 public: 106 public:
91 AlwaysParseTestManifestHandler(const std::string& name, 107 AlwaysParseTestManifestHandler(const std::string& name,
92 const std::vector<std::string> prereqs, 108 const std::vector<std::string>& keys,
109 const std::vector<std::string>& prereqs,
93 ParsingWatcher* watcher) 110 ParsingWatcher* watcher)
94 : TestManifestHandler(name, prereqs, watcher) { 111 : TestManifestHandler(name, keys, prereqs, watcher) {
95 } 112 }
96 113
97 virtual bool AlwaysParseForType(Manifest::Type type) OVERRIDE { 114 virtual bool AlwaysParseForType(Manifest::Type type) const OVERRIDE {
98 return true; 115 return true;
99 } 116 }
100 }; 117 };
101 118
102 protected: 119 protected:
103 virtual void TearDown() OVERRIDE { 120 virtual void TearDown() OVERRIDE {
104 ManifestHandler::ClearRegistryForTesting(); 121 ManifestHandler::ClearRegistryForTesting();
105 } 122 }
106 }; 123 };
107 124
108 TEST_F(ManifestHandlerTest, DependentHandlers) { 125 TEST_F(ManifestHandlerTest, DependentHandlers) {
109 ParsingWatcher watcher; 126 ParsingWatcher watcher;
110 std::vector<std::string> prereqs; 127 std::vector<std::string> prereqs;
111 ManifestHandler::Register( 128 (new TestManifestHandler("A", SingleKey("a"), prereqs, &watcher))->Register();
112 "a", make_linked_ptr(new TestManifestHandler("A", prereqs, &watcher))); 129 (new TestManifestHandler("B", SingleKey("b"), prereqs, &watcher))->Register();
113 ManifestHandler::Register( 130 (new TestManifestHandler("J", SingleKey("j"), prereqs, &watcher))->Register();
114 "b", make_linked_ptr(new TestManifestHandler("B", prereqs, &watcher))); 131 (new AlwaysParseTestManifestHandler("K", SingleKey("k"), prereqs, &watcher))->
115 ManifestHandler::Register( 132 Register();
116 "j", make_linked_ptr(new TestManifestHandler("J", prereqs, &watcher)));
117 ManifestHandler::Register(
118 "k", make_linked_ptr(
119 new AlwaysParseTestManifestHandler("K", prereqs, &watcher)));
120 prereqs.push_back("c.d"); 133 prereqs.push_back("c.d");
121 linked_ptr<TestManifestHandler> handler_c2( 134 std::vector<std::string> keys;
122 new TestManifestHandler("C.EZ", prereqs, &watcher)); 135 keys.push_back("c.e");
123 ManifestHandler::Register("c.e", handler_c2); 136 keys.push_back("c.z");
124 ManifestHandler::Register("c.z", handler_c2); 137 (new TestManifestHandler("C.EZ", keys, prereqs, &watcher))->Register();
125 prereqs.clear(); 138 prereqs.clear();
126 prereqs.push_back("b"); 139 prereqs.push_back("b");
127 prereqs.push_back("k"); 140 prereqs.push_back("k");
128 ManifestHandler::Register( 141 (new TestManifestHandler("C.D", SingleKey("c.d"), prereqs, &watcher))->
129 "c.d", make_linked_ptr(new TestManifestHandler( 142 Register();
130 "C.D", prereqs, &watcher)));
131 143
132 scoped_refptr<Extension> extension = ExtensionBuilder() 144 scoped_refptr<Extension> extension = ExtensionBuilder()
133 .SetManifest(DictionaryBuilder() 145 .SetManifest(DictionaryBuilder()
134 .Set("name", "no name") 146 .Set("name", "no name")
135 .Set("version", "0") 147 .Set("version", "0")
136 .Set("manifest_version", 2) 148 .Set("manifest_version", 2)
137 .Set("a", 1) 149 .Set("a", 1)
138 .Set("b", 2) 150 .Set("b", 2)
139 .Set("c", DictionaryBuilder() 151 .Set("c", DictionaryBuilder()
140 .Set("d", 3) 152 .Set("d", 3)
(...skipping 25 matching lines...) Expand all
166 scoped_refptr<Extension> extension = Extension::Create( 178 scoped_refptr<Extension> extension = Extension::Create(
167 base::FilePath(), 179 base::FilePath(),
168 Manifest::INVALID_LOCATION, 180 Manifest::INVALID_LOCATION,
169 *manifest_a, 181 *manifest_a,
170 Extension::NO_FLAGS, 182 Extension::NO_FLAGS,
171 &error); 183 &error);
172 EXPECT_TRUE(extension); 184 EXPECT_TRUE(extension);
173 185
174 // Register a handler for "a" that fails. 186 // Register a handler for "a" that fails.
175 ParsingWatcher watcher; 187 ParsingWatcher watcher;
176 ManifestHandler::Register( 188 (new FailingTestManifestHandler(
177 "a", make_linked_ptr(new FailingTestManifestHandler( 189 "A", SingleKey("a"), std::vector<std::string>(), &watcher))->Register();
178 "A", std::vector<std::string>(), &watcher)));
179 190
180 extension = Extension::Create( 191 extension = Extension::Create(
181 base::FilePath(), 192 base::FilePath(),
182 Manifest::INVALID_LOCATION, 193 Manifest::INVALID_LOCATION,
183 *manifest_a, 194 *manifest_a,
184 Extension::NO_FLAGS, 195 Extension::NO_FLAGS,
185 &error); 196 &error);
186 EXPECT_FALSE(extension); 197 EXPECT_FALSE(extension);
187 EXPECT_EQ("A", error); 198 EXPECT_EQ("A", error);
188 } 199 }
189 200
190 } // namespace extensions 201 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698