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)#ifndef CHROME_TEST_BASE_IN_PROCESS_BROWSER_TEST_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHROME_TEST_BASE_IN_PROCESS_BROWSER_TEST_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/compiler_specific.h" 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/files/scoped_temp_dir.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/ref_counted.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/test/browser_test.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/test/browser_test_base.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "ui/base/page_transition_types.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace base { 18a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 19a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)class CommandLine; 20a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 21eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#if defined(OS_MACOSX) 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace mac { 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ScopedNSAutoreleasePool; 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace mac 25eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#endif // defined(OS_MACOSX) 26eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#if defined(OS_WIN) 28eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochnamespace win { 29eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochclass ScopedCOMInitializer; 30eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#endif // defined(OS_WIN) 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace base 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Browser; 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Profile; 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content { 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ContentRendererClient; 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Base class for tests wanting to bring up a browser in the unit test process. 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Writing tests with InProcessBrowserTest is slightly different than that of 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// other tests. This is necessitated by InProcessBrowserTest running a message 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// loop. To use InProcessBrowserTest do the following: 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// . Use the macro IN_PROC_BROWSER_TEST_F to define your test. 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// . Your test method is invoked on the ui thread. If you need to block until 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// state changes you'll need to run the message loop from your test method. 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// For example, if you need to wait till a find bar has completely been shown 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// you'll need to invoke content::RunMessageLoop. When the message bar is 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// shown, invoke MessageLoop::current()->Quit() to return control back to your 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// test method. 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// . If you subclass and override SetUp, be sure and invoke 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// InProcessBrowserTest::SetUp. (But see also SetUpOnMainThread, 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// SetUpInProcessBrowserTestFixture and other related hook methods for a 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// cleaner alternative). 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Following three hook methods are called in sequence before calling 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// BrowserMain(), thus no browser has been created yet. They are mainly for 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// setting up the environment for running the browser. 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// . SetUpUserDataDirectory() 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// . SetUpCommandLine() 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// . SetUpInProcessBrowserTestFixture() 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// SetUpOnMainThread() is called just after creating the default browser object 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// and before executing the real test code. It's mainly for setting up things 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// related to the browser object and associated window, like opening a new Tab 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// with a testing page loaded. 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// TearDownOnMainThread() is called just after executing the real test code to 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// do necessary cleanup before the browser is torn down. 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TearDownInProcessBrowserTestFixture() is called after BrowserMain() exits to 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// cleanup things setup for running the browser. 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// By default InProcessBrowserTest creates a single Browser (as returned from 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// the CreateBrowser method). You can obviously create more as needed. 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// InProcessBrowserTest disables the sandbox when running. 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// See ui_test_utils for a handful of methods designed for use with this class. 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// It's possible to write browser tests that span a restart by splitting each 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// run of the browser process into a separate test. Example: 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// IN_PROC_BROWSER_TEST_F(Foo, PRE_Bar) { 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// do something 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// } 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// IN_PROC_BROWSER_TEST_F(Foo, Bar) { 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// verify something persisted from before 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// } 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This is recursive, so PRE_PRE_Bar would run before PRE_BAR. 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class InProcessBrowserTest : public content::BrowserTestBase { 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) InProcessBrowserTest(); 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~InProcessBrowserTest(); 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Configures everything for an in process browser test, then invokes 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // BrowserMain. BrowserMain ends up invoking RunTestOnMainThreadLoop. 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetUp() OVERRIDE; 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Restores state configured in SetUp. 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void TearDown() OVERRIDE; 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the browser created by CreateBrowser. 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Browser* browser() const { return browser_; } 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Convenience methods for adding tabs to a Browser. 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void AddTabAtIndexToBrowser(Browser* browser, 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int index, 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& url, 1141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ui::PageTransition transition); 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void AddTabAtIndex(int index, const GURL& url, 1161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ui::PageTransition transition); 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Initializes the contents of the user data directory. Called by SetUp() 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // after creating the user data directory, but before any browser is launched. 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If a test wishes to set up some initial non-empty state in the user data 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // directory before the browser starts up, it can do so here. Returns true if 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // successful. 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool SetUpUserDataDirectory() WARN_UNUSED_RESULT; 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // BrowserTestBase: 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void RunTestOnMainThreadLoop() OVERRIDE; 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Creates a browser with a single tab (about:blank), waits for the tab to 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // finish loading and shows the browser. 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This is invoked from Setup. 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Browser* CreateBrowser(Profile* profile); 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Similar to |CreateBrowser|, but creates an incognito browser. 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Browser* CreateIncognitoBrowser(); 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Creates a browser for a popup window with a single tab (about:blank), waits 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // for the tab to finish loading, and shows the browser. 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Browser* CreateBrowserForPopup(Profile* profile); 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Creates a browser for an application and waits for it to load and shows 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the browser. 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Browser* CreateBrowserForApp(const std::string& app_name, Profile* profile); 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Called from the various CreateBrowser methods to add a blank tab, wait for 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the navigation to complete, and show the browser's window. 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void AddBlankTabAndShow(Browser* browser); 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if !defined OS_MACOSX 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Return a CommandLine object that is used to relaunch the browser_test 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // binary as a browser process. This function is deliberately not defined on 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the Mac because re-using an existing browser process when launching from 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the command line isn't a concept that we support on the Mac; AppleEvents 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // are the Mac solution for the same need. Any test based on these functions 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // doesn't apply to the Mac. 156a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) base::CommandLine GetCommandLineForRelaunch(); 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_MACOSX) 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the autorelease pool in use inside RunTestOnMainThreadLoop(). 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::mac::ScopedNSAutoreleasePool* AutoreleasePool() const { 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return autorelease_pool_; 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // OS_MACOSX 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1667d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) void set_exit_when_last_browser_closes(bool value) { 167c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) exit_when_last_browser_closes_ = value; 168c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 169c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 170116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch void set_open_about_blank_on_browser_launch(bool value) { 171116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch open_about_blank_on_browser_launch_ = value; 172116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 173116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 174eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // This must be called before RunTestOnMainThreadLoop() to have any effect. 175eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch void set_multi_desktop_test(bool multi_desktop_test) { 176eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch multi_desktop_test_ = multi_desktop_test; 177eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 178eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Creates a user data directory for the test if one is needed. Returns true 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // if successful. 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool CreateUserDataDirectory() WARN_UNUSED_RESULT; 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Quits all open browsers and waits until there are no more browsers. 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void QuitBrowsers(); 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Prepare command line that will be used to launch the child browser process 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // with an in-process test. 189a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) void PrepareTestCommandLine(base::CommandLine* command_line); 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Browser created from CreateBrowser. 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Browser* browser_; 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Temporary user data directory. Used only when a user data directory is not 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // specified in the command line. 1962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::ScopedTempDir temp_user_data_dir_; 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 198c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // True if we should exit the tests after the last browser instance closes. 199c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool exit_when_last_browser_closes_; 200c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 201116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // True if the about:blank tab should be opened when the browser is launched. 202116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bool open_about_blank_on_browser_launch_; 203116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 204eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // True if this is a multi-desktop test (in which case this browser test will 205eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // not ensure that Browsers are only created on the tested desktop). 206eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch bool multi_desktop_test_; 207eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_MACOSX) 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::mac::ScopedNSAutoreleasePool* autorelease_pool_; 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // OS_MACOSX 211eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 2125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#if defined(OS_WIN) 213eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch scoped_ptr<base::win::ScopedCOMInitializer> com_initializer_; 214eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#endif 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // CHROME_TEST_BASE_IN_PROCESS_BROWSER_TEST_H_ 218