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 "base/bind.h" 61320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/files/file_util.h" 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/format_macros.h" 89ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "base/message_loop/message_loop.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/path_service.h" 10868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/stringprintf.h" 11868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 127dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/chrome_notification_types.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser_commands.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser_tabstrip.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser_window.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/chrome_pages.h" 18cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "chrome/browser/ui/find_bar/find_bar_host_unittest_util.h" 19116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chrome/browser/ui/location_bar/location_bar.h" 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ui/omnibox/omnibox_edit_controller.h" 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ui/omnibox/omnibox_edit_model.h" 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ui/omnibox/omnibox_view.h" 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/tabs/tab_strip_model.h" 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/view_ids.h" 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/chrome_paths.h" 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/url_constants.h" 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/in_process_browser_test.h" 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/test/base/interactive_test_utils.h" 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/ui_test_utils.h" 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/interstitial_page.h" 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/interstitial_page_delegate.h" 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_service.h" 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/render_view_host.h" 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/render_widget_host_view.h" 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/web_contents.h" 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/test/browser_test_utils.h" 37eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "net/test/embedded_test_server/embedded_test_server.h" 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 40cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "base/win/windows_version.h" 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::RenderViewHost; 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::WebContents; 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_LINUX) || defined(OS_MACOSX) 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TODO(jcampan): http://crbug.com/23683 for linux. 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TODO(suzhe): http://crbug.com/49737 for mac. 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define MAYBE_TabsRememberFocusFindInPage DISABLED_TabsRememberFocusFindInPage 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_WIN) 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Flaky, http://crbug.com/62537. 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define MAYBE_TabsRememberFocusFindInPage DISABLED_TabsRememberFocusFindInPage 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The delay waited in some cases where we don't have a notifications for an 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// action we take. 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const int kActionDelayMs = 500; 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 61eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochconst char kSimplePage[] = "/focus/page_with_focus.html"; 62eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochconst char kStealFocusPage[] = "/focus/page_steals_focus.html"; 63eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochconst char kTypicalPage[] = "/focus/typical_page.html"; 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class BrowserFocusTest : public InProcessBrowserTest { 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 67cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // InProcessBrowserTest overrides: 68cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual void SetUpOnMainThread() OVERRIDE { 69cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); 70cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 71cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool IsViewFocused(ViewID vid) { 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return ui_test_utils::IsViewFocused(browser(), vid); 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void ClickOnView(ViewID vid) { 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::ClickOnView(browser(), vid); 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 80cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) void TestFocusTraversal(RenderViewHost* render_view_host, bool reverse) { 81cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const char kGetFocusedElementJS[] = 82cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) "window.domAutomationController.send(getFocusedElement());"; 83cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const char* kExpectedIDs[] = { "textEdit", "searchButton", "luckyButton", 84cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) "googleLink", "gmailLink", "gmapLink" }; 85cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) SCOPED_TRACE(base::StringPrintf("TestFocusTraversal: reverse=%d", reverse)); 86cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ui::KeyboardCode key = ui::VKEY_TAB; 87cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#if defined(OS_MACOSX) 88cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // TODO(msw): Mac requires ui::VKEY_BACKTAB for reverse cycling. Sigh... 89cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) key = reverse ? ui::VKEY_BACKTAB : ui::VKEY_TAB; 90cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#elif defined(OS_WIN) 91cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // This loop times out on Windows XP with no output. http://crbug.com/376635 92cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (base::win::GetVersion() < base::win::VERSION_VISTA) 93cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return; 94cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#endif 95cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 96cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Loop through the focus chain twice for good measure. 97cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) for (size_t i = 0; i < 2; ++i) { 98cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) SCOPED_TRACE(base::StringPrintf("focus outer loop: %" PRIuS, i)); 99cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ASSERT_TRUE(IsViewFocused(VIEW_ID_OMNIBOX)); 100cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Mac requires an extra Tab key press to traverse the app menu button 101cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // iff "Full Keyboard Access" is enabled. This test code should probably 102cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // check the setting via NSApplication's isFullKeyboardAccessEnabled. 103cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 104cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) for (size_t j = 0; j < arraysize(kExpectedIDs); ++j) { 105cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) SCOPED_TRACE(base::StringPrintf("focus inner loop %" PRIuS, j)); 106cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const size_t index = reverse ? arraysize(kExpectedIDs) - 1 - j : j; 107cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // The details are the node's editable state, i.e. true for "textEdit". 108cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) bool is_editable_node = index == 0; 109cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 110cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Press Tab (or Shift+Tab) and check the focused element id. 111cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ASSERT_TRUE(ui_test_utils::SendKeyPressAndWaitWithDetails( 112cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) browser(), key, false, reverse, false, false, 113cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) content::NOTIFICATION_FOCUS_CHANGED_IN_PAGE, 114cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) content::Source<RenderViewHost>(render_view_host), 115cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) content::Details<bool>(&is_editable_node))); 116cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) std::string focused_id; 117cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_TRUE(content::ExecuteScriptAndExtractString( 118cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) render_view_host, kGetFocusedElementJS, &focused_id)); 119cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_STREQ(kExpectedIDs[index], focused_id.c_str()); 120cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 121cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 122cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#if defined(OS_MACOSX) 123cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // TODO(msw): Mac doesn't post NOTIFICATION_FOCUS_RETURNED_TO_BROWSER and 124cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // would also apparently require extra Tab key presses here. Sigh... 125cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) chrome::FocusLocationBar(browser()); 126cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#else 127cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // On the last Tab key press, focus returns to the browser. 128cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ASSERT_TRUE(ui_test_utils::SendKeyPressAndWait( 129cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) browser(), key, false, reverse, false, false, 130cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) chrome::NOTIFICATION_FOCUS_RETURNED_TO_BROWSER, 131cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) content::Source<Browser>(browser()))); 132cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#endif 133cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) content::RunAllPendingInMessageLoop(); 134cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_TRUE(IsViewFocused(VIEW_ID_OMNIBOX)); 135cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 136cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 137cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}; 138cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 139cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// A helper class that waits for an interstitial page to attach. 140cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class WaitForInterstitial : public content::WebContentsObserver { 141cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) public: 142cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) explicit WaitForInterstitial(content::WebContents* tab) 143cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) : WebContentsObserver(tab), 144cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) runner_(new content::MessageLoopRunner) { 145cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) runner_->Run(); 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 147cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 148cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual void DidAttachInterstitialPage() OVERRIDE { runner_->Quit(); } 149cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual void DidDetachInterstitialPage() OVERRIDE { NOTREACHED(); } 150cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 151cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) private: 152cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) scoped_refptr<content::MessageLoopRunner> runner_; 153cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(WaitForInterstitial); 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 156cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// A test interstitial page with typical HTML contents. 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class TestInterstitialPage : public content::InterstitialPageDelegate { 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 159cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) explicit TestInterstitialPage(WebContents* tab) { 1602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath file_path; 161cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) bool success = PathService::Get(chrome::DIR_TEST_DATA, &file_path); 162cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_TRUE(success); 163cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) file_path = file_path.AppendASCII("focus/typical_page.html"); 164cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) success = base::ReadFileToString(file_path, &html_contents_); 165cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_TRUE(success); 166cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) interstitial_page_ = content::InterstitialPage::Create( 167cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) tab, true, GURL("http://interstitial.com"), this); 168cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 169cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Show the interstitial and delay return until it has attached. 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) interstitial_page_->Show(); 171cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) WaitForInterstitial wait(tab); 172cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_TRUE(tab->ShowingInterstitialPage()); 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 175cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual std::string GetHTMLContents() OVERRIDE { return html_contents_; } 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RenderViewHost* render_view_host() { 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return interstitial_page_->GetRenderViewHostForTesting(); 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 181cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) void DontProceed() { interstitial_page_->DontProceed(); } 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 183cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) bool HasFocus() { return render_view_host()->GetView()->HasFocus(); } 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string html_contents_; 187cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) content::InterstitialPage* interstitial_page_; // Owns this. 188cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(TestInterstitialPage); 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Flaky on mac. http://crbug.com/67301. 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_MACOSX) 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define MAYBE_ClickingMovesFocus DISABLED_ClickingMovesFocus 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define MAYBE_ClickingMovesFocus ClickingMovesFocus 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserFocusTest, MAYBE_ClickingMovesFocus) { 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser())); 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_POSIX) 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // It seems we have to wait a little bit for the widgets to spin up before 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // we can start clicking on them. 202b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) base::MessageLoop::current()->PostDelayedTask( 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FROM_HERE, 204b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) base::MessageLoop::QuitClosure(), 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::TimeDelta::FromMilliseconds(kActionDelayMs)); 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::RunMessageLoop(); 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // defined(OS_POSIX) 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(IsViewFocused(VIEW_ID_OMNIBOX)); 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ClickOnView(VIEW_ID_TAB_CONTAINER); 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(IsViewFocused(VIEW_ID_TAB_CONTAINER)); 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ClickOnView(VIEW_ID_OMNIBOX); 2152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(IsViewFocused(VIEW_ID_OMNIBOX)); 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Flaky, http://crbug.com/69034. 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserFocusTest, DISABLED_BrowsersRememberFocus) { 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser())); 221cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const GURL url = embedded_test_server()->GetURL(kSimplePage); 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::NavigateToURL(browser(), url); 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::NativeWindow window = browser()->window()->GetNativeWindow(); 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The focus should be on the Tab contents. 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(IsViewFocused(VIEW_ID_TAB_CONTAINER)); 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Now hide the window, show it again, the focus should not have changed. 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::HideNativeWindow(window); 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(ui_test_utils::ShowAndFocusNativeWindow(window)); 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(IsViewFocused(VIEW_ID_TAB_CONTAINER)); 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::FocusLocationBar(browser()); 2342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(IsViewFocused(VIEW_ID_OMNIBOX)); 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Hide the window, show it again, the focus should not have changed. 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::HideNativeWindow(window); 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(ui_test_utils::ShowAndFocusNativeWindow(window)); 2382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(IsViewFocused(VIEW_ID_OMNIBOX)); 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tabs remember focus. 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Disabled, http://crbug.com/62542. 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserFocusTest, DISABLED_TabsRememberFocus) { 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser())); 245cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const GURL url = embedded_test_server()->GetURL(kSimplePage); 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::NavigateToURL(browser(), url); 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Create several tabs. 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (int i = 0; i < 4; ++i) { 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::AddSelectedTabWithURL(browser(), url, 2511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ui::PAGE_TRANSITION_TYPED); 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Alternate focus for the tab. 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const bool kFocusPage[3][5] = { 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { true, true, true, true, false }, 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { false, false, false, false, false }, 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { false, true, false, true, false } 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (int i = 1; i < 3; i++) { 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (int j = 0; j < 5; j++) { 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Activate the tab. 2642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->tab_strip_model()->ActivateTabAt(j, true); 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Activate the location bar or the page. 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (kFocusPage[i][j]) { 268010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) browser()->tab_strip_model()->GetWebContentsAt(j)->Focus(); 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::FocusLocationBar(browser()); 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Now come back to the tab and check the right view is focused. 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (int j = 0; j < 5; j++) { 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Activate the tab. 2772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->tab_strip_model()->ActivateTabAt(j, true); 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ViewID vid = kFocusPage[i][j] ? VIEW_ID_TAB_CONTAINER : VIEW_ID_OMNIBOX; 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(IsViewFocused(vid)); 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->tab_strip_model()->ActivateTabAt(0, true); 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Try the above, but with ctrl+tab. Since tab normally changes focus, 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // this has regressed in the past. Loop through several times to be sure. 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (int j = 0; j < 15; j++) { 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ViewID vid = kFocusPage[i][j % 5] ? VIEW_ID_TAB_CONTAINER : 2882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VIEW_ID_OMNIBOX; 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(IsViewFocused(vid)); 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(ui_test_utils::SendKeyPressSync( 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser(), ui::VKEY_TAB, true, false, false, false)); 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // As above, but with ctrl+shift+tab. 2962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->tab_strip_model()->ActivateTabAt(4, true); 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (int j = 14; j >= 0; --j) { 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ViewID vid = kFocusPage[i][j % 5] ? VIEW_ID_TAB_CONTAINER : 2992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VIEW_ID_OMNIBOX; 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(IsViewFocused(vid)); 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(ui_test_utils::SendKeyPressSync( 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser(), ui::VKEY_TAB, true, true, false, false)); 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tabs remember focus with find-in-page box. 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserFocusTest, MAYBE_TabsRememberFocusFindInPage) { 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser())); 311cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const GURL url = embedded_test_server()->GetURL(kSimplePage); 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::NavigateToURL(browser(), url); 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::Find(browser()); 3152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui_test_utils::FindInPage( 3162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->tab_strip_model()->GetActiveWebContents(), 3175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::ASCIIToUTF16("a"), true, false, NULL, NULL); 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(IsViewFocused(VIEW_ID_FIND_IN_PAGE_TEXT_FIELD)); 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Focus the location bar. 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::FocusLocationBar(browser()); 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Create a 2nd tab. 3241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci chrome::AddSelectedTabWithURL(browser(), url, ui::PAGE_TRANSITION_TYPED); 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Focus should be on the recently opened tab page. 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(IsViewFocused(VIEW_ID_TAB_CONTAINER)); 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Select 1st tab, focus should still be on the location-bar. 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // (bug http://crbug.com/23296) 3312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->tab_strip_model()->ActivateTabAt(0, true); 3322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(IsViewFocused(VIEW_ID_OMNIBOX)); 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Now open the find box again, switch to another tab and come back, the focus 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // should return to the find box. 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::Find(browser()); 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(IsViewFocused(VIEW_ID_FIND_IN_PAGE_TEXT_FIELD)); 3382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->tab_strip_model()->ActivateTabAt(1, true); 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(IsViewFocused(VIEW_ID_TAB_CONTAINER)); 3402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->tab_strip_model()->ActivateTabAt(0, true); 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(IsViewFocused(VIEW_ID_FIND_IN_PAGE_TEXT_FIELD)); 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Background window does not steal focus. 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Flaky, http://crbug.com/62538. 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserFocusTest, 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISABLED_BackgroundBrowserDontStealFocus) { 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser())); 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Open a new browser window. 3512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Browser* browser2 = 3522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new Browser(Browser::CreateParams(browser()->profile(), 3532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->host_desktop_type())); 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(browser2); 355f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) chrome::AddTabAt(browser2, GURL(), -1, true); 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser2->window()->Show(); 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Browser* focused_browser = NULL; 3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Browser* unfocused_browser = NULL; 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(USE_X11) 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // On X11, calling Activate() is not guaranteed to move focus, so we have 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // to figure out which browser does have focus. 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (browser2->window()->IsActive()) { 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) focused_browser = browser2; 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unfocused_browser = browser(); 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (browser()->window()->IsActive()) { 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) focused_browser = browser(); 3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unfocused_browser = browser2; 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FAIL() << "Could not determine which browser has focus"; 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_WIN) 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) focused_browser = browser(); 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unfocused_browser = browser2; 3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_MACOSX) 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // On Mac, the newly created window always gets the focus. 3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) focused_browser = browser2; 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unfocused_browser = browser(); 3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 381cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const GURL steal_focus_url = embedded_test_server()->GetURL(kStealFocusPage); 3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::NavigateToURL(unfocused_browser, steal_focus_url); 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Activate the first browser. 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) focused_browser->window()->Activate(); 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(content::ExecuteScript( 3882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) unfocused_browser->tab_strip_model()->GetActiveWebContents(), 3892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "stealFocus();")); 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make sure the first browser is still active. 3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(focused_browser->window()->IsActive()); 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3951e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#if defined(OS_LINUX) && !defined(OS_CHROMEOS) && defined(USE_AURA) 3961e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// TODO(erg): http://crbug.com/163931 3971e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#define MAYBE_LocationBarLockFocus DISABLED_LocationBarLockFocus 3981e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#else 3991e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#define MAYBE_LocationBarLockFocus LocationBarLockFocus 4001e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#endif 4011e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Page cannot steal focus when focus is on location bar. 4031e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserFocusTest, MAYBE_LocationBarLockFocus) { 4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser())); 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Open the page that steals focus. 407cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const GURL url = embedded_test_server()->GetURL(kStealFocusPage); 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::NavigateToURL(browser(), url); 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::FocusLocationBar(browser()); 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(content::ExecuteScript( 4132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->tab_strip_model()->GetActiveWebContents(), 4142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "stealFocus();")); 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make sure the location bar is still focused. 4172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(IsViewFocused(VIEW_ID_OMNIBOX)); 4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 420cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Test forward and reverse focus traversal on a typical page. 421cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserFocusTest, FocusTraversal) { 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser())); 423cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const GURL url = embedded_test_server()->GetURL(kTypicalPage); 4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::NavigateToURL(browser(), url); 425cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_TRUE(IsViewFocused(VIEW_ID_TAB_CONTAINER)); 4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::FocusLocationBar(browser()); 4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 428cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) WebContents* tab = browser()->tab_strip_model()->GetActiveWebContents(); 429cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_NO_FATAL_FAILURE(TestFocusTraversal(tab->GetRenderViewHost(), false)); 430cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_NO_FATAL_FAILURE(TestFocusTraversal(tab->GetRenderViewHost(), true)); 4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 433cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Test forward and reverse focus traversal while an interstitial is showing. 43446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// Disabled, see http://crbug.com/60973 43546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserFocusTest, DISABLED_FocusTraversalOnInterstitial) { 4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser())); 437cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const GURL url = embedded_test_server()->GetURL(kSimplePage); 4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::NavigateToURL(browser(), url); 439cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_TRUE(IsViewFocused(VIEW_ID_TAB_CONTAINER)); 4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 441cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Create and show a test interstitial page. 4422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TestInterstitialPage* interstitial_page = new TestInterstitialPage( 443cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) browser()->tab_strip_model()->GetActiveWebContents()); 444cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) content::RenderViewHost* host = interstitial_page->render_view_host(); 4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 446cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_TRUE(IsViewFocused(VIEW_ID_TAB_CONTAINER)); 4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::FocusLocationBar(browser()); 448cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_NO_FATAL_FAILURE(TestFocusTraversal(host, false)); 449cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_NO_FATAL_FAILURE(TestFocusTraversal(host, true)); 4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 452cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Test the transfer of focus when an interstitial is shown and hidden. 453cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserFocusTest, InterstitialFocus) { 4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser())); 455cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const GURL url = embedded_test_server()->GetURL(kSimplePage); 4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::NavigateToURL(browser(), url); 457cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) WebContents* tab = browser()->tab_strip_model()->GetActiveWebContents(); 458cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_TRUE(IsViewFocused(VIEW_ID_TAB_CONTAINER)); 459cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_TRUE(tab->GetRenderViewHost()->GetView()->HasFocus()); 4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 461cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Create and show a test interstitial page; it should gain focus. 462cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) TestInterstitialPage* interstitial_page = new TestInterstitialPage(tab); 463cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_TRUE(IsViewFocused(VIEW_ID_TAB_CONTAINER)); 4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(interstitial_page->HasFocus()); 4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 466cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Hide the interstitial; the original page should gain focus. 4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) interstitial_page->DontProceed(); 468cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) content::RunAllPendingInMessageLoop(); 469cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_TRUE(IsViewFocused(VIEW_ID_TAB_CONTAINER)); 470cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_TRUE(tab->GetRenderViewHost()->GetView()->HasFocus()); 4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 473cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Test that find-in-page UI can request focus, even when it is already open. 4741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#if defined(OS_MACOSX) 4751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#define MAYBE_FindFocusTest DISABLED_FindFocusTest 4761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#else 4771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#define MAYBE_FindFocusTest FindFocusTest 4781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#endif 4791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciIN_PROC_BROWSER_TEST_F(BrowserFocusTest, MAYBE_FindFocusTest) { 480cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) chrome::DisableFindBarAnimationsDuringTesting(true); 4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser())); 482cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const GURL url = embedded_test_server()->GetURL(kTypicalPage); 4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::NavigateToURL(browser(), url); 484cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_TRUE(IsViewFocused(VIEW_ID_TAB_CONTAINER)); 4855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 486cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) chrome::ShowFindBar(browser()); 487cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_TRUE(IsViewFocused(VIEW_ID_FIND_IN_PAGE_TEXT_FIELD)); 4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::FocusLocationBar(browser()); 490cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_TRUE(IsViewFocused(VIEW_ID_OMNIBOX)); 4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 492cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) chrome::ShowFindBar(browser()); 493cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_TRUE(IsViewFocused(VIEW_ID_FIND_IN_PAGE_TEXT_FIELD)); 4945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ClickOnView(VIEW_ID_TAB_CONTAINER); 496cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_TRUE(IsViewFocused(VIEW_ID_TAB_CONTAINER)); 4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 498cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) chrome::ShowFindBar(browser()); 499cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_TRUE(IsViewFocused(VIEW_ID_FIND_IN_PAGE_TEXT_FIELD)); 5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Makes sure the focus is in the right location when opening the different 5035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// types of tabs. 5045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Flaky, http://crbug.com/62539. 5055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserFocusTest, DISABLED_TabInitialFocus) { 5065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser())); 5075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Open the history tab, focus should be on the tab contents. 5095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::ShowHistory(browser()); 5105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(content::WaitForLoadStop( 5112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->tab_strip_model()->GetActiveWebContents())); 5125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(IsViewFocused(VIEW_ID_TAB_CONTAINER)); 5135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Open the new tab, focus should be on the location bar. 5155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NewTab(browser()); 5165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(content::WaitForLoadStop( 5172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->tab_strip_model()->GetActiveWebContents())); 5182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(IsViewFocused(VIEW_ID_OMNIBOX)); 5195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Open the download tab, focus should be on the tab contents. 5215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::ShowDownloads(browser()); 5225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(content::WaitForLoadStop( 5232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->tab_strip_model()->GetActiveWebContents())); 5245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(IsViewFocused(VIEW_ID_TAB_CONTAINER)); 5255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Open about:blank, focus should be on the location bar. 527f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) chrome::AddSelectedTabWithURL( 5281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci browser(), GURL(url::kAboutBlankURL), ui::PAGE_TRANSITION_LINK); 5295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(content::WaitForLoadStop( 5302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->tab_strip_model()->GetActiveWebContents())); 5312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(IsViewFocused(VIEW_ID_OMNIBOX)); 5325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5341e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#if defined(OS_LINUX) && !defined(OS_CHROMEOS) && defined(USE_AURA) 5351e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// TODO(erg): http://crbug.com/163931 5361e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#define MAYBE_FocusOnReload DISABLED_FocusOnReload 5371e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#else 5381e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#define MAYBE_FocusOnReload FocusOnReload 5391e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#endif 5401e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 5415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests that focus goes where expected when using reload. 5421e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserFocusTest, MAYBE_FocusOnReload) { 5435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser())); 5445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Open the new tab, reload. 5465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 5475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::WindowedNotificationObserver observer( 5485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NOTIFICATION_LOAD_STOP, 5495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::AllSources()); 5505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NewTab(browser()); 5515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) observer.Wait(); 5525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::RunAllPendingInMessageLoop(); 5545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 5565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::WindowedNotificationObserver observer( 5575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NOTIFICATION_LOAD_STOP, 558cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) content::Source<content::NavigationController>( 5592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &browser()->tab_strip_model()->GetActiveWebContents()-> 5602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetController())); 5615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::Reload(browser(), CURRENT_TAB); 5625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) observer.Wait(); 5635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Focus should stay on the location bar. 5652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(IsViewFocused(VIEW_ID_OMNIBOX)); 5665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Open a regular page, focus the location bar, reload. 568eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ui_test_utils::NavigateToURL(browser(), 569eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch embedded_test_server()->GetURL(kSimplePage)); 5705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::FocusLocationBar(browser()); 5712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(IsViewFocused(VIEW_ID_OMNIBOX)); 5725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 5735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::WindowedNotificationObserver observer( 5745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NOTIFICATION_LOAD_STOP, 575cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) content::Source<content::NavigationController>( 5762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &browser()->tab_strip_model()->GetActiveWebContents()-> 5772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetController())); 5785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::Reload(browser(), CURRENT_TAB); 5795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) observer.Wait(); 5805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Focus should now be on the tab contents. 5835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::ShowDownloads(browser()); 5845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(IsViewFocused(VIEW_ID_TAB_CONTAINER)); 5855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests that focus goes where expected when using reload on a crashed tab. 5885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserFocusTest, DISABLED_FocusOnReloadCrashedTab) { 5895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser())); 5905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Open a regular page, crash, reload. 592eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ui_test_utils::NavigateToURL(browser(), 593eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch embedded_test_server()->GetURL(kSimplePage)); 5942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::CrashTab(browser()->tab_strip_model()->GetActiveWebContents()); 5955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 5965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::WindowedNotificationObserver observer( 5975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NOTIFICATION_LOAD_STOP, 598cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) content::Source<content::NavigationController>( 5992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &browser()->tab_strip_model()->GetActiveWebContents()-> 6002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetController())); 6015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::Reload(browser(), CURRENT_TAB); 6025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) observer.Wait(); 6035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Focus should now be on the tab contents. 6065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::ShowDownloads(browser()); 6075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(IsViewFocused(VIEW_ID_TAB_CONTAINER)); 6085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6108bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)// Tests that focus goes to frame after crashed tab. 6118bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)// TODO(shrikant): Find out where the focus should be deterministically. 6128bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)// Currently focused_view after crash seem to be non null in debug mode 6138bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)// (invalidated pointer 0xcccccc). 6148bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserFocusTest, DISABLED_FocusAfterCrashedTab) { 6158bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) ASSERT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser())); 6168bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 6178bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) content::CrashTab(browser()->tab_strip_model()->GetActiveWebContents()); 6188bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 6198bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) ASSERT_TRUE(IsViewFocused(VIEW_ID_TAB_CONTAINER)); 6208bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)} 6218bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 6222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Tests that when a new tab is opened from the omnibox, the focus is moved from 6232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// the omnibox for the current tab. 624cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserFocusTest, NavigateFromOmniboxIntoNewTab) { 6252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GURL url("http://www.google.com/"); 6262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GURL url2("http://maps.google.com/"); 6272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Navigate to url. 6291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci chrome::NavigateParams p(browser(), url, ui::PAGE_TRANSITION_LINK); 6302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) p.window_action = chrome::NavigateParams::SHOW_WINDOW; 6312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) p.disposition = CURRENT_TAB; 6322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::Navigate(&p); 6332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Focus the omnibox. 6352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::FocusLocationBar(browser()); 6362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 637cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) OmniboxEditController* controller = browser()->window()->GetLocationBar()-> 638cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) GetOmniboxView()->model()->controller(); 6392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Simulate an alt-enter. 6412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) controller->OnAutocompleteAccept(url2, NEW_FOREGROUND_TAB, 6421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ui::PAGE_TRANSITION_TYPED); 6432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Make sure the second tab is selected. 6452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, browser()->tab_strip_model()->active_index()); 6462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The tab contents should have the focus in the second tab. 648cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_TRUE(IsViewFocused(VIEW_ID_TAB_CONTAINER)); 6492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Go back to the first tab. The focus should not be in the omnibox. 6512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::SelectPreviousTab(browser()); 6522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(0, browser()->tab_strip_model()->active_index()); 653cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_FALSE(IsViewFocused(VIEW_ID_OMNIBOX)); 6542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 6552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 656f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// This functionality is currently broken. http://crbug.com/304865. 657f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// 658f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)//#if defined(OS_LINUX) && !defined(OS_CHROMEOS) && defined(USE_AURA) 659f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)//// TODO(erg): http://crbug.com/163931 660f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)//#define MAYBE_FocusOnNavigate DISABLED_FocusOnNavigate 661f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)//#else 662f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)//#define MAYBE_FocusOnNavigate FocusOnNavigate 663f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)//#endif 6641e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 665f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(BrowserFocusTest, DISABLED_FocusOnNavigate) { 666c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Needed on Mac. 667c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser())); 668c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Load the NTP. 669c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ui_test_utils::NavigateToURL(browser(), GURL(chrome::kChromeUINewTabURL)); 670c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_TRUE(IsViewFocused(VIEW_ID_OMNIBOX)); 671c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 672c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Navigate to another page. 673c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::FilePath::CharType* kEmptyFile = FILE_PATH_LITERAL("empty.html"); 674c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GURL file_url(ui_test_utils::GetTestUrl(base::FilePath( 675c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::FilePath::kCurrentDirectory), base::FilePath(kEmptyFile))); 676c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ui_test_utils::NavigateToURL(browser(), file_url); 677c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 678c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ClickOnView(VIEW_ID_TAB_CONTAINER); 679c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 680c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Navigate back. Should focus the location bar. 681c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { 682c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) content::WindowedNotificationObserver back_nav_observer( 683c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) content::NOTIFICATION_NAV_ENTRY_COMMITTED, 684c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) content::NotificationService::AllSources()); 685c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) chrome::GoBack(browser(), CURRENT_TAB); 686c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) back_nav_observer.Wait(); 687c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 688c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 689c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_TRUE(IsViewFocused(VIEW_ID_OMNIBOX)); 690c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 691c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Navigate forward. Shouldn't focus the location bar. 692c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ClickOnView(VIEW_ID_TAB_CONTAINER); 693c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { 694c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) content::WindowedNotificationObserver forward_nav_observer( 695c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) content::NOTIFICATION_NAV_ENTRY_COMMITTED, 696c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) content::NotificationService::AllSources()); 697c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) chrome::GoForward(browser(), CURRENT_TAB); 698c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) forward_nav_observer.Wait(); 699c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 700c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 701c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_FALSE(IsViewFocused(VIEW_ID_OMNIBOX)); 702c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 703c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 7045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace 705