1 // Copyright 2014 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 "chrome/common/extensions/manifest_tests/extension_manifest_test.h" 6 #include "extensions/common/manifest_constants.h" 7 #include "extensions/common/manifest_handlers/file_handler_info.h" 8 #include "testing/gtest/include/gtest/gtest.h" 9 10 namespace extensions { 11 12 namespace errors = manifest_errors; 13 14 class FileHandlersManifestTest : public ExtensionManifestTest { 15 }; 16 17 TEST_F(FileHandlersManifestTest, InvalidFileHandlers) { 18 Testcase testcases[] = { 19 Testcase("file_handlers_invalid_handlers.json", 20 errors::kInvalidFileHandlers), 21 Testcase("file_handlers_invalid_type.json", 22 errors::kInvalidFileHandlerType), 23 Testcase("file_handlers_invalid_extension.json", 24 errors::kInvalidFileHandlerExtension), 25 Testcase("file_handlers_invalid_no_type_or_extension.json", 26 errors::kInvalidFileHandlerNoTypeOrExtension), 27 Testcase("file_handlers_invalid_title.json", 28 errors::kInvalidFileHandlerTitle), 29 Testcase("file_handlers_invalid_type_element.json", 30 errors::kInvalidFileHandlerTypeElement), 31 Testcase("file_handlers_invalid_extension_element.json", 32 errors::kInvalidFileHandlerExtensionElement), 33 Testcase("file_handlers_invalid_too_many.json", 34 errors::kInvalidFileHandlersTooManyTypesAndExtensions), 35 }; 36 RunTestcases(testcases, arraysize(testcases), EXPECT_TYPE_ERROR); 37 } 38 39 TEST_F(FileHandlersManifestTest, ValidFileHandlers) { 40 scoped_refptr<const Extension> extension = 41 LoadAndExpectSuccess("file_handlers_valid.json"); 42 43 ASSERT_TRUE(extension.get()); 44 const FileHandlersInfo* handlers = FileHandlers::GetFileHandlers(extension); 45 ASSERT_TRUE(handlers != NULL); 46 ASSERT_EQ(2U, handlers->size()); 47 48 FileHandlerInfo handler = handlers->at(0); 49 EXPECT_EQ("image", handler.id); 50 EXPECT_EQ("Image editor", handler.title); 51 EXPECT_EQ(1U, handler.types.size()); 52 EXPECT_EQ(1U, handler.types.count("image/*")); 53 EXPECT_EQ(2U, handler.extensions.size()); 54 EXPECT_EQ(1U, handler.extensions.count(".png")); 55 EXPECT_EQ(1U, handler.extensions.count(".gif")); 56 57 handler = handlers->at(1); 58 EXPECT_EQ("text", handler.id); 59 EXPECT_EQ("Text editor", handler.title); 60 EXPECT_EQ(1U, handler.types.size()); 61 EXPECT_EQ(1U, handler.types.count("text/*")); 62 EXPECT_EQ(0U, handler.extensions.size()); 63 } 64 65 TEST_F(FileHandlersManifestTest, NotPlatformApp) { 66 // This should load successfully but have the file handlers ignored. 67 scoped_refptr<const Extension> extension = 68 LoadAndExpectSuccess("file_handlers_invalid_not_app.json"); 69 70 ASSERT_TRUE(extension.get()); 71 const FileHandlersInfo* handlers = FileHandlers::GetFileHandlers(extension); 72 ASSERT_TRUE(handlers == NULL); 73 } 74 75 } // namespace extensions 76