172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Copyright (c) 2011 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" 8ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/autocomplete/autocomplete_edit.h" 9513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#include "chrome/browser/autocomplete/autocomplete_edit_view.h" 10ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/content_settings/host_content_settings_map.h" 11513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#include "chrome/browser/instant/instant_controller.h" 1272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "chrome/browser/instant/instant_loader.h" 1372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "chrome/browser/instant/instant_loader_manager.h" 1421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "chrome/browser/profiles/profile.h" 15513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#include "chrome/browser/search_engines/template_url.h" 16513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#include "chrome/browser/search_engines/template_url_model.h" 174a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#include "chrome/browser/ui/browser.h" 18ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/ui/browser_list.h" 19ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/ui/browser_window.h" 2021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "chrome/browser/ui/omnibox/location_bar.h" 2121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h" 22dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "chrome/common/url_constants.h" 23513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#include "chrome/test/in_process_browser_test.h" 24513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#include "chrome/test/ui_test_utils.h" 25dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "content/browser/renderer_host/render_view_host.h" 26dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "content/browser/renderer_host/render_widget_host_view.h" 27dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "content/browser/tab_contents/tab_contents.h" 28513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 2972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#define EXPECT_STR_EQ(ascii, utf16) \ 3072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_EQ(ASCIIToWide(ascii), UTF16ToWide(utf16)) 3172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 32513209b27ff55e2841eac0e4120199c23acce758Ben Murdochclass InstantTest : public InProcessBrowserTest { 33513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch public: 34513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch InstantTest() 35513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch : location_bar_(NULL), 36513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch preview_(NULL) { 3721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen set_show_window(true); 38513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EnableDOMAutomation(); 39513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch } 40513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 4172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen void EnableInstant() { 4272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen InstantController::Enable(browser()->profile()); 4372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen } 4472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 45513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch void SetupInstantProvider(const std::string& page) { 46513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch TemplateURLModel* model = browser()->profile()->GetTemplateURLModel(); 47513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ASSERT_TRUE(model); 48513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 49513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch if (!model->loaded()) { 50513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch model->Load(); 51513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ui_test_utils::WaitForNotification( 52513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch NotificationType::TEMPLATE_URL_MODEL_LOADED); 53513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch } 54513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 55513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ASSERT_TRUE(model->loaded()); 56513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 57513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // TemplateURLModel takes ownership of this. 58513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch TemplateURL* template_url = new TemplateURL(); 59513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 60513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch std::string url = StringPrintf( 61513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch "http://%s:%d/files/instant/%s?q={searchTerms}", 62513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch test_server()->host_port_pair().host().c_str(), 63513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch test_server()->host_port_pair().port(), 64513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch page.c_str()); 65513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch template_url->SetURL(url, 0, 0); 66513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch template_url->SetInstantURL(url, 0, 0); 6772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen template_url->set_keyword(ASCIIToUTF16("foo")); 6872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen template_url->set_short_name(ASCIIToUTF16("foo")); 69513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 70513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch model->Add(template_url); 71513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch model->SetDefaultSearchProvider(template_url); 72513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch } 73513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 7421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen void FindLocationBar() { 75201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch if (location_bar_) 76201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch return; 77513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch location_bar_ = browser()->window()->GetLocationBar(); 78513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ASSERT_TRUE(location_bar_); 79201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch } 80201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 81201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch TabContentsWrapper* GetPendingPreviewContents() { 82201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch return browser()->instant()->GetPendingPreviewContents(); 83201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch } 84201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 85201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Type a character to get instant to trigger. 86201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch void SetupLocationBar() { 87201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch FindLocationBar(); 88dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // "a" triggers the "about:" provider. "b" begins the "bing.com" keyword. 89dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // "c" might someday trigger a "chrome:" provider. 90dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen location_bar_->location_entry()->SetUserText(ASCIIToUTF16("d")); 91513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch } 92513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 93201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Waits for preview to be shown. 94201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch void WaitForPreviewToNavigate(bool use_current) { 95201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch InstantController* instant = browser()->instant(); 96201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ASSERT_TRUE(instant); 97201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch TabContentsWrapper* tab = use_current ? 98201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch instant->GetPreviewContents() : GetPendingPreviewContents(); 99201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ASSERT_TRUE(tab); 100201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch preview_ = tab->tab_contents(); 101513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ASSERT_TRUE(preview_); 102513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ui_test_utils::WaitForNavigation(&preview_->controller()); 103201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch } 104201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 105201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Wait for instant to load and ensure it is in the state we expect. 106201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch void SetupPreview() { 107201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Wait for the preview to navigate. 108201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch WaitForPreviewToNavigate(true); 109513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 11021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen ASSERT_TRUE(browser()->instant()->IsShowingInstant()); 11121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen ASSERT_FALSE(browser()->instant()->is_displayable()); 11221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen ASSERT_TRUE(browser()->instant()->is_active()); 113513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 114201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // When the page loads, the initial searchBox values are set and only a 115201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // resize will have been sent. 116dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen ASSERT_EQ("true 0 0 0 1 d false d false 1 1", 117ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen GetSearchStateAsString(preview_, false)); 118513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch } 119513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 120dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen void SetLocationBarText(const std::string& text) { 121201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ASSERT_NO_FATAL_FAILURE(FindLocationBar()); 122dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen location_bar_->location_entry()->SetUserText(UTF8ToUTF16(text)); 123513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ui_test_utils::WaitForNotification( 124513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch NotificationType::INSTANT_CONTROLLER_SHOWN); 125513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch } 126513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 12772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen const string16& GetSuggestion() const { 12872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen return browser()->instant()->loader_manager_-> 12972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen current_loader()->complete_suggested_text_; 13072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen } 13172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 13272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen void SendKey(ui::KeyboardCode key) { 133513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ASSERT_TRUE(ui_test_utils::SendKeyPressSync( 134513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch browser(), key, false, false, false, false)); 135513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch } 136513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 13772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen void SetSuggestionsJavascriptArgument(TabContents* tab_contents, 13872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen const std::string& argument) { 13972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen std::string script = StringPrintf( 14072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen "window.setSuggestionsArgument = %s;", argument.c_str()); 14172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ASSERT_TRUE(ui_test_utils::ExecuteJavaScript( 14272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen tab_contents->render_view_host(), 14372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen std::wstring(), 14472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen UTF8ToWide(script))); 14572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen } 14672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 14721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen bool GetStringFromJavascript(TabContents* tab_contents, 14821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen const std::string& function, 14921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen std::string* result) { 15021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen std::string script = StringPrintf( 15121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen "window.domAutomationController.send(%s)", function.c_str()); 15221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen return ui_test_utils::ExecuteJavaScriptAndExtractString( 15321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen tab_contents->render_view_host(), 15421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen std::wstring(), UTF8ToWide(script), result); 15521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen } 15621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 15721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen bool GetIntFromJavascript(TabContents* tab_contents, 15821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen const std::string& function, 15921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen int* result) { 16021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen std::string script = StringPrintf( 16121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen "window.domAutomationController.send(%s)", function.c_str()); 16221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen return ui_test_utils::ExecuteJavaScriptAndExtractInt( 16321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen tab_contents->render_view_host(), 16421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen std::wstring(), UTF8ToWide(script), result); 16521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen } 16621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 16721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen bool GetBoolFromJavascript(TabContents* tab_contents, 16821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen const std::string& function, 16921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen bool* result) { 17021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen std::string script = StringPrintf( 17121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen "window.domAutomationController.send(%s)", function.c_str()); 17221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen return ui_test_utils::ExecuteJavaScriptAndExtractBool( 17321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen tab_contents->render_view_host(), 17421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen std::wstring(), UTF8ToWide(script), result); 17521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen } 17621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 17721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen // Returns the state of the search box as a string. This consists of the 17821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen // following: 1793f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen // window.chrome.sv 1803f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen // window.onsubmitcalls 1813f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen // window.oncancelcalls 1823f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen // window.onchangecalls 1833f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen // window.onresizecalls 1843f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen // window.beforeLoadSearchBox.value 1853f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen // window.beforeLoadSearchBox.verbatim 18621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen // window.chrome.searchBox.value 18721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen // window.chrome.searchBox.verbatim 18872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // window.chrome.searchBox.selectionStart 18972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // window.chrome.searchBox.selectionEnd 19021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen // If determining any of the values fails, the value is 'fail'. 191ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // 192ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // If |use_last| is true, then the last searchBox values are used instead of 193ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // the current. Set |use_last| to true when testing OnSubmit/OnCancel. 194ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::string GetSearchStateAsString(TabContents* tab_contents, 195ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen bool use_last) { 19621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen bool sv = false; 19721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen int onsubmitcalls = 0; 19821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen int oncancelcalls = 0; 19921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen int onchangecalls = 0; 20021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen int onresizecalls = 0; 20172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen int selection_start = 0; 20272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen int selection_end = 0; 2033f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen std::string before_load_value; 2043f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen bool before_load_verbatim = false; 20521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen std::string value; 20621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen bool verbatim = false; 20721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 20821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen if (!GetBoolFromJavascript(tab_contents, "window.chrome.sv", &sv) || 20921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen !GetIntFromJavascript(tab_contents, "window.onsubmitcalls", 21021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen &onsubmitcalls) || 21121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen !GetIntFromJavascript(tab_contents, "window.oncancelcalls", 21221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen &oncancelcalls) || 21321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen !GetIntFromJavascript(tab_contents, "window.onchangecalls", 21421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen &onchangecalls) || 21521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen !GetIntFromJavascript(tab_contents, "window.onresizecalls", 21621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen &onresizecalls) || 2173f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen !GetStringFromJavascript( 2183f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen tab_contents, "window.beforeLoadSearchBox.value", 2193f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen &before_load_value) || 2203f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen !GetBoolFromJavascript( 2213f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen tab_contents, "window.beforeLoadSearchBox.verbatim", 222ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen &before_load_verbatim)) { 223ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return "fail"; 224ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 225ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 226ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (use_last && 227ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen (!GetStringFromJavascript(tab_contents, "window.lastSearchBox.value", 228ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen &value) || 229ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen !GetBoolFromJavascript(tab_contents, "window.lastSearchBox.verbatim", 230ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen &verbatim) || 231ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen !GetIntFromJavascript(tab_contents, 232ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen "window.lastSearchBox.selectionStart", 233ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen &selection_start) || 234ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen !GetIntFromJavascript(tab_contents, 235ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen "window.lastSearchBox.selectionEnd", 236ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen &selection_end))) { 237ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return "fail"; 238ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 239ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 240ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (!use_last && 241ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen (!GetStringFromJavascript(tab_contents, "window.searchBox.value", 242ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen &value) || 243ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen !GetBoolFromJavascript(tab_contents, "window.searchBox.verbatim", 244ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen &verbatim) || 245ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen !GetIntFromJavascript(tab_contents, 246ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen "window.searchBox.selectionStart", 247ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen &selection_start) || 248ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen !GetIntFromJavascript(tab_contents, 249ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen "window.searchBox.selectionEnd", 250ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen &selection_end))) { 25121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen return "fail"; 25221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen } 25321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 25472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen return StringPrintf("%s %d %d %d %d %s %s %s %s %d %d", 2553f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen sv ? "true" : "false", 2563f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen onsubmitcalls, 2573f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen oncancelcalls, 2583f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen onchangecalls, 2593f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen onresizecalls, 2603f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen before_load_value.c_str(), 2613f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen before_load_verbatim ? "true" : "false", 2623f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen value.c_str(), 26372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen verbatim ? "true" : "false", 26472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen selection_start, 26572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen selection_end); 26621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen } 26721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 268513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch void CheckStringValueFromJavascript( 269513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch const std::string& expected, 270513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch const std::string& function, 271513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch TabContents* tab_contents) { 272513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch std::string result; 27321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen ASSERT_TRUE(GetStringFromJavascript(tab_contents, function, &result)); 27421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen ASSERT_EQ(expected, result); 275513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch } 276513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 277513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch void CheckBoolValueFromJavascript( 278513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch bool expected, 279513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch const std::string& function, 280513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch TabContents* tab_contents) { 281513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch bool result; 28221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen ASSERT_TRUE(GetBoolFromJavascript(tab_contents, function, &result)); 28321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen ASSERT_EQ(expected, result); 284513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch } 285513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 286513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch void CheckIntValueFromJavascript( 287513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch int expected, 288513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch const std::string& function, 289513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch TabContents* tab_contents) { 290513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch int result; 29121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen ASSERT_TRUE(GetIntFromJavascript(tab_contents, function, &result)); 29221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen ASSERT_EQ(expected, result); 293513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch } 294513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 295201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Sends a message to the renderer and waits for the response to come back to 296201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // the browser. 297201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch void WaitForMessageToBeProcessedByRenderer(TabContentsWrapper* tab) { 298201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ASSERT_NO_FATAL_FAILURE( 299201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch CheckBoolValueFromJavascript(true, "true", tab->tab_contents())); 300201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch } 301201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 302513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch protected: 303513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch LocationBar* location_bar_; 304513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch TabContents* preview_; 305513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch}; 306513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 307513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch// TODO(tonyg): Add the following tests: 30872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// - Test that the search box API is not populated for pages other than the 30972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// default search provider. 31072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// - Test resize events. 311513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 312513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch// Verify that the onchange event is dispatched upon typing in the box. 313201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben MurdochIN_PROC_BROWSER_TEST_F(InstantTest, OnChangeEvent) { 314513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ASSERT_TRUE(test_server()->Start()); 31572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EnableInstant(); 316513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ASSERT_NO_FATAL_FAILURE(SetupInstantProvider("search.html")); 317513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ASSERT_NO_FATAL_FAILURE(SetupLocationBar()); 318513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ASSERT_NO_FATAL_FAILURE(SetupPreview()); 319513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 320dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen ASSERT_NO_FATAL_FAILURE(SetLocationBarText("def")); 321513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 322dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen ASSERT_EQ(ASCIIToUTF16("defghi"), location_bar_->location_entry()->GetText()); 32372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 32472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // Make sure the url that will get committed when we press enter matches that 32572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // of the default search provider. 32672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen const TemplateURL* default_turl = 32772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen browser()->profile()->GetTemplateURLModel()->GetDefaultSearchProvider(); 32872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ASSERT_TRUE(default_turl); 32972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ASSERT_TRUE(default_turl->url()); 33072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_EQ(default_turl->url()->ReplaceSearchTerms( 331dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen *default_turl, ASCIIToUTF16("defghi"), 0, string16()), 33272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen browser()->instant()->GetCurrentURL().spec()); 33372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 334513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // Check that the value is reflected and onchange is called. 335dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen EXPECT_EQ("true 0 0 1 2 d false def false 3 3", 336ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen GetSearchStateAsString(preview_, true)); 33772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} 33872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 33972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenIN_PROC_BROWSER_TEST_F(InstantTest, SetSuggestionsArrayOfStrings) { 34072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ASSERT_TRUE(test_server()->Start()); 34172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EnableInstant(); 34272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ASSERT_NO_FATAL_FAILURE(SetupInstantProvider("search.html")); 34372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ASSERT_NO_FATAL_FAILURE(SetupLocationBar()); 34472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ASSERT_NO_FATAL_FAILURE(SetupPreview()); 34572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 346dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen SetSuggestionsJavascriptArgument(preview_, "['defgh', 'unused']"); 347dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen ASSERT_NO_FATAL_FAILURE(SetLocationBarText("def")); 348dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen EXPECT_STR_EQ("defgh", GetSuggestion()); 34972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} 35072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 35172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenIN_PROC_BROWSER_TEST_F(InstantTest, SetSuggestionsEmptyArray) { 35272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ASSERT_TRUE(test_server()->Start()); 35372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EnableInstant(); 35472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ASSERT_NO_FATAL_FAILURE(SetupInstantProvider("search.html")); 35572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ASSERT_NO_FATAL_FAILURE(SetupLocationBar()); 35672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ASSERT_NO_FATAL_FAILURE(SetupPreview()); 35772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 35872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen SetSuggestionsJavascriptArgument(preview_, "[]"); 359dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen ASSERT_NO_FATAL_FAILURE(SetLocationBarText("def")); 36072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_STR_EQ("", GetSuggestion()); 36172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} 36272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 36372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenIN_PROC_BROWSER_TEST_F(InstantTest, SetSuggestionsValidJson) { 36472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ASSERT_TRUE(test_server()->Start()); 36572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EnableInstant(); 36672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ASSERT_NO_FATAL_FAILURE(SetupInstantProvider("search.html")); 36772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ASSERT_NO_FATAL_FAILURE(SetupLocationBar()); 36872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ASSERT_NO_FATAL_FAILURE(SetupPreview()); 36972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 37072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen SetSuggestionsJavascriptArgument( 37172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen preview_, 372dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen "{suggestions:[{value:'defghij'},{value:'unused'}]}"); 373dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen ASSERT_NO_FATAL_FAILURE(SetLocationBarText("def")); 374dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen EXPECT_STR_EQ("defghij", GetSuggestion()); 37572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} 37672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 37772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenIN_PROC_BROWSER_TEST_F(InstantTest, SetSuggestionsInvalidSuggestions) { 37872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ASSERT_TRUE(test_server()->Start()); 37972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EnableInstant(); 38072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ASSERT_NO_FATAL_FAILURE(SetupInstantProvider("search.html")); 38172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ASSERT_NO_FATAL_FAILURE(SetupLocationBar()); 38272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ASSERT_NO_FATAL_FAILURE(SetupPreview()); 38372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 38472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen SetSuggestionsJavascriptArgument( 38572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen preview_, 386dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen "{suggestions:{value:'defghi'}}"); 387dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen ASSERT_NO_FATAL_FAILURE(SetLocationBarText("def")); 38872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_STR_EQ("", GetSuggestion()); 38972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} 39072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 39172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenIN_PROC_BROWSER_TEST_F(InstantTest, SetSuggestionsEmptyJson) { 39272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ASSERT_TRUE(test_server()->Start()); 39372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EnableInstant(); 39472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ASSERT_NO_FATAL_FAILURE(SetupInstantProvider("search.html")); 39572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ASSERT_NO_FATAL_FAILURE(SetupLocationBar()); 39672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ASSERT_NO_FATAL_FAILURE(SetupPreview()); 39772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 39872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen SetSuggestionsJavascriptArgument(preview_, "{}"); 399dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen ASSERT_NO_FATAL_FAILURE(SetLocationBarText("def")); 40072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_STR_EQ("", GetSuggestion()); 40172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} 40272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 40372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenIN_PROC_BROWSER_TEST_F(InstantTest, SetSuggestionsEmptySuggestions) { 40472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ASSERT_TRUE(test_server()->Start()); 40572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EnableInstant(); 40672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ASSERT_NO_FATAL_FAILURE(SetupInstantProvider("search.html")); 40772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ASSERT_NO_FATAL_FAILURE(SetupLocationBar()); 40872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ASSERT_NO_FATAL_FAILURE(SetupPreview()); 40972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 41072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen SetSuggestionsJavascriptArgument(preview_, "{suggestions:[]}"); 411dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen ASSERT_NO_FATAL_FAILURE(SetLocationBarText("def")); 41272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_STR_EQ("", GetSuggestion()); 41372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} 41472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 41572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenIN_PROC_BROWSER_TEST_F(InstantTest, SetSuggestionsEmptySuggestion) { 41672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ASSERT_TRUE(test_server()->Start()); 41772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EnableInstant(); 41872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ASSERT_NO_FATAL_FAILURE(SetupInstantProvider("search.html")); 41972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ASSERT_NO_FATAL_FAILURE(SetupLocationBar()); 42072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ASSERT_NO_FATAL_FAILURE(SetupPreview()); 42172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 42272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen SetSuggestionsJavascriptArgument(preview_, "{suggestions:[{}]}"); 423dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen ASSERT_NO_FATAL_FAILURE(SetLocationBarText("def")); 42472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_STR_EQ("", GetSuggestion()); 425513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch} 426513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 427201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch// Verify instant preview is shown correctly for a non-search query. 428201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben MurdochIN_PROC_BROWSER_TEST_F(InstantTest, ShowPreviewNonSearch) { 429201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ASSERT_TRUE(test_server()->Start()); 43072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EnableInstant(); 431201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch GURL url(test_server()->GetURL("files/instant/empty.html")); 432dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen ASSERT_NO_FATAL_FAILURE(SetLocationBarText(url.spec())); 433201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // The preview should be active and showing. 434201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ASSERT_TRUE(browser()->instant()->is_active()); 435201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ASSERT_TRUE(browser()->instant()->is_displayable()); 436201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ASSERT_TRUE(browser()->instant()->IsCurrent()); 437201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ASSERT_TRUE(browser()->instant()->GetPreviewContents()); 438201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch RenderWidgetHostView* rwhv = 439201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch browser()->instant()->GetPreviewContents()->tab_contents()-> 440201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch GetRenderWidgetHostView(); 441201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ASSERT_TRUE(rwhv); 442201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ASSERT_TRUE(rwhv->IsShowing()); 443201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch} 444201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 445201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch// Transition from non-search to search and make sure everything is shown 446201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch// correctly. 447201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben MurdochIN_PROC_BROWSER_TEST_F(InstantTest, NonSearchToSearch) { 448201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ASSERT_TRUE(test_server()->Start()); 44972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EnableInstant(); 450201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch GURL url(test_server()->GetURL("files/instant/empty.html")); 451dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen ASSERT_NO_FATAL_FAILURE(SetLocationBarText(url.spec())); 452201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // The preview should be active and showing. 453201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ASSERT_TRUE(browser()->instant()->is_active()); 454201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ASSERT_TRUE(browser()->instant()->is_displayable()); 455201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch TabContentsWrapper* initial_tab = browser()->instant()->GetPreviewContents(); 456201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ASSERT_TRUE(initial_tab); 457201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch RenderWidgetHostView* rwhv = 458201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch initial_tab->tab_contents()->GetRenderWidgetHostView(); 459201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ASSERT_TRUE(rwhv); 460201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ASSERT_TRUE(rwhv->IsShowing()); 461201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 462201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Now type in some search text. 463201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ASSERT_NO_FATAL_FAILURE(SetupInstantProvider("search.html")); 464dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen location_bar_->location_entry()->SetUserText(ASCIIToUTF16("def")); 465201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 466201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Wait for the preview to navigate. 467201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ASSERT_NO_FATAL_FAILURE(WaitForPreviewToNavigate(false)); 468201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 469201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // The controller is still determining if the provider really supports 470201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // instant. As a result the tabcontents should not have changed. 471201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch TabContentsWrapper* current_tab = browser()->instant()->GetPreviewContents(); 472201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ASSERT_EQ(current_tab, initial_tab); 473201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // The preview should still be showing. 474201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch rwhv = current_tab->tab_contents()->GetRenderWidgetHostView(); 475201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ASSERT_TRUE(rwhv); 476201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ASSERT_TRUE(rwhv->IsShowing()); 477201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 478201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Use MightSupportInstant as the controller is still determining if the 479201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // page supports instant and hasn't actually commited yet. 480201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch EXPECT_TRUE(browser()->instant()->MightSupportInstant()); 481201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 482201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Instant should still be active. 483201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch EXPECT_TRUE(browser()->instant()->is_active()); 484201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch EXPECT_TRUE(browser()->instant()->is_displayable()); 485201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 486201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Because we're waiting on the page, instant isn't current. 487201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ASSERT_FALSE(browser()->instant()->IsCurrent()); 488201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 489201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Bounce a message to the renderer so that we know the instant has gotten a 490201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // response back from the renderer as to whether the page supports instant. 491201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ASSERT_NO_FATAL_FAILURE( 492201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch WaitForMessageToBeProcessedByRenderer(GetPendingPreviewContents())); 493201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 494201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Reset the user text so that the page is told the text changed. We should be 495201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // able to nuke this once 66104 is fixed. 496dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen location_bar_->location_entry()->SetUserText(ASCIIToUTF16("defg")); 497201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 498201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Wait for the renderer to process it. 499201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ASSERT_NO_FATAL_FAILURE( 500201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch WaitForMessageToBeProcessedByRenderer(GetPendingPreviewContents())); 501201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 502201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // We should have gotten a response back from the renderer that resulted in 503201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // committing. 504201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ASSERT_FALSE(GetPendingPreviewContents()); 505201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ASSERT_TRUE(browser()->instant()->is_active()); 506201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ASSERT_TRUE(browser()->instant()->is_displayable()); 507201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch TabContentsWrapper* new_tab = browser()->instant()->GetPreviewContents(); 508201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ASSERT_TRUE(new_tab); 509201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ASSERT_NE(new_tab, initial_tab); 510201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch RenderWidgetHostView* new_rwhv = 511201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch new_tab->tab_contents()->GetRenderWidgetHostView(); 512201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ASSERT_TRUE(new_rwhv); 513201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ASSERT_NE(new_rwhv, rwhv); 514201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ASSERT_TRUE(new_rwhv->IsShowing()); 515201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch} 516201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 517201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch// Makes sure that if the server doesn't support the instant API we don't show 518201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch// anything. 51972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#if defined(OS_MACOSX) || defined(OS_LINUX) 52072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Showing as flaky on Mac and Linux. 52172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// http://crbug.com/70860 52272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#define MAYBE_SearchServerDoesntSupportInstant \ 52372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen DISABLED_SearchServerDoesntSupportInstant 52472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#else 52572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#define MAYBE_SearchServerDoesntSupportInstant \ 52672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen SearchServerDoesntSupportInstant 52772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#endif 52872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenIN_PROC_BROWSER_TEST_F(InstantTest, MAYBE_SearchServerDoesntSupportInstant) { 529201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ASSERT_TRUE(test_server()->Start()); 53072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EnableInstant(); 531201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ASSERT_NO_FATAL_FAILURE(SetupInstantProvider("empty.html")); 532201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ASSERT_NO_FATAL_FAILURE(FindLocationBar()); 533dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen location_bar_->location_entry()->SetUserText(ASCIIToUTF16("d")); 534201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ASSERT_TRUE(browser()->instant()); 535201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Because we typed in a search string we should think we're showing instant 536201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // results. 537201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch EXPECT_TRUE(browser()->instant()->IsShowingInstant()); 538201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // But because we're waiting to determine if the page really supports instant 539201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // we shouldn't be showing the preview. 540201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch EXPECT_FALSE(browser()->instant()->is_displayable()); 541201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // But instant should still be active. 542201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch EXPECT_TRUE(browser()->instant()->is_active()); 543201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 544201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // When the response comes back that the page doesn't support instant the tab 545201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // should be closed. 546201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ui_test_utils::WaitForNotification(NotificationType::TAB_CLOSED); 547201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch EXPECT_FALSE(browser()->instant()->IsShowingInstant()); 548201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch EXPECT_FALSE(browser()->instant()->is_displayable()); 549201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch EXPECT_TRUE(browser()->instant()->is_active()); 550201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch EXPECT_FALSE(browser()->instant()->IsCurrent()); 551201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch} 552201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 553201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch// Verifies transitioning from loading a non-search string to a search string 554201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch// with the provider not supporting instant works (meaning we don't display 555201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch// anything). 556ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#if defined(OS_MACOSX) || defined(OS_LINUX) 557ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Showing as flaky on Mac and Linux/ChromeOS 55872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// http://crbug.com/70810 55972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#define MAYBE_NonSearchToSearchDoesntSupportInstant \ 56072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen DISABLED_NonSearchToSearchDoesntSupportInstant 56172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#else 56272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#define MAYBE_NonSearchToSearchDoesntSupportInstant \ 56372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen NonSearchToSearchDoesntSupportInstant 56472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#endif 56572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenIN_PROC_BROWSER_TEST_F(InstantTest, 56672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen MAYBE_NonSearchToSearchDoesntSupportInstant) { 567201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ASSERT_TRUE(test_server()->Start()); 56872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EnableInstant(); 569201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ASSERT_NO_FATAL_FAILURE(SetupInstantProvider("empty.html")); 570201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch GURL url(test_server()->GetURL("files/instant/empty.html")); 571dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen ASSERT_NO_FATAL_FAILURE(SetLocationBarText(url.spec())); 572201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // The preview should be active and showing. 573201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ASSERT_TRUE(browser()->instant()->is_displayable()); 574201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ASSERT_TRUE(browser()->instant()->is_active()); 575201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch TabContentsWrapper* initial_tab = browser()->instant()->GetPreviewContents(); 576201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ASSERT_TRUE(initial_tab); 577201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch RenderWidgetHostView* rwhv = 578201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch initial_tab->tab_contents()->GetRenderWidgetHostView(); 579201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ASSERT_TRUE(rwhv); 580201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ASSERT_TRUE(rwhv->IsShowing()); 581201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 582201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Now type in some search text. 583dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen location_bar_->location_entry()->SetUserText(ASCIIToUTF16("d")); 584201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 585201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Instant should still be live. 586201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ASSERT_TRUE(browser()->instant()->is_displayable()); 587201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ASSERT_TRUE(browser()->instant()->is_active()); 588201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Because we typed in a search string we should think we're showing instant 589201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // results. 590201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch EXPECT_TRUE(browser()->instant()->MightSupportInstant()); 591201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Instant should not be current (it's still loading). 592201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch EXPECT_FALSE(browser()->instant()->IsCurrent()); 593201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 594201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // When the response comes back that the page doesn't support instant the tab 595201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // should be closed. 596201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ui_test_utils::WaitForNotification(NotificationType::TAB_CLOSED); 597201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch EXPECT_FALSE(browser()->instant()->IsShowingInstant()); 598201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch EXPECT_FALSE(browser()->instant()->is_displayable()); 599201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // But because the omnibox is still open, instant should be active. 600201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ASSERT_TRUE(browser()->instant()->is_active()); 601201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch} 602201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 603201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch// Verifies the page was told a non-zero height. 604201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben MurdochIN_PROC_BROWSER_TEST_F(InstantTest, ValidHeight) { 605201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ASSERT_TRUE(test_server()->Start()); 60672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EnableInstant(); 6073f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen ASSERT_NO_FATAL_FAILURE(SetupInstantProvider("search.html")); 6083f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen ASSERT_NO_FATAL_FAILURE(SetupLocationBar()); 6093f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen ASSERT_NO_FATAL_FAILURE(SetupPreview()); 6103f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen 611dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen ASSERT_NO_FATAL_FAILURE(SetLocationBarText("def")); 612201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 613201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch int height; 6143f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen 6153f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen // searchBox height is not yet set during initial load. 6163f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen ASSERT_TRUE(GetIntFromJavascript(preview_, 6173f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen "window.beforeLoadSearchBox.height", 6183f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen &height)); 6193f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen EXPECT_EQ(0, height); 6203f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen 6213f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen // searchBox height is available by the time the page loads. 6223f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen ASSERT_TRUE(GetIntFromJavascript(preview_, 6233f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen "window.chrome.searchBox.height", 6243f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen &height)); 625201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch EXPECT_GT(height, 0); 626201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch} 627201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 628201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch// Verifies that if the server returns a 403 we don't show the preview and 629201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch// query the host again. 630201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben MurdochIN_PROC_BROWSER_TEST_F(InstantTest, HideOn403) { 631201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ASSERT_TRUE(test_server()->Start()); 63272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EnableInstant(); 633201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch GURL url(test_server()->GetURL("files/instant/403.html")); 634201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ASSERT_NO_FATAL_FAILURE(FindLocationBar()); 63572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen location_bar_->location_entry()->SetUserText(UTF8ToUTF16(url.spec())); 636201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // The preview shouldn't be showing, but it should be loading. 637201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ASSERT_TRUE(browser()->instant()->GetPreviewContents()); 638201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ASSERT_TRUE(browser()->instant()->is_active()); 639201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ASSERT_FALSE(browser()->instant()->is_displayable()); 640201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 641201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // When instant sees the 403, it should close the tab. 642201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ui_test_utils::WaitForNotification(NotificationType::TAB_CLOSED); 643201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ASSERT_FALSE(browser()->instant()->GetPreviewContents()); 644201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ASSERT_TRUE(browser()->instant()->is_active()); 645201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ASSERT_FALSE(browser()->instant()->is_displayable()); 646201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 647201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Try loading another url on the server. Instant shouldn't create a new tab 648201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // as the server returned 403. 649201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch GURL url2(test_server()->GetURL("files/instant/empty.html")); 65072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen location_bar_->location_entry()->SetUserText(UTF8ToUTF16(url2.spec())); 651201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ASSERT_FALSE(browser()->instant()->GetPreviewContents()); 652201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ASSERT_TRUE(browser()->instant()->is_active()); 653201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ASSERT_FALSE(browser()->instant()->is_displayable()); 654201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch} 655201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 656513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch// Verify that the onsubmit event is dispatched upon pressing enter. 65721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian MonsenIN_PROC_BROWSER_TEST_F(InstantTest, OnSubmitEvent) { 658513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ASSERT_TRUE(test_server()->Start()); 65972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EnableInstant(); 660513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ASSERT_NO_FATAL_FAILURE(SetupInstantProvider("search.html")); 66121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 66221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen ASSERT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser())); 663513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ASSERT_NO_FATAL_FAILURE(SetupLocationBar()); 664513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ASSERT_NO_FATAL_FAILURE(SetupPreview()); 665513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 666dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen ASSERT_NO_FATAL_FAILURE(SetLocationBarText("def")); 66772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_RETURN)); 668513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 669513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // Check that the preview contents have been committed. 670513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ASSERT_FALSE(browser()->instant()->GetPreviewContents()); 67121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen ASSERT_FALSE(browser()->instant()->is_active()); 672513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch TabContents* contents = browser()->GetSelectedTabContents(); 673513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ASSERT_TRUE(contents); 674513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 675513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // Check that the value is reflected and onsubmit is called. 676dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen EXPECT_EQ("true 1 0 1 2 d false defghi true 3 3", 677ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen GetSearchStateAsString(preview_, true)); 678ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 679ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Make sure the searchbox values were reset. 680ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_EQ("true 1 0 1 2 d false false 0 0", 681ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen GetSearchStateAsString(preview_, false)); 682513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch} 683513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 684513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch// Verify that the oncancel event is dispatched upon losing focus. 68521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian MonsenIN_PROC_BROWSER_TEST_F(InstantTest, OnCancelEvent) { 686513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ASSERT_TRUE(test_server()->Start()); 68772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EnableInstant(); 688513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ASSERT_NO_FATAL_FAILURE(SetupInstantProvider("search.html")); 68921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 69021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen ASSERT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser())); 691513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ASSERT_NO_FATAL_FAILURE(SetupLocationBar()); 692513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ASSERT_NO_FATAL_FAILURE(SetupPreview()); 693513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 694dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen ASSERT_NO_FATAL_FAILURE(SetLocationBarText("def")); 695513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ASSERT_NO_FATAL_FAILURE(ui_test_utils::ClickOnView(browser(), 696513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch VIEW_ID_TAB_CONTAINER)); 697513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 698513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // Check that the preview contents have been committed. 699513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ASSERT_FALSE(browser()->instant()->GetPreviewContents()); 70021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen ASSERT_FALSE(browser()->instant()->is_active()); 701513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch TabContents* contents = browser()->GetSelectedTabContents(); 702513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ASSERT_TRUE(contents); 703513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 704513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // Check that the value is reflected and oncancel is called. 705dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen EXPECT_EQ("true 0 1 1 2 d false def false 3 3", 706ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen GetSearchStateAsString(preview_, true)); 707ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 708ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Make sure the searchbox values were reset. 709ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_EQ("true 0 1 1 2 d false false 0 0", 710ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen GetSearchStateAsString(preview_, false)); 711513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch} 712dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 713dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// Make sure about:crash is shown. 714dc0f95d653279beabeb9817299e2902918ba123eKristian MonsenIN_PROC_BROWSER_TEST_F(InstantTest, ShowAboutCrash) { 715dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen ASSERT_TRUE(test_server()->Start()); 716dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen EnableInstant(); 717dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 718dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen ASSERT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser())); 719dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 720dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen ASSERT_NO_FATAL_FAILURE(SetLocationBarText(chrome::kAboutCrashURL)); 721dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 722dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // If we get here it means the preview was shown. If we time out, it means the 723dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // preview was never shown. 724dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen} 725ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 726ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenIN_PROC_BROWSER_TEST_F(InstantTest, InstantCompleteNever) { 727ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ASSERT_TRUE(test_server()->Start()); 728ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EnableInstant(); 729ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ASSERT_NO_FATAL_FAILURE(SetupInstantProvider("search.html")); 730ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ASSERT_NO_FATAL_FAILURE(SetupLocationBar()); 731ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ASSERT_NO_FATAL_FAILURE(SetupPreview()); 732ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 733ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen SetSuggestionsJavascriptArgument( 734ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen preview_, 735ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen "{suggestions:[{value:'defghij'}],complete_behavior:'never'}"); 736ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ASSERT_NO_FATAL_FAILURE(SetLocationBarText("def")); 737ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_STR_EQ("defghij", GetSuggestion()); 738ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen AutocompleteEditModel* edit_model = location_bar_->location_entry()->model(); 739ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_EQ(INSTANT_COMPLETE_NEVER, edit_model->instant_complete_behavior()); 740ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ASSERT_EQ(ASCIIToUTF16("def"), location_bar_->location_entry()->GetText()); 741ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 742ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 743ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenIN_PROC_BROWSER_TEST_F(InstantTest, InstantCompleteDelayed) { 744ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ASSERT_TRUE(test_server()->Start()); 745ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EnableInstant(); 746ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ASSERT_NO_FATAL_FAILURE(SetupInstantProvider("search.html")); 747ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ASSERT_NO_FATAL_FAILURE(SetupLocationBar()); 748ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ASSERT_NO_FATAL_FAILURE(SetupPreview()); 749ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 750ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen SetSuggestionsJavascriptArgument( 751ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen preview_, 752ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen "{suggestions:[{value:'defghij'}],complete_behavior:'delayed'}"); 753ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ASSERT_NO_FATAL_FAILURE(SetLocationBarText("def")); 754ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_STR_EQ("defghij", GetSuggestion()); 755ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen AutocompleteEditModel* edit_model = location_bar_->location_entry()->model(); 756ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_EQ(INSTANT_COMPLETE_DELAYED, edit_model->instant_complete_behavior()); 757ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ASSERT_EQ(ASCIIToUTF16("def"), location_bar_->location_entry()->GetText()); 758ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 759ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 760ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Make sure the renderer doesn't crash if javascript is blocked. 761ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenIN_PROC_BROWSER_TEST_F(InstantTest, DontCrashOnBlockedJS) { 762ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen browser()->profile()->GetHostContentSettingsMap()->SetDefaultContentSetting( 763ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen CONTENT_SETTINGS_TYPE_JAVASCRIPT, CONTENT_SETTING_BLOCK); 764ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ASSERT_TRUE(test_server()->Start()); 765ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EnableInstant(); 766ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ASSERT_NO_FATAL_FAILURE(SetupInstantProvider("search.html")); 767ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ASSERT_NO_FATAL_FAILURE(SetupLocationBar()); 768ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Wait for notification that the instant API has been determined. 769ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ui_test_utils::WaitForNotification( 770ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen NotificationType::INSTANT_SUPPORT_DETERMINED); 771ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // As long as we get the notification we're good (the renderer didn't crash). 772ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 773ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 774ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenIN_PROC_BROWSER_TEST_F(InstantTest, DownloadOnEnter) { 775ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ASSERT_TRUE(test_server()->Start()); 776ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EnableInstant(); 777ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Make sure the browser window is the front most window. 778ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ASSERT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser())); 779ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ASSERT_NO_FATAL_FAILURE(SetupInstantProvider("search.html")); 780ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ASSERT_NO_FATAL_FAILURE(FindLocationBar()); 781ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen GURL url(test_server()->GetURL("files/instant/empty.html")); 782ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen location_bar_->location_entry()->SetUserText(UTF8ToUTF16(url.spec())); 783ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen printf("0\n"); 784ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ASSERT_NO_FATAL_FAILURE(WaitForPreviewToNavigate(true)); 785ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen url = test_server()->GetURL("files/instant/download.zip"); 786ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen location_bar_->location_entry()->SetUserText(UTF8ToUTF16(url.spec())); 787ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Wait for the load to fail (because instant disables downloads). 788ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen printf("1\n"); 789ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ui_test_utils::WaitForNotification( 790ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen NotificationType::FAIL_PROVISIONAL_LOAD_WITH_ERROR); 791ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 792ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen printf("2\n"); 793ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ui_test_utils::WindowedNotificationObserver download_observer( 794ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen NotificationType::DOWNLOAD_INITIATED, 795ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen NotificationService::AllSources()); 796ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_RETURN)); 797ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen printf("3\n"); 798ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen download_observer.Wait(); 799ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen printf("4\n"); 800ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 801ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // And we should end up at about:blank. 802ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen TabContents* contents = browser()->GetSelectedTabContents(); 803ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ASSERT_TRUE(contents); 804ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_EQ("about:blank", 805ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen contents->controller().GetLastCommittedEntry()->url().spec()); 806ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (contents->controller().pending_entry()) { 807ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // If there is a pending entry, the url should correspond to the download. 808ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_EQ(url.spec(), 809ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen contents->controller().pending_entry()->url().spec()); 810ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 811ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 812ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 813ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Makes sure window.chrome.searchbox doesn't persist when a new page is loaded. 814ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenIN_PROC_BROWSER_TEST_F(InstantTest, DontPersistSearchbox) { 815ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ASSERT_TRUE(test_server()->Start()); 816ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EnableInstant(); 817ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ASSERT_NO_FATAL_FAILURE(SetupInstantProvider("search.html")); 818ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 819ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ASSERT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser())); 820ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ASSERT_NO_FATAL_FAILURE(SetupLocationBar()); 821ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ASSERT_NO_FATAL_FAILURE(SetupPreview()); 822ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 823ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ASSERT_NO_FATAL_FAILURE(SetLocationBarText("def")); 824ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_RETURN)); 825ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 826ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Check that the preview contents have been committed. 827ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ASSERT_FALSE(browser()->instant()->GetPreviewContents()); 828ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ASSERT_FALSE(browser()->instant()->is_active()); 829ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 830ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen TabContents* contents = browser()->GetSelectedTabContents(); 831ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ASSERT_TRUE(contents); 832ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 833ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Navigate to a new URL. This should reset the searchbox values. 834ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ui_test_utils::NavigateToURL( 835ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen browser(), 836ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen GURL(test_server()->GetURL("files/instant/empty.html"))); 837ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen bool result; 838ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ASSERT_TRUE(GetBoolFromJavascript( 839ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen browser()->GetSelectedTabContents(), 840ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen "window.chrome.searchBox.value.length == 0", 841ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen &result)); 842ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_TRUE(result); 843ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 844