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/test/base/chrome_test_suite.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_CHROMEOS) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <stdio.h> 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <unistd.h> 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/command_line.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/ref_counted.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/path_service.h" 15868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/browser_process.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/chrome_constants.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/chrome_paths.h" 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/url_constants.h" 201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "components/content_settings/core/common/content_settings_pattern.h" 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/test/test_launcher.h" 221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "extensions/common/constants.h" 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_ANDROID) 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/android/jni_android.h" 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/android/chrome_jni_registrar.h" 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/android/net_jni_registrar.h" 29f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "ui/base/android/ui_base_jni_registrar.h" 304e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "ui/gfx/android/gfx_jni_registrar.h" 31c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "ui/gl/android/gl_jni_registrar.h" 32c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif 33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 34c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#if defined(OS_CHROMEOS) 35bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch#include "base/process/process_metrics.h" 36c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chromeos/chromeos_paths.h" 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_MACOSX) 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/mac/bundle_locations.h" 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/mac/scoped_nsautorelease_pool.h" 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if !defined(OS_IOS) 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/mac/mac_util.h" 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/chrome_browser_application_mac.h" 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // !defined(OS_IOS) 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#if !defined(OS_IOS) 4923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "media/base/media.h" 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool IsCrosPythonProcess() { 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_CHROMEOS) 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) char buf[80]; 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int num_read = readlink(base::kProcSelfExe, buf, sizeof(buf) - 1); 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (num_read == -1) 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) buf[num_read] = 0; 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char kPythonPrefix[] = "/python"; 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return !strncmp(strrchr(buf, '/'), kPythonPrefix, sizeof(kPythonPrefix) - 1); 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // defined(OS_CHROMEOS) 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ChromeTestSuite::ChromeTestSuite(int argc, char** argv) 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : content::ContentTestSuiteBase(argc, argv) { 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ChromeTestSuite::~ChromeTestSuite() { 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ChromeTestSuite::Initialize() { 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_MACOSX) 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::mac::ScopedNSAutoreleasePool autorelease_pool; 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if !defined(OS_IOS) 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome_browser_application_mac::RegisterBrowserCrApp(); 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // !defined(OS_IOS) 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_ANDROID) 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Register JNI bindings for android. 874e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) gfx::android::RegisterJni(base::android::AttachCurrentThread()); 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::android::RegisterJni(base::android::AttachCurrentThread()); 892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::android::RegisterJni(base::android::AttachCurrentThread()); 90c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ui::gl::android::RegisterJni(base::android::AttachCurrentThread()); 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::android::RegisterJni(base::android::AttachCurrentThread()); 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!browser_dir_.empty()) { 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PathService::Override(base::DIR_EXE, browser_dir_); 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PathService::Override(base::DIR_MODULE, browser_dir_); 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if !defined(OS_IOS) 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Disable external libraries load if we are under python process in 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // ChromeOS. That means we are autotest and, if ASAN is used, 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // external libraries load crashes. 10323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) if (!IsCrosPythonProcess()) 10423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) media::InitializeMediaLibraryForTesting(); 10523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#endif 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Initialize after overriding paths as some content paths depend on correct 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // values for DIR_EXE and DIR_MODULE. 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::ContentTestSuiteBase::Initialize(); 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ContentSettingsPattern::SetNonWildcardDomainNonPortScheme( 1121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci extensions::kExtensionScheme); 1131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_MACOSX) && !defined(OS_IOS) 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Look in the framework bundle for resources. 1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath path; 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PathService::Get(base::DIR_EXE, &path); 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) path = path.Append(chrome::kFrameworkName); 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::mac::SetOverrideFrameworkBundlePath(path); 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ChromeTestSuite::Shutdown() { 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_MACOSX) && !defined(OS_IOS) 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::mac::SetOverrideFrameworkBundle(NULL); 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 128a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) content::ContentTestSuiteBase::Shutdown(); 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 130