1d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen// Copyright 2014 The Chromium Authors. All rights reserved.
2d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen// Use of this source code is governed by a BSD-style license that can be
3d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen// found in the LICENSE file.
4d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
5d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen#include "extensions/common/manifest_constants.h"
6d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen#include "extensions/common/manifest_handlers/file_handler_info.h"
7d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen#include "extensions/common/manifest_test.h"
8d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen#include "testing/gtest/include/gtest/gtest.h"
9d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
10d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chennamespace extensions {
11d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
12d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chennamespace errors = manifest_errors;
13d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
14d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chentypedef ManifestTest FileHandlersManifestTest;
15d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
16d7955ce24d294fb2014c59d11fca184471056f44Shuyi ChenTEST_F(FileHandlersManifestTest, InvalidFileHandlers) {
17d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen  Testcase testcases[] = {
18d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    Testcase("file_handlers_invalid_handlers.json",
19d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen             errors::kInvalidFileHandlers),
20d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    Testcase("file_handlers_invalid_type.json",
21d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen             errors::kInvalidFileHandlerType),
22d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    Testcase("file_handlers_invalid_extension.json",
23d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen             errors::kInvalidFileHandlerExtension),
24d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    Testcase("file_handlers_invalid_no_type_or_extension.json",
25d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen             errors::kInvalidFileHandlerNoTypeOrExtension),
26d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    Testcase("file_handlers_invalid_type_element.json",
27d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen             errors::kInvalidFileHandlerTypeElement),
28d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    Testcase("file_handlers_invalid_extension_element.json",
29d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen             errors::kInvalidFileHandlerExtensionElement),
30d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    Testcase("file_handlers_invalid_too_many.json",
31d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen             errors::kInvalidFileHandlersTooManyTypesAndExtensions),
32d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen  };
33d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen  RunTestcases(testcases, arraysize(testcases), EXPECT_TYPE_ERROR);
34d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen}
35d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
36d7955ce24d294fb2014c59d11fca184471056f44Shuyi ChenTEST_F(FileHandlersManifestTest, ValidFileHandlers) {
37d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen  scoped_refptr<const Extension> extension =
38d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen      LoadAndExpectSuccess("file_handlers_valid.json");
39d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
40d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen  ASSERT_TRUE(extension.get());
41d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen  const FileHandlersInfo* handlers =
42d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen      FileHandlers::GetFileHandlers(extension.get());
43d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen  ASSERT_TRUE(handlers != NULL);
44d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen  ASSERT_EQ(2U, handlers->size());
45d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
46d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen  FileHandlerInfo handler = handlers->at(0);
47d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen  EXPECT_EQ("image", handler.id);
48d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen  EXPECT_EQ(1U, handler.types.size());
49d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen  EXPECT_EQ(1U, handler.types.count("image/*"));
50d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen  EXPECT_EQ(2U, handler.extensions.size());
51d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen  EXPECT_EQ(1U, handler.extensions.count(".png"));
52d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen  EXPECT_EQ(1U, handler.extensions.count(".gif"));
53d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
54d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen  handler = handlers->at(1);
55d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen  EXPECT_EQ("text", handler.id);
56d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen  EXPECT_EQ(1U, handler.types.size());
57d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen  EXPECT_EQ(1U, handler.types.count("text/*"));
58d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen  EXPECT_EQ(0U, handler.extensions.size());
59d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen}
60d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
61d7955ce24d294fb2014c59d11fca184471056f44Shuyi ChenTEST_F(FileHandlersManifestTest, NotPlatformApp) {
62d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen  // This should load successfully but have the file handlers ignored.
63d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen  scoped_refptr<const Extension> extension =
64      LoadAndExpectSuccess("file_handlers_invalid_not_app.json");
65
66  ASSERT_TRUE(extension.get());
67  const FileHandlersInfo* handlers =
68      FileHandlers::GetFileHandlers(extension.get());
69  ASSERT_TRUE(handlers == NULL);
70}
71
72}  // namespace extensions
73