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

Side by Side Diff: chrome/common/extensions/api/file_browser_handlers/file_browser_handler_manifest_unittest.cc

Issue 1739183003: Make extensions::DictionaryBuilder and extensions::ListValue unmovable. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 10 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 2013 The Chromium Authors. All rights reserved. 1 // Copyright 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 <utility> 5 #include <utility>
6 6
7 #include "base/macros.h" 7 #include "base/macros.h"
8 #include "base/strings/string_number_conversions.h" 8 #include "base/strings/string_number_conversions.h"
9 #include "chrome/common/extensions/api/file_browser_handlers/file_browser_handle r.h" 9 #include "chrome/common/extensions/api/file_browser_handlers/file_browser_handle r.h"
10 #include "chrome/common/extensions/manifest_tests/chrome_manifest_test.h" 10 #include "chrome/common/extensions/manifest_tests/chrome_manifest_test.h"
(...skipping 19 matching lines...) Expand all
30 TEST_F(FileBrowserHandlerManifestTest, PermissionAllowed) { 30 TEST_F(FileBrowserHandlerManifestTest, PermissionAllowed) {
31 RunTestcase(Testcase("filebrowser_valid.json"), EXPECT_TYPE_SUCCESS); 31 RunTestcase(Testcase("filebrowser_valid.json"), EXPECT_TYPE_SUCCESS);
32 } 32 }
33 33
34 TEST_F(FileBrowserHandlerManifestTest, GetHandlersRequiresPermission) { 34 TEST_F(FileBrowserHandlerManifestTest, GetHandlersRequiresPermission) {
35 extensions::DictionaryBuilder bad_manifest_builder; 35 extensions::DictionaryBuilder bad_manifest_builder;
36 bad_manifest_builder.Set("name", "Foo") 36 bad_manifest_builder.Set("name", "Foo")
37 .Set("version", "1.0.0") 37 .Set("version", "1.0.0")
38 .Set("manifest_version", 2) 38 .Set("manifest_version", 2)
39 .Set("file_browser_handlers", 39 .Set("file_browser_handlers",
40 std::move(extensions::ListBuilder().Append(std::move( 40 extensions::ListBuilder()
41 extensions::DictionaryBuilder() 41 .Append(extensions::DictionaryBuilder()
42 .Set("id", "open") 42 .Set("id", "open")
43 .Set("default_title", "open") 43 .Set("default_title", "open")
44 .Set("file_filters", 44 .Set("file_filters", extensions::ListBuilder()
45 std::move(extensions::ListBuilder() 45 .Append("filesystem:*.txt")
46 .Append("filesystem:*.txt") 46 .Append("filesystem:*.html")
47 .Append("filesystem:*.html"))))))); 47 .Build())
48 .Build())
49 .Build());
48 scoped_ptr<base::DictionaryValue> bad_manifest_value( 50 scoped_ptr<base::DictionaryValue> bad_manifest_value(
49 bad_manifest_builder.Build()); 51 bad_manifest_builder.Build());
50 52
51 // Create a good manifest by extending the bad one with the missing 53 // Create a good manifest by extending the bad one with the missing
52 // permission. 54 // permission.
53 extensions::DictionaryBuilder good_manifest_builder( 55 extensions::DictionaryBuilder good_manifest_builder(*bad_manifest_value);
54 *make_scoped_ptr(bad_manifest_value->DeepCopy()).get());
55 good_manifest_builder.Set( 56 good_manifest_builder.Set(
56 "permissions", 57 "permissions",
57 std::move(extensions::ListBuilder().Append("fileBrowserHandler"))); 58 extensions::ListBuilder().Append("fileBrowserHandler").Build());
58 59
59 extensions::ExtensionBuilder bad_app_builder; 60 extensions::ExtensionBuilder bad_app_builder;
60 bad_app_builder.SetManifest(std::move(bad_manifest_value)); 61 bad_app_builder.SetManifest(std::move(bad_manifest_value));
61 scoped_refptr<extensions::Extension> bad_app(bad_app_builder.Build()); 62 scoped_refptr<extensions::Extension> bad_app(bad_app_builder.Build());
62 EXPECT_FALSE(FileBrowserHandler::GetHandlers(bad_app.get())); 63 EXPECT_FALSE(FileBrowserHandler::GetHandlers(bad_app.get()));
63 64
64 extensions::ExtensionBuilder good_app_builder; 65 extensions::ExtensionBuilder good_app_builder;
65 good_app_builder.SetManifest(std::move(good_manifest_builder)); 66 good_app_builder.SetManifest(good_manifest_builder.Build());
66 scoped_refptr<extensions::Extension> good_app(good_app_builder.Build()); 67 scoped_refptr<extensions::Extension> good_app(good_app_builder.Build());
67 EXPECT_TRUE(FileBrowserHandler::GetHandlers(good_app.get())); 68 EXPECT_TRUE(FileBrowserHandler::GetHandlers(good_app.get()));
68 } 69 }
69 70
70 TEST_F(FileBrowserHandlerManifestTest, InvalidFileBrowserHandlers) { 71 TEST_F(FileBrowserHandlerManifestTest, InvalidFileBrowserHandlers) {
71 Testcase testcases[] = { 72 Testcase testcases[] = {
72 Testcase("filebrowser_invalid_access_permission.json", 73 Testcase("filebrowser_invalid_access_permission.json",
73 extensions::ErrorUtils::FormatErrorMessage( 74 extensions::ErrorUtils::FormatErrorMessage(
74 errors::kInvalidFileAccessValue, base::IntToString(1))), 75 errors::kInvalidFileAccessValue, base::IntToString(1))),
75 Testcase("filebrowser_invalid_access_permission_list.json", 76 Testcase("filebrowser_invalid_access_permission_list.json",
(...skipping 21 matching lines...) Expand all
97 RunTestcases(testcases, arraysize(testcases), EXPECT_TYPE_ERROR); 98 RunTestcases(testcases, arraysize(testcases), EXPECT_TYPE_ERROR);
98 RunTestcase(Testcase("filebrowser_missing_permission.json", 99 RunTestcase(Testcase("filebrowser_missing_permission.json",
99 errors::kInvalidFileBrowserHandlerMissingPermission), 100 errors::kInvalidFileBrowserHandlerMissingPermission),
100 EXPECT_TYPE_WARNING); 101 EXPECT_TYPE_WARNING);
101 } 102 }
102 103
103 TEST_F(FileBrowserHandlerManifestTest, ValidFileBrowserHandler) { 104 TEST_F(FileBrowserHandlerManifestTest, ValidFileBrowserHandler) {
104 scoped_refptr<const Extension> extension = 105 scoped_refptr<const Extension> extension =
105 ExtensionBuilder() 106 ExtensionBuilder()
106 .SetManifest( 107 .SetManifest(
107 std::move(DictionaryBuilder() 108 DictionaryBuilder()
108 .Set("name", "file browser handler test") 109 .Set("name", "file browser handler test")
109 .Set("version", "1.0.0") 110 .Set("version", "1.0.0")
110 .Set("manifest_version", 2) 111 .Set("manifest_version", 2)
111 .Set("permissions", 112 .Set("permissions", extensions::ListBuilder()
112 std::move(extensions::ListBuilder().Append( 113 .Append("fileBrowserHandler")
113 "fileBrowserHandler"))) 114 .Build())
114 .Set("file_browser_handlers", 115 .Set("file_browser_handlers",
115 std::move(ListBuilder().Append(std::move( 116 ListBuilder()
116 DictionaryBuilder() 117 .Append(DictionaryBuilder()
117 .Set("id", "ExtremelyCoolAction") 118 .Set("id", "ExtremelyCoolAction")
118 .Set("default_title", "Be Amazed") 119 .Set("default_title", "Be Amazed")
119 .Set("default_icon", "icon.png") 120 .Set("default_icon", "icon.png")
120 .Set("file_filters", 121 .Set("file_filters",
121 std::move(ListBuilder().Append( 122 ListBuilder()
122 "filesystem:*.txt"))))))))) 123 .Append("filesystem:*.txt")
124 .Build())
125 .Build())
126 .Build())
127 .Build())
123 .Build(); 128 .Build();
124 129
125 ASSERT_TRUE(extension.get()); 130 ASSERT_TRUE(extension.get());
126 FileBrowserHandler::List* handlers = 131 FileBrowserHandler::List* handlers =
127 FileBrowserHandler::GetHandlers(extension.get()); 132 FileBrowserHandler::GetHandlers(extension.get());
128 ASSERT_TRUE(handlers != NULL); 133 ASSERT_TRUE(handlers != NULL);
129 ASSERT_EQ(1U, handlers->size()); 134 ASSERT_EQ(1U, handlers->size());
130 const FileBrowserHandler* action = handlers->at(0).get(); 135 const FileBrowserHandler* action = handlers->at(0).get();
131 136
132 EXPECT_EQ("ExtremelyCoolAction", action->id()); 137 EXPECT_EQ("ExtremelyCoolAction", action->id());
133 EXPECT_EQ("Be Amazed", action->title()); 138 EXPECT_EQ("Be Amazed", action->title());
134 EXPECT_EQ("icon.png", action->icon_path()); 139 EXPECT_EQ("icon.png", action->icon_path());
135 const extensions::URLPatternSet& patterns = action->file_url_patterns(); 140 const extensions::URLPatternSet& patterns = action->file_url_patterns();
136 ASSERT_EQ(1U, patterns.patterns().size()); 141 ASSERT_EQ(1U, patterns.patterns().size());
137 EXPECT_TRUE(action->MatchesURL( 142 EXPECT_TRUE(action->MatchesURL(
138 GURL("filesystem:chrome-extension://foo/local/test.txt"))); 143 GURL("filesystem:chrome-extension://foo/local/test.txt")));
139 EXPECT_FALSE(action->HasCreateAccessPermission()); 144 EXPECT_FALSE(action->HasCreateAccessPermission());
140 EXPECT_TRUE(action->CanRead()); 145 EXPECT_TRUE(action->CanRead());
141 EXPECT_TRUE(action->CanWrite()); 146 EXPECT_TRUE(action->CanWrite());
142 } 147 }
143 148
144 TEST_F(FileBrowserHandlerManifestTest, ValidFileBrowserHandlerMIMETypes) { 149 TEST_F(FileBrowserHandlerManifestTest, ValidFileBrowserHandlerMIMETypes) {
145 scoped_refptr<const Extension> extension = 150 scoped_refptr<const Extension> extension =
146 ExtensionBuilder() 151 ExtensionBuilder()
147 .SetID(extension_misc::kQuickOfficeExtensionId) 152 .SetID(extension_misc::kQuickOfficeExtensionId)
148 .SetManifest( 153 .SetManifest(
149 std::move(DictionaryBuilder() 154 DictionaryBuilder()
150 .Set("name", "file browser handler test") 155 .Set("name", "file browser handler test")
151 .Set("version", "1.0.0") 156 .Set("version", "1.0.0")
152 .Set("manifest_version", 2) 157 .Set("manifest_version", 2)
153 .Set("permissions", 158 .Set("permissions", extensions::ListBuilder()
154 std::move(extensions::ListBuilder().Append( 159 .Append("fileBrowserHandler")
155 "fileBrowserHandler"))) 160 .Build())
156 .Set("file_browser_handlers", 161 .Set("file_browser_handlers",
157 std::move(ListBuilder().Append(std::move( 162 ListBuilder()
158 DictionaryBuilder() 163 .Append(DictionaryBuilder()
159 .Set("id", "ID") 164 .Set("id", "ID")
160 .Set("default_title", "Default title") 165 .Set("default_title", "Default title")
161 .Set("default_icon", "icon.png") 166 .Set("default_icon", "icon.png")
162 .Set("file_filters", 167 .Set("file_filters",
163 std::move(ListBuilder().Append( 168 ListBuilder()
164 "filesystem:*.txt"))))))))) 169 .Append("filesystem:*.txt")
170 .Build())
171 .Build())
172 .Build())
173 .Build())
165 .Build(); 174 .Build();
166 175
167 ASSERT_TRUE(extension.get()); 176 ASSERT_TRUE(extension.get());
168 FileBrowserHandler::List* handlers = 177 FileBrowserHandler::List* handlers =
169 FileBrowserHandler::GetHandlers(extension.get()); 178 FileBrowserHandler::GetHandlers(extension.get());
170 ASSERT_TRUE(handlers != NULL); 179 ASSERT_TRUE(handlers != NULL);
171 ASSERT_EQ(1U, handlers->size()); 180 ASSERT_EQ(1U, handlers->size());
172 const FileBrowserHandler* action = handlers->at(0).get(); 181 const FileBrowserHandler* action = handlers->at(0).get();
173 182
174 const extensions::URLPatternSet& patterns = action->file_url_patterns(); 183 const extensions::URLPatternSet& patterns = action->file_url_patterns();
175 ASSERT_EQ(1U, patterns.patterns().size()); 184 ASSERT_EQ(1U, patterns.patterns().size());
176 EXPECT_TRUE(action->MatchesURL( 185 EXPECT_TRUE(action->MatchesURL(
177 GURL("filesystem:chrome-extension://foo/local/test.txt"))); 186 GURL("filesystem:chrome-extension://foo/local/test.txt")));
178 } 187 }
179 188
180 TEST_F(FileBrowserHandlerManifestTest, ValidFileBrowserHandlerWithCreate) { 189 TEST_F(FileBrowserHandlerManifestTest, ValidFileBrowserHandlerWithCreate) {
181 scoped_refptr<const Extension> extension = 190 scoped_refptr<const Extension> extension =
182 ExtensionBuilder() 191 ExtensionBuilder()
183 .SetManifest( 192 .SetManifest(
184 std::move(DictionaryBuilder() 193 DictionaryBuilder()
185 .Set("name", "file browser handler test create") 194 .Set("name", "file browser handler test create")
186 .Set("version", "1.0.0") 195 .Set("version", "1.0.0")
187 .Set("manifest_version", 2) 196 .Set("manifest_version", 2)
188 .Set("permissions", 197 .Set("permissions", extensions::ListBuilder()
189 std::move(extensions::ListBuilder().Append( 198 .Append("fileBrowserHandler")
190 "fileBrowserHandler"))) 199 .Build())
191 .Set("file_browser_handlers", 200 .Set("file_browser_handlers",
192 std::move(ListBuilder().Append(std::move( 201 ListBuilder()
193 DictionaryBuilder() 202 .Append(
194 .Set("id", "ID") 203 DictionaryBuilder()
195 .Set("default_title", "Default title") 204 .Set("id", "ID")
196 .Set("default_icon", "icon.png") 205 .Set("default_title", "Default title")
197 .Set("file_filters", 206 .Set("default_icon", "icon.png")
198 std::move(ListBuilder().Append( 207 .Set("file_filters",
199 "filesystem:*.txt"))) 208 ListBuilder()
200 .Set("file_access", 209 .Append("filesystem:*.txt")
201 std::move(ListBuilder().Append( 210 .Build())
202 "create"))))))))) 211 .Set("file_access",
212 ListBuilder().Append("create").Build())
213 .Build())
214 .Build())
215 .Build())
203 .Build(); 216 .Build();
204 217
205 ASSERT_TRUE(extension.get()); 218 ASSERT_TRUE(extension.get());
206 FileBrowserHandler::List* handlers = 219 FileBrowserHandler::List* handlers =
207 FileBrowserHandler::GetHandlers(extension.get()); 220 FileBrowserHandler::GetHandlers(extension.get());
208 ASSERT_TRUE(handlers != NULL); 221 ASSERT_TRUE(handlers != NULL);
209 ASSERT_EQ(1U, handlers->size()); 222 ASSERT_EQ(1U, handlers->size());
210 const FileBrowserHandler* action = handlers->at(0).get(); 223 const FileBrowserHandler* action = handlers->at(0).get();
211 const extensions::URLPatternSet& patterns = action->file_url_patterns(); 224 const extensions::URLPatternSet& patterns = action->file_url_patterns();
212 225
213 EXPECT_EQ(0U, patterns.patterns().size()); 226 EXPECT_EQ(0U, patterns.patterns().size());
214 EXPECT_TRUE(action->HasCreateAccessPermission()); 227 EXPECT_TRUE(action->HasCreateAccessPermission());
215 EXPECT_FALSE(action->CanRead()); 228 EXPECT_FALSE(action->CanRead());
216 EXPECT_FALSE(action->CanWrite()); 229 EXPECT_FALSE(action->CanWrite());
217 } 230 }
218 231
219 } // namespace 232 } // namespace
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698