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