15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/extensions/extension_file_util.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#include <set> 81320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include <string> 9a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/path_service.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/chrome_paths.h" 12f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "extensions/common/extension.h" 13a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#include "extensions/common/file_util.h" 143551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "extensions/common/manifest.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochnamespace extensions { 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochtypedef testing::Test ExtensionFileUtilTest; 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch// Test that a browser action extension returns a path to an icon. 22a02191e04bc25c4935f804f2c080ae28663d096dBen MurdochTEST_F(ExtensionFileUtilTest, GetBrowserImagePaths) { 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath install_dir; 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &install_dir)); 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) install_dir = install_dir.AppendASCII("extensions") 26a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch .AppendASCII("api_test") 27a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch .AppendASCII("browser_action") 28a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch .AppendASCII("basics"); 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string error; 31a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch scoped_refptr<Extension> extension(file_util::LoadExtension( 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) install_dir, Manifest::UNPACKED, Extension::NO_FLAGS, &error)); 33a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch ASSERT_TRUE(extension.get()); 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 35a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // The extension contains one icon. 36a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch std::set<base::FilePath> paths = 37a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch extension_file_util::GetBrowserImagePaths(extension.get()); 38a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch ASSERT_EQ(1u, paths.size()); 39a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch EXPECT_EQ("icon.png", paths.begin()->BaseName().AsUTF8Unsafe()); 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Test that extensions with zero-length action icons will not load. 431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(ExtensionFileUtilTest, CheckZeroLengthActionIconFiles) { 441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::FilePath install_dir; 451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &install_dir)); 461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Try to install an extension with a zero-length browser action icon file. 481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::FilePath ext_dir = install_dir.AppendASCII("extensions") 491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci .AppendASCII("bad") 501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci .AppendASCII("Extensions") 511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci .AppendASCII("gggggggggggggggggggggggggggggggg"); 521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::string error; 541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_refptr<Extension> extension2(file_util::LoadExtension( 551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ext_dir, Manifest::UNPACKED, Extension::NO_FLAGS, &error)); 561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_FALSE(extension2.get()); 571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_STREQ("Could not load icon 'icon.png' for browser action.", 581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci error.c_str()); 591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Try to install an extension with a zero-length page action icon file. 611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ext_dir = install_dir.AppendASCII("extensions") 621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci .AppendASCII("bad") 631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci .AppendASCII("Extensions") 641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci .AppendASCII("hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh"); 651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_refptr<Extension> extension3(file_util::LoadExtension( 671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ext_dir, Manifest::UNPACKED, Extension::NO_FLAGS, &error)); 681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_FALSE(extension3.get()); 691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_STREQ("Could not load icon 'icon.png' for page action.", 701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci error.c_str()); 711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 73a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch} // namespace extensions 74