| OLD | NEW |
| (Empty) |
| 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 | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 #include "base/strings/string_number_conversions.h" | |
| 6 #include "chrome/browser/chromeos/extensions/file_browser_handler.h" | |
| 7 #include "chrome/common/extensions/extension_builder.h" | |
| 8 #include "chrome/common/extensions/extension_manifest_constants.h" | |
| 9 #include "chrome/common/extensions/manifest_tests/extension_manifest_test.h" | |
| 10 #include "chrome/common/extensions/manifest_url_handler.h" | |
| 11 #include "chrome/common/extensions/value_builder.h" | |
| 12 #include "extensions/common/error_utils.h" | |
| 13 #include "testing/gtest/include/gtest/gtest.h" | |
| 14 | |
| 15 namespace errors = extension_manifest_errors; | |
| 16 | |
| 17 using extensions::DictionaryBuilder; | |
| 18 using extensions::Extension; | |
| 19 using extensions::ExtensionBuilder; | |
| 20 using extensions::ListBuilder; | |
| 21 | |
| 22 namespace { | |
| 23 | |
| 24 class FileBrowserHandlerManifestTest : public ExtensionManifestTest { | |
| 25 virtual void SetUp() OVERRIDE { | |
| 26 ExtensionManifestTest::SetUp(); | |
| 27 (new FileBrowserHandlerParser)->Register(); | |
| 28 (new extensions::URLOverridesHandler)->Register(); | |
| 29 } | |
| 30 }; | |
| 31 | |
| 32 TEST_F(FileBrowserHandlerManifestTest, InvalidFileBrowserHandlers) { | |
| 33 Testcase testcases[] = { | |
| 34 Testcase("filebrowser_invalid_access_permission.json", | |
| 35 extensions::ErrorUtils::FormatErrorMessage( | |
| 36 errors::kInvalidFileAccessValue, base::IntToString(1))), | |
| 37 Testcase("filebrowser_invalid_access_permission_list.json", | |
| 38 errors::kInvalidFileAccessList), | |
| 39 Testcase("filebrowser_invalid_empty_access_permission_list.json", | |
| 40 errors::kInvalidFileAccessList), | |
| 41 Testcase("filebrowser_invalid_actions_1.json", | |
| 42 errors::kInvalidFileBrowserHandler), | |
| 43 Testcase("filebrowser_invalid_actions_2.json", | |
| 44 errors::kInvalidFileBrowserHandler), | |
| 45 Testcase("filebrowser_invalid_action_id.json", | |
| 46 errors::kInvalidPageActionId), | |
| 47 Testcase("filebrowser_invalid_action_title.json", | |
| 48 errors::kInvalidPageActionDefaultTitle), | |
| 49 Testcase("filebrowser_invalid_file_filters_1.json", | |
| 50 errors::kInvalidFileFiltersList), | |
| 51 Testcase("filebrowser_invalid_file_filters_2.json", | |
| 52 extensions::ErrorUtils::FormatErrorMessage( | |
| 53 errors::kInvalidFileFilterValue, base::IntToString(0))), | |
| 54 Testcase("filebrowser_invalid_file_filters_url.json", | |
| 55 extensions::ErrorUtils::FormatErrorMessage( | |
| 56 errors::kInvalidURLPatternError, "http:*.html")) | |
| 57 }; | |
| 58 RunTestcases(testcases, arraysize(testcases), EXPECT_TYPE_ERROR); | |
| 59 } | |
| 60 | |
| 61 TEST_F(FileBrowserHandlerManifestTest, ValidFileBrowserHandler) { | |
| 62 scoped_refptr<const Extension> extension = | |
| 63 ExtensionBuilder() | |
| 64 .SetManifest(DictionaryBuilder() | |
| 65 .Set("name", "file browser handler test") | |
| 66 .Set("version", "1.0.0") | |
| 67 .Set("manifest_version", 2) | |
| 68 .Set("file_browser_handlers", ListBuilder() | |
| 69 .Append(DictionaryBuilder() | |
| 70 .Set("id", "ExtremelyCoolAction") | |
| 71 .Set("default_title", "Be Amazed") | |
| 72 .Set("default_icon", "icon.png") | |
| 73 .Set("file_filters", ListBuilder() | |
| 74 .Append("filesystem:*.txt"))))) | |
| 75 .Build(); | |
| 76 | |
| 77 ASSERT_TRUE(extension.get()); | |
| 78 FileBrowserHandler::List* handlers = | |
| 79 FileBrowserHandler::GetHandlers(extension); | |
| 80 ASSERT_TRUE(handlers != NULL); | |
| 81 ASSERT_EQ(handlers->size(), 1U); | |
| 82 const FileBrowserHandler* action = handlers->at(0).get(); | |
| 83 | |
| 84 EXPECT_EQ(action->id(), "ExtremelyCoolAction"); | |
| 85 EXPECT_EQ(action->title(), "Be Amazed"); | |
| 86 EXPECT_EQ(action->icon_path(), "icon.png"); | |
| 87 const extensions::URLPatternSet& patterns = action->file_url_patterns(); | |
| 88 ASSERT_EQ(patterns.patterns().size(), 1U); | |
| 89 EXPECT_TRUE(action->MatchesURL( | |
| 90 GURL("filesystem:chrome-extension://foo/local/test.txt"))); | |
| 91 EXPECT_FALSE(action->HasCreateAccessPermission()); | |
| 92 EXPECT_TRUE(action->CanRead()); | |
| 93 EXPECT_TRUE(action->CanWrite()); | |
| 94 } | |
| 95 | |
| 96 TEST_F(FileBrowserHandlerManifestTest, ValidFileBrowserHandlerMIMETypes) { | |
| 97 scoped_refptr<const Extension> extension = | |
| 98 ExtensionBuilder() | |
| 99 .SetID(extension_misc::kQuickOfficeExtensionId) | |
| 100 .SetManifest(DictionaryBuilder() | |
| 101 .Set("name", "file browser handler test") | |
| 102 .Set("version", "1.0.0") | |
| 103 .Set("manifest_version", 2) | |
| 104 .Set("file_browser_handlers", ListBuilder() | |
| 105 .Append(DictionaryBuilder() | |
| 106 .Set("id", "ID") | |
| 107 .Set("default_title", "Default title") | |
| 108 .Set("default_icon", "icon.png") | |
| 109 .Set("file_filters", ListBuilder() | |
| 110 .Append("filesystem:*.txt"))))) | |
| 111 .Build(); | |
| 112 | |
| 113 ASSERT_TRUE(extension.get()); | |
| 114 FileBrowserHandler::List* handlers = | |
| 115 FileBrowserHandler::GetHandlers(extension); | |
| 116 ASSERT_TRUE(handlers != NULL); | |
| 117 ASSERT_EQ(handlers->size(), 1U); | |
| 118 const FileBrowserHandler* action = handlers->at(0).get(); | |
| 119 | |
| 120 const extensions::URLPatternSet& patterns = action->file_url_patterns(); | |
| 121 ASSERT_EQ(patterns.patterns().size(), 1U); | |
| 122 EXPECT_TRUE(action->MatchesURL( | |
| 123 GURL("filesystem:chrome-extension://foo/local/test.txt"))); | |
| 124 } | |
| 125 | |
| 126 TEST_F(FileBrowserHandlerManifestTest, ValidFileBrowserHandlerWithCreate) { | |
| 127 scoped_refptr<const Extension> extension = | |
| 128 ExtensionBuilder() | |
| 129 .SetManifest(DictionaryBuilder() | |
| 130 .Set("name", "file browser handler test create") | |
| 131 .Set("version", "1.0.0") | |
| 132 .Set("manifest_version", 2) | |
| 133 .Set("file_browser_handlers", ListBuilder() | |
| 134 .Append(DictionaryBuilder() | |
| 135 .Set("id", "ID") | |
| 136 .Set("default_title", "Default title") | |
| 137 .Set("default_icon", "icon.png") | |
| 138 .Set("file_filters", ListBuilder() | |
| 139 .Append("filesystem:*.txt")) | |
| 140 .Set("file_access", ListBuilder() | |
| 141 .Append("create"))))) | |
| 142 .Build(); | |
| 143 | |
| 144 ASSERT_TRUE(extension.get()); | |
| 145 FileBrowserHandler::List* handlers = | |
| 146 FileBrowserHandler::GetHandlers(extension); | |
| 147 ASSERT_TRUE(handlers != NULL); | |
| 148 ASSERT_EQ(handlers->size(), 1U); | |
| 149 const FileBrowserHandler* action = handlers->at(0).get(); | |
| 150 const extensions::URLPatternSet& patterns = action->file_url_patterns(); | |
| 151 | |
| 152 EXPECT_EQ(patterns.patterns().size(), 0U); | |
| 153 EXPECT_TRUE(action->HasCreateAccessPermission()); | |
| 154 EXPECT_FALSE(action->CanRead()); | |
| 155 EXPECT_FALSE(action->CanWrite()); | |
| 156 } | |
| 157 | |
| 158 TEST_F(FileBrowserHandlerManifestTest, FileManagerURLOverride) { | |
| 159 scoped_ptr<DictionaryValue> manifest_value = | |
| 160 DictionaryBuilder() | |
| 161 .Set("name", "override_files") | |
| 162 .Set("version", "1.0.0") | |
| 163 .Set("manifest_version", 2) | |
| 164 .Set("chrome_url_overrides", DictionaryBuilder() | |
| 165 .Set("files", "main.html")) | |
| 166 .Build(); | |
| 167 | |
| 168 // Non component extensions can't ovverride chrome://files/ URL. | |
| 169 LoadAndExpectError(Manifest(manifest_value.get(), "override_files"), | |
| 170 errors::kInvalidChromeURLOverrides); | |
| 171 | |
| 172 // A component extention can override chrome://files/ URL. | |
| 173 std::string error; | |
| 174 LoadExtension(Manifest(manifest_value.get(), "override_files"), | |
| 175 &error, extensions::Manifest::COMPONENT, Extension::NO_FLAGS); | |
| 176 #if defined(FILE_MANAGER_EXTENSION) | |
| 177 EXPECT_EQ("", error); | |
| 178 #else | |
| 179 EXPECT_EQ(std::string(errors::kInvalidChromeURLOverrides), error); | |
| 180 #endif | |
| 181 } | |
| 182 | |
| 183 } // namespace | |
| OLD | NEW |