Move ImageLoaderTest to extensions_unittests

* Give it its own copy of its test data, instead of sharing with other
unrelated tests that live in src/chrome.
* Introduce ChromeComponentExtensionResourceManagerTest to address a TODO
and eliminate the src/chrome dependency.

BUG=397164
TEST=unit_tests, extensions_unittests

Review URL: https://codereview.chromium.org/439023002

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@287885 0039d316-1c4b-4281-b951-d872f2087c98
parent 2bb5a856
// Copyright 2014 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 "base/files/file_path.h"
#include "base/path_service.h"
#include "chrome/common/chrome_paths.h"
#include "extensions/browser/component_extension_resource_manager.h"
#include "extensions/browser/extensions_browser_client.h"
#include "extensions/common/constants.h"
#include "extensions/common/extension.h"
#include "extensions/common/extension_icon_set.h"
#include "extensions/common/extension_resource.h"
#include "extensions/common/file_util.h"
#include "extensions/common/manifest.h"
#include "extensions/common/manifest_handlers/icons_handler.h"
#include "testing/gtest/include/gtest/gtest.h"
#if defined(OS_CHROMEOS)
#include "ui/file_manager/grit/file_manager_resources.h"
#endif
namespace extensions {
typedef testing::Test ChromeComponentExtensionResourceManagerTest;
// Tests IsComponentExtensionResource function.
TEST_F(ChromeComponentExtensionResourceManagerTest,
IsComponentExtensionResource) {
ComponentExtensionResourceManager* resource_manager =
ExtensionsBrowserClient::Get()->GetComponentExtensionResourceManager();
ASSERT_TRUE(resource_manager);
// Get the extension test data path.
base::FilePath test_path;
ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &test_path));
test_path = test_path.AppendASCII("extensions").AppendASCII("file_manager");
// Load the manifest data.
std::string error;
scoped_ptr<base::DictionaryValue> manifest(file_util::LoadManifest(
test_path, FILE_PATH_LITERAL("app.json"), &error));
ASSERT_TRUE(manifest.get()) << error;
// Build a path inside Chrome's resources directory where a component
// extension might be installed.
base::FilePath resources_path;
ASSERT_TRUE(PathService::Get(chrome::DIR_RESOURCES, &resources_path));
resources_path = resources_path.AppendASCII("file_manager");
// Create a simulated component extension.
scoped_refptr<Extension> extension = Extension::Create(resources_path,
Manifest::COMPONENT,
*manifest,
Extension::NO_FLAGS,
&error);
ASSERT_TRUE(extension.get());
// Load one of the icons.
ExtensionResource resource =
IconsInfo::GetIconResource(extension.get(),
extension_misc::EXTENSION_ICON_BITTY,
ExtensionIconSet::MATCH_EXACTLY);
#if defined(OS_CHROMEOS)
// The resource is a component resource.
int resource_id = 0;
ASSERT_TRUE(resource_manager->IsComponentExtensionResource(
extension->path(), resource.relative_path(), &resource_id));
ASSERT_EQ(IDR_FILE_MANAGER_ICON_16, resource_id);
#endif
}
} // namespace extensions
...@@ -538,7 +538,6 @@ ...@@ -538,7 +538,6 @@
'../extensions/browser/extension_error_test_util.h', '../extensions/browser/extension_error_test_util.h',
'../extensions/browser/extension_icon_image_unittest.cc', '../extensions/browser/extension_icon_image_unittest.cc',
'../extensions/browser/extension_protocols_unittest.cc', '../extensions/browser/extension_protocols_unittest.cc',
'../extensions/browser/image_loader_unittest.cc',
'../extensions/browser/info_map_unittest.cc', '../extensions/browser/info_map_unittest.cc',
'../extensions/common/extension_l10n_util_unittest.cc', '../extensions/common/extension_l10n_util_unittest.cc',
'../extensions/common/extension_resource_unittest.cc', '../extensions/common/extension_resource_unittest.cc',
...@@ -925,6 +924,7 @@ ...@@ -925,6 +924,7 @@
'browser/extensions/bookmark_app_helper_unittest.cc', 'browser/extensions/bookmark_app_helper_unittest.cc',
'browser/extensions/browser_permissions_policy_delegate_unittest.cc', 'browser/extensions/browser_permissions_policy_delegate_unittest.cc',
'browser/extensions/chrome_app_sorting_unittest.cc', 'browser/extensions/chrome_app_sorting_unittest.cc',
'browser/extensions/chrome_component_extension_resource_manager_unittest.cc',
'browser/extensions/component_loader_unittest.cc', 'browser/extensions/component_loader_unittest.cc',
'browser/extensions/convert_user_script_unittest.cc', 'browser/extensions/convert_user_script_unittest.cc',
'browser/extensions/convert_web_app_unittest.cc', 'browser/extensions/convert_web_app_unittest.cc',
...@@ -2171,7 +2171,6 @@ ...@@ -2171,7 +2171,6 @@
}], }],
['chromeos==0', { ['chromeos==0', {
'sources!': [ 'sources!': [
'browser/extensions/image_loader_unittest.cc',
# TODO(zturner): Enable this on Windows. See # TODO(zturner): Enable this on Windows. See
# BrowserWithTestWindowTest::SetUp() for a comment explaining why # BrowserWithTestWindowTest::SetUp() for a comment explaining why
# this is broken. # this is broken.
......
...@@ -9,15 +9,14 @@ ...@@ -9,15 +9,14 @@
#include "base/message_loop/message_loop.h" #include "base/message_loop/message_loop.h"
#include "base/path_service.h" #include "base/path_service.h"
#include "base/strings/string_util.h" #include "base/strings/string_util.h"
#include "chrome/common/chrome_paths.h"
#include "content/public/browser/notification_service.h" #include "content/public/browser/notification_service.h"
#include "content/public/test/test_browser_thread.h" #include "content/public/test/test_browser_thread.h"
#include "extensions/browser/component_extension_resource_manager.h"
#include "extensions/browser/extensions_browser_client.h" #include "extensions/browser/extensions_browser_client.h"
#include "extensions/browser/notification_types.h" #include "extensions/browser/notification_types.h"
#include "extensions/common/constants.h" #include "extensions/common/constants.h"
#include "extensions/common/extension.h" #include "extensions/common/extension.h"
#include "extensions/common/extension_icon_set.h" #include "extensions/common/extension_icon_set.h"
#include "extensions/common/extension_paths.h"
#include "extensions/common/extension_resource.h" #include "extensions/common/extension_resource.h"
#include "extensions/common/manifest.h" #include "extensions/common/manifest.h"
#include "extensions/common/manifest_handlers/icons_handler.h" #include "extensions/common/manifest_handlers/icons_handler.h"
...@@ -28,16 +27,10 @@ ...@@ -28,16 +27,10 @@
#include "ui/gfx/image/image_skia.h" #include "ui/gfx/image/image_skia.h"
#include "ui/gfx/size.h" #include "ui/gfx/size.h"
#if defined(OS_CHROMEOS)
#include "ui/file_manager/grit/file_manager_resources.h"
#endif
using content::BrowserThread; using content::BrowserThread;
using extensions::Extension; using content::NotificationService;
using extensions::ExtensionResource;
using extensions::ImageLoader; namespace extensions {
using extensions::Manifest;
using extensions::UnloadedExtensionInfo;
class ImageLoaderTest : public testing::Test { class ImageLoaderTest : public testing::Test {
public: public:
...@@ -46,8 +39,8 @@ class ImageLoaderTest : public testing::Test { ...@@ -46,8 +39,8 @@ class ImageLoaderTest : public testing::Test {
quit_in_image_loaded_(false), quit_in_image_loaded_(false),
ui_thread_(BrowserThread::UI, &ui_loop_), ui_thread_(BrowserThread::UI, &ui_loop_),
file_thread_(BrowserThread::FILE), file_thread_(BrowserThread::FILE),
io_thread_(BrowserThread::IO) { io_thread_(BrowserThread::IO),
} notification_service_(NotificationService::Create()) {}
void OnImageLoaded(const gfx::Image& image) { void OnImageLoaded(const gfx::Image& image) {
image_loaded_count_++; image_loaded_count_++;
...@@ -75,19 +68,19 @@ class ImageLoaderTest : public testing::Test { ...@@ -75,19 +68,19 @@ class ImageLoaderTest : public testing::Test {
return result; return result;
} }
scoped_refptr<Extension> CreateExtension(const char* name, scoped_refptr<Extension> CreateExtension(const char* dir_name,
Manifest::Location location) { Manifest::Location location) {
// Create and load an extension. // Create and load an extension.
base::FilePath test_file; base::FilePath extension_dir;
if (!PathService::Get(chrome::DIR_TEST_DATA, &test_file)) { if (!PathService::Get(DIR_TEST_DATA, &extension_dir)) {
EXPECT_FALSE(true); EXPECT_FALSE(true);
return NULL; return NULL;
} }
test_file = test_file.AppendASCII("extensions") extension_dir = extension_dir.AppendASCII(dir_name);
.AppendASCII(name);
int error_code = 0; int error_code = 0;
std::string error; std::string error;
JSONFileValueSerializer serializer(test_file.AppendASCII("app.json")); JSONFileValueSerializer serializer(
extension_dir.AppendASCII("manifest.json"));
scoped_ptr<base::DictionaryValue> valid_value( scoped_ptr<base::DictionaryValue> valid_value(
static_cast<base::DictionaryValue*>(serializer.Deserialize(&error_code, static_cast<base::DictionaryValue*>(serializer.Deserialize(&error_code,
&error))); &error)));
...@@ -99,15 +92,8 @@ class ImageLoaderTest : public testing::Test { ...@@ -99,15 +92,8 @@ class ImageLoaderTest : public testing::Test {
if (!valid_value) if (!valid_value)
return NULL; return NULL;
if (location == Manifest::COMPONENT) { return Extension::Create(
if (!PathService::Get(chrome::DIR_RESOURCES, &test_file)) { extension_dir, location, *valid_value, Extension::NO_FLAGS, &error);
EXPECT_FALSE(true);
return NULL;
}
test_file = test_file.AppendASCII(name);
}
return Extension::Create(test_file, location, *valid_value,
Extension::NO_FLAGS, &error);
} }
gfx::Image image_; gfx::Image image_;
...@@ -126,16 +112,17 @@ class ImageLoaderTest : public testing::Test { ...@@ -126,16 +112,17 @@ class ImageLoaderTest : public testing::Test {
content::TestBrowserThread ui_thread_; content::TestBrowserThread ui_thread_;
content::TestBrowserThread file_thread_; content::TestBrowserThread file_thread_;
content::TestBrowserThread io_thread_; content::TestBrowserThread io_thread_;
scoped_ptr<NotificationService> notification_service_;
}; };
// Tests loading an image works correctly. // Tests loading an image works correctly.
TEST_F(ImageLoaderTest, LoadImage) { TEST_F(ImageLoaderTest, LoadImage) {
scoped_refptr<Extension> extension(CreateExtension( scoped_refptr<Extension> extension(
"image_loading_tracker", Manifest::INVALID_LOCATION)); CreateExtension("image_loader", Manifest::INVALID_LOCATION));
ASSERT_TRUE(extension.get() != NULL); ASSERT_TRUE(extension.get() != NULL);
ExtensionResource image_resource = extensions::IconsInfo::GetIconResource( ExtensionResource image_resource =
extension.get(), IconsInfo::GetIconResource(extension.get(),
extension_misc::EXTENSION_ICON_SMALLISH, extension_misc::EXTENSION_ICON_SMALLISH,
ExtensionIconSet::MATCH_EXACTLY); ExtensionIconSet::MATCH_EXACTLY);
gfx::Size max_size(extension_misc::EXTENSION_ICON_SMALLISH, gfx::Size max_size(extension_misc::EXTENSION_ICON_SMALLISH,
...@@ -153,6 +140,7 @@ TEST_F(ImageLoaderTest, LoadImage) { ...@@ -153,6 +140,7 @@ TEST_F(ImageLoaderTest, LoadImage) {
WaitForImageLoad(); WaitForImageLoad();
// We should have gotten the image. // We should have gotten the image.
EXPECT_FALSE(image_.IsEmpty());
EXPECT_EQ(1, image_loaded_count()); EXPECT_EQ(1, image_loaded_count());
// Check that the image was loaded. // Check that the image was loaded.
...@@ -163,12 +151,12 @@ TEST_F(ImageLoaderTest, LoadImage) { ...@@ -163,12 +151,12 @@ TEST_F(ImageLoaderTest, LoadImage) {
// Tests deleting an extension while waiting for the image to load doesn't cause // Tests deleting an extension while waiting for the image to load doesn't cause
// problems. // problems.
TEST_F(ImageLoaderTest, DeleteExtensionWhileWaitingForCache) { TEST_F(ImageLoaderTest, DeleteExtensionWhileWaitingForCache) {
scoped_refptr<Extension> extension(CreateExtension( scoped_refptr<Extension> extension(
"image_loading_tracker", Manifest::INVALID_LOCATION)); CreateExtension("image_loader", Manifest::INVALID_LOCATION));
ASSERT_TRUE(extension.get() != NULL); ASSERT_TRUE(extension.get() != NULL);
ExtensionResource image_resource = extensions::IconsInfo::GetIconResource( ExtensionResource image_resource =
extension.get(), IconsInfo::GetIconResource(extension.get(),
extension_misc::EXTENSION_ICON_SMALLISH, extension_misc::EXTENSION_ICON_SMALLISH,
ExtensionIconSet::MATCH_EXACTLY); ExtensionIconSet::MATCH_EXACTLY);
gfx::Size max_size(extension_misc::EXTENSION_ICON_SMALLISH, gfx::Size max_size(extension_misc::EXTENSION_ICON_SMALLISH,
...@@ -189,7 +177,7 @@ TEST_F(ImageLoaderTest, DeleteExtensionWhileWaitingForCache) { ...@@ -189,7 +177,7 @@ TEST_F(ImageLoaderTest, DeleteExtensionWhileWaitingForCache) {
UnloadedExtensionInfo details(extension.get(), UnloadedExtensionInfo details(extension.get(),
UnloadedExtensionInfo::REASON_UNINSTALL); UnloadedExtensionInfo::REASON_UNINSTALL);
content::NotificationService::current()->Notify( content::NotificationService::current()->Notify(
extensions::NOTIFICATION_EXTENSION_UNLOADED_DEPRECATED, NOTIFICATION_EXTENSION_UNLOADED_DEPRECATED,
content::NotificationService::AllSources(), content::NotificationService::AllSources(),
content::Details<UnloadedExtensionInfo>(&details)); content::Details<UnloadedExtensionInfo>(&details));
...@@ -210,15 +198,15 @@ TEST_F(ImageLoaderTest, DeleteExtensionWhileWaitingForCache) { ...@@ -210,15 +198,15 @@ TEST_F(ImageLoaderTest, DeleteExtensionWhileWaitingForCache) {
// Tests loading multiple dimensions of the same image. // Tests loading multiple dimensions of the same image.
TEST_F(ImageLoaderTest, MultipleImages) { TEST_F(ImageLoaderTest, MultipleImages) {
scoped_refptr<Extension> extension(CreateExtension( scoped_refptr<Extension> extension(
"image_loading_tracker", Manifest::INVALID_LOCATION)); CreateExtension("image_loader", Manifest::INVALID_LOCATION));
ASSERT_TRUE(extension.get() != NULL); ASSERT_TRUE(extension.get() != NULL);
std::vector<ImageLoader::ImageRepresentation> info_list; std::vector<ImageLoader::ImageRepresentation> info_list;
int sizes[] = {extension_misc::EXTENSION_ICON_BITTY, int sizes[] = {extension_misc::EXTENSION_ICON_BITTY,
extension_misc::EXTENSION_ICON_SMALLISH, }; extension_misc::EXTENSION_ICON_SMALLISH, };
for (size_t i = 0; i < arraysize(sizes); ++i) { for (size_t i = 0; i < arraysize(sizes); ++i) {
ExtensionResource resource = extensions::IconsInfo::GetIconResource( ExtensionResource resource = IconsInfo::GetIconResource(
extension.get(), sizes[i], ExtensionIconSet::MATCH_EXACTLY); extension.get(), sizes[i], ExtensionIconSet::MATCH_EXACTLY);
info_list.push_back(ImageLoader::ImageRepresentation( info_list.push_back(ImageLoader::ImageRepresentation(
resource, resource,
...@@ -256,14 +244,14 @@ TEST_F(ImageLoaderTest, MultipleImages) { ...@@ -256,14 +244,14 @@ TEST_F(ImageLoaderTest, MultipleImages) {
// Tests loading multiple dimensions of the same image into an image family. // Tests loading multiple dimensions of the same image into an image family.
TEST_F(ImageLoaderTest, LoadImageFamily) { TEST_F(ImageLoaderTest, LoadImageFamily) {
scoped_refptr<Extension> extension( scoped_refptr<Extension> extension(
CreateExtension("image_loading_tracker", Manifest::INVALID_LOCATION)); CreateExtension("image_loader", Manifest::INVALID_LOCATION));
ASSERT_TRUE(extension.get() != NULL); ASSERT_TRUE(extension.get() != NULL);
std::vector<ImageLoader::ImageRepresentation> info_list; std::vector<ImageLoader::ImageRepresentation> info_list;
int sizes[] = {extension_misc::EXTENSION_ICON_BITTY, int sizes[] = {extension_misc::EXTENSION_ICON_BITTY,
extension_misc::EXTENSION_ICON_SMALLISH, }; extension_misc::EXTENSION_ICON_SMALLISH, };
for (size_t i = 0; i < arraysize(sizes); ++i) { for (size_t i = 0; i < arraysize(sizes); ++i) {
ExtensionResource resource = extensions::IconsInfo::GetIconResource( ExtensionResource resource = IconsInfo::GetIconResource(
extension.get(), sizes[i], ExtensionIconSet::MATCH_EXACTLY); extension.get(), sizes[i], ExtensionIconSet::MATCH_EXACTLY);
info_list.push_back(ImageLoader::ImageRepresentation( info_list.push_back(ImageLoader::ImageRepresentation(
resource, resource,
...@@ -274,8 +262,8 @@ TEST_F(ImageLoaderTest, LoadImageFamily) { ...@@ -274,8 +262,8 @@ TEST_F(ImageLoaderTest, LoadImageFamily) {
// Add a second icon of 200P which should get grouped with the smaller icon's // Add a second icon of 200P which should get grouped with the smaller icon's
// ImageSkia. // ImageSkia.
ExtensionResource resource = extensions::IconsInfo::GetIconResource( ExtensionResource resource =
extension.get(), IconsInfo::GetIconResource(extension.get(),
extension_misc::EXTENSION_ICON_SMALLISH, extension_misc::EXTENSION_ICON_SMALLISH,
ExtensionIconSet::MATCH_EXACTLY); ExtensionIconSet::MATCH_EXACTLY);
info_list.push_back(ImageLoader::ImageRepresentation( info_list.push_back(ImageLoader::ImageRepresentation(
...@@ -322,30 +310,4 @@ TEST_F(ImageLoaderTest, LoadImageFamily) { ...@@ -322,30 +310,4 @@ TEST_F(ImageLoaderTest, LoadImageFamily) {
EXPECT_EQ(2.0f, img_rep2->scale()); EXPECT_EQ(2.0f, img_rep2->scale());
} }
// Tests IsComponentExtensionResource function. } // namespace extensions
// TODO(mukai): move this to ChromeComponentExtensionResourceManager's test.
TEST_F(ImageLoaderTest, IsComponentExtensionResource) {
extensions::ComponentExtensionResourceManager* resource_manager =
extensions::ExtensionsBrowserClient::Get()->
GetComponentExtensionResourceManager();
if (!resource_manager)
return;
scoped_refptr<Extension> extension(CreateExtension(
"file_manager", Manifest::COMPONENT));
ASSERT_TRUE(extension.get() != NULL);
ExtensionResource resource = extensions::IconsInfo::GetIconResource(
extension.get(),
extension_misc::EXTENSION_ICON_BITTY,
ExtensionIconSet::MATCH_EXACTLY);
#if defined(OS_CHROMEOS)
int resource_id;
ASSERT_TRUE(resource_manager->IsComponentExtensionResource(
extension->path(),
resource.relative_path(),
&resource_id));
ASSERT_EQ(IDR_FILE_MANAGER_ICON_16, resource_id);
#endif
}
...@@ -830,6 +830,7 @@ ...@@ -830,6 +830,7 @@
'browser/extension_registry_unittest.cc', 'browser/extension_registry_unittest.cc',
'browser/file_highlighter_unittest.cc', 'browser/file_highlighter_unittest.cc',
'browser/file_reader_unittest.cc', 'browser/file_reader_unittest.cc',
'browser/image_loader_unittest.cc',
'browser/image_util_unittest.cc', 'browser/image_util_unittest.cc',
'browser/lazy_background_task_queue_unittest.cc', 'browser/lazy_background_task_queue_unittest.cc',
'browser/management_policy_unittest.cc', 'browser/management_policy_unittest.cc',
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment