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/browser/component_updater/flash_component_installer.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/files/file_path.h"
81320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/files/file_util.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/json/json_file_value_serializer.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h"
119ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "base/message_loop/message_loop.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/path_service.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/version.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "build/build_config.h"
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/chrome_paths.h"
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/test/test_browser_thread.h"
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/shared_impl/test_globals.h"
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h"
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::BrowserThread;
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)namespace component_updater {
245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace {
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// File name of the Pepper Flash plugin on different platforms.
272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const base::FilePath::CharType kDataPath[] =
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_MACOSX)
295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if defined(ARCH_CPU_X86)
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    FILE_PATH_LITERAL("components/flapper/mac");
315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#elif defined(ARCH_CPU_X86_64)
325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    FILE_PATH_LITERAL("components/flapper/mac_x64");
335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#else
345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    FILE_PATH_LITERAL("components/flapper/NONEXISTENT");
355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_WIN)
375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if defined(ARCH_CPU_X86)
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    FILE_PATH_LITERAL("components\\flapper\\windows");
395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#elif defined(ARCH_CPU_X86_64)
405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    FILE_PATH_LITERAL("components\\flapper\\windows_x64");
415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#else
425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    FILE_PATH_LITERAL("components\\flapper\\NONEXISTENT");
435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else  // OS_LINUX, etc.
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(ARCH_CPU_X86)
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    FILE_PATH_LITERAL("components/flapper/linux");
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(ARCH_CPU_X86_64)
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    FILE_PATH_LITERAL("components/flapper/linux_x64");
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    FILE_PATH_LITERAL("components/flapper/NONEXISTENT");
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
53010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)}  // namespace
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TODO(viettrungluu): Separate out into two separate tests; use a test fixture.
565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)TEST(ComponentInstallerTest, PepperFlashCheck) {
5790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  base::MessageLoop message_loop;
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  content::TestBrowserThread ui_thread(BrowserThread::UI, &message_loop);
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ppapi::PpapiGlobals::PerThreadForTest per_thread_for_test;
612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ppapi::TestGlobals test_globals(per_thread_for_test);
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ppapi::PpapiGlobals::SetPpapiGlobalsOnThreadForTest(&test_globals);
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The test directory is chrome/test/data/components/flapper.
652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::FilePath manifest;
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PathService::Get(chrome::DIR_TEST_DATA, &manifest);
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  manifest = manifest.Append(kDataPath);
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  manifest = manifest.AppendASCII("manifest.json");
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
707dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  if (!base::PathExists(manifest)) {
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    LOG(WARNING) << "No test manifest available. Skipping.";
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return;
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  JSONFileValueSerializer serializer(manifest);
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string error;
77c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  scoped_ptr<base::DictionaryValue> root(static_cast<base::DictionaryValue*>(
78c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      serializer.Deserialize(NULL, &error)));
79c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  ASSERT_TRUE(root);
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(root->IsType(base::Value::TYPE_DICTIONARY));
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // This checks that the whole manifest is compatible.
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Version version;
84c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_TRUE(CheckPepperFlashManifest(*root, &version));
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(version.IsValid());
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}  // namespace component_updater
89