in_process_browser_test.h revision 5821806d5e7f356e8fa4b058a389a808ea183019
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" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/ref_counted.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/scoped_temp_dir.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/common/page_transition_types.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/test/browser_test.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/test/browser_test_base.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_CHROMEOS) 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/chromeos/cros/cros_library.h" 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // defined(OS_CHROMEOS) 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_MACOSX) 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace base { 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace mac { 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ScopedNSAutoreleasePool; 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace mac 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace base 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // OS_MACOSX 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Browser; 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class CommandLine; 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Profile; 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content { 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ContentRendererClient; 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace net { 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class RuleBasedHostResolverProc; 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)// 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// CleanUpOnMainThread() 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, 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::PageTransition transition); 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void AddTabAtIndex(int index, const GURL& url, 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::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) // Override this to add any custom cleanup code that needs to be done on the 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // main thread before the browser is torn down. 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void CleanUpOnMainThread() {} 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // BrowserTestBase: 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void RunTestOnMainThreadLoop() OVERRIDE; 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Creates a browser with a single tab (about:blank), waits for the tab to 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // finish loading and shows the browser. 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This is invoked from Setup. 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Browser* CreateBrowser(Profile* profile); 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Similar to |CreateBrowser|, but creates an incognito browser. 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Browser* CreateIncognitoBrowser(); 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Creates a browser for a popup window with a single tab (about:blank), waits 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // for the tab to finish loading, and shows the browser. 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Browser* CreateBrowserForPopup(Profile* profile); 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Creates a browser for an application and waits for it to load and shows 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the browser. 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Browser* CreateBrowserForApp(const std::string& app_name, Profile* profile); 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Called from the various CreateBrowser methods to add a blank tab, wait for 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the navigation to complete, and show the browser's window. 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void AddBlankTabAndShow(Browser* browser); 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if !defined OS_MACOSX 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Return a CommandLine object that is used to relaunch the browser_test 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // binary as a browser process. This function is deliberately not defined on 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the Mac because re-using an existing browser process when launching from 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the command line isn't a concept that we support on the Mac; AppleEvents 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // are the Mac solution for the same need. Any test based on these functions 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // doesn't apply to the Mac. 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CommandLine GetCommandLineForRelaunch(); 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the host resolver being used for the tests. Subclasses might want 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // to configure it inside tests. 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::RuleBasedHostResolverProc* host_resolver() { 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return host_resolver_.get(); 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_MACOSX) 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the autorelease pool in use inside RunTestOnMainThreadLoop(). 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::mac::ScopedNSAutoreleasePool* AutoreleasePool() const { 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return autorelease_pool_; 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // OS_MACOSX 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Creates a user data directory for the test if one is needed. Returns true 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // if successful. 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool CreateUserDataDirectory() WARN_UNUSED_RESULT; 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Quits all open browsers and waits until there are no more browsers. 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void QuitBrowsers(); 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Prepare command line that will be used to launch the child browser process 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // with an in-process test. 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void PrepareTestCommandLine(CommandLine* command_line); 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Browser created from CreateBrowser. 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Browser* browser_; 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // ContentRendererClient when running in single-process mode. 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<content::ContentRendererClient> single_process_renderer_client_; 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Host resolver to use during the test. 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<net::RuleBasedHostResolverProc> host_resolver_; 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Temporary user data directory. Used only when a user data directory is not 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // specified in the command line. 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedTempDir temp_user_data_dir_; 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_CHROMEOS) 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chromeos::ScopedStubCrosEnabler stub_cros_enabler_; 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // defined(OS_CHROMEOS) 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_MACOSX) 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::mac::ScopedNSAutoreleasePool* autorelease_pool_; 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // OS_MACOSX 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // CHROME_TEST_BASE_IN_PROCESS_BROWSER_TEST_H_ 211