| OLD | NEW | 
|     1 // Copyright 2012 The Chromium Authors. All rights reserved. |     1 // Copyright 2012 The Chromium Authors. All rights reserved. | 
|     2 // Use of this source code is governed by a BSD-style license that can be |     2 // Use of this source code is governed by a BSD-style license that can be | 
|     3 // found in the LICENSE file. |     3 // found in the LICENSE file. | 
|     4  |     4  | 
|     5 #include "chrome/browser/content_settings/host_content_settings_map.h" |     5 #include "chrome/browser/content_settings/host_content_settings_map.h" | 
|     6 #include "chrome/browser/history/history_service_factory.h" |     6 #include "chrome/browser/history/history_service_factory.h" | 
|     7 #include "chrome/browser/instant/instant_overlay.h" |     7 #include "chrome/browser/instant/instant_overlay.h" | 
|     8 #include "chrome/browser/instant/instant_service.h" |     8 #include "chrome/browser/instant/instant_service.h" | 
|     9 #include "chrome/browser/instant/instant_service_factory.h" |     9 #include "chrome/browser/instant/instant_service_factory.h" | 
|    10 #include "chrome/browser/instant/instant_test_utils.h" |    10 #include "chrome/browser/instant/instant_test_utils.h" | 
|    11 #include "chrome/browser/profiles/profile.h" |    11 #include "chrome/browser/profiles/profile.h" | 
|    12 #include "chrome/browser/search_engines/template_url_service.h" |    12 #include "chrome/browser/search_engines/template_url_service.h" | 
|    13 #include "chrome/browser/search_engines/template_url_service_factory.h" |    13 #include "chrome/browser/search_engines/template_url_service_factory.h" | 
|    14 #include "chrome/browser/task_manager/task_manager.h" |    14 #include "chrome/browser/task_manager/task_manager.h" | 
|    15 #include "chrome/browser/task_manager/task_manager_browsertest_util.h" |    15 #include "chrome/browser/task_manager/task_manager_browsertest_util.h" | 
|    16 #include "chrome/browser/ui/browser.h" |    16 #include "chrome/browser/ui/browser.h" | 
|    17 #include "chrome/browser/ui/browser_commands.h" |    17 #include "chrome/browser/ui/browser_commands.h" | 
|    18 #include "chrome/browser/ui/host_desktop.h" |    18 #include "chrome/browser/ui/host_desktop.h" | 
 |    19 #include "chrome/browser/ui/omnibox/omnibox_view.h" | 
|    19 #include "chrome/browser/ui/tabs/tab_strip_model.h" |    20 #include "chrome/browser/ui/tabs/tab_strip_model.h" | 
|    20 #include "chrome/common/chrome_notification_types.h" |  | 
|    21 #include "chrome/common/url_constants.h" |    21 #include "chrome/common/url_constants.h" | 
 |    22 #include "chrome/test/base/in_process_browser_test.h" | 
|    22 #include "chrome/test/base/interactive_test_utils.h" |    23 #include "chrome/test/base/interactive_test_utils.h" | 
|    23 #include "chrome/test/base/ui_test_utils.h" |    24 #include "chrome/test/base/ui_test_utils.h" | 
|    24 #include "content/public/browser/notification_service.h" |  | 
|    25 #include "content/public/browser/render_process_host.h" |    25 #include "content/public/browser/render_process_host.h" | 
|    26 #include "content/public/browser/web_contents.h" |    26 #include "content/public/browser/web_contents.h" | 
 |    27 #include "content/public/test/browser_test_utils.h" | 
|    27 #include "grit/generated_resources.h" |    28 #include "grit/generated_resources.h" | 
|    28 #include "ui/base/l10n/l10n_util.h" |    29 #include "ui/base/l10n/l10n_util.h" | 
|    29  |    30  | 
|    30 class InstantTest : public InstantTestBase { |    31 class InstantTest : public InProcessBrowserTest, public InstantTestBase { | 
|    31  protected: |    32  protected: | 
|    32   virtual void SetUpInProcessBrowserTestFixture() OVERRIDE { |    33   virtual void SetUpInProcessBrowserTestFixture() OVERRIDE { | 
|    33     ASSERT_TRUE(test_server()->Start()); |    34     ASSERT_TRUE(test_server()->Start()); | 
|    34     instant_url_ = test_server()->GetURL("files/instant.html?"); |    35     GURL instant_url = test_server()->GetURL("files/instant.html?"); | 
|    35   } |    36     InstantTestBase::Init(instant_url); | 
|    36  |  | 
|    37   void FocusOmniboxAndWaitForInstantSupport() { |  | 
|    38     content::WindowedNotificationObserver observer( |  | 
|    39         chrome::NOTIFICATION_INSTANT_OVERLAY_SUPPORT_DETERMINED, |  | 
|    40         content::NotificationService::AllSources()); |  | 
|    41     FocusOmnibox(); |  | 
|    42     observer.Wait(); |  | 
|    43   } |    37   } | 
|    44  |    38  | 
|    45   bool UpdateSearchState(content::WebContents* contents) WARN_UNUSED_RESULT { |    39   bool UpdateSearchState(content::WebContents* contents) WARN_UNUSED_RESULT { | 
|    46     return GetIntFromJS(contents, "onvisibilitycalls", &onvisibilitycalls_) && |    40     return GetIntFromJS(contents, "onvisibilitycalls", &onvisibilitycalls_) && | 
|    47            GetIntFromJS(contents, "onchangecalls", &onchangecalls_) && |    41            GetIntFromJS(contents, "onchangecalls", &onchangecalls_) && | 
|    48            GetIntFromJS(contents, "onsubmitcalls", &onsubmitcalls_) && |    42            GetIntFromJS(contents, "onsubmitcalls", &onsubmitcalls_) && | 
|    49            GetIntFromJS(contents, "oncancelcalls", &oncancelcalls_) && |    43            GetIntFromJS(contents, "oncancelcalls", &oncancelcalls_) && | 
|    50            GetIntFromJS(contents, "onresizecalls", &onresizecalls_) && |    44            GetIntFromJS(contents, "onresizecalls", &onresizecalls_) && | 
|    51            GetStringFromJS(contents, "value", &value_) && |    45            GetStringFromJS(contents, "value", &value_) && | 
|    52            GetBoolFromJS(contents, "verbatim", &verbatim_) && |    46            GetBoolFromJS(contents, "verbatim", &verbatim_) && | 
|    53            GetIntFromJS(contents, "height", &height_); |    47            GetIntFromJS(contents, "height", &height_); | 
|    54   } |    48   } | 
|    55  |    49  | 
|    56   int onvisibilitycalls_; |    50   int onvisibilitycalls_; | 
|    57   int onchangecalls_; |    51   int onchangecalls_; | 
|    58   int onsubmitcalls_; |    52   int onsubmitcalls_; | 
|    59   int oncancelcalls_; |    53   int oncancelcalls_; | 
|    60   int onresizecalls_; |    54   int onresizecalls_; | 
|    61  |    55  | 
|    62   std::string value_; |    56   std::string value_; | 
|    63   bool verbatim_; |    57   bool verbatim_; | 
|    64   int height_; |    58   int height_; | 
|    65 }; |    59 }; | 
|    66  |    60  | 
|    67 // Test that Instant is preloaded when the omnibox is focused. |    61 // Test that Instant is preloaded when the omnibox is focused. | 
|    68 IN_PROC_BROWSER_TEST_F(InstantTest, OmniboxFocusLoadsInstant) { |    62 IN_PROC_BROWSER_TEST_F(InstantTest, OmniboxFocusLoadsInstant) { | 
|    69   ASSERT_NO_FATAL_FAILURE(SetupInstant()); |    63   ASSERT_NO_FATAL_FAILURE(SetupInstant(browser())); | 
|    70  |    64  | 
|    71   // Explicitly unfocus the omnibox. |    65   // Explicitly unfocus the omnibox. | 
|    72   EXPECT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser())); |    66   EXPECT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser())); | 
|    73   ui_test_utils::ClickOnView(browser(), VIEW_ID_TAB_CONTAINER); |    67   ui_test_utils::ClickOnView(browser(), VIEW_ID_TAB_CONTAINER); | 
|    74  |    68  | 
|    75   EXPECT_TRUE(ui_test_utils::IsViewFocused(browser(), VIEW_ID_TAB_CONTAINER)); |    69   EXPECT_TRUE(ui_test_utils::IsViewFocused(browser(), VIEW_ID_TAB_CONTAINER)); | 
|    76   EXPECT_FALSE(omnibox()->model()->has_focus()); |    70   EXPECT_FALSE(omnibox()->model()->has_focus()); | 
|    77  |    71  | 
|    78   // Delete any existing overlay. |    72   // Delete any existing overlay. | 
|    79   instant()->overlay_.reset(); |    73   instant()->overlay_.reset(); | 
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   114 } |   108 } | 
|   115  |   109  | 
|   116 // Flakes on Windows and Mac: http://crbug.com/170677 |   110 // Flakes on Windows and Mac: http://crbug.com/170677 | 
|   117 #if defined(OS_WIN) || defined(OS_MACOSX) |   111 #if defined(OS_WIN) || defined(OS_MACOSX) | 
|   118 #define MAYBE_OnChangeEvent DISABLED_OnChangeEvent |   112 #define MAYBE_OnChangeEvent DISABLED_OnChangeEvent | 
|   119 #else |   113 #else | 
|   120 #define MAYBE_OnChangeEvent OnChangeEvent |   114 #define MAYBE_OnChangeEvent OnChangeEvent | 
|   121 #endif |   115 #endif | 
|   122 // Test that the onchange event is dispatched upon typing in the omnibox. |   116 // Test that the onchange event is dispatched upon typing in the omnibox. | 
|   123 IN_PROC_BROWSER_TEST_F(InstantTest, MAYBE_OnChangeEvent) { |   117 IN_PROC_BROWSER_TEST_F(InstantTest, MAYBE_OnChangeEvent) { | 
|   124   ASSERT_NO_FATAL_FAILURE(SetupInstant()); |   118   ASSERT_NO_FATAL_FAILURE(SetupInstant(browser())); | 
|   125   FocusOmniboxAndWaitForInstantSupport(); |   119   FocusOmniboxAndWaitForInstantSupport(); | 
|   126  |   120  | 
|   127   // Use the Instant page as the active tab, so we can exploit its visibility |   121   // Use the Instant page as the active tab, so we can exploit its visibility | 
|   128   // handler to check visibility transitions. |   122   // handler to check visibility transitions. | 
|   129   ui_test_utils::NavigateToURL(browser(), instant_url_); |   123   ui_test_utils::NavigateToURL(browser(), instant_url()); | 
|   130   content::WebContents* active_tab = |   124   content::WebContents* active_tab = | 
|   131       browser()->tab_strip_model()->GetActiveWebContents(); |   125       browser()->tab_strip_model()->GetActiveWebContents(); | 
|   132  |   126  | 
|   133   int active_tab_onvisibilitycalls = -1; |   127   int active_tab_onvisibilitycalls = -1; | 
|   134   EXPECT_TRUE(GetIntFromJS(active_tab, "onvisibilitycalls", |   128   EXPECT_TRUE(GetIntFromJS(active_tab, "onvisibilitycalls", | 
|   135                            &active_tab_onvisibilitycalls)); |   129                            &active_tab_onvisibilitycalls)); | 
|   136   EXPECT_EQ(0, active_tab_onvisibilitycalls); |   130   EXPECT_EQ(0, active_tab_onvisibilitycalls); | 
|   137  |   131  | 
|   138   // Typing "query" into the omnibox causes one or more onchange events. The |   132   // Typing "query" into the omnibox causes one or more onchange events. The | 
|   139   // page suggested "query suggestion" is inline autocompleted into the omnibox, |   133   // page suggested "query suggestion" is inline autocompleted into the omnibox, | 
| (...skipping 16 matching lines...) Expand all  Loading... | 
|   156   // The overlay was shown once, and the active tab was never hidden. |   150   // The overlay was shown once, and the active tab was never hidden. | 
|   157   EXPECT_EQ(1, onvisibilitycalls_); |   151   EXPECT_EQ(1, onvisibilitycalls_); | 
|   158   active_tab_onvisibilitycalls = -1; |   152   active_tab_onvisibilitycalls = -1; | 
|   159   EXPECT_TRUE(GetIntFromJS(active_tab, "onvisibilitycalls", |   153   EXPECT_TRUE(GetIntFromJS(active_tab, "onvisibilitycalls", | 
|   160                            &active_tab_onvisibilitycalls)); |   154                            &active_tab_onvisibilitycalls)); | 
|   161   EXPECT_EQ(0, active_tab_onvisibilitycalls); |   155   EXPECT_EQ(0, active_tab_onvisibilitycalls); | 
|   162 } |   156 } | 
|   163  |   157  | 
|   164 // Test that the onsubmit event is dispatched upon pressing Enter. |   158 // Test that the onsubmit event is dispatched upon pressing Enter. | 
|   165 IN_PROC_BROWSER_TEST_F(InstantTest, OnSubmitEvent) { |   159 IN_PROC_BROWSER_TEST_F(InstantTest, OnSubmitEvent) { | 
|   166   ASSERT_NO_FATAL_FAILURE(SetupInstant()); |   160   ASSERT_NO_FATAL_FAILURE(SetupInstant(browser())); | 
|   167   FocusOmniboxAndWaitForInstantSupport(); |   161   FocusOmniboxAndWaitForInstantSupport(); | 
|   168   SetOmniboxTextAndWaitForOverlayToShow("search"); |   162   SetOmniboxTextAndWaitForOverlayToShow("search"); | 
|   169  |   163  | 
|   170   // Stash a reference to the overlay, so we can refer to it after commit. |   164   // Stash a reference to the overlay, so we can refer to it after commit. | 
|   171   content::WebContents* overlay = instant()->GetOverlayContents(); |   165   content::WebContents* overlay = instant()->GetOverlayContents(); | 
|   172   EXPECT_TRUE(overlay); |   166   EXPECT_TRUE(overlay); | 
|   173  |   167  | 
|   174   // The state of the searchbox before the commit. |   168   // The state of the searchbox before the commit. | 
|   175   EXPECT_TRUE(UpdateSearchState(overlay)); |   169   EXPECT_TRUE(UpdateSearchState(overlay)); | 
|   176   EXPECT_EQ("search", value_); |   170   EXPECT_EQ("search", value_); | 
| (...skipping 21 matching lines...) Expand all  Loading... | 
|   198   EXPECT_NE(instant()->GetOverlayContents(), overlay); |   192   EXPECT_NE(instant()->GetOverlayContents(), overlay); | 
|   199  |   193  | 
|   200   // Check that the current active tab is indeed what was once the overlay. |   194   // Check that the current active tab is indeed what was once the overlay. | 
|   201   EXPECT_EQ(overlay, browser()->tab_strip_model()->GetActiveWebContents()); |   195   EXPECT_EQ(overlay, browser()->tab_strip_model()->GetActiveWebContents()); | 
|   202  |   196  | 
|   203   // We should have two navigation entries, one for the NTP, and one for the |   197   // We should have two navigation entries, one for the NTP, and one for the | 
|   204   // Instant search that was committed. |   198   // Instant search that was committed. | 
|   205   EXPECT_EQ(2, overlay->GetController().GetEntryCount()); |   199   EXPECT_EQ(2, overlay->GetController().GetEntryCount()); | 
|   206  |   200  | 
|   207   // Check that the omnibox contains the Instant URL we loaded. |   201   // Check that the omnibox contains the Instant URL we loaded. | 
|   208   EXPECT_EQ(instant_url_, omnibox()->model()->PermanentURL()); |   202   EXPECT_EQ(instant_url(), omnibox()->model()->PermanentURL()); | 
|   209  |   203  | 
|   210   // Check that the searchbox API values have been reset. |   204   // Check that the searchbox API values have been reset. | 
|   211   std::string value; |   205   std::string value; | 
|   212   EXPECT_TRUE(GetStringFromJS(overlay, |   206   EXPECT_TRUE(GetStringFromJS(overlay, | 
|   213                               "chrome.embeddedSearch.searchBox.value", &value)); |   207                               "chrome.embeddedSearch.searchBox.value", &value)); | 
|   214   EXPECT_EQ("", value); |   208   EXPECT_EQ("", value); | 
|   215  |   209  | 
|   216   // However, the page should've correctly received the committed query. |   210   // However, the page should've correctly received the committed query. | 
|   217   EXPECT_TRUE(UpdateSearchState(overlay)); |   211   EXPECT_TRUE(UpdateSearchState(overlay)); | 
|   218   EXPECT_EQ("search", value_); |   212   EXPECT_EQ("search", value_); | 
|   219   EXPECT_TRUE(verbatim_); |   213   EXPECT_TRUE(verbatim_); | 
|   220   EXPECT_EQ(1, onsubmitcalls_); |   214   EXPECT_EQ(1, onsubmitcalls_); | 
|   221   EXPECT_EQ(1, onvisibilitycalls_); |   215   EXPECT_EQ(1, onvisibilitycalls_); | 
|   222 } |   216 } | 
|   223  |   217  | 
|   224 // Test that the oncancel event is dispatched upon clicking on the overlay. |   218 // Test that the oncancel event is dispatched upon clicking on the overlay. | 
|   225 IN_PROC_BROWSER_TEST_F(InstantTest, OnCancelEvent) { |   219 IN_PROC_BROWSER_TEST_F(InstantTest, OnCancelEvent) { | 
|   226   ASSERT_NO_FATAL_FAILURE(SetupInstant()); |   220   ASSERT_NO_FATAL_FAILURE(SetupInstant(browser())); | 
|   227   EXPECT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser())); |   221   EXPECT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser())); | 
|   228   FocusOmniboxAndWaitForInstantSupport(); |   222   FocusOmniboxAndWaitForInstantSupport(); | 
|   229   SetOmniboxTextAndWaitForOverlayToShow("search"); |   223   SetOmniboxTextAndWaitForOverlayToShow("search"); | 
|   230  |   224  | 
|   231   // Stash a reference to the overlay, so we can refer to it after commit. |   225   // Stash a reference to the overlay, so we can refer to it after commit. | 
|   232   content::WebContents* overlay = instant()->GetOverlayContents(); |   226   content::WebContents* overlay = instant()->GetOverlayContents(); | 
|   233   EXPECT_TRUE(overlay); |   227   EXPECT_TRUE(overlay); | 
|   234  |   228  | 
|   235   // The state of the searchbox before the commit. |   229   // The state of the searchbox before the commit. | 
|   236   EXPECT_TRUE(UpdateSearchState(overlay)); |   230   EXPECT_TRUE(UpdateSearchState(overlay)); | 
| (...skipping 22 matching lines...) Expand all  Loading... | 
|   259   EXPECT_NE(instant()->GetOverlayContents(), overlay); |   253   EXPECT_NE(instant()->GetOverlayContents(), overlay); | 
|   260  |   254  | 
|   261   // Check that the current active tab is indeed what was once the overlay. |   255   // Check that the current active tab is indeed what was once the overlay. | 
|   262   EXPECT_EQ(overlay, browser()->tab_strip_model()->GetActiveWebContents()); |   256   EXPECT_EQ(overlay, browser()->tab_strip_model()->GetActiveWebContents()); | 
|   263  |   257  | 
|   264   // We should have two navigation entries, one for the NTP, and one for the |   258   // We should have two navigation entries, one for the NTP, and one for the | 
|   265   // Instant search that was committed. |   259   // Instant search that was committed. | 
|   266   EXPECT_EQ(2, overlay->GetController().GetEntryCount()); |   260   EXPECT_EQ(2, overlay->GetController().GetEntryCount()); | 
|   267  |   261  | 
|   268   // Check that the omnibox contains the Instant URL we loaded. |   262   // Check that the omnibox contains the Instant URL we loaded. | 
|   269   EXPECT_EQ(instant_url_, omnibox()->model()->PermanentURL()); |   263   EXPECT_EQ(instant_url(), omnibox()->model()->PermanentURL()); | 
|   270  |   264  | 
|   271   // Check that the searchbox API values have been reset. |   265   // Check that the searchbox API values have been reset. | 
|   272   std::string value; |   266   std::string value; | 
|   273   EXPECT_TRUE(GetStringFromJS(overlay, |   267   EXPECT_TRUE(GetStringFromJS(overlay, | 
|   274                               "chrome.embeddedSearch.searchBox.value", &value)); |   268                               "chrome.embeddedSearch.searchBox.value", &value)); | 
|   275   EXPECT_EQ("", value); |   269   EXPECT_EQ("", value); | 
|   276  |   270  | 
|   277   // However, the page should've correctly received the committed query. |   271   // However, the page should've correctly received the committed query. | 
|   278   EXPECT_TRUE(UpdateSearchState(overlay)); |   272   EXPECT_TRUE(UpdateSearchState(overlay)); | 
|   279   EXPECT_EQ("search", value_); |   273   EXPECT_EQ("search", value_); | 
|   280   EXPECT_TRUE(verbatim_); |   274   EXPECT_TRUE(verbatim_); | 
|   281   EXPECT_EQ(1, oncancelcalls_); |   275   EXPECT_EQ(1, oncancelcalls_); | 
|   282   EXPECT_EQ(1, onvisibilitycalls_); |   276   EXPECT_EQ(1, onvisibilitycalls_); | 
|   283 } |   277 } | 
|   284  |   278  | 
|   285 // Test that the onreisze event is dispatched upon typing in the omnibox. |   279 // Test that the onreisze event is dispatched upon typing in the omnibox. | 
|   286 IN_PROC_BROWSER_TEST_F(InstantTest, OnResizeEvent) { |   280 IN_PROC_BROWSER_TEST_F(InstantTest, OnResizeEvent) { | 
|   287   ASSERT_NO_FATAL_FAILURE(SetupInstant()); |   281   ASSERT_NO_FATAL_FAILURE(SetupInstant(browser())); | 
|   288  |   282  | 
|   289   FocusOmniboxAndWaitForInstantSupport(); |   283   FocusOmniboxAndWaitForInstantSupport(); | 
|   290  |   284  | 
|   291   EXPECT_TRUE(UpdateSearchState(instant()->GetOverlayContents())); |   285   EXPECT_TRUE(UpdateSearchState(instant()->GetOverlayContents())); | 
|   292   EXPECT_EQ(0, onresizecalls_); |   286   EXPECT_EQ(0, onresizecalls_); | 
|   293   EXPECT_EQ(0, height_); |   287   EXPECT_EQ(0, height_); | 
|   294  |   288  | 
|   295   // Type a query into the omnibox. This should cause an onresize() event, with |   289   // Type a query into the omnibox. This should cause an onresize() event, with | 
|   296   // a valid (non-zero) height. |   290   // a valid (non-zero) height. | 
|   297   SetOmniboxTextAndWaitForOverlayToShow("search"); |   291   SetOmniboxTextAndWaitForOverlayToShow("search"); | 
|   298  |   292  | 
|   299   EXPECT_TRUE(UpdateSearchState(instant()->GetOverlayContents())); |   293   EXPECT_TRUE(UpdateSearchState(instant()->GetOverlayContents())); | 
|   300   EXPECT_EQ(1, onresizecalls_); |   294   EXPECT_EQ(1, onresizecalls_); | 
|   301   EXPECT_LT(0, height_); |   295   EXPECT_LT(0, height_); | 
|   302 } |   296 } | 
|   303  |   297  | 
|   304 // Test that the INSTANT_COMPLETE_NOW behavior works as expected. |   298 // Test that the INSTANT_COMPLETE_NOW behavior works as expected. | 
|   305 IN_PROC_BROWSER_TEST_F(InstantTest, SuggestionIsCompletedNow) { |   299 IN_PROC_BROWSER_TEST_F(InstantTest, SuggestionIsCompletedNow) { | 
|   306   ASSERT_NO_FATAL_FAILURE(SetupInstant()); |   300   ASSERT_NO_FATAL_FAILURE(SetupInstant(browser())); | 
|   307   FocusOmniboxAndWaitForInstantSupport(); |   301   FocusOmniboxAndWaitForInstantSupport(); | 
|   308  |   302  | 
|   309   // Tell the JS to request the given behavior. |   303   // Tell the JS to request the given behavior. | 
|   310   EXPECT_TRUE(ExecuteScript("behavior = 'now'")); |   304   EXPECT_TRUE(ExecuteScript("behavior = 'now'")); | 
|   311  |   305  | 
|   312   // Type a query, causing the hardcoded "query suggestion" to be returned. |   306   // Type a query, causing the hardcoded "query suggestion" to be returned. | 
|   313   SetOmniboxTextAndWaitForOverlayToShow("query"); |   307   SetOmniboxTextAndWaitForOverlayToShow("query"); | 
|   314  |   308  | 
|   315   // Get what's showing in the omnibox, and what's highlighted. |   309   // Get what's showing in the omnibox, and what's highlighted. | 
|   316   string16 text = omnibox()->GetText(); |   310   string16 text = omnibox()->GetText(); | 
|   317   size_t start = 0, end = 0; |   311   size_t start = 0, end = 0; | 
|   318   omnibox()->GetSelectionBounds(&start, &end); |   312   omnibox()->GetSelectionBounds(&start, &end); | 
|   319   if (start > end) |   313   if (start > end) | 
|   320     std::swap(start, end); |   314     std::swap(start, end); | 
|   321  |   315  | 
|   322   EXPECT_EQ(ASCIIToUTF16("query suggestion"), text); |   316   EXPECT_EQ(ASCIIToUTF16("query suggestion"), text); | 
|   323   EXPECT_EQ(ASCIIToUTF16(" suggestion"), text.substr(start, end - start)); |   317   EXPECT_EQ(ASCIIToUTF16(" suggestion"), text.substr(start, end - start)); | 
|   324   EXPECT_EQ(ASCIIToUTF16(""), omnibox()->GetInstantSuggestion()); |   318   EXPECT_EQ(ASCIIToUTF16(""), omnibox()->GetInstantSuggestion()); | 
|   325 } |   319 } | 
|   326  |   320  | 
|   327 // Test that the INSTANT_COMPLETE_NEVER behavior works as expected. |   321 // Test that the INSTANT_COMPLETE_NEVER behavior works as expected. | 
|   328 IN_PROC_BROWSER_TEST_F(InstantTest, SuggestionIsCompletedNever) { |   322 IN_PROC_BROWSER_TEST_F(InstantTest, SuggestionIsCompletedNever) { | 
|   329   ASSERT_NO_FATAL_FAILURE(SetupInstant()); |   323   ASSERT_NO_FATAL_FAILURE(SetupInstant(browser())); | 
|   330   FocusOmniboxAndWaitForInstantSupport(); |   324   FocusOmniboxAndWaitForInstantSupport(); | 
|   331  |   325  | 
|   332   // Tell the JS to request the given behavior. |   326   // Tell the JS to request the given behavior. | 
|   333   EXPECT_TRUE(ExecuteScript("behavior = 'never'")); |   327   EXPECT_TRUE(ExecuteScript("behavior = 'never'")); | 
|   334  |   328  | 
|   335   // Type a query, causing the hardcoded "query suggestion" to be returned. |   329   // Type a query, causing the hardcoded "query suggestion" to be returned. | 
|   336   SetOmniboxTextAndWaitForOverlayToShow("query"); |   330   SetOmniboxTextAndWaitForOverlayToShow("query"); | 
|   337  |   331  | 
|   338   // Get what's showing in the omnibox, and what's highlighted. |   332   // Get what's showing in the omnibox, and what's highlighted. | 
|   339   string16 text = omnibox()->GetText(); |   333   string16 text = omnibox()->GetText(); | 
|   340   size_t start = 0, end = 0; |   334   size_t start = 0, end = 0; | 
|   341   omnibox()->GetSelectionBounds(&start, &end); |   335   omnibox()->GetSelectionBounds(&start, &end); | 
|   342   if (start > end) |   336   if (start > end) | 
|   343     std::swap(start, end); |   337     std::swap(start, end); | 
|   344  |   338  | 
|   345   EXPECT_EQ(ASCIIToUTF16("query"), text); |   339   EXPECT_EQ(ASCIIToUTF16("query"), text); | 
|   346   EXPECT_EQ(ASCIIToUTF16(""), text.substr(start, end - start)); |   340   EXPECT_EQ(ASCIIToUTF16(""), text.substr(start, end - start)); | 
|   347   EXPECT_EQ(ASCIIToUTF16(" suggestion"), omnibox()->GetInstantSuggestion()); |   341   EXPECT_EQ(ASCIIToUTF16(" suggestion"), omnibox()->GetInstantSuggestion()); | 
|   348 } |   342 } | 
|   349  |   343  | 
|   350 // Test that a valid suggestion is accepted. |   344 // Test that a valid suggestion is accepted. | 
|   351 IN_PROC_BROWSER_TEST_F(InstantTest, SuggestionIsValidObject) { |   345 IN_PROC_BROWSER_TEST_F(InstantTest, SuggestionIsValidObject) { | 
|   352   ASSERT_NO_FATAL_FAILURE(SetupInstant()); |   346   ASSERT_NO_FATAL_FAILURE(SetupInstant(browser())); | 
|   353   FocusOmniboxAndWaitForInstantSupport(); |   347   FocusOmniboxAndWaitForInstantSupport(); | 
|   354  |   348  | 
|   355   // Tell the JS to use the given suggestion. |   349   // Tell the JS to use the given suggestion. | 
|   356   EXPECT_TRUE(ExecuteScript("suggestion = [ { value: 'query completion' } ]")); |   350   EXPECT_TRUE(ExecuteScript("suggestion = [ { value: 'query completion' } ]")); | 
|   357  |   351  | 
|   358   // Type a query, causing "query completion" to be returned as the suggestion. |   352   // Type a query, causing "query completion" to be returned as the suggestion. | 
|   359   SetOmniboxTextAndWaitForOverlayToShow("query"); |   353   SetOmniboxTextAndWaitForOverlayToShow("query"); | 
|   360   EXPECT_EQ(ASCIIToUTF16("query completion"), omnibox()->GetText()); |   354   EXPECT_EQ(ASCIIToUTF16("query completion"), omnibox()->GetText()); | 
|   361 } |   355 } | 
|   362  |   356  | 
|   363 // Test that an invalid suggestion is rejected. |   357 // Test that an invalid suggestion is rejected. | 
|   364 IN_PROC_BROWSER_TEST_F(InstantTest, SuggestionIsInvalidObject) { |   358 IN_PROC_BROWSER_TEST_F(InstantTest, SuggestionIsInvalidObject) { | 
|   365   ASSERT_NO_FATAL_FAILURE(SetupInstant()); |   359   ASSERT_NO_FATAL_FAILURE(SetupInstant(browser())); | 
|   366   FocusOmniboxAndWaitForInstantSupport(); |   360   FocusOmniboxAndWaitForInstantSupport(); | 
|   367  |   361  | 
|   368   // Tell the JS to use an object in an invalid format. |   362   // Tell the JS to use an object in an invalid format. | 
|   369   EXPECT_TRUE(ExecuteScript("suggestion = { value: 'query completion' }")); |   363   EXPECT_TRUE(ExecuteScript("suggestion = { value: 'query completion' }")); | 
|   370  |   364  | 
|   371   // Type a query, but expect no suggestion. |   365   // Type a query, but expect no suggestion. | 
|   372   SetOmniboxTextAndWaitForOverlayToShow("query"); |   366   SetOmniboxTextAndWaitForOverlayToShow("query"); | 
|   373   EXPECT_EQ(ASCIIToUTF16("query"), omnibox()->GetText()); |   367   EXPECT_EQ(ASCIIToUTF16("query"), omnibox()->GetText()); | 
|   374 } |   368 } | 
|   375  |   369  | 
|   376 // Test that various forms of empty suggestions are rejected. |   370 // Test that various forms of empty suggestions are rejected. | 
|   377 IN_PROC_BROWSER_TEST_F(InstantTest, SuggestionIsEmpty) { |   371 IN_PROC_BROWSER_TEST_F(InstantTest, SuggestionIsEmpty) { | 
|   378   ASSERT_NO_FATAL_FAILURE(SetupInstant()); |   372   ASSERT_NO_FATAL_FAILURE(SetupInstant(browser())); | 
|   379   FocusOmniboxAndWaitForInstantSupport(); |   373   FocusOmniboxAndWaitForInstantSupport(); | 
|   380  |   374  | 
|   381   EXPECT_TRUE(ExecuteScript("suggestion = {}")); |   375   EXPECT_TRUE(ExecuteScript("suggestion = {}")); | 
|   382   SetOmniboxTextAndWaitForOverlayToShow("query"); |   376   SetOmniboxTextAndWaitForOverlayToShow("query"); | 
|   383   EXPECT_EQ(ASCIIToUTF16("query"), omnibox()->GetText()); |   377   EXPECT_EQ(ASCIIToUTF16("query"), omnibox()->GetText()); | 
|   384  |   378  | 
|   385   omnibox()->RevertAll(); |   379   omnibox()->RevertAll(); | 
|   386  |   380  | 
|   387   EXPECT_TRUE(ExecuteScript("suggestion = []")); |   381   EXPECT_TRUE(ExecuteScript("suggestion = []")); | 
|   388   SetOmniboxTextAndWaitForOverlayToShow("query sugg"); |   382   SetOmniboxTextAndWaitForOverlayToShow("query sugg"); | 
|   389   EXPECT_EQ(ASCIIToUTF16("query sugg"), omnibox()->GetText()); |   383   EXPECT_EQ(ASCIIToUTF16("query sugg"), omnibox()->GetText()); | 
|   390  |   384  | 
|   391   omnibox()->RevertAll(); |   385   omnibox()->RevertAll(); | 
|   392  |   386  | 
|   393   EXPECT_TRUE(ExecuteScript("suggestion = [{}]")); |   387   EXPECT_TRUE(ExecuteScript("suggestion = [{}]")); | 
|   394   SetOmniboxTextAndWaitForOverlayToShow("query suggest"); |   388   SetOmniboxTextAndWaitForOverlayToShow("query suggest"); | 
|   395   EXPECT_EQ(ASCIIToUTF16("query suggest"), omnibox()->GetText()); |   389   EXPECT_EQ(ASCIIToUTF16("query suggest"), omnibox()->GetText()); | 
|   396 } |   390 } | 
|   397  |   391  | 
|   398 // Test that Instant doesn't process URLs. |   392 // Test that Instant doesn't process URLs. | 
|   399 IN_PROC_BROWSER_TEST_F(InstantTest, RejectsURLs) { |   393 IN_PROC_BROWSER_TEST_F(InstantTest, RejectsURLs) { | 
|   400   ASSERT_NO_FATAL_FAILURE(SetupInstant()); |   394   ASSERT_NO_FATAL_FAILURE(SetupInstant(browser())); | 
|   401   FocusOmniboxAndWaitForInstantSupport(); |   395   FocusOmniboxAndWaitForInstantSupport(); | 
|   402  |   396  | 
|   403   // Note that we are not actually navigating to these URLs yet. We are just |   397   // Note that we are not actually navigating to these URLs yet. We are just | 
|   404   // typing them into the omnibox (without pressing Enter) and checking that |   398   // typing them into the omnibox (without pressing Enter) and checking that | 
|   405   // Instant doesn't try to process them. |   399   // Instant doesn't try to process them. | 
|   406   SetOmniboxText(content::kChromeUICrashURL); |   400   SetOmniboxText(content::kChromeUICrashURL); | 
|   407   EXPECT_FALSE(instant()->IsOverlayingSearchResults()); |   401   EXPECT_FALSE(instant()->IsOverlayingSearchResults()); | 
|   408   EXPECT_TRUE(instant()->model()->mode().is_default()); |   402   EXPECT_TRUE(instant()->model()->mode().is_default()); | 
|   409  |   403  | 
|   410   SetOmniboxText(content::kChromeUIHangURL); |   404   SetOmniboxText(content::kChromeUIHangURL); | 
|   411   EXPECT_FALSE(instant()->IsOverlayingSearchResults()); |   405   EXPECT_FALSE(instant()->IsOverlayingSearchResults()); | 
|   412   EXPECT_TRUE(instant()->model()->mode().is_default()); |   406   EXPECT_TRUE(instant()->model()->mode().is_default()); | 
|   413  |   407  | 
|   414   SetOmniboxText(content::kChromeUIKillURL); |   408   SetOmniboxText(content::kChromeUIKillURL); | 
|   415   EXPECT_FALSE(instant()->IsOverlayingSearchResults()); |   409   EXPECT_FALSE(instant()->IsOverlayingSearchResults()); | 
|   416   EXPECT_TRUE(instant()->model()->mode().is_default()); |   410   EXPECT_TRUE(instant()->model()->mode().is_default()); | 
|   417  |   411  | 
|   418   // Make sure that the URLs were never sent to the overlay page. |   412   // Make sure that the URLs were never sent to the overlay page. | 
|   419   EXPECT_TRUE(UpdateSearchState(instant()->GetOverlayContents())); |   413   EXPECT_TRUE(UpdateSearchState(instant()->GetOverlayContents())); | 
|   420   EXPECT_EQ("", value_); |   414   EXPECT_EQ("", value_); | 
|   421 } |   415 } | 
|   422  |   416  | 
|   423 // Test that Instant doesn't fire for intranet paths that look like searches. |   417 // Test that Instant doesn't fire for intranet paths that look like searches. | 
|   424 // http://crbug.com/99836 |   418 // http://crbug.com/99836 | 
|   425 IN_PROC_BROWSER_TEST_F(InstantTest, IntranetPathLooksLikeSearch) { |   419 IN_PROC_BROWSER_TEST_F(InstantTest, IntranetPathLooksLikeSearch) { | 
|   426   ASSERT_NO_FATAL_FAILURE(SetupInstant()); |   420   ASSERT_NO_FATAL_FAILURE(SetupInstant(browser())); | 
|   427  |   421  | 
|   428   // Navigate to a URL that looks like a search (when the scheme is stripped). |   422   // Navigate to a URL that looks like a search (when the scheme is stripped). | 
|   429   // It's okay if the host is bogus or the navigation fails, since we only care |   423   // It's okay if the host is bogus or the navigation fails, since we only care | 
|   430   // that Instant doesn't act on it. |   424   // that Instant doesn't act on it. | 
|   431   ui_test_utils::NavigateToURL(browser(), GURL("http://baby/beluga")); |   425   ui_test_utils::NavigateToURL(browser(), GURL("http://baby/beluga")); | 
|   432   EXPECT_EQ(ASCIIToUTF16("baby/beluga"), omnibox()->GetText()); |   426   EXPECT_EQ(ASCIIToUTF16("baby/beluga"), omnibox()->GetText()); | 
|   433  |   427  | 
|   434   EXPECT_TRUE(instant()->GetOverlayContents()); |   428   EXPECT_TRUE(instant()->GetOverlayContents()); | 
|   435   EXPECT_FALSE(instant()->IsOverlayingSearchResults()); |   429   EXPECT_FALSE(instant()->IsOverlayingSearchResults()); | 
|   436   EXPECT_TRUE(instant()->model()->mode().is_default()); |   430   EXPECT_TRUE(instant()->model()->mode().is_default()); | 
|   437 } |   431 } | 
|   438  |   432  | 
|   439 // Test that transitions between searches and non-searches work as expected. |   433 // Test that transitions between searches and non-searches work as expected. | 
|   440 IN_PROC_BROWSER_TEST_F(InstantTest, TransitionsBetweenSearchAndURL) { |   434 IN_PROC_BROWSER_TEST_F(InstantTest, TransitionsBetweenSearchAndURL) { | 
|   441   ASSERT_NO_FATAL_FAILURE(SetupInstant()); |   435   ASSERT_NO_FATAL_FAILURE(SetupInstant(browser())); | 
|   442   FocusOmniboxAndWaitForInstantSupport(); |   436   FocusOmniboxAndWaitForInstantSupport(); | 
|   443  |   437  | 
|   444   // Type a search, and immediately a URL, without waiting for Instant to show. |   438   // Type a search, and immediately a URL, without waiting for Instant to show. | 
|   445   // The page is told about the search. Though the page isn't told about the |   439   // The page is told about the search. Though the page isn't told about the | 
|   446   // subsequent URL, it invalidates the search, so a blank query is sent in its |   440   // subsequent URL, it invalidates the search, so a blank query is sent in its | 
|   447   // place to indicate that the search is "out of date". |   441   // place to indicate that the search is "out of date". | 
|   448   SetOmniboxText("query"); |   442   SetOmniboxText("query"); | 
|   449   SetOmniboxText("http://monstrous/nightmare"); |   443   SetOmniboxText("http://monstrous/nightmare"); | 
|   450   int min_onchangecalls = 2; |   444   int min_onchangecalls = 2; | 
|   451  |   445  | 
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   495  |   489  | 
|   496   EXPECT_TRUE(UpdateSearchState(instant()->GetOverlayContents())); |   490   EXPECT_TRUE(UpdateSearchState(instant()->GetOverlayContents())); | 
|   497   EXPECT_FALSE(instant()->IsOverlayingSearchResults()); |   491   EXPECT_FALSE(instant()->IsOverlayingSearchResults()); | 
|   498   EXPECT_TRUE(instant()->model()->mode().is_default()); |   492   EXPECT_TRUE(instant()->model()->mode().is_default()); | 
|   499   EXPECT_EQ("", value_); |   493   EXPECT_EQ("", value_); | 
|   500   EXPECT_LE(min_onchangecalls, onchangecalls_); |   494   EXPECT_LE(min_onchangecalls, onchangecalls_); | 
|   501 } |   495 } | 
|   502  |   496  | 
|   503 // Test that Instant can't be fooled into committing a URL. |   497 // Test that Instant can't be fooled into committing a URL. | 
|   504 IN_PROC_BROWSER_TEST_F(InstantTest, DoesNotCommitURLsOne) { |   498 IN_PROC_BROWSER_TEST_F(InstantTest, DoesNotCommitURLsOne) { | 
|   505   ASSERT_NO_FATAL_FAILURE(SetupInstant()); |   499   ASSERT_NO_FATAL_FAILURE(SetupInstant(browser())); | 
|   506   EXPECT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser())); |   500   EXPECT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser())); | 
|   507  |   501  | 
|   508   // Type a URL. The Instant overlay shouldn't be showing. |   502   // Type a URL. The Instant overlay shouldn't be showing. | 
|   509   SetOmniboxText("http://deadly/nadder"); |   503   SetOmniboxText("http://deadly/nadder"); | 
|   510   EXPECT_FALSE(instant()->IsOverlayingSearchResults()); |   504   EXPECT_FALSE(instant()->IsOverlayingSearchResults()); | 
|   511   EXPECT_TRUE(instant()->model()->mode().is_default()); |   505   EXPECT_TRUE(instant()->model()->mode().is_default()); | 
|   512  |   506  | 
|   513   // Unfocus and refocus the omnibox. |   507   // Unfocus and refocus the omnibox. | 
|   514   ui_test_utils::ClickOnView(browser(), VIEW_ID_TAB_CONTAINER); |   508   ui_test_utils::ClickOnView(browser(), VIEW_ID_TAB_CONTAINER); | 
|   515   EXPECT_TRUE(ui_test_utils::IsViewFocused(browser(), VIEW_ID_TAB_CONTAINER)); |   509   EXPECT_TRUE(ui_test_utils::IsViewFocused(browser(), VIEW_ID_TAB_CONTAINER)); | 
| (...skipping 15 matching lines...) Expand all  Loading... | 
|   531   EXPECT_EQ(ASCIIToUTF16("deadly/nadder"), omnibox()->GetText()); |   525   EXPECT_EQ(ASCIIToUTF16("deadly/nadder"), omnibox()->GetText()); | 
|   532  |   526  | 
|   533   // Instant shouldn't have done anything. |   527   // Instant shouldn't have done anything. | 
|   534   EXPECT_EQ(overlay, instant()->GetOverlayContents()); |   528   EXPECT_EQ(overlay, instant()->GetOverlayContents()); | 
|   535   EXPECT_FALSE(instant()->IsOverlayingSearchResults()); |   529   EXPECT_FALSE(instant()->IsOverlayingSearchResults()); | 
|   536   EXPECT_TRUE(instant()->model()->mode().is_default()); |   530   EXPECT_TRUE(instant()->model()->mode().is_default()); | 
|   537 } |   531 } | 
|   538  |   532  | 
|   539 // Test that Instant can't be fooled into committing a URL. |   533 // Test that Instant can't be fooled into committing a URL. | 
|   540 IN_PROC_BROWSER_TEST_F(InstantTest, DoesNotCommitURLsTwo) { |   534 IN_PROC_BROWSER_TEST_F(InstantTest, DoesNotCommitURLsTwo) { | 
|   541   ASSERT_NO_FATAL_FAILURE(SetupInstant()); |   535   ASSERT_NO_FATAL_FAILURE(SetupInstant(browser())); | 
|   542   FocusOmniboxAndWaitForInstantSupport(); |   536   FocusOmniboxAndWaitForInstantSupport(); | 
|   543  |   537  | 
|   544   // Type a query. This causes the overlay to be shown. |   538   // Type a query. This causes the overlay to be shown. | 
|   545   SetOmniboxTextAndWaitForOverlayToShow("query"); |   539   SetOmniboxTextAndWaitForOverlayToShow("query"); | 
|   546  |   540  | 
|   547   content::WebContents* overlay = instant()->GetOverlayContents(); |   541   content::WebContents* overlay = instant()->GetOverlayContents(); | 
|   548   EXPECT_TRUE(overlay); |   542   EXPECT_TRUE(overlay); | 
|   549  |   543  | 
|   550   // Type a URL. This causes the overlay to be hidden. |   544   // Type a URL. This causes the overlay to be hidden. | 
|   551   SetOmniboxText("http://hideous/zippleback"); |   545   SetOmniboxText("http://hideous/zippleback"); | 
| (...skipping 13 matching lines...) Expand all  Loading... | 
|   565   EXPECT_EQ(ASCIIToUTF16("hideous/zippleback"), omnibox()->GetText()); |   559   EXPECT_EQ(ASCIIToUTF16("hideous/zippleback"), omnibox()->GetText()); | 
|   566  |   560  | 
|   567   // As before, Instant shouldn't have done anything. |   561   // As before, Instant shouldn't have done anything. | 
|   568   EXPECT_EQ(overlay, instant()->GetOverlayContents()); |   562   EXPECT_EQ(overlay, instant()->GetOverlayContents()); | 
|   569   EXPECT_FALSE(instant()->IsOverlayingSearchResults()); |   563   EXPECT_FALSE(instant()->IsOverlayingSearchResults()); | 
|   570   EXPECT_TRUE(instant()->model()->mode().is_default()); |   564   EXPECT_TRUE(instant()->model()->mode().is_default()); | 
|   571 } |   565 } | 
|   572  |   566  | 
|   573 // Test that a non-Instant search provider shows no overlays. |   567 // Test that a non-Instant search provider shows no overlays. | 
|   574 IN_PROC_BROWSER_TEST_F(InstantTest, NonInstantSearchProvider) { |   568 IN_PROC_BROWSER_TEST_F(InstantTest, NonInstantSearchProvider) { | 
|   575   instant_url_ = test_server()->GetURL("files/empty.html"); |   569   GURL instant_url = test_server()->GetURL("files/empty.html"); | 
|   576   ASSERT_NO_FATAL_FAILURE(SetupInstant()); |   570   InstantTestBase::Init(instant_url); | 
 |   571   ASSERT_NO_FATAL_FAILURE(SetupInstant(browser())); | 
|   577  |   572  | 
|   578   // Focus the omnibox. When the support determination response comes back, |   573   // Focus the omnibox. When the support determination response comes back, | 
|   579   // Instant will destroy the non-Instant page, and attempt to recreate it. |   574   // Instant will destroy the non-Instant page, and attempt to recreate it. | 
|   580   // We can know this happened by looking at the blacklist. |   575   // We can know this happened by looking at the blacklist. | 
|   581   EXPECT_EQ(0, instant()->blacklisted_urls_[instant_url_.spec()]); |   576   EXPECT_EQ(0, instant()->blacklisted_urls_[instant_url.spec()]); | 
|   582   FocusOmniboxAndWaitForInstantSupport(); |   577   FocusOmniboxAndWaitForInstantSupport(); | 
|   583   EXPECT_EQ(1, instant()->blacklisted_urls_[instant_url_.spec()]); |   578   EXPECT_EQ(1, instant()->blacklisted_urls_[instant_url.spec()]); | 
|   584 } |   579 } | 
|   585  |   580  | 
|   586 // Test that the renderer doesn't crash if JavaScript is blocked. |   581 // Test that the renderer doesn't crash if JavaScript is blocked. | 
|   587 IN_PROC_BROWSER_TEST_F(InstantTest, NoCrashOnBlockedJS) { |   582 IN_PROC_BROWSER_TEST_F(InstantTest, NoCrashOnBlockedJS) { | 
|   588   browser()->profile()->GetHostContentSettingsMap()->SetDefaultContentSetting( |   583   browser()->profile()->GetHostContentSettingsMap()->SetDefaultContentSetting( | 
|   589       CONTENT_SETTINGS_TYPE_JAVASCRIPT, CONTENT_SETTING_BLOCK); |   584       CONTENT_SETTINGS_TYPE_JAVASCRIPT, CONTENT_SETTING_BLOCK); | 
|   590   ASSERT_NO_FATAL_FAILURE(SetupInstant()); |   585   ASSERT_NO_FATAL_FAILURE(SetupInstant(browser())); | 
|   591  |   586  | 
|   592   // Wait for notification that the Instant API has been determined. As long as |   587   // Wait for notification that the Instant API has been determined. As long as | 
|   593   // we get the notification we're good (the renderer didn't crash). |   588   // we get the notification we're good (the renderer didn't crash). | 
|   594   FocusOmniboxAndWaitForInstantSupport(); |   589   FocusOmniboxAndWaitForInstantSupport(); | 
|   595 } |   590 } | 
|   596  |   591  | 
|   597 // Test that the overlay and active tab's visibility states are set correctly. |   592 // Test that the overlay and active tab's visibility states are set correctly. | 
|   598 IN_PROC_BROWSER_TEST_F(InstantTest, PageVisibility) { |   593 IN_PROC_BROWSER_TEST_F(InstantTest, PageVisibility) { | 
|   599   ASSERT_NO_FATAL_FAILURE(SetupInstant()); |   594   ASSERT_NO_FATAL_FAILURE(SetupInstant(browser())); | 
|   600   FocusOmniboxAndWaitForInstantSupport(); |   595   FocusOmniboxAndWaitForInstantSupport(); | 
|   601  |   596  | 
|   602   content::WebContents* active_tab = |   597   content::WebContents* active_tab = | 
|   603       browser()->tab_strip_model()->GetActiveWebContents(); |   598       browser()->tab_strip_model()->GetActiveWebContents(); | 
|   604   content::WebContents* overlay = instant()->GetOverlayContents(); |   599   content::WebContents* overlay = instant()->GetOverlayContents(); | 
|   605  |   600  | 
|   606   // Inititally, the active tab is showing; the overlay is not. |   601   // Inititally, the active tab is showing; the overlay is not. | 
|   607   EXPECT_TRUE(CheckVisibilityIs(active_tab, true)); |   602   EXPECT_TRUE(CheckVisibilityIs(active_tab, true)); | 
|   608   EXPECT_TRUE(CheckVisibilityIs(overlay, false)); |   603   EXPECT_TRUE(CheckVisibilityIs(overlay, false)); | 
|   609  |   604  | 
| (...skipping 27 matching lines...) Expand all  Loading... | 
|   637  |   632  | 
|   638   string16 prefix = l10n_util::GetStringFUTF16( |   633   string16 prefix = l10n_util::GetStringFUTF16( | 
|   639       IDS_TASK_MANAGER_INSTANT_OVERLAY_PREFIX, string16()); |   634       IDS_TASK_MANAGER_INSTANT_OVERLAY_PREFIX, string16()); | 
|   640  |   635  | 
|   641   // There should be no Instant overlay yet. |   636   // There should be no Instant overlay yet. | 
|   642   for (int i = 0; i < task_manager->ResourceCount(); ++i) { |   637   for (int i = 0; i < task_manager->ResourceCount(); ++i) { | 
|   643     string16 title = task_manager->GetResourceTitle(i); |   638     string16 title = task_manager->GetResourceTitle(i); | 
|   644     EXPECT_FALSE(StartsWith(title, prefix, true)) << title << " vs " << prefix; |   639     EXPECT_FALSE(StartsWith(title, prefix, true)) << title << " vs " << prefix; | 
|   645   } |   640   } | 
|   646  |   641  | 
|   647   ASSERT_NO_FATAL_FAILURE(SetupInstant()); |   642   ASSERT_NO_FATAL_FAILURE(SetupInstant(browser())); | 
|   648   FocusOmnibox(); |   643   FocusOmnibox(); | 
|   649  |   644  | 
|   650   // Now there should be two renderers, the second being the Instant overlay. |   645   // Now there should be two renderers, the second being the Instant overlay. | 
|   651   TaskManagerBrowserTestUtil::WaitForWebResourceChange(2); |   646   TaskManagerBrowserTestUtil::WaitForWebResourceChange(2); | 
|   652  |   647  | 
|   653   int instant_overlays = 0; |   648   int instant_overlays = 0; | 
|   654   for (int i = 0; i < task_manager->ResourceCount(); ++i) { |   649   for (int i = 0; i < task_manager->ResourceCount(); ++i) { | 
|   655     string16 title = task_manager->GetResourceTitle(i); |   650     string16 title = task_manager->GetResourceTitle(i); | 
|   656     if (StartsWith(title, prefix, true)) |   651     if (StartsWith(title, prefix, true)) | 
|   657       ++instant_overlays; |   652       ++instant_overlays; | 
| (...skipping 15 matching lines...) Expand all  Loading... | 
|   673                       std::vector<string16>* result, |   668                       std::vector<string16>* result, | 
|   674                       HistoryService::Handle  /* handle */, |   669                       HistoryService::Handle  /* handle */, | 
|   675                       std::vector<history::KeywordSearchTermVisit>* terms) { |   670                       std::vector<history::KeywordSearchTermVisit>* terms) { | 
|   676   for (size_t i = 0; i < terms->size(); ++i) |   671   for (size_t i = 0; i < terms->size(); ++i) | 
|   677     result->push_back((*terms)[i].term); |   672     result->push_back((*terms)[i].term); | 
|   678   run_loop->Quit(); |   673   run_loop->Quit(); | 
|   679 } |   674 } | 
|   680  |   675  | 
|   681 // Test that the Instant page load is not added to history. |   676 // Test that the Instant page load is not added to history. | 
|   682 IN_PROC_BROWSER_TEST_F(InstantTest, History) { |   677 IN_PROC_BROWSER_TEST_F(InstantTest, History) { | 
|   683   ASSERT_NO_FATAL_FAILURE(SetupInstant()); |   678   ASSERT_NO_FATAL_FAILURE(SetupInstant(browser())); | 
|   684   FocusOmniboxAndWaitForInstantSupport(); |   679   FocusOmniboxAndWaitForInstantSupport(); | 
|   685  |   680  | 
|   686   const TemplateURL* template_url = TemplateURLServiceFactory::GetForProfile( |   681   const TemplateURL* template_url = TemplateURLServiceFactory::GetForProfile( | 
|   687       browser()->profile())->GetDefaultSearchProvider(); |   682       browser()->profile())->GetDefaultSearchProvider(); | 
|   688  |   683  | 
|   689   // |instant_url| is the URL Instant loads. |search_url| is the fake URL we |   684   // |instant_url| is the URL Instant loads. |search_url| is the fake URL we | 
|   690   // enter into history for search terms extraction to work correctly. |   685   // enter into history for search terms extraction to work correctly. | 
|   691   std::string search_url = template_url->url_ref().ReplaceSearchTerms( |   686   std::string search_url = template_url->url_ref().ReplaceSearchTerms( | 
|   692       TemplateURLRef::SearchTermsArgs(ASCIIToUTF16("search"))); |   687       TemplateURLRef::SearchTermsArgs(ASCIIToUTF16("search"))); | 
|   693  |   688  | 
| (...skipping 12 matching lines...) Expand all  Loading... | 
|   706  |   701  | 
|   707   // The fake search URL should be in history. |   702   // The fake search URL should be in history. | 
|   708   base::RunLoop run_loop1; |   703   base::RunLoop run_loop1; | 
|   709   history->QueryURL(GURL(search_url), false, &consumer, |   704   history->QueryURL(GURL(search_url), false, &consumer, | 
|   710                     base::Bind(&HistoryQueryDone, &run_loop1, &found)); |   705                     base::Bind(&HistoryQueryDone, &run_loop1, &found)); | 
|   711   run_loop1.Run(); |   706   run_loop1.Run(); | 
|   712   EXPECT_TRUE(found); |   707   EXPECT_TRUE(found); | 
|   713  |   708  | 
|   714   // The Instant URL should not be in history. |   709   // The Instant URL should not be in history. | 
|   715   base::RunLoop run_loop2; |   710   base::RunLoop run_loop2; | 
|   716   history->QueryURL(instant_url_, false, &consumer, |   711   history->QueryURL(instant_url(), false, &consumer, | 
|   717                     base::Bind(&HistoryQueryDone, &run_loop2, &found)); |   712                     base::Bind(&HistoryQueryDone, &run_loop2, &found)); | 
|   718   run_loop2.Run(); |   713   run_loop2.Run(); | 
|   719   EXPECT_FALSE(found); |   714   EXPECT_FALSE(found); | 
|   720  |   715  | 
|   721   // The search terms should have been extracted into history. |   716   // The search terms should have been extracted into history. | 
|   722   base::RunLoop run_loop3; |   717   base::RunLoop run_loop3; | 
|   723   std::vector<string16> queries; |   718   std::vector<string16> queries; | 
|   724   history->GetMostRecentKeywordSearchTerms(template_url->id(), |   719   history->GetMostRecentKeywordSearchTerms(template_url->id(), | 
|   725       ASCIIToUTF16("s"), 1, &consumer, |   720       ASCIIToUTF16("s"), 1, &consumer, | 
|   726       base::Bind(&KeywordQueryDone, &run_loop3, &queries)); |   721       base::Bind(&KeywordQueryDone, &run_loop3, &queries)); | 
|   727   run_loop3.Run(); |   722   run_loop3.Run(); | 
|   728   ASSERT_TRUE(queries.size()); |   723   ASSERT_TRUE(queries.size()); | 
|   729   EXPECT_EQ(ASCIIToUTF16("search"), queries[0]); |   724   EXPECT_EQ(ASCIIToUTF16("search"), queries[0]); | 
|   730 } |   725 } | 
|   731  |   726  | 
|   732 // TODO(jered): Fix this test on Mac. It fails currently, but the behavior is |   727 // TODO(jered): Fix this test on Mac. It fails currently, but the behavior is | 
|   733 // actually closer to what we'd like. |   728 // actually closer to what we'd like. | 
|   734 #if defined(OS_MACOSX) |   729 #if defined(OS_MACOSX) | 
|   735 #define MAYBE_NewWindowDismissesInstant DISABLED_NewWindowDismissesInstant |   730 #define MAYBE_NewWindowDismissesInstant DISABLED_NewWindowDismissesInstant | 
|   736 #else |   731 #else | 
|   737 #define MAYBE_NewWindowDismissesInstant NewWindowDismissesInstant |   732 #define MAYBE_NewWindowDismissesInstant NewWindowDismissesInstant | 
|   738 #endif |   733 #endif | 
|   739 // Test that creating a new window hides any currently showing Instant overlay. |   734 // Test that creating a new window hides any currently showing Instant overlay. | 
|   740 IN_PROC_BROWSER_TEST_F(InstantTest, MAYBE_NewWindowDismissesInstant) { |   735 IN_PROC_BROWSER_TEST_F(InstantTest, MAYBE_NewWindowDismissesInstant) { | 
|   741   ASSERT_NO_FATAL_FAILURE(SetupInstant()); |   736   ASSERT_NO_FATAL_FAILURE(SetupInstant(browser())); | 
|   742   EXPECT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser())); |   737   EXPECT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser())); | 
|   743   FocusOmniboxAndWaitForInstantSupport(); |   738   FocusOmniboxAndWaitForInstantSupport(); | 
|   744   SetOmniboxTextAndWaitForOverlayToShow("search"); |   739   SetOmniboxTextAndWaitForOverlayToShow("search"); | 
|   745  |   740  | 
|   746   Browser* previous_window = browser(); |   741   Browser* previous_window = browser(); | 
|   747   EXPECT_TRUE(instant()->IsOverlayingSearchResults()); |   742   EXPECT_TRUE(instant()->IsOverlayingSearchResults()); | 
|   748   EXPECT_TRUE(instant()->model()->mode().is_search_suggestions()); |   743   EXPECT_TRUE(instant()->model()->mode().is_search_suggestions()); | 
|   749  |   744  | 
|   750   InstantTestModelObserver observer(instant()->model(), |   745   InstantTestModelObserver observer(instant()->model(), | 
|   751                                     chrome::search::Mode::MODE_DEFAULT); |   746                                     chrome::search::Mode::MODE_DEFAULT); | 
|   752   chrome::NewEmptyWindow(browser()->profile(), |   747   chrome::NewEmptyWindow(browser()->profile(), | 
|   753                          chrome::HOST_DESKTOP_TYPE_NATIVE); |   748                          chrome::HOST_DESKTOP_TYPE_NATIVE); | 
|   754   observer.WaitForDesiredOverlayState(); |   749   observer.WaitForDesiredOverlayState(); | 
|   755  |   750  | 
|   756   // Even though we just created a new Browser object (for the new window), the |   751   // Even though we just created a new Browser object (for the new window), the | 
|   757   // browser() accessor should still give us the first window's Browser object. |   752   // browser() accessor should still give us the first window's Browser object. | 
|   758   EXPECT_EQ(previous_window, browser()); |   753   EXPECT_EQ(previous_window, browser()); | 
|   759   EXPECT_FALSE(instant()->IsOverlayingSearchResults()); |   754   EXPECT_FALSE(instant()->IsOverlayingSearchResults()); | 
|   760   EXPECT_TRUE(instant()->model()->mode().is_default()); |   755   EXPECT_TRUE(instant()->model()->mode().is_default()); | 
|   761 } |   756 } | 
|   762  |   757  | 
|   763 // Test that the Instant overlay is recreated when all these conditions are met: |   758 // Test that the Instant overlay is recreated when all these conditions are met: | 
|   764 // - The stale overlay timer has fired. |   759 // - The stale overlay timer has fired. | 
|   765 // - The overlay is not showing. |   760 // - The overlay is not showing. | 
|   766 // - The omnibox doesn't have focus. |   761 // - The omnibox doesn't have focus. | 
|   767 IN_PROC_BROWSER_TEST_F(InstantTest, InstantOverlayRefresh) { |   762 IN_PROC_BROWSER_TEST_F(InstantTest, InstantOverlayRefresh) { | 
|   768   ASSERT_NO_FATAL_FAILURE(SetupInstant()); |   763   ASSERT_NO_FATAL_FAILURE(SetupInstant(browser())); | 
|   769   FocusOmniboxAndWaitForInstantSupport(); |   764   FocusOmniboxAndWaitForInstantSupport(); | 
|   770  |   765  | 
|   771   // The overlay is refreshed only after all three conditions above are met. |   766   // The overlay is refreshed only after all three conditions above are met. | 
|   772   SetOmniboxTextAndWaitForOverlayToShow("query"); |   767   SetOmniboxTextAndWaitForOverlayToShow("query"); | 
|   773   instant()->overlay_->is_stale_ = true; |   768   instant()->overlay_->is_stale_ = true; | 
|   774   instant()->ReloadOverlayIfStale(); |   769   instant()->ReloadOverlayIfStale(); | 
|   775   EXPECT_TRUE(instant()->overlay_->supports_instant()); |   770   EXPECT_TRUE(instant()->overlay_->supports_instant()); | 
|   776   instant()->HideOverlay(); |   771   instant()->HideOverlay(); | 
|   777   EXPECT_TRUE(instant()->overlay_->supports_instant()); |   772   EXPECT_TRUE(instant()->overlay_->supports_instant()); | 
|   778   instant()->OmniboxFocusChanged(OMNIBOX_FOCUS_NONE, |   773   instant()->OmniboxFocusChanged(OMNIBOX_FOCUS_NONE, | 
|   779                                  OMNIBOX_FOCUS_CHANGE_EXPLICIT, NULL); |   774                                  OMNIBOX_FOCUS_CHANGE_EXPLICIT, NULL); | 
|   780   EXPECT_FALSE(instant()->overlay_->supports_instant()); |   775   EXPECT_FALSE(instant()->overlay_->supports_instant()); | 
|   781  |   776  | 
|   782   // Try with a different ordering. |   777   // Try with a different ordering. | 
|   783   SetOmniboxTextAndWaitForOverlayToShow("query"); |   778   SetOmniboxTextAndWaitForOverlayToShow("query"); | 
|   784   instant()->overlay_->is_stale_ = true; |   779   instant()->overlay_->is_stale_ = true; | 
|   785   instant()->ReloadOverlayIfStale(); |   780   instant()->ReloadOverlayIfStale(); | 
|   786   EXPECT_TRUE(instant()->overlay_->supports_instant()); |   781   EXPECT_TRUE(instant()->overlay_->supports_instant()); | 
|   787   instant()->OmniboxFocusChanged(OMNIBOX_FOCUS_NONE, |   782   instant()->OmniboxFocusChanged(OMNIBOX_FOCUS_NONE, | 
|   788                                  OMNIBOX_FOCUS_CHANGE_EXPLICIT, NULL); |   783                                  OMNIBOX_FOCUS_CHANGE_EXPLICIT, NULL); | 
|   789   // TODO(sreeram): Currently, OmniboxLostFocus() calls HideOverlay(). When it |   784   // TODO(sreeram): Currently, OmniboxLostFocus() calls HideOverlay(). When it | 
|   790   // stops hiding the overlay eventually, uncomment these two lines: |   785   // stops hiding the overlay eventually, uncomment these two lines: | 
|   791   //     EXPECT_TRUE(instant()->overlay_->supports_instant()); |   786   //     EXPECT_TRUE(instant()->overlay_->supports_instant()); | 
|   792   //     instant()->HideOverlay(); |   787   //     instant()->HideOverlay(); | 
|   793   EXPECT_FALSE(instant()->overlay_->supports_instant()); |   788   EXPECT_FALSE(instant()->overlay_->supports_instant()); | 
|   794 } |   789 } | 
|   795  |   790  | 
|   796 // Test that suggestions are case insensitive. http://crbug.com/150728 |   791 // Test that suggestions are case insensitive. http://crbug.com/150728 | 
|   797 IN_PROC_BROWSER_TEST_F(InstantTest, SuggestionsAreCaseInsensitive) { |   792 IN_PROC_BROWSER_TEST_F(InstantTest, SuggestionsAreCaseInsensitive) { | 
|   798   ASSERT_NO_FATAL_FAILURE(SetupInstant()); |   793   ASSERT_NO_FATAL_FAILURE(SetupInstant(browser())); | 
|   799   FocusOmniboxAndWaitForInstantSupport(); |   794   FocusOmniboxAndWaitForInstantSupport(); | 
|   800  |   795  | 
|   801   EXPECT_TRUE(ExecuteScript("suggestion = [ { value: 'INSTANT' } ]")); |   796   EXPECT_TRUE(ExecuteScript("suggestion = [ { value: 'INSTANT' } ]")); | 
|   802  |   797  | 
|   803   SetOmniboxTextAndWaitForOverlayToShow("in"); |   798   SetOmniboxTextAndWaitForOverlayToShow("in"); | 
|   804   EXPECT_EQ(ASCIIToUTF16("instant"), omnibox()->GetText()); |   799   EXPECT_EQ(ASCIIToUTF16("instant"), omnibox()->GetText()); | 
|   805  |   800  | 
|   806   omnibox()->RevertAll(); |   801   omnibox()->RevertAll(); | 
|   807   SetOmniboxTextAndWaitForOverlayToShow("IN"); |   802   SetOmniboxTextAndWaitForOverlayToShow("IN"); | 
|   808   EXPECT_EQ(ASCIIToUTF16("INSTANT"), omnibox()->GetText()); |   803   EXPECT_EQ(ASCIIToUTF16("INSTANT"), omnibox()->GetText()); | 
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   850 } |   845 } | 
|   851  |   846  | 
|   852 // Flakes on Windows and Mac: http://crbug.com/170677 |   847 // Flakes on Windows and Mac: http://crbug.com/170677 | 
|   853 #if defined(OS_WIN) || defined(OS_MACOSX) |   848 #if defined(OS_WIN) || defined(OS_MACOSX) | 
|   854 #define MAYBE_CommitInNewTab DISABLED_CommitInNewTab |   849 #define MAYBE_CommitInNewTab DISABLED_CommitInNewTab | 
|   855 #else |   850 #else | 
|   856 #define MAYBE_CommitInNewTab CommitInNewTab |   851 #define MAYBE_CommitInNewTab CommitInNewTab | 
|   857 #endif |   852 #endif | 
|   858 // Test that the overlay can be committed onto a new tab. |   853 // Test that the overlay can be committed onto a new tab. | 
|   859 IN_PROC_BROWSER_TEST_F(InstantTest, MAYBE_CommitInNewTab) { |   854 IN_PROC_BROWSER_TEST_F(InstantTest, MAYBE_CommitInNewTab) { | 
|   860   ASSERT_NO_FATAL_FAILURE(SetupInstant()); |   855   ASSERT_NO_FATAL_FAILURE(SetupInstant(browser())); | 
|   861   FocusOmniboxAndWaitForInstantSupport(); |   856   FocusOmniboxAndWaitForInstantSupport(); | 
|   862  |   857  | 
|   863   // Use the Instant page as the active tab, so we can exploit its visibility |   858   // Use the Instant page as the active tab, so we can exploit its visibility | 
|   864   // handler to check visibility transitions. |   859   // handler to check visibility transitions. | 
|   865   ui_test_utils::NavigateToURL(browser(), instant_url_); |   860   ui_test_utils::NavigateToURL(browser(), instant_url()); | 
|   866   content::WebContents* active_tab = |   861   content::WebContents* active_tab = | 
|   867       browser()->tab_strip_model()->GetActiveWebContents(); |   862       browser()->tab_strip_model()->GetActiveWebContents(); | 
|   868  |   863  | 
|   869   int active_tab_onvisibilitycalls = -1; |   864   int active_tab_onvisibilitycalls = -1; | 
|   870   EXPECT_TRUE(GetIntFromJS(active_tab, "onvisibilitycalls", |   865   EXPECT_TRUE(GetIntFromJS(active_tab, "onvisibilitycalls", | 
|   871                            &active_tab_onvisibilitycalls)); |   866                            &active_tab_onvisibilitycalls)); | 
|   872   EXPECT_EQ(0, active_tab_onvisibilitycalls); |   867   EXPECT_EQ(0, active_tab_onvisibilitycalls); | 
|   873  |   868  | 
|   874   SetOmniboxTextAndWaitForOverlayToShow("search"); |   869   SetOmniboxTextAndWaitForOverlayToShow("search"); | 
|   875  |   870  | 
|   876   // Stash a reference to the overlay, so we can refer to it after commit. |   871   // Stash a reference to the overlay, so we can refer to it after commit. | 
|   877   content::WebContents* overlay = instant()->GetOverlayContents(); |   872   content::WebContents* overlay = instant()->GetOverlayContents(); | 
|   878   EXPECT_TRUE(overlay); |   873   EXPECT_TRUE(overlay); | 
|   879  |   874  | 
|   880   // The state of the searchbox before the commit. |   875   // The state of the searchbox before the commit. | 
|   881   EXPECT_TRUE(UpdateSearchState(overlay)); |   876   EXPECT_TRUE(UpdateSearchState(overlay)); | 
|   882   EXPECT_EQ("search", value_); |   877   EXPECT_EQ("search", value_); | 
|   883   EXPECT_FALSE(verbatim_); |   878   EXPECT_FALSE(verbatim_); | 
|   884   EXPECT_EQ(0, onsubmitcalls_); |   879   EXPECT_EQ(0, onsubmitcalls_); | 
|   885   EXPECT_EQ(1, onvisibilitycalls_); |   880   EXPECT_EQ(1, onvisibilitycalls_); | 
|   886  |   881  | 
|   887   // The state of the active tab before the commit. |   882   // The state of the active tab before the commit. | 
|   888   EXPECT_NE(overlay, active_tab); |   883   EXPECT_NE(overlay, active_tab); | 
|   889   EXPECT_EQ(2, active_tab->GetController().GetEntryCount()); |   884   EXPECT_EQ(2, active_tab->GetController().GetEntryCount()); | 
|   890   EXPECT_EQ(instant_url_, omnibox()->model()->PermanentURL()); |   885   EXPECT_EQ(instant_url(), omnibox()->model()->PermanentURL()); | 
|   891   active_tab_onvisibilitycalls = -1; |   886   active_tab_onvisibilitycalls = -1; | 
|   892   EXPECT_TRUE(GetIntFromJS(active_tab, "onvisibilitycalls", |   887   EXPECT_TRUE(GetIntFromJS(active_tab, "onvisibilitycalls", | 
|   893                            &active_tab_onvisibilitycalls)); |   888                            &active_tab_onvisibilitycalls)); | 
|   894   EXPECT_EQ(0, active_tab_onvisibilitycalls); |   889   EXPECT_EQ(0, active_tab_onvisibilitycalls); | 
|   895  |   890  | 
|   896   // Commit the search by pressing Alt-Enter. |   891   // Commit the search by pressing Alt-Enter. | 
|   897   omnibox()->model()->AcceptInput(NEW_FOREGROUND_TAB, false); |   892   omnibox()->model()->AcceptInput(NEW_FOREGROUND_TAB, false); | 
|   898  |   893  | 
|   899   // After the commit, Instant should not be showing. |   894   // After the commit, Instant should not be showing. | 
|   900   EXPECT_FALSE(instant()->IsOverlayingSearchResults()); |   895   EXPECT_FALSE(instant()->IsOverlayingSearchResults()); | 
|   901   EXPECT_TRUE(instant()->model()->mode().is_default()); |   896   EXPECT_TRUE(instant()->model()->mode().is_default()); | 
|   902  |   897  | 
|   903   // The old overlay is deleted and a new one is created. |   898   // The old overlay is deleted and a new one is created. | 
|   904   EXPECT_TRUE(instant()->GetOverlayContents()); |   899   EXPECT_TRUE(instant()->GetOverlayContents()); | 
|   905   EXPECT_NE(instant()->GetOverlayContents(), overlay); |   900   EXPECT_NE(instant()->GetOverlayContents(), overlay); | 
|   906  |   901  | 
|   907   // Check that we have two tabs and that the new active tab is indeed what was |   902   // Check that we have two tabs and that the new active tab is indeed what was | 
|   908   // once the overlay. The overlay should have just one navigation entry, for |   903   // once the overlay. The overlay should have just one navigation entry, for | 
|   909   // the Instant search that was committed. |   904   // the Instant search that was committed. | 
|   910   EXPECT_EQ(2, browser()->tab_strip_model()->count()); |   905   EXPECT_EQ(2, browser()->tab_strip_model()->count()); | 
|   911   EXPECT_EQ(overlay, browser()->tab_strip_model()->GetActiveWebContents()); |   906   EXPECT_EQ(overlay, browser()->tab_strip_model()->GetActiveWebContents()); | 
|   912   EXPECT_EQ(1, overlay->GetController().GetEntryCount()); |   907   EXPECT_EQ(1, overlay->GetController().GetEntryCount()); | 
|   913  |   908  | 
|   914   // Check that the omnibox contains the Instant URL we loaded. |   909   // Check that the omnibox contains the Instant URL we loaded. | 
|   915   EXPECT_EQ(instant_url_, omnibox()->model()->PermanentURL()); |   910   EXPECT_EQ(instant_url(), omnibox()->model()->PermanentURL()); | 
|   916  |   911  | 
|   917   // Check that the searchbox API values have been reset. |   912   // Check that the searchbox API values have been reset. | 
|   918   std::string value; |   913   std::string value; | 
|   919   EXPECT_TRUE(GetStringFromJS(overlay, |   914   EXPECT_TRUE(GetStringFromJS(overlay, | 
|   920                               "chrome.embeddedSearch.searchBox.value", &value)); |   915                               "chrome.embeddedSearch.searchBox.value", &value)); | 
|   921   EXPECT_EQ("", value); |   916   EXPECT_EQ("", value); | 
|   922  |   917  | 
|   923   // However, the page should've correctly received the committed query. |   918   // However, the page should've correctly received the committed query. | 
|   924   EXPECT_TRUE(UpdateSearchState(overlay)); |   919   EXPECT_TRUE(UpdateSearchState(overlay)); | 
|   925   EXPECT_EQ("search", value_); |   920   EXPECT_EQ("search", value_); | 
|   926   EXPECT_TRUE(verbatim_); |   921   EXPECT_TRUE(verbatim_); | 
|   927   EXPECT_EQ(1, onsubmitcalls_); |   922   EXPECT_EQ(1, onsubmitcalls_); | 
|   928   EXPECT_EQ(1, onvisibilitycalls_); |   923   EXPECT_EQ(1, onvisibilitycalls_); | 
|   929  |   924  | 
|   930   // The ex-active tab should've gotten a visibility change marking it hidden. |   925   // The ex-active tab should've gotten a visibility change marking it hidden. | 
|   931   EXPECT_NE(active_tab, overlay); |   926   EXPECT_NE(active_tab, overlay); | 
|   932   EXPECT_TRUE(GetIntFromJS(active_tab, "onvisibilitycalls", |   927   EXPECT_TRUE(GetIntFromJS(active_tab, "onvisibilitycalls", | 
|   933                            &active_tab_onvisibilitycalls)); |   928                            &active_tab_onvisibilitycalls)); | 
|   934   EXPECT_EQ(1, active_tab_onvisibilitycalls); |   929   EXPECT_EQ(1, active_tab_onvisibilitycalls); | 
|   935 } |   930 } | 
|   936  |   931  | 
|   937 // Test that suggestions are reusable. |   932 // Test that suggestions are reusable. | 
|   938 IN_PROC_BROWSER_TEST_F(InstantTest, SuggestionsAreReusable) { |   933 IN_PROC_BROWSER_TEST_F(InstantTest, SuggestionsAreReusable) { | 
|   939   ASSERT_NO_FATAL_FAILURE(SetupInstant()); |   934   ASSERT_NO_FATAL_FAILURE(SetupInstant(browser())); | 
|   940   FocusOmniboxAndWaitForInstantSupport(); |   935   FocusOmniboxAndWaitForInstantSupport(); | 
|   941  |   936  | 
|   942   EXPECT_TRUE(ExecuteScript("suggestion = [ { value: 'instant' } ];" |   937   EXPECT_TRUE(ExecuteScript("suggestion = [ { value: 'instant' } ];" | 
|   943                             "behavior = 'never';")); |   938                             "behavior = 'never';")); | 
|   944  |   939  | 
|   945   SetOmniboxTextAndWaitForOverlayToShow("in"); |   940   SetOmniboxTextAndWaitForOverlayToShow("in"); | 
|   946   EXPECT_EQ(ASCIIToUTF16("stant"), omnibox()->GetInstantSuggestion()); |   941   EXPECT_EQ(ASCIIToUTF16("stant"), omnibox()->GetInstantSuggestion()); | 
|   947  |   942  | 
|   948   SetOmniboxText("ins"); |   943   SetOmniboxText("ins"); | 
|   949   EXPECT_EQ(ASCIIToUTF16("tant"), omnibox()->GetInstantSuggestion()); |   944   EXPECT_EQ(ASCIIToUTF16("tant"), omnibox()->GetInstantSuggestion()); | 
|   950  |   945  | 
|   951   SetOmniboxText("in"); |   946   SetOmniboxText("in"); | 
|   952   EXPECT_EQ(ASCIIToUTF16("stant"), omnibox()->GetInstantSuggestion()); |   947   EXPECT_EQ(ASCIIToUTF16("stant"), omnibox()->GetInstantSuggestion()); | 
|   953  |   948  | 
|   954   SetOmniboxText("insane"); |   949   SetOmniboxText("insane"); | 
|   955   EXPECT_EQ(ASCIIToUTF16(""), omnibox()->GetInstantSuggestion()); |   950   EXPECT_EQ(ASCIIToUTF16(""), omnibox()->GetInstantSuggestion()); | 
|   956 } |   951 } | 
|   957  |   952  | 
|   958 // Test that the Instant overlay is recreated if it gets destroyed. |   953 // Test that the Instant overlay is recreated if it gets destroyed. | 
|   959 IN_PROC_BROWSER_TEST_F(InstantTest, InstantRenderViewGone) { |   954 IN_PROC_BROWSER_TEST_F(InstantTest, InstantRenderViewGone) { | 
|   960   ASSERT_NO_FATAL_FAILURE(SetupInstant()); |   955   ASSERT_NO_FATAL_FAILURE(SetupInstant(browser())); | 
|   961   FocusOmniboxAndWaitForInstantSupport(); |   956   FocusOmniboxAndWaitForInstantSupport(); | 
|   962  |   957  | 
|   963   // Type partial query, get suggestion to show. |   958   // Type partial query, get suggestion to show. | 
|   964   SetOmniboxTextAndWaitForOverlayToShow("q"); |   959   SetOmniboxTextAndWaitForOverlayToShow("q"); | 
|   965   EXPECT_EQ(ASCIIToUTF16("query suggestion"), omnibox()->GetText()); |   960   EXPECT_EQ(ASCIIToUTF16("query suggestion"), omnibox()->GetText()); | 
|   966  |   961  | 
|   967   // Kill the Instant renderer and wait for Instant support again. |   962   // Kill the Instant renderer and wait for Instant support again. | 
|   968   KillInstantRenderView(); |   963   KillInstantRenderView(); | 
|   969   FocusOmniboxAndWaitForInstantSupport(); |   964   FocusOmniboxAndWaitForInstantSupport(); | 
|   970  |   965  | 
|   971   SetOmniboxTextAndWaitForOverlayToShow("qu"); |   966   SetOmniboxTextAndWaitForOverlayToShow("qu"); | 
|   972   EXPECT_EQ(ASCIIToUTF16("query suggestion"), omnibox()->GetText()); |   967   EXPECT_EQ(ASCIIToUTF16("query suggestion"), omnibox()->GetText()); | 
|   973 } |   968 } | 
|   974  |   969  | 
|   975 IN_PROC_BROWSER_TEST_F(InstantTest, ProcessIsolation) { |   970 IN_PROC_BROWSER_TEST_F(InstantTest, ProcessIsolation) { | 
|   976   // Prior to setup no render process is dedicated to Instant. |   971   // Prior to setup no render process is dedicated to Instant. | 
|   977   InstantService* instant_service = |   972   InstantService* instant_service = | 
|   978         InstantServiceFactory::GetForProfile(browser()->profile()); |   973         InstantServiceFactory::GetForProfile(browser()->profile()); | 
|   979   ASSERT_NE(static_cast<InstantService*>(NULL), instant_service); |   974   ASSERT_NE(static_cast<InstantService*>(NULL), instant_service); | 
|   980   EXPECT_EQ(0, instant_service->GetInstantProcessCount()); |   975   EXPECT_EQ(0, instant_service->GetInstantProcessCount()); | 
|   981  |   976  | 
|   982   // Setup Instant. |   977   // Setup Instant. | 
|   983   ASSERT_NO_FATAL_FAILURE(SetupInstant()); |   978   ASSERT_NO_FATAL_FAILURE(SetupInstant(browser())); | 
|   984   FocusOmniboxAndWaitForInstantSupport(); |   979   FocusOmniboxAndWaitForInstantSupport(); | 
|   985  |   980  | 
|   986   // Now there should be a registered Instant render process. |   981   // Now there should be a registered Instant render process. | 
|   987   EXPECT_LT(0, instant_service->GetInstantProcessCount()); |   982   EXPECT_LT(0, instant_service->GetInstantProcessCount()); | 
|   988  |   983  | 
|   989   // And the Instant overlay should live inside it. |   984   // And the Instant overlay should live inside it. | 
|   990   content::WebContents* overlay = instant()->GetOverlayContents(); |   985   content::WebContents* overlay = instant()->GetOverlayContents(); | 
|   991   EXPECT_TRUE(instant_service->IsInstantProcess( |   986   EXPECT_TRUE(instant_service->IsInstantProcess( | 
|   992       overlay->GetRenderProcessHost()->GetID())); |   987       overlay->GetRenderProcessHost()->GetID())); | 
|   993  |   988  | 
|   994   // Search and commit the search by pressing Alt-Enter. |   989   // Search and commit the search by pressing Alt-Enter. | 
|   995   SetOmniboxTextAndWaitForOverlayToShow("tractor"); |   990   SetOmniboxTextAndWaitForOverlayToShow("tractor"); | 
|   996   omnibox()->model()->AcceptInput(NEW_FOREGROUND_TAB, false); |   991   omnibox()->model()->AcceptInput(NEW_FOREGROUND_TAB, false); | 
|   997  |   992  | 
|   998   // The committed search results page should also live inside the |   993   // The committed search results page should also live inside the | 
|   999   // Instant process. |   994   // Instant process. | 
|  1000   content::WebContents* active_tab = |   995   content::WebContents* active_tab = | 
|  1001       browser()->tab_strip_model()->GetActiveWebContents(); |   996       browser()->tab_strip_model()->GetActiveWebContents(); | 
|  1002   EXPECT_TRUE(instant_service->IsInstantProcess( |   997   EXPECT_TRUE(instant_service->IsInstantProcess( | 
|  1003       active_tab->GetRenderProcessHost()->GetID())); |   998       active_tab->GetRenderProcessHost()->GetID())); | 
|  1004  |   999  | 
|  1005   // Navigating away should change the process. |  1000   // Navigating away should change the process. | 
|  1006   ui_test_utils::NavigateToURL(browser(), GURL(chrome::kChromeUINewTabURL)); |  1001   ui_test_utils::NavigateToURL(browser(), GURL(chrome::kChromeUINewTabURL)); | 
|  1007   EXPECT_FALSE(instant_service->IsInstantProcess( |  1002   EXPECT_FALSE(instant_service->IsInstantProcess( | 
|  1008       active_tab->GetRenderProcessHost()->GetID())); |  1003       active_tab->GetRenderProcessHost()->GetID())); | 
|  1009 } |  1004 } | 
| OLD | NEW |