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 "content/public/test/test_launcher.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/base_paths.h" 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/command_line.h" 923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "base/debug/stack_trace.h" 10f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "base/i18n/icu_util.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/logging.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/path_service.h" 1323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "base/process/memory.h" 141e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "base/sys_info.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/test/test_suite.h" 1623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "base/test/test_timeouts.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/common/content_switches.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/test/content_test_suite_base.h" 19b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)#include "content/shell/app/shell_main_delegate.h" 20b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)#include "content/shell/common/shell_switches.h" 21cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "media/base/media_switches.h" 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_ANDROID) 259ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "base/message_loop/message_loop.h" 26c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "content/app/mojo/mojo_init.h" 2723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "content/common/url_schemes.h" 2823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "content/public/common/content_paths.h" 29eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "content/public/test/nested_message_pump_android.h" 3023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "content/shell/browser/shell_content_browser_client.h" 3123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "content/shell/common/shell_content_client.h" 3223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "ui/base/ui_base_paths.h" 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content { 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_ANDROID) 38a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)scoped_ptr<base::MessagePump> CreateMessagePumpForUI() { 39a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return scoped_ptr<base::MessagePump>(new NestedMessagePumpAndroid()); 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ContentBrowserTestSuite : public ContentTestSuiteBase { 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentBrowserTestSuite(int argc, char** argv) 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : ContentTestSuiteBase(argc, argv) { 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~ContentBrowserTestSuite() { 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void Initialize() OVERRIDE { 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_ANDROID) 55f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::i18n::AllowMultipleInitializeCallsForTesting(); 56f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::i18n::InitializeICU(); 57f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // This needs to be done before base::TestSuite::Initialize() is called, 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // as it also tries to set MessagePumpForUIFactory. 60c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (!base::MessageLoop::InitMessagePumpForUIFactory( 61c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) &CreateMessagePumpForUI)) 62f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) VLOG(0) << "MessagePumpForUIFactory already set, unable to override."; 6323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 6423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) // For all other platforms, we call ContentMain for browser tests which goes 6523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) // through the normal browser initialization paths. For Android, we must set 6623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) // things up manually. 6723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) content_client_.reset(new ShellContentClient); 6823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) browser_content_client_.reset(new ShellContentBrowserClient()); 6923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) SetContentClient(content_client_.get()); 7023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) SetBrowserClientForTesting(browser_content_client_.get()); 7123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 7223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) content::RegisterContentSchemes(false); 7323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) RegisterPathProvider(); 7423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) ui::RegisterPathProvider(); 7523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) RegisterInProcessThreads(); 76c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 77c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch InitializeMojo(); 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentTestSuiteBase::Initialize(); 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#if defined(OS_ANDROID) 84c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch scoped_ptr<ShellContentClient> content_client_; 8523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) scoped_ptr<ShellContentBrowserClient> browser_content_client_; 8623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#endif 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(ContentBrowserTestSuite); 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ContentTestLauncherDelegate : public TestLauncherDelegate { 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentTestLauncherDelegate() {} 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~ContentTestLauncherDelegate() {} 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual int RunTestSuite(int argc, char** argv) OVERRIDE { 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return ContentBrowserTestSuite(argc, argv).Run(); 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool AdjustChildProcessCommandLine( 1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CommandLine* command_line, const base::FilePath& temp_data_dir) OVERRIDE { 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) command_line->AppendSwitchPath(switches::kContentShellDataPath, 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) temp_data_dir); 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) command_line->AppendSwitch(switches::kUseFakeDeviceForMediaStream); 105eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch command_line->AppendSwitch(switches::kUseFakeUIForMediaStream); 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ContentMainDelegate* CreateContentMainDelegate() OVERRIDE { 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return new ShellMainDelegate(); 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(ContentTestLauncherDelegate); 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace content 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int main(int argc, char** argv) { 1211e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) int default_jobs = std::max(1, base::SysInfo::NumberOfProcessors() / 2); 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::ContentTestLauncherDelegate launcher_delegate; 1231e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) return LaunchTests(&launcher_delegate, default_jobs, argc, argv); 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 125