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/test_launcher_utils.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/command_line.h" 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/environment.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/logging.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/path_service.h" 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/strings/string_number_conversions.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/chrome_paths.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/chrome_switches.h" 15a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "components/os_crypt/os_crypt_switches.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(USE_AURA) 18a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "ui/wm/core/wm_core_switches.h" 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace test_launcher_utils { 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void PrepareBrowserCommandLineForTests(CommandLine* command_line) { 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Turn off tip loading for tests; see http://crbug.com/17725. 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) command_line->AppendSwitch(switches::kDisableWebResources); 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Turn off preconnects because they break the brittle python webserver; 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // see http://crbug.com/60035. 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) command_line->AppendSwitch(switches::kDisablePreconnect); 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Don't show the first run ui. 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) command_line->AppendSwitch(switches::kNoFirstRun); 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // No default browser check, it would create an info-bar (if we are not the 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // default browser) that could conflicts with some tests expectations. 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) command_line->AppendSwitch(switches::kNoDefaultBrowserCheck); 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 38c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Enable info level logging to stderr by default so that we can see when 39c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // bad stuff happens, but honor the flags specified from the command line. 40c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (!command_line->HasSwitch(switches::kEnableLogging)) 41c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) command_line->AppendSwitchASCII(switches::kEnableLogging, "stderr"); 42c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (!command_line->HasSwitch(switches::kLoggingLevel)) 43c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) command_line->AppendSwitchASCII(switches::kLoggingLevel, "0"); // info 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Disable safebrowsing autoupdate. 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) command_line->AppendSwitch(switches::kSbDisableAutoUpdate); 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Don't install default apps. 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) command_line->AppendSwitch(switches::kDisableDefaultApps); 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(USE_AURA) 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Disable window animations under Ash as the animations effect the 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // coordinates returned and result in flake. 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) command_line->AppendSwitch( 55a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) wm::switches::kWindowAnimationsDisabled); 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_CHROMEOS) 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Don't use the native password stores on Linux since they may 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // prompt for additional UI during tests and cause test failures or 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // timeouts. Win, Mac and ChromeOS don't look at the kPasswordStore 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // switch. 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!command_line->HasSwitch(switches::kPasswordStore)) 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) command_line->AppendSwitchASCII(switches::kPasswordStore, "basic"); 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_MACOSX) 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Use mock keychain on mac to prevent blocking permissions dialogs. 69a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) command_line->AppendSwitch(os_crypt::switches::kUseMockKeychain); 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) command_line->AppendSwitch(switches::kDisableComponentUpdate); 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool OverrideUserDataDir(const base::FilePath& user_data_dir) { 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool success = true; 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // PathService::Override() is the best way to change the user data directory. 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This matches what is done in ChromeMain(). 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) success = PathService::Override(chrome::DIR_USER_DATA, user_data_dir); 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_POSIX) && !defined(OS_MACOSX) 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make sure the cache directory is inside our clear profile. Otherwise 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the cache may contain data from earlier tests that could break the 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // current test. 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Note: we use an environment variable here, because we have to pass the 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // value to the child process. This is the simplest way to do it. 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<base::Environment> env(base::Environment::Create()); 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) success = success && env->SetVar("XDG_CACHE_HOME", user_data_dir.value()); 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return success; 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace test_launcher_utils 97