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