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

Side by Side Diff: chrome/browser/extensions/extension_unittest.cc

Issue 18681: Revert "Parse more user script info out of the manifest and expose" (Closed)
Patch Set: Created 11 years, 11 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
OLDNEW
1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2006-2008 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 "base/string_util.h" 5 #include "base/string_util.h"
6 #include "base/path_service.h"
7 #include "chrome/browser/extensions/extension.h" 6 #include "chrome/browser/extensions/extension.h"
8 #include "chrome/common/chrome_paths.h"
9 #include "chrome/common/json_value_serializer.h"
10 #include "testing/gtest/include/gtest/gtest.h" 7 #include "testing/gtest/include/gtest/gtest.h"
11 8
12 class ExtensionTest : public testing::Test { 9 class ExtensionTest : public testing::Test {
13 }; 10 };
14 11
15 TEST(ExtensionTest, InitFromValueInvalid) { 12 TEST(ExtensionTest, InitFromValueInvalid) {
16 #if defined(OS_WIN) 13 Extension extension;
17 FilePath path(FILE_PATH_LITERAL("c:\\foo"));
18 #elif defined(OS_POSIX)
19 FilePath path(FILE_PATH_LITERAL("/foo"));
20 #endif
21 Extension extension(path);
22 std::string error; 14 std::string error;
23 15
24 // Start with a valid extension manifest 16 // Test invalid format version
25 std::wstring extensions_dir; 17 DictionaryValue input_value;
26 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &extensions_dir)); 18 input_value.SetInteger(Extension::kFormatVersionKey, 2);
27 FilePath extensions_path = FilePath::FromWStringHack(extensions_dir) 19 EXPECT_FALSE(extension.InitFromValue(input_value, &error));
28 .Append(FILE_PATH_LITERAL("extensions"))
29 .Append(FILE_PATH_LITERAL("extension1"))
30 .Append(FILE_PATH_LITERAL("manifest"));
31
32 JSONFileValueSerializer serializer(extensions_path.ToWStringHack());
33 scoped_ptr<DictionaryValue> valid_value(
34 static_cast<DictionaryValue*>(serializer.Deserialize(&error)));
35 ASSERT_TRUE(valid_value.get());
36 ASSERT_EQ("", error);
37 ASSERT_TRUE(extension.InitFromValue(*valid_value, &error));
38 ASSERT_EQ("", error);
39
40 scoped_ptr<DictionaryValue> input_value;
41
42 // Test missing and invalid format versions
43 input_value.reset(static_cast<DictionaryValue*>(valid_value->DeepCopy()));
44 input_value->Remove(Extension::kFormatVersionKey, NULL);
45 EXPECT_FALSE(extension.InitFromValue(*input_value, &error));
46 EXPECT_EQ(Extension::kInvalidFormatVersionError, error); 20 EXPECT_EQ(Extension::kInvalidFormatVersionError, error);
47 21 input_value.SetInteger(Extension::kFormatVersionKey, 1);
48 input_value->SetString(Extension::kFormatVersionKey, "foo");
49 EXPECT_FALSE(extension.InitFromValue(*input_value, &error));
50 EXPECT_EQ(Extension::kInvalidFormatVersionError, error);
51
52 input_value->SetInteger(Extension::kFormatVersionKey, 2);
53 EXPECT_FALSE(extension.InitFromValue(*input_value, &error));
54 EXPECT_EQ(Extension::kInvalidFormatVersionError, error);
55 22
56 // Test missing and invalid ids 23 // Test missing and invalid ids
57 input_value.reset(static_cast<DictionaryValue*>(valid_value->DeepCopy())); 24 EXPECT_FALSE(extension.InitFromValue(input_value, &error));
58 input_value->Remove(Extension::kIdKey, NULL);
59 EXPECT_FALSE(extension.InitFromValue(*input_value, &error));
60 EXPECT_EQ(Extension::kInvalidIdError, error); 25 EXPECT_EQ(Extension::kInvalidIdError, error);
61 26 input_value.SetInteger(Extension::kIdKey, 42);
62 input_value->SetInteger(Extension::kIdKey, 42); 27 EXPECT_FALSE(extension.InitFromValue(input_value, &error));
63 EXPECT_FALSE(extension.InitFromValue(*input_value, &error));
64 EXPECT_EQ(Extension::kInvalidIdError, error); 28 EXPECT_EQ(Extension::kInvalidIdError, error);
29 input_value.SetString(Extension::kIdKey, L"com.google.myextension");
65 30
66 // Test missing and invalid versions 31 // Test missing and invalid versions
67 input_value.reset(static_cast<DictionaryValue*>(valid_value->DeepCopy())); 32 EXPECT_FALSE(extension.InitFromValue(input_value, &error));
68 input_value->Remove(Extension::kVersionKey, NULL);
69 EXPECT_FALSE(extension.InitFromValue(*input_value, &error));
70 EXPECT_EQ(Extension::kInvalidVersionError, error); 33 EXPECT_EQ(Extension::kInvalidVersionError, error);
71 34 input_value.SetInteger(Extension::kVersionKey, 42);
72 input_value->SetInteger(Extension::kVersionKey, 42); 35 EXPECT_FALSE(extension.InitFromValue(input_value, &error));
73 EXPECT_FALSE(extension.InitFromValue(*input_value, &error));
74 EXPECT_EQ(Extension::kInvalidVersionError, error); 36 EXPECT_EQ(Extension::kInvalidVersionError, error);
37 input_value.SetString(Extension::kVersionKey, L"1.0");
75 38
76 // Test missing and invalid names 39 // Test missing and invalid names
77 input_value.reset(static_cast<DictionaryValue*>(valid_value->DeepCopy())); 40 EXPECT_FALSE(extension.InitFromValue(input_value, &error));
78 input_value->Remove(Extension::kNameKey, NULL);
79 EXPECT_FALSE(extension.InitFromValue(*input_value, &error));
80 EXPECT_EQ(Extension::kInvalidNameError, error); 41 EXPECT_EQ(Extension::kInvalidNameError, error);
81 42 input_value.SetInteger(Extension::kNameKey, 42);
82 input_value->SetInteger(Extension::kNameKey, 42); 43 EXPECT_FALSE(extension.InitFromValue(input_value, &error));
83 EXPECT_FALSE(extension.InitFromValue(*input_value, &error));
84 EXPECT_EQ(Extension::kInvalidNameError, error); 44 EXPECT_EQ(Extension::kInvalidNameError, error);
45 input_value.SetString(Extension::kNameKey, L"my extension");
85 46
86 // Test invalid description 47 // Test invalid description
87 input_value.reset(static_cast<DictionaryValue*>(valid_value->DeepCopy())); 48 input_value.SetInteger(Extension::kDescriptionKey, 42);
88 input_value->SetInteger(Extension::kDescriptionKey, 42); 49 EXPECT_FALSE(extension.InitFromValue(input_value, &error));
89 EXPECT_FALSE(extension.InitFromValue(*input_value, &error));
90 EXPECT_EQ(Extension::kInvalidDescriptionError, error); 50 EXPECT_EQ(Extension::kInvalidDescriptionError, error);
51 input_value.Remove(Extension::kDescriptionKey, NULL);
91 52
92 // Test invalid user scripts list 53 // Test invalid content scripts list
93 input_value.reset(static_cast<DictionaryValue*>(valid_value->DeepCopy())); 54 input_value.SetInteger(Extension::kContentScriptsKey, 42);
94 input_value->SetInteger(Extension::kUserScriptsKey, 42); 55 EXPECT_FALSE(extension.InitFromValue(input_value, &error));
95 EXPECT_FALSE(extension.InitFromValue(*input_value, &error)); 56 EXPECT_EQ(Extension::kInvalidContentScriptsListError, error);
96 EXPECT_EQ(Extension::kInvalidUserScriptsListError, error);
97 57
98 // Test invalid user script item 58 // Test invalid content script item
99 input_value.reset(static_cast<DictionaryValue*>(valid_value->DeepCopy())); 59 ListValue* content_scripts = new ListValue;
100 ListValue* user_scripts = NULL; 60 input_value.Set(Extension::kContentScriptsKey, content_scripts);
101 input_value->GetList(Extension::kUserScriptsKey, &user_scripts); 61 content_scripts->Set(0, Value::CreateIntegerValue(42));
102 user_scripts->Set(0, Value::CreateIntegerValue(42)); 62 EXPECT_FALSE(extension.InitFromValue(input_value, &error));
103 EXPECT_FALSE(extension.InitFromValue(*input_value, &error)); 63 EXPECT_EQ(0u, error.find(Extension::kInvalidContentScriptError));
104 EXPECT_TRUE(MatchPattern(error, Extension::kInvalidUserScriptError));
105
106 // Test missing and invalid matches array
107 input_value.reset(static_cast<DictionaryValue*>(valid_value->DeepCopy()));
108 input_value->GetList(Extension::kUserScriptsKey, &user_scripts);
109 DictionaryValue* user_script = NULL;
110 user_scripts->GetDictionary(0, &user_script);
111 user_script->Remove(Extension::kMatchesKey, NULL);
112 EXPECT_FALSE(extension.InitFromValue(*input_value, &error));
113 EXPECT_TRUE(MatchPattern(error, Extension::kInvalidMatchesError));
114
115 user_script->Set(Extension::kMatchesKey, Value::CreateIntegerValue(42));
116 EXPECT_FALSE(extension.InitFromValue(*input_value, &error));
117 EXPECT_TRUE(MatchPattern(error, Extension::kInvalidMatchesError));
118
119 ListValue* matches = new ListValue;
120 user_script->Set(Extension::kMatchesKey, matches);
121 EXPECT_FALSE(extension.InitFromValue(*input_value, &error));
122 EXPECT_TRUE(MatchPattern(error, Extension::kInvalidMatchCountError));
123
124 // Test invalid match element
125 matches->Set(0, Value::CreateIntegerValue(42));
126 EXPECT_FALSE(extension.InitFromValue(*input_value, &error));
127 EXPECT_TRUE(MatchPattern(error, Extension::kInvalidMatchError));
128
129 // Test missing and invalid files array
130 input_value.reset(static_cast<DictionaryValue*>(valid_value->DeepCopy()));
131 input_value->GetList(Extension::kUserScriptsKey, &user_scripts);
132 user_scripts->GetDictionary(0, &user_script);
133 user_script->Remove(Extension::kFilesKey, NULL);
134 EXPECT_FALSE(extension.InitFromValue(*input_value, &error));
135 EXPECT_TRUE(MatchPattern(error, Extension::kInvalidFilesError));
136
137 user_script->Set(Extension::kFilesKey, Value::CreateIntegerValue(42));
138 EXPECT_FALSE(extension.InitFromValue(*input_value, &error));
139 EXPECT_TRUE(MatchPattern(error, Extension::kInvalidFilesError));
140
141 ListValue* files = new ListValue;
142 user_script->Set(Extension::kFilesKey, files);
143 EXPECT_FALSE(extension.InitFromValue(*input_value, &error));
144 EXPECT_TRUE(MatchPattern(error, Extension::kInvalidFileCountError));
145
146 // Test invalid file element
147 files->Set(0, Value::CreateIntegerValue(42));
148 EXPECT_FALSE(extension.InitFromValue(*input_value, &error));
149 EXPECT_TRUE(MatchPattern(error, Extension::kInvalidFileError));
150
151 // Test too many file elements (more than one not yet supported)
152 files->Set(0, Value::CreateStringValue("foo.js"));
153 files->Set(1, Value::CreateStringValue("bar.js"));
154 EXPECT_FALSE(extension.InitFromValue(*input_value, &error));
155 EXPECT_TRUE(MatchPattern(error, Extension::kInvalidFileCountError));
156 } 64 }
157 65
158 TEST(ExtensionTest, InitFromValueValid) { 66 TEST(ExtensionTest, InitFromValueValid) {
159 #if defined(OS_WIN) 67 Extension extension;
160 FilePath path(FILE_PATH_LITERAL("C:\\foo"));
161 #elif defined(OS_POSIX)
162 FilePath path(FILE_PATH_LITERAL("/foo"));
163 #endif
164 Extension extension(path);
165 std::string error; 68 std::string error;
166 DictionaryValue input_value; 69 DictionaryValue input_value;
70 DictionaryValue output_value;
167 71
168 // Test minimal extension 72 // Test minimal extension
169 input_value.SetInteger(Extension::kFormatVersionKey, 1); 73 input_value.SetInteger(Extension::kFormatVersionKey, 1);
170 input_value.SetString(Extension::kIdKey, "com.google.myextension"); 74 input_value.SetString(Extension::kIdKey, L"com.google.myextension");
171 input_value.SetString(Extension::kVersionKey, "1.0"); 75 input_value.SetString(Extension::kVersionKey, L"1.0");
172 input_value.SetString(Extension::kNameKey, "my extension"); 76 input_value.SetString(Extension::kNameKey, L"my extension");
173 77
174 EXPECT_TRUE(extension.InitFromValue(input_value, &error)); 78 EXPECT_TRUE(extension.InitFromValue(input_value, &error));
175 EXPECT_EQ("", error); 79 extension.CopyToValue(&output_value);
176 EXPECT_EQ("com.google.myextension", extension.id()); 80 EXPECT_TRUE(input_value.Equals(&output_value));
177 EXPECT_EQ("1.0", extension.version()); 81
178 EXPECT_EQ("my extension", extension.name()); 82 // Test with a description
179 EXPECT_EQ("chrome-extension://com.google.myextension/", 83 input_value.SetString(Extension::kDescriptionKey,
180 extension.url().spec()); 84 L"my extension does things");
181 EXPECT_EQ(path.value(), extension.path().value()); 85 EXPECT_TRUE(extension.InitFromValue(input_value, &error));
86 extension.CopyToValue(&output_value);
87 EXPECT_TRUE(input_value.Equals(&output_value));
88
89 // Test content_scripts
90 ListValue* content_scripts = new ListValue();
91 input_value.Set(Extension::kContentScriptsKey, content_scripts);
92 content_scripts->Set(0, Value::CreateStringValue(L"foo/bar.js"));
93 content_scripts->Set(1, Value::CreateStringValue(L"hot/dog.js"));
94 EXPECT_TRUE(extension.InitFromValue(input_value, &error));
95 extension.CopyToValue(&output_value);
96 EXPECT_TRUE(input_value.Equals(&output_value));
182 } 97 }
183
184 TEST(ExtensionTest, GetResourceURLAndPath) {
185 #if defined(OS_WIN)
186 FilePath path(FILE_PATH_LITERAL("C:\\foo"));
187 #elif defined(OS_POSIX)
188 FilePath path(FILE_PATH_LITERAL("/foo"));
189 #endif
190 Extension extension(path);
191 DictionaryValue input_value;
192 input_value.SetInteger(Extension::kFormatVersionKey, 1);
193 input_value.SetString(Extension::kIdKey, "com.google.myextension");
194 input_value.SetString(Extension::kVersionKey, "1.0");
195 input_value.SetString(Extension::kNameKey, "my extension");
196 EXPECT_TRUE(extension.InitFromValue(input_value, NULL));
197
198 EXPECT_EQ(extension.url().spec() + "bar/baz.js",
199 Extension::GetResourceURL(extension.url(), "bar/baz.js").spec());
200 EXPECT_EQ(extension.url().spec() + "baz.js",
201 Extension::GetResourceURL(extension.url(), "bar/../baz.js").spec());
202 EXPECT_EQ(extension.url().spec() + "baz.js",
203 Extension::GetResourceURL(extension.url(), "../baz.js").spec());
204
205 EXPECT_EQ(path.Append(FILE_PATH_LITERAL("bar"))
206 .Append(FILE_PATH_LITERAL("baz.js")).value(),
207 Extension::GetResourcePath(extension.path(), "bar/baz.js").value());
208 EXPECT_EQ(path.Append(FILE_PATH_LITERAL("baz.js")).value(),
209 Extension::GetResourcePath(extension.path(), "bar/../baz.js")
210 .value());
211 EXPECT_EQ(FilePath().value(),
212 Extension::GetResourcePath(extension.path(), "../baz.js").value());
213 }
OLDNEW
« no previous file with comments | « chrome/browser/extensions/extension_protocols_unittest.cc ('k') | chrome/browser/extensions/extensions_service_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698