instant_browsertest.cc revision 201ade2fbba22bfb27ae029f4d23fca6ded109a0
1513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch// Copyright (c) 2010 The Chromium Authors. All rights reserved. 2513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch// Use of this source code is governed by a BSD-style license that can be 3513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch// found in the LICENSE file. 4513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 5513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#include "base/command_line.h" 6513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#include "base/stringprintf.h" 7513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#include "base/utf_string_conversions.h" 8513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#include "chrome/browser/autocomplete/autocomplete_edit_view.h" 9513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#include "chrome/browser/browser_list.h" 10513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#include "chrome/browser/browser_process.h" 11513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#include "chrome/browser/browser_window.h" 12513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#include "chrome/browser/instant/instant_controller.h" 13513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#include "chrome/browser/location_bar.h" 14513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#include "chrome/browser/profile.h" 15513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#include "chrome/browser/renderer_host/render_view_host.h" 16201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch#include "chrome/browser/renderer_host/render_widget_host_view.h" 17513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#include "chrome/browser/search_engines/template_url.h" 18513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#include "chrome/browser/search_engines/template_url_model.h" 19513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#include "chrome/browser/tab_contents/tab_contents.h" 20201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch#include "chrome/browser/tab_contents_wrapper.h" 214a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#include "chrome/browser/ui/browser.h" 22513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#include "chrome/common/chrome_switches.h" 23513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#include "chrome/test/in_process_browser_test.h" 24513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#include "chrome/test/ui_test_utils.h" 25513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 26513209b27ff55e2841eac0e4120199c23acce758Ben Murdochclass InstantTest : public InProcessBrowserTest { 27513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch public: 28513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch InstantTest() 29513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch : location_bar_(NULL), 30513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch preview_(NULL) { 31513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EnableDOMAutomation(); 32513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch } 33513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 34513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch void SetupInstantProvider(const std::string& page) { 35513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch TemplateURLModel* model = browser()->profile()->GetTemplateURLModel(); 36513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ASSERT_TRUE(model); 37513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 38513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch if (!model->loaded()) { 39513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch model->Load(); 40513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ui_test_utils::WaitForNotification( 41513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch NotificationType::TEMPLATE_URL_MODEL_LOADED); 42513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch } 43513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 44513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ASSERT_TRUE(model->loaded()); 45513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 46513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // TemplateURLModel takes ownership of this. 47513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch TemplateURL* template_url = new TemplateURL(); 48513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 49513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch std::string url = StringPrintf( 50513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch "http://%s:%d/files/instant/%s?q={searchTerms}", 51513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch test_server()->host_port_pair().host().c_str(), 52513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch test_server()->host_port_pair().port(), 53513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch page.c_str()); 54513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch template_url->SetURL(url, 0, 0); 55513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch template_url->SetInstantURL(url, 0, 0); 56513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch template_url->set_keyword(UTF8ToWide("foo")); 57513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch template_url->set_short_name(UTF8ToWide("foo")); 58513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 59513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch model->Add(template_url); 60513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch model->SetDefaultSearchProvider(template_url); 61513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch } 62513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 63201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch virtual void FindLocationBar() { 64201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch if (location_bar_) 65201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch return; 66513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch location_bar_ = browser()->window()->GetLocationBar(); 67513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ASSERT_TRUE(location_bar_); 68201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch } 69201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 70201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch TabContentsWrapper* GetPendingPreviewContents() { 71201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch return browser()->instant()->GetPendingPreviewContents(); 72201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch } 73201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 74201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Type a character to get instant to trigger. 75201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch void SetupLocationBar() { 76201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch FindLocationBar(); 77513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch location_bar_->location_entry()->SetUserText(L"a"); 78513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch } 79513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 80201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Waits for preview to be shown. 81201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch void WaitForPreviewToNavigate(bool use_current) { 82201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch InstantController* instant = browser()->instant(); 83201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ASSERT_TRUE(instant); 84201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch TabContentsWrapper* tab = use_current ? 85201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch instant->GetPreviewContents() : GetPendingPreviewContents(); 86201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ASSERT_TRUE(tab); 87201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch preview_ = tab->tab_contents(); 88513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ASSERT_TRUE(preview_); 89513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ui_test_utils::WaitForNavigation(&preview_->controller()); 90201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch } 91201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 92201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Wait for instant to load and ensure it is in the state we expect. 93201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch void SetupPreview() { 94201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Wait for the preview to navigate. 95201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch WaitForPreviewToNavigate(true); 96513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 97513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_TRUE(browser()->instant()->IsShowingInstant()); 98201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch EXPECT_FALSE(browser()->instant()->is_displayable()); 99201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch EXPECT_TRUE(browser()->instant()->is_active()); 100513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 101201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // When the page loads, the initial searchBox values are set and only a 102201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // resize will have been sent. 103513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_NO_FATAL_FAILURE(CheckBoolValueFromJavascript( 104513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch true, "window.chrome.sv", preview_)); 105513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_NO_FATAL_FAILURE(CheckIntValueFromJavascript( 106513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 0, "window.onsubmitcalls", preview_)); 107513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_NO_FATAL_FAILURE(CheckIntValueFromJavascript( 108513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 0, "window.oncancelcalls", preview_)); 109513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_NO_FATAL_FAILURE(CheckIntValueFromJavascript( 110513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 0, "window.onchangecalls", preview_)); 111513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_NO_FATAL_FAILURE(CheckIntValueFromJavascript( 112201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 1, "window.onresizecalls", preview_)); 113513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_NO_FATAL_FAILURE(CheckStringValueFromJavascript( 114513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch "a", "window.chrome.searchBox.value", preview_)); 115513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_NO_FATAL_FAILURE(CheckBoolValueFromJavascript( 116513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch false, "window.chrome.searchBox.verbatim", preview_)); 117513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch } 118513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 119513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch void SetLocationBarText(const std::wstring& text) { 120201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ASSERT_NO_FATAL_FAILURE(FindLocationBar()); 121513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch location_bar_->location_entry()->SetUserText(text); 122513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ui_test_utils::WaitForNotification( 123513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch NotificationType::INSTANT_CONTROLLER_SHOWN); 124513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch } 125513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 126513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch void SendKey(app::KeyboardCode key) { 127513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ASSERT_TRUE(ui_test_utils::SendKeyPressSync( 128513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch browser(), key, false, false, false, false)); 129513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch } 130513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 131513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch void CheckStringValueFromJavascript( 132513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch const std::string& expected, 133513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch const std::string& function, 134513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch TabContents* tab_contents) { 135513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch std::string script = StringPrintf( 136513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch "window.domAutomationController.send(%s)", function.c_str()); 137513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch std::string result; 138513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ASSERT_TRUE(ui_test_utils::ExecuteJavaScriptAndExtractString( 139513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch tab_contents->render_view_host(), 140513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch std::wstring(), UTF8ToWide(script), &result)); 141513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_EQ(expected, result); 142513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch } 143513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 144513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch void CheckBoolValueFromJavascript( 145513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch bool expected, 146513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch const std::string& function, 147513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch TabContents* tab_contents) { 148513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch std::string script = StringPrintf( 149513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch "window.domAutomationController.send(%s)", function.c_str()); 150513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch bool result; 151513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ASSERT_TRUE(ui_test_utils::ExecuteJavaScriptAndExtractBool( 152513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch tab_contents->render_view_host(), 153513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch std::wstring(), UTF8ToWide(script), &result)); 154513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_EQ(expected, result); 155513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch } 156513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 157513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch void CheckIntValueFromJavascript( 158513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch int expected, 159513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch const std::string& function, 160513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch TabContents* tab_contents) { 161513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch std::string script = StringPrintf( 162513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch "window.domAutomationController.send(%s)", function.c_str()); 163513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch int result; 164513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ASSERT_TRUE(ui_test_utils::ExecuteJavaScriptAndExtractInt( 165513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch tab_contents->render_view_host(), 166513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch std::wstring(), UTF8ToWide(script), &result)); 167513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_EQ(expected, result); 168513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch } 169513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 170201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Sends a message to the renderer and waits for the response to come back to 171201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // the browser. 172201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch void WaitForMessageToBeProcessedByRenderer(TabContentsWrapper* tab) { 173201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ASSERT_NO_FATAL_FAILURE( 174201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch CheckBoolValueFromJavascript(true, "true", tab->tab_contents())); 175201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch } 176201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 177513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch protected: 178513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch virtual void SetUpCommandLine(CommandLine* command_line) { 179513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch command_line->AppendSwitch(switches::kEnablePredictiveInstant); 180513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch } 181513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 182513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch LocationBar* location_bar_; 183513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch TabContents* preview_; 184513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch}; 185513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 186513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch// TODO(tonyg): Add the following tests: 187513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch// 1. Test that setSuggestions() works. 188513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch// 2. Test that the search box API is not populated for pages other than the 189513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch// default search provider. 190513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch// 3. Test resize events. 191513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 192513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch// Verify that the onchange event is dispatched upon typing in the box. 193201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben MurdochIN_PROC_BROWSER_TEST_F(InstantTest, OnChangeEvent) { 194513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ASSERT_TRUE(test_server()->Start()); 195513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ASSERT_NO_FATAL_FAILURE(SetupInstantProvider("search.html")); 196513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ASSERT_NO_FATAL_FAILURE(SetupLocationBar()); 197513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ASSERT_NO_FATAL_FAILURE(SetupPreview()); 198513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 199513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ASSERT_NO_FATAL_FAILURE(SetLocationBarText(L"abc")); 200513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 201513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // Check that the value is reflected and onchange is called. 202513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_NO_FATAL_FAILURE(CheckStringValueFromJavascript( 203513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch "abc", "window.chrome.searchBox.value", preview_)); 204513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_NO_FATAL_FAILURE(CheckBoolValueFromJavascript( 205513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch false, "window.chrome.searchBox.verbatim", preview_)); 206513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_NO_FATAL_FAILURE(CheckIntValueFromJavascript( 207513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 1, "window.onchangecalls", preview_)); 208513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch} 209513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 210201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch// Verify instant preview is shown correctly for a non-search query. 211201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben MurdochIN_PROC_BROWSER_TEST_F(InstantTest, ShowPreviewNonSearch) { 212201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ASSERT_TRUE(test_server()->Start()); 213201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch GURL url(test_server()->GetURL("files/instant/empty.html")); 214201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ASSERT_NO_FATAL_FAILURE(SetLocationBarText(UTF8ToWide(url.spec()))); 215201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // The preview should be active and showing. 216201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ASSERT_TRUE(browser()->instant()->is_active()); 217201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ASSERT_TRUE(browser()->instant()->is_displayable()); 218201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ASSERT_TRUE(browser()->instant()->IsCurrent()); 219201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ASSERT_TRUE(browser()->instant()->GetPreviewContents()); 220201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch RenderWidgetHostView* rwhv = 221201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch browser()->instant()->GetPreviewContents()->tab_contents()-> 222201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch GetRenderWidgetHostView(); 223201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ASSERT_TRUE(rwhv); 224201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ASSERT_TRUE(rwhv->IsShowing()); 225201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch} 226201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 227201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch// Transition from non-search to search and make sure everything is shown 228201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch// correctly. 229201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben MurdochIN_PROC_BROWSER_TEST_F(InstantTest, NonSearchToSearch) { 230201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ASSERT_TRUE(test_server()->Start()); 231201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch GURL url(test_server()->GetURL("files/instant/empty.html")); 232201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ASSERT_NO_FATAL_FAILURE(SetLocationBarText(UTF8ToWide(url.spec()))); 233201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // The preview should be active and showing. 234201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ASSERT_TRUE(browser()->instant()->is_active()); 235201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ASSERT_TRUE(browser()->instant()->is_displayable()); 236201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch TabContentsWrapper* initial_tab = browser()->instant()->GetPreviewContents(); 237201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ASSERT_TRUE(initial_tab); 238201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch RenderWidgetHostView* rwhv = 239201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch initial_tab->tab_contents()->GetRenderWidgetHostView(); 240201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ASSERT_TRUE(rwhv); 241201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ASSERT_TRUE(rwhv->IsShowing()); 242201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 243201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Now type in some search text. 244201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ASSERT_NO_FATAL_FAILURE(SetupInstantProvider("search.html")); 245201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch location_bar_->location_entry()->SetUserText(L"abc"); 246201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 247201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Wait for the preview to navigate. 248201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ASSERT_NO_FATAL_FAILURE(WaitForPreviewToNavigate(false)); 249201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 250201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // The controller is still determining if the provider really supports 251201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // instant. As a result the tabcontents should not have changed. 252201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch TabContentsWrapper* current_tab = browser()->instant()->GetPreviewContents(); 253201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ASSERT_EQ(current_tab, initial_tab); 254201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // The preview should still be showing. 255201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch rwhv = current_tab->tab_contents()->GetRenderWidgetHostView(); 256201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ASSERT_TRUE(rwhv); 257201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ASSERT_TRUE(rwhv->IsShowing()); 258201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 259201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Use MightSupportInstant as the controller is still determining if the 260201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // page supports instant and hasn't actually commited yet. 261201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch EXPECT_TRUE(browser()->instant()->MightSupportInstant()); 262201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 263201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Instant should still be active. 264201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch EXPECT_TRUE(browser()->instant()->is_active()); 265201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch EXPECT_TRUE(browser()->instant()->is_displayable()); 266201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 267201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Because we're waiting on the page, instant isn't current. 268201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ASSERT_FALSE(browser()->instant()->IsCurrent()); 269201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 270201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Bounce a message to the renderer so that we know the instant has gotten a 271201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // response back from the renderer as to whether the page supports instant. 272201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ASSERT_NO_FATAL_FAILURE( 273201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch WaitForMessageToBeProcessedByRenderer(GetPendingPreviewContents())); 274201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 275201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Reset the user text so that the page is told the text changed. We should be 276201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // able to nuke this once 66104 is fixed. 277201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch location_bar_->location_entry()->SetUserText(L"abcd"); 278201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 279201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Wait for the renderer to process it. 280201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ASSERT_NO_FATAL_FAILURE( 281201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch WaitForMessageToBeProcessedByRenderer(GetPendingPreviewContents())); 282201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 283201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // We should have gotten a response back from the renderer that resulted in 284201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // committing. 285201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ASSERT_FALSE(GetPendingPreviewContents()); 286201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ASSERT_TRUE(browser()->instant()->is_active()); 287201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ASSERT_TRUE(browser()->instant()->is_displayable()); 288201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch TabContentsWrapper* new_tab = browser()->instant()->GetPreviewContents(); 289201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ASSERT_TRUE(new_tab); 290201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ASSERT_NE(new_tab, initial_tab); 291201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch RenderWidgetHostView* new_rwhv = 292201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch new_tab->tab_contents()->GetRenderWidgetHostView(); 293201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ASSERT_TRUE(new_rwhv); 294201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ASSERT_NE(new_rwhv, rwhv); 295201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ASSERT_TRUE(new_rwhv->IsShowing()); 296201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch} 297201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 298201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch// Makes sure that if the server doesn't support the instant API we don't show 299201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch// anything. 300201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben MurdochIN_PROC_BROWSER_TEST_F(InstantTest, SearchServerDoesntSupportInstant) { 301201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ASSERT_TRUE(test_server()->Start()); 302201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ASSERT_NO_FATAL_FAILURE(SetupInstantProvider("empty.html")); 303201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ASSERT_NO_FATAL_FAILURE(FindLocationBar()); 304201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch location_bar_->location_entry()->SetUserText(L"a"); 305201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ASSERT_TRUE(browser()->instant()); 306201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Because we typed in a search string we should think we're showing instant 307201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // results. 308201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch EXPECT_TRUE(browser()->instant()->IsShowingInstant()); 309201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // But because we're waiting to determine if the page really supports instant 310201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // we shouldn't be showing the preview. 311201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch EXPECT_FALSE(browser()->instant()->is_displayable()); 312201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // But instant should still be active. 313201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch EXPECT_TRUE(browser()->instant()->is_active()); 314201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 315201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // When the response comes back that the page doesn't support instant the tab 316201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // should be closed. 317201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ui_test_utils::WaitForNotification(NotificationType::TAB_CLOSED); 318201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch EXPECT_FALSE(browser()->instant()->IsShowingInstant()); 319201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch EXPECT_FALSE(browser()->instant()->is_displayable()); 320201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch EXPECT_TRUE(browser()->instant()->is_active()); 321201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch EXPECT_FALSE(browser()->instant()->IsCurrent()); 322201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch} 323201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 324201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch// Verifies transitioning from loading a non-search string to a search string 325201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch// with the provider not supporting instant works (meaning we don't display 326201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch// anything). 327201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben MurdochIN_PROC_BROWSER_TEST_F(InstantTest, NonSearchToSearchDoesntSupportInstant) { 328201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ASSERT_TRUE(test_server()->Start()); 329201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ASSERT_NO_FATAL_FAILURE(SetupInstantProvider("empty.html")); 330201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch GURL url(test_server()->GetURL("files/instant/empty.html")); 331201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ASSERT_NO_FATAL_FAILURE(SetLocationBarText(UTF8ToWide(url.spec()))); 332201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // The preview should be active and showing. 333201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ASSERT_TRUE(browser()->instant()->is_displayable()); 334201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ASSERT_TRUE(browser()->instant()->is_active()); 335201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch TabContentsWrapper* initial_tab = browser()->instant()->GetPreviewContents(); 336201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ASSERT_TRUE(initial_tab); 337201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch RenderWidgetHostView* rwhv = 338201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch initial_tab->tab_contents()->GetRenderWidgetHostView(); 339201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ASSERT_TRUE(rwhv); 340201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ASSERT_TRUE(rwhv->IsShowing()); 341201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 342201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Now type in some search text. 343201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch location_bar_->location_entry()->SetUserText(L"a"); 344201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 345201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Instant should still be live. 346201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ASSERT_TRUE(browser()->instant()->is_displayable()); 347201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ASSERT_TRUE(browser()->instant()->is_active()); 348201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Because we typed in a search string we should think we're showing instant 349201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // results. 350201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch EXPECT_TRUE(browser()->instant()->MightSupportInstant()); 351201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Instant should not be current (it's still loading). 352201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch EXPECT_FALSE(browser()->instant()->IsCurrent()); 353201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 354201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // When the response comes back that the page doesn't support instant the tab 355201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // should be closed. 356201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ui_test_utils::WaitForNotification(NotificationType::TAB_CLOSED); 357201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch EXPECT_FALSE(browser()->instant()->IsShowingInstant()); 358201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch EXPECT_FALSE(browser()->instant()->is_displayable()); 359201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // But because the omnibox is still open, instant should be active. 360201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ASSERT_TRUE(browser()->instant()->is_active()); 361201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch} 362201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 363201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch// Verifies the page was told a non-zero height. 364201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch// TODO: when we nuke the old api and fix 66104, this test should load 365201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch// search.html. 366201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben MurdochIN_PROC_BROWSER_TEST_F(InstantTest, ValidHeight) { 367201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ASSERT_TRUE(test_server()->Start()); 368201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ASSERT_NO_FATAL_FAILURE(SetupInstantProvider("old_api.html")); 369201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ASSERT_NO_FATAL_FAILURE(SetLocationBarText(L"a")); 370201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // The preview should be active. 371201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ASSERT_TRUE(browser()->instant()->is_displayable()); 372201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // And the height should be valid. 373201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch TabContents* tab = browser()->instant()->GetPreviewContents()->tab_contents(); 374201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ASSERT_NO_FATAL_FAILURE( 375201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch CheckBoolValueFromJavascript(true, "window.validHeight", tab)); 376201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 377201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Check that searchbox height was also set. 378201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch std::wstring script = 379201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch L"window.domAutomationController.send(window.chrome.searchBox.height)"; 380201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch int height; 381201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ASSERT_TRUE(ui_test_utils::ExecuteJavaScriptAndExtractInt( 382201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch tab->render_view_host(), std::wstring(), script, &height)); 383201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch EXPECT_GT(height, 0); 384201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch} 385201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 386201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch// Verifies that if the server returns a 403 we don't show the preview and 387201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch// query the host again. 388201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben MurdochIN_PROC_BROWSER_TEST_F(InstantTest, HideOn403) { 389201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ASSERT_TRUE(test_server()->Start()); 390201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch GURL url(test_server()->GetURL("files/instant/403.html")); 391201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ASSERT_NO_FATAL_FAILURE(FindLocationBar()); 392201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch location_bar_->location_entry()->SetUserText(UTF8ToWide(url.spec())); 393201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // The preview shouldn't be showing, but it should be loading. 394201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ASSERT_TRUE(browser()->instant()->GetPreviewContents()); 395201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ASSERT_TRUE(browser()->instant()->is_active()); 396201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ASSERT_FALSE(browser()->instant()->is_displayable()); 397201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 398201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // When instant sees the 403, it should close the tab. 399201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ui_test_utils::WaitForNotification(NotificationType::TAB_CLOSED); 400201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ASSERT_FALSE(browser()->instant()->GetPreviewContents()); 401201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ASSERT_TRUE(browser()->instant()->is_active()); 402201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ASSERT_FALSE(browser()->instant()->is_displayable()); 403201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 404201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Try loading another url on the server. Instant shouldn't create a new tab 405201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // as the server returned 403. 406201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch GURL url2(test_server()->GetURL("files/instant/empty.html")); 407201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch location_bar_->location_entry()->SetUserText(UTF8ToWide(url2.spec())); 408201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ASSERT_FALSE(browser()->instant()->GetPreviewContents()); 409201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ASSERT_TRUE(browser()->instant()->is_active()); 410201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ASSERT_FALSE(browser()->instant()->is_displayable()); 411201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch} 412201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 413513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch// Verify that the onsubmit event is dispatched upon pressing enter. 414201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch// TODO(sky): Disabled, http://crbug.com/62940. 415201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben MurdochIN_PROC_BROWSER_TEST_F(InstantTest, DISABLED_OnSubmitEvent) { 416513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ASSERT_TRUE(test_server()->Start()); 417513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ASSERT_NO_FATAL_FAILURE(SetupInstantProvider("search.html")); 418513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ASSERT_NO_FATAL_FAILURE(SetupLocationBar()); 419513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ASSERT_NO_FATAL_FAILURE(SetupPreview()); 420513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 421513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ASSERT_NO_FATAL_FAILURE(SetLocationBarText(L"abc")); 422513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ASSERT_NO_FATAL_FAILURE(SendKey(app::VKEY_RETURN)); 423513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 424513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // Check that the preview contents have been committed. 425513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ASSERT_FALSE(browser()->instant()->GetPreviewContents()); 426513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch TabContents* contents = browser()->GetSelectedTabContents(); 427513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ASSERT_TRUE(contents); 428513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 429513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // Check that the value is reflected and onsubmit is called. 430513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_NO_FATAL_FAILURE(CheckBoolValueFromJavascript( 431513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch true, "window.chrome.sv", contents)); 432513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_NO_FATAL_FAILURE(CheckStringValueFromJavascript( 433513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch "abc", "window.chrome.searchBox.value", contents)); 434513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_NO_FATAL_FAILURE(CheckBoolValueFromJavascript( 435513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch true, "window.chrome.searchBox.verbatim", contents)); 436513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_NO_FATAL_FAILURE(CheckIntValueFromJavascript( 437513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 1, "window.onsubmitcalls", contents)); 438513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch} 439513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 440201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch#if defined(OS_MACOSX) 441201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch// Does not pass on Mac. http://crbug.com/64696 442201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch#define MAYBE_OnCancelEvent FAILS_OnCancelEvent 443513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#else 444201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch#define MAYBE_OnCancelEvent OnCancelEvent 445513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#endif 446513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch// Verify that the oncancel event is dispatched upon losing focus. 447513209b27ff55e2841eac0e4120199c23acce758Ben MurdochIN_PROC_BROWSER_TEST_F(InstantTest, MAYBE_OnCancelEvent) { 448513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ASSERT_TRUE(test_server()->Start()); 449513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ASSERT_NO_FATAL_FAILURE(SetupInstantProvider("search.html")); 450513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ASSERT_NO_FATAL_FAILURE(SetupLocationBar()); 451513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ASSERT_NO_FATAL_FAILURE(SetupPreview()); 452513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 453513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ASSERT_NO_FATAL_FAILURE(SetLocationBarText(L"abc")); 454513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ASSERT_NO_FATAL_FAILURE(ui_test_utils::ClickOnView(browser(), 455513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch VIEW_ID_TAB_CONTAINER)); 456513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 457513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // Check that the preview contents have been committed. 458513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ASSERT_FALSE(browser()->instant()->GetPreviewContents()); 459513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch TabContents* contents = browser()->GetSelectedTabContents(); 460513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ASSERT_TRUE(contents); 461513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 462513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // Check that the value is reflected and oncancel is called. 463513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_NO_FATAL_FAILURE(CheckBoolValueFromJavascript( 464513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch true, "window.chrome.sv", contents)); 465513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_NO_FATAL_FAILURE(CheckStringValueFromJavascript( 466513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch "abc", "window.chrome.searchBox.value", contents)); 467513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_NO_FATAL_FAILURE(CheckBoolValueFromJavascript( 468513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch false, "window.chrome.searchBox.verbatim", contents)); 469513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_NO_FATAL_FAILURE(CheckIntValueFromJavascript( 470513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 1, "window.oncancelcalls", contents)); 471513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch} 472