// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "chrome/common/extensions/chrome_extensions_client.h" #include #include #include "base/path_service.h" #include "chrome/common/chrome_paths.h" #include "extensions/common/extension.h" #include "extensions/common/file_util.h" #include "extensions/common/manifest.h" #include "testing/gtest/include/gtest/gtest.h" namespace extensions { class ChromeExtensionsClientTest : public testing::Test { public: void SetUp() override { extensions_client_.reset(new ChromeExtensionsClient()); ExtensionsClient::Set(extensions_client_.get()); } private: scoped_ptr extensions_client_; }; // Test that a browser action extension returns a path to an icon. TEST_F(ChromeExtensionsClientTest, GetBrowserImagePaths) { base::FilePath install_dir; ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &install_dir)); install_dir = install_dir.AppendASCII("extensions") .AppendASCII("api_test") .AppendASCII("browser_action") .AppendASCII("basics"); std::string error; scoped_refptr extension(file_util::LoadExtension( install_dir, Manifest::UNPACKED, Extension::NO_FLAGS, &error)); ASSERT_TRUE(extension.get()); // The extension contains one icon. std::set paths = ExtensionsClient::Get()->GetBrowserImagePaths(extension.get()); ASSERT_EQ(1u, paths.size()); EXPECT_EQ("icon.png", paths.begin()->BaseName().AsUTF8Unsafe()); } // Test that extensions with zero-length action icons will not load. TEST_F(ChromeExtensionsClientTest, CheckZeroLengthActionIconFiles) { base::FilePath install_dir; ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &install_dir)); // Try to install an extension with a zero-length browser action icon file. base::FilePath ext_dir = install_dir.AppendASCII("extensions") .AppendASCII("bad") .AppendASCII("Extensions") .AppendASCII("gggggggggggggggggggggggggggggggg"); std::string error; scoped_refptr extension2(file_util::LoadExtension( ext_dir, Manifest::UNPACKED, Extension::NO_FLAGS, &error)); EXPECT_FALSE(extension2.get()); EXPECT_STREQ("Could not load icon 'icon.png' for browser action.", error.c_str()); // Try to install an extension with a zero-length page action icon file. ext_dir = install_dir.AppendASCII("extensions") .AppendASCII("bad") .AppendASCII("Extensions") .AppendASCII("hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh"); scoped_refptr extension3(file_util::LoadExtension( ext_dir, Manifest::UNPACKED, Extension::NO_FLAGS, &error)); EXPECT_FALSE(extension3.get()); EXPECT_STREQ("Could not load icon 'icon.png' for page action.", error.c_str()); } } // namespace extensions