| OLD | NEW |
| 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 Loading... |
| 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 Loading... |
| 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 |
| OLD | NEW |