1 // Copyright 2014 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. 4 5 #include "base/files/file_path.h" 6 #include "base/path_service.h" 7 #include "chrome/common/chrome_paths.h" 8 #include "extensions/browser/component_extension_resource_manager.h" 9 #include "extensions/browser/extensions_browser_client.h" 10 #include "extensions/common/constants.h" 11 #include "extensions/common/extension.h" 12 #include "extensions/common/extension_icon_set.h" 13 #include "extensions/common/extension_resource.h" 14 #include "extensions/common/file_util.h" 15 #include "extensions/common/manifest.h" 16 #include "extensions/common/manifest_handlers/icons_handler.h" 17 #include "testing/gtest/include/gtest/gtest.h" 18 19 #if defined(OS_CHROMEOS) 20 #include "ui/file_manager/grit/file_manager_resources.h" 21 #endif 22 23 namespace extensions { 24 25 typedef testing::Test ChromeComponentExtensionResourceManagerTest; 26 27 // Tests IsComponentExtensionResource function. 28 TEST_F(ChromeComponentExtensionResourceManagerTest, 29 IsComponentExtensionResource) { 30 ComponentExtensionResourceManager* resource_manager = 31 ExtensionsBrowserClient::Get()->GetComponentExtensionResourceManager(); 32 ASSERT_TRUE(resource_manager); 33 34 // Get the extension test data path. 35 base::FilePath test_path; 36 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &test_path)); 37 test_path = test_path.AppendASCII("extensions").AppendASCII("file_manager"); 38 39 // Load the manifest data. 40 std::string error; 41 scoped_ptr<base::DictionaryValue> manifest(file_util::LoadManifest( 42 test_path, FILE_PATH_LITERAL("app.json"), &error)); 43 ASSERT_TRUE(manifest.get()) << error; 44 45 // Build a path inside Chrome's resources directory where a component 46 // extension might be installed. 47 base::FilePath resources_path; 48 ASSERT_TRUE(PathService::Get(chrome::DIR_RESOURCES, &resources_path)); 49 resources_path = resources_path.AppendASCII("file_manager"); 50 51 // Create a simulated component extension. 52 scoped_refptr<Extension> extension = Extension::Create(resources_path, 53 Manifest::COMPONENT, 54 *manifest, 55 Extension::NO_FLAGS, 56 &error); 57 ASSERT_TRUE(extension.get()); 58 59 // Load one of the icons. 60 ExtensionResource resource = 61 IconsInfo::GetIconResource(extension.get(), 62 extension_misc::EXTENSION_ICON_BITTY, 63 ExtensionIconSet::MATCH_EXACTLY); 64 65 #if defined(OS_CHROMEOS) 66 // The resource is a component resource. 67 int resource_id = 0; 68 ASSERT_TRUE(resource_manager->IsComponentExtensionResource( 69 extension->path(), resource.relative_path(), &resource_id)); 70 ASSERT_EQ(IDR_FILE_MANAGER_ICON_16, resource_id); 71 #endif 72 } 73 74 } // namespace extensions 75