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_BROWSER_WITH_TEST_WINDOW_TEST_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHROME_TEST_BASE_BROWSER_WITH_TEST_WINDOW_TEST_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/at_exit.h" 99ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "base/message_loop/message_loop.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser.h" 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ui/host_desktop.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/test_browser_window.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/testing_profile.h" 14a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch#include "content/public/test/test_browser_thread_bundle.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/test/test_renderer_host.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#if defined(OS_CHROMEOS) 19c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/chromeos/login/user_manager.h" 20c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/chromeos/settings/cros_settings.h" 21c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/chromeos/settings/device_settings_service.h" 22c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif 23c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/win/scoped_ole_initializer.h" 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class GURL; 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 30c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#if defined(USE_ASH) 31c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace ash { 32c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace test { 33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class AshTestHelper; 34c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 35c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 36c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif 37c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(USE_AURA) 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace aura { 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace test { 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class AuraTestHelper; 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content { 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class NavigationController; 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WebContents; 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Base class for browser based unit tests. BrowserWithTestWindowTest creates a 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Browser with a TestingProfile and TestBrowserWindow. To add a tab use 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// AddTab. For example, the following adds a tab and navigates to 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// two URLs that target the TestWebContents: 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// // Add a new tab and navigate it. This will be at index 0. 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// AddTab(browser(), GURL("http://foo/1")); 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// NavigationController* controller = 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// &browser()->tab_strip_model()->GetWebContentsAt(0)->GetController(); 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// // Navigate somewhere else. 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// GURL url2("http://foo/2"); 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// NavigateAndCommit(controller, url2); 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// // This is equivalent to the above, and lets you test pending navigations. 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// browser()->OpenURL(OpenURLParams( 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// GURL("http://foo/2"), GURL(), CURRENT_TAB, 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// content::PAGE_TRANSITION_TYPED, false)); 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// CommitPendingLoad(controller); 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Subclasses must invoke BrowserWithTestWindowTest::SetUp as it is responsible 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// for creating the various objects of this class. 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class BrowserWithTestWindowTest : public testing::Test { 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Creates a BrowserWithTestWindowTest for which the initial window will be 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // created on the native desktop. 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserWithTestWindowTest(); 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~BrowserWithTestWindowTest(); 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 80c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Sets the desktop on which the initial window will be created. Must be 81c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // called before SetUp(). 82c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void SetHostDesktopType(chrome::HostDesktopType host_desktop_type); 83c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetUp() OVERRIDE; 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void TearDown() OVERRIDE; 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 88c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) BrowserWindow* window() const { return window_.get(); } 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Browser* browser() const { return browser_.get(); } 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void set_browser(Browser* browser) { 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser_.reset(browser); 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 94c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Browser* release_browser() WARN_UNUSED_RESULT { 95c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return browser_.release(); 96c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestingProfile* profile() const { return profile_.get(); } 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1007d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) TestingProfile* GetProfile() { return profile_.get(); } 1017d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1027d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) BrowserWindow* release_browser_window() WARN_UNUSED_RESULT { 1037d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return window_.release(); 1047d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 1057d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Adds a tab to |browser| with the given URL and commits the load. 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This is a convenience function. The new tab will be added at index 0. 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void AddTab(Browser* browser, const GURL& url); 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Commits the pending load on the given controller. It will keep the 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // URL of the pending load. If there is no pending load, this does nothing. 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void CommitPendingLoad(content::NavigationController* controller); 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Creates a pending navigation on the given navigation controller to the 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // given URL with the default parameters and the commits the load with a page 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // ID one larger than any seen. This emulates what happens on a new 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // navigation. 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void NavigateAndCommit(content::NavigationController* controller, 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& url); 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Navigates the current tab. This is a wrapper around NavigateAndCommit. 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void NavigateAndCommitActiveTab(const GURL& url); 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Set the |title| of the current tab. 1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void NavigateAndCommitActiveTabWithTitle( 1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Browser* browser, 1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const GURL& url, 1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const string16& title); 1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Destroys the browser, window, and profile created by this class. This is 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // invoked from the destructor. 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void DestroyBrowserAndProfile(); 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Creates the profile used by this test. The caller owns the return value. 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual TestingProfile* CreateProfile(); 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 137c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Creates the BrowserWindow used by this test. The caller owns the return 138c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // value. Can return NULL to use the default window created by Browser. 139c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual BrowserWindow* CreateBrowserWindow(); 140c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We need to create a MessageLoop, otherwise a bunch of things fails. 143a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch content::TestBrowserThreadBundle thread_bundle_; 1442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::ShadowingAtExitManager at_exit_manager_; 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 146c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#if defined(OS_CHROMEOS) 147c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) chromeos::ScopedTestDeviceSettingsService test_device_settings_service_; 148c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) chromeos::ScopedTestCrosSettings test_cros_settings_; 149c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) chromeos::ScopedTestUserManager test_user_manager_; 150c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif 151c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<TestingProfile> profile_; 153c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_ptr<BrowserWindow> window_; // Usually a TestBrowserWindow. 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<Browser> browser_; 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The existence of this object enables tests via 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // RenderViewHostTester. 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::RenderViewHostTestEnabler rvh_test_enabler_; 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 160c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#if defined(USE_ASH) 161c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_ptr<ash::test::AshTestHelper> ash_test_helper_; 162c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(USE_AURA) 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<aura::test::AuraTestHelper> aura_test_helper_; 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ScopedOleInitializer ole_initializer_; 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The desktop to create the initial window on. 1722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::HostDesktopType host_desktop_type_; 1732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(BrowserWithTestWindowTest); 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // CHROME_TEST_BASE_BROWSER_WITH_TEST_WINDOW_TEST_H_ 178