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   // Don't collect GPU info, load GPU blacklist, or schedule a GPU blacklist
     51   // auto-update.
     52   command_line->AppendSwitch(switches::kSkipGpuDataLoading);
     53 
     54 #if defined(USE_AURA)
     55   // Disable window animations under Ash as the animations effect the
     56   // coordinates returned and result in flake.
     57   command_line->AppendSwitch(
     58       views::corewm::switches::kWindowAnimationsDisabled);
     59 #endif
     60 
     61 #if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_CHROMEOS)
     62   // Don't use the native password stores on Linux since they may
     63   // prompt for additional UI during tests and cause test failures or
     64   // timeouts.  Win, Mac and ChromeOS don't look at the kPasswordStore
     65   // switch.
     66   if (!command_line->HasSwitch(switches::kPasswordStore))
     67     command_line->AppendSwitchASCII(switches::kPasswordStore, "basic");
     68 #endif
     69 
     70 #if defined(OS_MACOSX)
     71   // Use mock keychain on mac to prevent blocking permissions dialogs.
     72   command_line->AppendSwitch(switches::kUseMockKeychain);
     73 #endif
     74 
     75   command_line->AppendSwitch(switches::kDisableComponentUpdate);
     76 }
     77 
     78 bool OverrideUserDataDir(const base::FilePath& user_data_dir) {
     79   bool success = true;
     80 
     81   // PathService::Override() is the best way to change the user data directory.
     82   // This matches what is done in ChromeMain().
     83   success = PathService::Override(chrome::DIR_USER_DATA, user_data_dir);
     84 
     85 #if defined(OS_POSIX) && !defined(OS_MACOSX)
     86   // Make sure the cache directory is inside our clear profile. Otherwise
     87   // the cache may contain data from earlier tests that could break the
     88   // current test.
     89   //
     90   // Note: we use an environment variable here, because we have to pass the
     91   // value to the child process. This is the simplest way to do it.
     92   scoped_ptr<base::Environment> env(base::Environment::Create());
     93   success = success && env->SetVar("XDG_CACHE_HOME", user_data_dir.value());
     94 #endif
     95 
     96   return success;
     97 }
     98 
     99 }  // namespace test_launcher_utils
    100