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/test_launcher_utils.h"
      6 
      7 #include "base/command_line.h"
      8 #include "base/environment.h"
      9 #include "base/logging.h"
     10 #include "base/memory/scoped_ptr.h"
     11 #include "base/path_service.h"
     12 #include "base/strings/string_number_conversions.h"
     13 #include "chrome/common/chrome_paths.h"
     14 #include "chrome/common/chrome_switches.h"
     15 #include "components/os_crypt/os_crypt_switches.h"
     16 
     17 #if defined(USE_AURA)
     18 #include "ui/wm/core/wm_core_switches.h"
     19 #endif
     20 
     21 namespace test_launcher_utils {
     22 
     23 void PrepareBrowserCommandLineForTests(CommandLine* command_line) {
     24   // Turn off tip loading for tests; see http://crbug.com/17725.
     25   command_line->AppendSwitch(switches::kDisableWebResources);
     26 
     27   // Turn off preconnects because they break the brittle python webserver;
     28   // see http://crbug.com/60035.
     29   command_line->AppendSwitch(switches::kDisablePreconnect);
     30 
     31   // Don't show the first run ui.
     32   command_line->AppendSwitch(switches::kNoFirstRun);
     33 
     34   // No default browser check, it would create an info-bar (if we are not the
     35   // default browser) that could conflicts with some tests expectations.
     36   command_line->AppendSwitch(switches::kNoDefaultBrowserCheck);
     37 
     38   // Enable info level logging to stderr by default so that we can see when
     39   // bad stuff happens, but honor the flags specified from the command line.
     40   if (!command_line->HasSwitch(switches::kEnableLogging))
     41     command_line->AppendSwitchASCII(switches::kEnableLogging, "stderr");
     42   if (!command_line->HasSwitch(switches::kLoggingLevel))
     43     command_line->AppendSwitchASCII(switches::kLoggingLevel, "0");  // info
     44 
     45   // Disable safebrowsing autoupdate.
     46   command_line->AppendSwitch(switches::kSbDisableAutoUpdate);
     47 
     48   // Don't install default apps.
     49   command_line->AppendSwitch(switches::kDisableDefaultApps);
     50 
     51 #if defined(USE_AURA)
     52   // Disable window animations under Ash as the animations effect the
     53   // coordinates returned and result in flake.
     54   command_line->AppendSwitch(
     55       wm::switches::kWindowAnimationsDisabled);
     56 #endif
     57 
     58 #if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_CHROMEOS)
     59   // Don't use the native password stores on Linux since they may
     60   // prompt for additional UI during tests and cause test failures or
     61   // timeouts.  Win, Mac and ChromeOS don't look at the kPasswordStore
     62   // switch.
     63   if (!command_line->HasSwitch(switches::kPasswordStore))
     64     command_line->AppendSwitchASCII(switches::kPasswordStore, "basic");
     65 #endif
     66 
     67 #if defined(OS_MACOSX)
     68   // Use mock keychain on mac to prevent blocking permissions dialogs.
     69   command_line->AppendSwitch(os_crypt::switches::kUseMockKeychain);
     70 #endif
     71 
     72   command_line->AppendSwitch(switches::kDisableComponentUpdate);
     73 }
     74 
     75 bool OverrideUserDataDir(const base::FilePath& user_data_dir) {
     76   bool success = true;
     77 
     78   // PathService::Override() is the best way to change the user data directory.
     79   // This matches what is done in ChromeMain().
     80   success = PathService::Override(chrome::DIR_USER_DATA, user_data_dir);
     81 
     82 #if defined(OS_POSIX) && !defined(OS_MACOSX)
     83   // Make sure the cache directory is inside our clear profile. Otherwise
     84   // the cache may contain data from earlier tests that could break the
     85   // current test.
     86   //
     87   // Note: we use an environment variable here, because we have to pass the
     88   // value to the child process. This is the simplest way to do it.
     89   scoped_ptr<base::Environment> env(base::Environment::Create());
     90   success = success && env->SetVar("XDG_CACHE_HOME", user_data_dir.value());
     91 #endif
     92 
     93   return success;
     94 }
     95 
     96 }  // namespace test_launcher_utils
     97