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