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