15f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 25f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// found in the LICENSE file. 45f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 55f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "base/files/file_path.h" 65f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "base/path_service.h" 75f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "chrome/common/chrome_paths.h" 85f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "extensions/browser/component_extension_resource_manager.h" 95f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "extensions/browser/extensions_browser_client.h" 105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "extensions/common/constants.h" 115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "extensions/common/extension.h" 125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "extensions/common/extension_icon_set.h" 135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "extensions/common/extension_resource.h" 145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "extensions/common/file_util.h" 155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "extensions/common/manifest.h" 165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "extensions/common/manifest_handlers/icons_handler.h" 175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if defined(OS_CHROMEOS) 205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "ui/file_manager/grit/file_manager_resources.h" 215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif 225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)namespace extensions { 245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)typedef testing::Test ChromeComponentExtensionResourceManagerTest; 265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Tests IsComponentExtensionResource function. 285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)TEST_F(ChromeComponentExtensionResourceManagerTest, 295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) IsComponentExtensionResource) { 305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ComponentExtensionResourceManager* resource_manager = 315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ExtensionsBrowserClient::Get()->GetComponentExtensionResourceManager(); 325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ASSERT_TRUE(resource_manager); 335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // Get the extension test data path. 355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) base::FilePath test_path; 365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &test_path)); 375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) test_path = test_path.AppendASCII("extensions").AppendASCII("file_manager"); 385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // Load the manifest data. 405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) std::string error; 415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) scoped_ptr<base::DictionaryValue> manifest(file_util::LoadManifest( 425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) test_path, FILE_PATH_LITERAL("app.json"), &error)); 435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ASSERT_TRUE(manifest.get()) << error; 445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // Build a path inside Chrome's resources directory where a component 465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // extension might be installed. 475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) base::FilePath resources_path; 485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ASSERT_TRUE(PathService::Get(chrome::DIR_RESOURCES, &resources_path)); 495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) resources_path = resources_path.AppendASCII("file_manager"); 505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // Create a simulated component extension. 525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) scoped_refptr<Extension> extension = Extension::Create(resources_path, 535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Manifest::COMPONENT, 545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) *manifest, 555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Extension::NO_FLAGS, 565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) &error); 575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ASSERT_TRUE(extension.get()); 585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // Load one of the icons. 605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ExtensionResource resource = 615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) IconsInfo::GetIconResource(extension.get(), 625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) extension_misc::EXTENSION_ICON_BITTY, 635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ExtensionIconSet::MATCH_EXACTLY); 645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if defined(OS_CHROMEOS) 665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // The resource is a component resource. 675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) int resource_id = 0; 685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ASSERT_TRUE(resource_manager->IsComponentExtensionResource( 695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) extension->path(), resource.relative_path(), &resource_id)); 705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ASSERT_EQ(IDR_FILE_MANAGER_ICON_16, resource_id); 715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif 725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} // namespace extensions 75