Enable PPAPI tests for non-SFI mode.
[chromium-blink-merge.git] / chrome / utility / extensions / unpacker_unittest.cc
blob0eedf89468378394ae500aa20f7707549fce586a
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.
5 #include "base/file_util.h"
6 #include "base/files/scoped_temp_dir.h"
7 #include "base/path_service.h"
8 #include "base/strings/string_util.h"
9 #include "base/strings/utf_string_conversions.h"
10 #include "base/values.h"
11 #include "chrome/common/chrome_paths.h"
12 #include "chrome/utility/extensions/unpacker.h"
13 #include "extensions/common/constants.h"
14 #include "extensions/common/extension.h"
15 #include "extensions/common/manifest_constants.h"
16 #include "testing/gtest/include/gtest/gtest.h"
17 #include "third_party/skia/include/core/SkBitmap.h"
19 using base::ASCIIToUTF16;
21 namespace extensions {
23 namespace errors = manifest_errors;
24 namespace keys = manifest_keys;
26 class UnpackerTest : public testing::Test {
27 public:
28 virtual ~UnpackerTest() {
29 LOG(WARNING) << "Deleting temp dir: "
30 << temp_dir_.path().LossyDisplayName();
31 LOG(WARNING) << temp_dir_.Delete();
34 void SetupUnpacker(const std::string& crx_name) {
35 base::FilePath original_path;
36 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &original_path));
37 original_path = original_path.AppendASCII("extensions")
38 .AppendASCII("unpacker")
39 .AppendASCII(crx_name);
40 ASSERT_TRUE(base::PathExists(original_path)) << original_path.value();
42 // Try bots won't let us write into DIR_TEST_DATA, so we have to create
43 // a temp folder to play in.
44 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir());
46 base::FilePath crx_path = temp_dir_.path().AppendASCII(crx_name);
47 ASSERT_TRUE(base::CopyFile(original_path, crx_path)) <<
48 "Original path " << original_path.value() <<
49 ", Crx path " << crx_path.value();
51 unpacker_.reset(new Unpacker(crx_path,
52 std::string(),
53 Manifest::INTERNAL,
54 Extension::NO_FLAGS));
57 protected:
58 base::ScopedTempDir temp_dir_;
59 scoped_ptr<Unpacker> unpacker_;
62 TEST_F(UnpackerTest, EmptyDefaultLocale) {
63 SetupUnpacker("empty_default_locale.crx");
64 EXPECT_FALSE(unpacker_->Run());
65 EXPECT_EQ(ASCIIToUTF16(errors::kInvalidDefaultLocale),
66 unpacker_->error_message());
69 TEST_F(UnpackerTest, HasDefaultLocaleMissingLocalesFolder) {
70 SetupUnpacker("has_default_missing_locales.crx");
71 EXPECT_FALSE(unpacker_->Run());
72 EXPECT_EQ(ASCIIToUTF16(errors::kLocalesTreeMissing),
73 unpacker_->error_message());
76 TEST_F(UnpackerTest, InvalidDefaultLocale) {
77 SetupUnpacker("invalid_default_locale.crx");
78 EXPECT_FALSE(unpacker_->Run());
79 EXPECT_EQ(ASCIIToUTF16(errors::kInvalidDefaultLocale),
80 unpacker_->error_message());
83 TEST_F(UnpackerTest, InvalidMessagesFile) {
84 SetupUnpacker("invalid_messages_file.crx");
85 EXPECT_FALSE(unpacker_->Run());
86 EXPECT_TRUE(MatchPattern(unpacker_->error_message(),
87 ASCIIToUTF16("*_locales?en_US?messages.json: Line: 2, column: 11,"
88 " Syntax error."))) << unpacker_->error_message();
91 TEST_F(UnpackerTest, MissingDefaultData) {
92 SetupUnpacker("missing_default_data.crx");
93 EXPECT_FALSE(unpacker_->Run());
94 EXPECT_EQ(ASCIIToUTF16(errors::kLocalesNoDefaultMessages),
95 unpacker_->error_message());
98 TEST_F(UnpackerTest, MissingDefaultLocaleHasLocalesFolder) {
99 SetupUnpacker("missing_default_has_locales.crx");
100 EXPECT_FALSE(unpacker_->Run());
101 EXPECT_EQ(ASCIIToUTF16(errors::kLocalesNoDefaultLocaleSpecified),
102 unpacker_->error_message());
105 TEST_F(UnpackerTest, MissingMessagesFile) {
106 SetupUnpacker("missing_messages_file.crx");
107 EXPECT_FALSE(unpacker_->Run());
108 EXPECT_TRUE(MatchPattern(unpacker_->error_message(),
109 ASCIIToUTF16(errors::kLocalesMessagesFileMissing) +
110 ASCIIToUTF16("*_locales?en_US?messages.json")));
113 TEST_F(UnpackerTest, NoLocaleData) {
114 SetupUnpacker("no_locale_data.crx");
115 EXPECT_FALSE(unpacker_->Run());
116 EXPECT_EQ(ASCIIToUTF16(errors::kLocalesNoDefaultMessages),
117 unpacker_->error_message());
120 TEST_F(UnpackerTest, GoodL10n) {
121 SetupUnpacker("good_l10n.crx");
122 EXPECT_TRUE(unpacker_->Run());
123 EXPECT_TRUE(unpacker_->error_message().empty());
124 ASSERT_EQ(2U, unpacker_->parsed_catalogs()->size());
127 TEST_F(UnpackerTest, NoL10n) {
128 SetupUnpacker("no_l10n.crx");
129 EXPECT_TRUE(unpacker_->Run());
130 EXPECT_TRUE(unpacker_->error_message().empty());
131 EXPECT_EQ(0U, unpacker_->parsed_catalogs()->size());
134 TEST_F(UnpackerTest, UnzipDirectoryError) {
135 const char* kExpected = "Could not create directory for unzipping: ";
136 SetupUnpacker("good_package.crx");
137 base::FilePath path =
138 temp_dir_.path().AppendASCII(kTempExtensionName);
139 ASSERT_TRUE(base::WriteFile(path, "foo", 3));
140 EXPECT_FALSE(unpacker_->Run());
141 EXPECT_TRUE(StartsWith(unpacker_->error_message(),
142 ASCIIToUTF16(kExpected),
143 false)) << "Expected prefix: \"" << kExpected
144 << "\", actual error: \"" << unpacker_->error_message()
145 << "\"";
148 TEST_F(UnpackerTest, UnzipError) {
149 const char* kExpected = "Could not unzip extension";
150 SetupUnpacker("bad_zip.crx");
151 EXPECT_FALSE(unpacker_->Run());
152 EXPECT_EQ(ASCIIToUTF16(kExpected), unpacker_->error_message());
155 TEST_F(UnpackerTest, BadPathError) {
156 const char* kExpected = "Illegal path (absolute or relative with '..'): ";
157 SetupUnpacker("bad_path.crx");
158 EXPECT_FALSE(unpacker_->Run());
159 EXPECT_TRUE(StartsWith(unpacker_->error_message(),
160 ASCIIToUTF16(kExpected),
161 false)) << "Expected prefix: \"" << kExpected
162 << "\", actual error: \"" << unpacker_->error_message()
163 << "\"";
167 TEST_F(UnpackerTest, ImageDecodingError) {
168 const char* kExpected = "Could not decode image: ";
169 SetupUnpacker("bad_image.crx");
170 EXPECT_FALSE(unpacker_->Run());
171 EXPECT_TRUE(StartsWith(unpacker_->error_message(),
172 ASCIIToUTF16(kExpected),
173 false)) << "Expected prefix: \"" << kExpected
174 << "\", actual error: \"" << unpacker_->error_message()
175 << "\"";
178 } // namespace extensions