Home | History | Annotate | Download | only in base
      1 // Copyright (c) 2012 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 "chrome/test/base/chrome_test_suite.h"
      6 
      7 #if defined(OS_CHROMEOS)
      8 #include <stdio.h>
      9 #include <unistd.h>
     10 #endif
     11 
     12 #include "base/command_line.h"
     13 #include "base/memory/ref_counted.h"
     14 #include "base/path_service.h"
     15 #include "base/strings/utf_string_conversions.h"
     16 #include "chrome/browser/browser_process.h"
     17 #include "chrome/common/chrome_constants.h"
     18 #include "chrome/common/chrome_paths.h"
     19 #include "chrome/common/url_constants.h"
     20 #include "components/content_settings/core/common/content_settings_pattern.h"
     21 #include "content/public/test/test_launcher.h"
     22 #include "extensions/common/constants.h"
     23 #include "testing/gtest/include/gtest/gtest.h"
     24 
     25 #if defined(OS_ANDROID)
     26 #include "base/android/jni_android.h"
     27 #include "chrome/browser/android/chrome_jni_registrar.h"
     28 #include "net/android/net_jni_registrar.h"
     29 #include "ui/base/android/ui_base_jni_registrar.h"
     30 #include "ui/gfx/android/gfx_jni_registrar.h"
     31 #include "ui/gl/android/gl_jni_registrar.h"
     32 #endif
     33 
     34 #if defined(OS_CHROMEOS)
     35 #include "base/process/process_metrics.h"
     36 #include "chromeos/chromeos_paths.h"
     37 #endif
     38 
     39 #if defined(OS_MACOSX)
     40 #include "base/mac/bundle_locations.h"
     41 #include "base/mac/scoped_nsautorelease_pool.h"
     42 #if !defined(OS_IOS)
     43 #include "base/mac/mac_util.h"
     44 #include "chrome/browser/chrome_browser_application_mac.h"
     45 #endif  // !defined(OS_IOS)
     46 #endif
     47 
     48 #if !defined(OS_IOS)
     49 #include "media/base/media.h"
     50 #endif
     51 
     52 namespace {
     53 
     54 bool IsCrosPythonProcess() {
     55 #if defined(OS_CHROMEOS)
     56   char buf[80];
     57   int num_read = readlink(base::kProcSelfExe, buf, sizeof(buf) - 1);
     58   if (num_read == -1)
     59     return false;
     60   buf[num_read] = 0;
     61   const char kPythonPrefix[] = "/python";
     62   return !strncmp(strrchr(buf, '/'), kPythonPrefix, sizeof(kPythonPrefix) - 1);
     63 #else
     64   return false;
     65 #endif  // defined(OS_CHROMEOS)
     66 }
     67 
     68 }  // namespace
     69 
     70 ChromeTestSuite::ChromeTestSuite(int argc, char** argv)
     71     : content::ContentTestSuiteBase(argc, argv) {
     72 }
     73 
     74 ChromeTestSuite::~ChromeTestSuite() {
     75 }
     76 
     77 void ChromeTestSuite::Initialize() {
     78 #if defined(OS_MACOSX)
     79   base::mac::ScopedNSAutoreleasePool autorelease_pool;
     80 #if !defined(OS_IOS)
     81   chrome_browser_application_mac::RegisterBrowserCrApp();
     82 #endif  // !defined(OS_IOS)
     83 #endif
     84 
     85 #if defined(OS_ANDROID)
     86   // Register JNI bindings for android.
     87   gfx::android::RegisterJni(base::android::AttachCurrentThread());
     88   net::android::RegisterJni(base::android::AttachCurrentThread());
     89   ui::android::RegisterJni(base::android::AttachCurrentThread());
     90   ui::gl::android::RegisterJni(base::android::AttachCurrentThread());
     91   chrome::android::RegisterJni(base::android::AttachCurrentThread());
     92 #endif
     93 
     94   if (!browser_dir_.empty()) {
     95     PathService::Override(base::DIR_EXE, browser_dir_);
     96     PathService::Override(base::DIR_MODULE, browser_dir_);
     97   }
     98 
     99 #if !defined(OS_IOS)
    100   // Disable external libraries load if we are under python process in
    101   // ChromeOS.  That means we are autotest and, if ASAN is used,
    102   // external libraries load crashes.
    103   if (!IsCrosPythonProcess())
    104     media::InitializeMediaLibraryForTesting();
    105 #endif
    106 
    107   // Initialize after overriding paths as some content paths depend on correct
    108   // values for DIR_EXE and DIR_MODULE.
    109   content::ContentTestSuiteBase::Initialize();
    110 
    111   ContentSettingsPattern::SetNonWildcardDomainNonPortScheme(
    112       extensions::kExtensionScheme);
    113 
    114 #if defined(OS_MACOSX) && !defined(OS_IOS)
    115   // Look in the framework bundle for resources.
    116   base::FilePath path;
    117   PathService::Get(base::DIR_EXE, &path);
    118   path = path.Append(chrome::kFrameworkName);
    119   base::mac::SetOverrideFrameworkBundlePath(path);
    120 #endif
    121 }
    122 
    123 void ChromeTestSuite::Shutdown() {
    124 #if defined(OS_MACOSX) && !defined(OS_IOS)
    125   base::mac::SetOverrideFrameworkBundle(NULL);
    126 #endif
    127 
    128   content::ContentTestSuiteBase::Shutdown();
    129 }
    130