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