Index: chrome/browser/instant/instant_extended_browsertest.cc |
diff --git a/chrome/browser/instant/instant_extended_browsertest.cc b/chrome/browser/instant/instant_extended_browsertest.cc |
deleted file mode 100644 |
index 6b2e4af23734b1c52bd95c8644302cf72adbc4cf..0000000000000000000000000000000000000000 |
--- a/chrome/browser/instant/instant_extended_browsertest.cc |
+++ /dev/null |
@@ -1,1258 +0,0 @@ |
-// Copyright 2013 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include <sstream> |
- |
-#include "base/prefs/pref_service.h" |
-#include "base/string_util.h" |
-#include "base/stringprintf.h" |
-#include "base/utf_string_conversions.h" |
-#include "chrome/browser/autocomplete/autocomplete_match.h" |
-#include "chrome/browser/autocomplete/autocomplete_provider.h" |
-#include "chrome/browser/autocomplete/autocomplete_result.h" |
-#include "chrome/browser/extensions/extension_browsertest.h" |
-#include "chrome/browser/extensions/extension_service.h" |
-#include "chrome/browser/favicon/favicon_tab_helper.h" |
-#include "chrome/browser/history/history_types.h" |
-#include "chrome/browser/history/top_sites.h" |
-#include "chrome/browser/instant/instant_commit_type.h" |
-#include "chrome/browser/instant/instant_ntp.h" |
-#include "chrome/browser/instant/instant_overlay.h" |
-#include "chrome/browser/instant/instant_service.h" |
-#include "chrome/browser/instant/instant_service_factory.h" |
-#include "chrome/browser/instant/instant_tab.h" |
-#include "chrome/browser/instant/instant_test_utils.h" |
-#include "chrome/browser/instant/search.h" |
-#include "chrome/browser/profiles/profile.h" |
-#include "chrome/browser/themes/theme_service.h" |
-#include "chrome/browser/themes/theme_service_factory.h" |
-#include "chrome/browser/ui/omnibox/omnibox_view.h" |
-#include "chrome/browser/ui/tabs/tab_strip_model.h" |
-#include "chrome/browser/ui/webui/theme_source.h" |
-#include "chrome/common/chrome_notification_types.h" |
-#include "chrome/common/pref_names.h" |
-#include "chrome/common/thumbnail_score.h" |
-#include "chrome/common/url_constants.h" |
-#include "chrome/test/base/in_process_browser_test.h" |
-#include "chrome/test/base/interactive_test_utils.h" |
-#include "chrome/test/base/ui_test_utils.h" |
-#include "content/public/browser/navigation_controller.h" |
-#include "content/public/browser/navigation_entry.h" |
-#include "content/public/browser/notification_service.h" |
-#include "content/public/browser/render_process_host.h" |
-#include "content/public/browser/render_view_host.h" |
-#include "content/public/browser/site_instance.h" |
-#include "content/public/browser/url_data_source.h" |
-#include "content/public/browser/web_contents.h" |
-#include "content/public/browser/web_contents_view.h" |
-#include "content/public/common/bindings_policy.h" |
-#include "content/public/test/browser_test_utils.h" |
-#include "third_party/skia/include/core/SkBitmap.h" |
- |
-namespace { |
- |
-// Creates a bitmap of the specified color. Caller takes ownership. |
-gfx::Image CreateBitmap(SkColor color) { |
- SkBitmap thumbnail; |
- thumbnail.setConfig(SkBitmap::kARGB_8888_Config, 4, 4); |
- thumbnail.allocPixels(); |
- thumbnail.eraseColor(color); |
- return gfx::Image::CreateFrom1xBitmap(thumbnail); // adds ref. |
-} |
- |
-} // namespace |
- |
-class InstantExtendedTest : public InProcessBrowserTest, |
- public InstantTestBase { |
- public: |
- InstantExtendedTest() |
- : on_most_visited_change_calls_(0), |
- most_visited_items_count_(0), |
- first_most_visited_item_id_(0), |
- on_native_suggestions_calls_(0), |
- on_change_calls_(0) { |
- } |
- protected: |
- virtual void SetUpInProcessBrowserTestFixture() OVERRIDE { |
- chrome::search::EnableInstantExtendedAPIForTesting(); |
- ASSERT_TRUE(https_test_server().Start()); |
- GURL instant_url = https_test_server().GetURL( |
- "files/instant_extended.html?strk=1&"); |
- InstantTestBase::Init(instant_url); |
- } |
- |
- std::string GetOmniboxText() { |
- return UTF16ToUTF8(omnibox()->GetText()); |
- } |
- |
- void SendDownArrow() { |
- omnibox()->model()->OnUpOrDownKeyPressed(1); |
- // Wait for JavaScript to run the key handler by executing a blank script. |
- EXPECT_TRUE(ExecuteScript(std::string())); |
- } |
- |
- void SendUpArrow() { |
- omnibox()->model()->OnUpOrDownKeyPressed(-1); |
- // Wait for JavaScript to run the key handler by executing a blank script. |
- EXPECT_TRUE(ExecuteScript(std::string())); |
- } |
- |
- void SendEscape() { |
- omnibox()->model()->OnEscapeKeyPressed(); |
- // Wait for JavaScript to run the key handler by executing a blank script. |
- EXPECT_TRUE(ExecuteScript(std::string())); |
- } |
- |
- bool UpdateSearchState(content::WebContents* contents) WARN_UNUSED_RESULT { |
- return GetIntFromJS(contents, "onMostVisitedChangedCalls", |
- &on_most_visited_change_calls_) && |
- GetIntFromJS(contents, "mostVisitedItemsCount", |
- &most_visited_items_count_) && |
- GetIntFromJS(contents, "firstMostVisitedItemId", |
- &first_most_visited_item_id_) && |
- GetIntFromJS(contents, "onNativeSuggestionsCalls", |
- &on_native_suggestions_calls_) && |
- GetIntFromJS(contents, "onChangeCalls", |
- &on_change_calls_); |
- } |
- |
- int on_most_visited_change_calls_; |
- int most_visited_items_count_; |
- int first_most_visited_item_id_; |
- int on_native_suggestions_calls_; |
- int on_change_calls_; |
-}; |
- |
-// Test class used to verify chrome-search: scheme and access policy from the |
-// Instant overlay. This is a subclass of |ExtensionBrowserTest| because it |
-// loads a theme that provides a background image. |
-class InstantPolicyTest : public ExtensionBrowserTest, public InstantTestBase { |
- public: |
- InstantPolicyTest() {} |
- |
- protected: |
- virtual void SetUpInProcessBrowserTestFixture() OVERRIDE { |
- chrome::search::EnableInstantExtendedAPIForTesting(); |
- ASSERT_TRUE(https_test_server().Start()); |
- GURL instant_url = https_test_server().GetURL( |
- "files/instant_extended.html?strk=1&"); |
- InstantTestBase::Init(instant_url); |
- } |
- |
- void InstallThemeSource() { |
- ThemeSource* theme = new ThemeSource(profile()); |
- content::URLDataSource::Add(profile(), theme); |
- } |
- |
- void InstallThemeAndVerify(const std::string& theme_dir, |
- const std::string& theme_name) { |
- const base::FilePath theme_path = test_data_dir_.AppendASCII(theme_dir); |
- ASSERT_TRUE(InstallExtensionWithUIAutoConfirm( |
- theme_path, 1, ExtensionBrowserTest::browser())); |
- const extensions::Extension* theme = |
- ThemeServiceFactory::GetThemeForProfile( |
- ExtensionBrowserTest::browser()->profile()); |
- ASSERT_NE(static_cast<extensions::Extension*>(NULL), theme); |
- ASSERT_EQ(theme->name(), theme_name); |
- } |
- |
- private: |
- DISALLOW_COPY_AND_ASSIGN(InstantPolicyTest); |
-}; |
- |
-IN_PROC_BROWSER_TEST_F(InstantExtendedTest, ExtendedModeIsOn) { |
- ASSERT_NO_FATAL_FAILURE(SetupInstant(browser())); |
- EXPECT_TRUE(instant()->extended_enabled_); |
-} |
- |
-// Test that Instant is preloaded when the omnibox is focused. |
-IN_PROC_BROWSER_TEST_F(InstantExtendedTest, OmniboxFocusLoadsInstant) { |
- ASSERT_NO_FATAL_FAILURE(SetupInstant(browser())); |
- |
- // Explicitly unfocus the omnibox. |
- EXPECT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser())); |
- ui_test_utils::ClickOnView(browser(), VIEW_ID_TAB_CONTAINER); |
- |
- EXPECT_TRUE(ui_test_utils::IsViewFocused(browser(), VIEW_ID_TAB_CONTAINER)); |
- EXPECT_FALSE(omnibox()->model()->has_focus()); |
- |
- // Delete any existing overlay. |
- instant()->overlay_.reset(); |
- EXPECT_FALSE(instant()->GetOverlayContents()); |
- |
- // Refocus the omnibox. The InstantController should've preloaded Instant. |
- FocusOmniboxAndWaitForInstantExtendedSupport(); |
- |
- EXPECT_FALSE(ui_test_utils::IsViewFocused(browser(), VIEW_ID_TAB_CONTAINER)); |
- EXPECT_TRUE(omnibox()->model()->has_focus()); |
- |
- content::WebContents* overlay = instant()->GetOverlayContents(); |
- EXPECT_TRUE(overlay); |
- |
- // Check that the page supports Instant, but it isn't showing. |
- EXPECT_TRUE(instant()->overlay_->supports_instant()); |
- EXPECT_FALSE(instant()->IsOverlayingSearchResults()); |
- EXPECT_TRUE(instant()->model()->mode().is_default()); |
- |
- // Adding a new tab shouldn't delete or recreate the overlay; otherwise, |
- // what's the point of preloading? |
- AddBlankTabAndShow(browser()); |
- EXPECT_EQ(overlay, instant()->GetOverlayContents()); |
- |
- // Unfocusing and refocusing the omnibox should also preserve the overlay. |
- ui_test_utils::ClickOnView(browser(), VIEW_ID_TAB_CONTAINER); |
- EXPECT_TRUE(ui_test_utils::IsViewFocused(browser(), VIEW_ID_TAB_CONTAINER)); |
- |
- FocusOmnibox(); |
- EXPECT_FALSE(ui_test_utils::IsViewFocused(browser(), VIEW_ID_TAB_CONTAINER)); |
- EXPECT_EQ(overlay, instant()->GetOverlayContents()); |
-} |
- |
-IN_PROC_BROWSER_TEST_F(InstantExtendedTest, InputShowsOverlay) { |
- ASSERT_NO_FATAL_FAILURE(SetupInstant(browser())); |
- |
- // Focus omnibox and confirm overlay isn't shown. |
- FocusOmniboxAndWaitForInstantExtendedSupport(); |
- content::WebContents* overlay = instant()->GetOverlayContents(); |
- EXPECT_TRUE(overlay); |
- EXPECT_FALSE(instant()->IsOverlayingSearchResults()); |
- EXPECT_TRUE(instant()->model()->mode().is_default()); |
- |
- // Typing in the omnibox should show the overlay. |
- SetOmniboxTextAndWaitForOverlayToShow("query"); |
- EXPECT_TRUE(instant()->model()->mode().is_search_suggestions()); |
- EXPECT_EQ(overlay, instant()->GetOverlayContents()); |
-} |
- |
-// Test that middle clicking on a suggestion opens the result in a new tab. |
-IN_PROC_BROWSER_TEST_F(InstantExtendedTest, |
- MiddleClickOnSuggestionOpensInNewTab) { |
- ASSERT_NO_FATAL_FAILURE(SetupInstant(browser())); |
- FocusOmniboxAndWaitForInstantExtendedSupport(); |
- EXPECT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser())); |
- |
- EXPECT_EQ(1, browser()->tab_strip_model()->count()); |
- |
- // Typing in the omnibox should show the overlay. |
- SetOmniboxTextAndWaitForOverlayToShow("http://www.example.com/"); |
- |
- // Create an event listener that opens the top suggestion in a new tab. |
- EXPECT_TRUE(ExecuteScript( |
- "var rid = getApiHandle().nativeSuggestions[0].rid;" |
- "document.body.addEventListener('click', function() {" |
- "chrome.embeddedSearch.navigateContentWindow(rid, 2);" |
- "});" |
- )); |
- |
- content::WindowedNotificationObserver observer( |
- chrome::NOTIFICATION_TAB_ADDED, |
- content::NotificationService::AllSources()); |
- |
- // Click to trigger the event listener. |
- ui_test_utils::ClickOnView(browser(), VIEW_ID_TAB_CONTAINER); |
- |
- // Wait for the new tab to be added. |
- observer.Wait(); |
- |
- // Check that the new tab URL is as expected. |
- content::WebContents* new_tab_contents = |
- browser()->tab_strip_model()->GetWebContentsAt(1); |
- EXPECT_EQ("http://www.example.com/", new_tab_contents->GetURL().spec()); |
- |
- // Check that there are now two tabs. |
- EXPECT_EQ(2, browser()->tab_strip_model()->count()); |
-} |
- |
-IN_PROC_BROWSER_TEST_F(InstantExtendedTest, |
- UnfocusingOmniboxDoesNotChangeSuggestions) { |
- ASSERT_NO_FATAL_FAILURE(SetupInstant(browser())); |
- FocusOmniboxAndWaitForInstantExtendedSupport(); |
- EXPECT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser())); |
- |
- // Get a committed tab to work with. |
- content::WebContents* instant_tab = instant()->GetOverlayContents(); |
- SetOmniboxTextAndWaitForOverlayToShow("committed"); |
- browser()->window()->GetLocationBar()->AcceptInput(); |
- |
- // Put focus back into the omnibox, type, and wait for some gray text. |
- EXPECT_TRUE(content::ExecuteScript(instant_tab, |
- "suggestion = 'santa claus';")); |
- SetOmniboxTextAndWaitForSuggestion("santa "); |
- EXPECT_EQ(ASCIIToUTF16("claus"), omnibox()->GetInstantSuggestion()); |
- EXPECT_TRUE(content::ExecuteScript(instant_tab, |
- "onChangeCalls = onNativeSuggestionsCalls = 0;")); |
- |
- // Now unfocus the omnibox. |
- ui_test_utils::ClickOnView(browser(), VIEW_ID_TAB_CONTAINER); |
- EXPECT_TRUE(UpdateSearchState(instant_tab)); |
- EXPECT_EQ(0, on_change_calls_); |
- EXPECT_EQ(0, on_native_suggestions_calls_); |
-} |
- |
-// Test that omnibox text is correctly set when overlay is committed with Enter. |
-IN_PROC_BROWSER_TEST_F(InstantExtendedTest, OmniboxTextUponEnterCommit) { |
- ASSERT_NO_FATAL_FAILURE(SetupInstant(browser())); |
- FocusOmniboxAndWaitForInstantExtendedSupport(); |
- |
- // The page will autocomplete once we set the omnibox value. |
- EXPECT_TRUE(ExecuteScript("suggestion = 'santa claus';")); |
- |
- // Set the text, and wait for suggestions to show up. |
- SetOmniboxTextAndWaitForOverlayToShow("santa"); |
- EXPECT_EQ(ASCIIToUTF16("santa"), omnibox()->GetText()); |
- |
- // Test that the current suggestion is correctly set. |
- EXPECT_EQ(ASCIIToUTF16(" claus"), omnibox()->GetInstantSuggestion()); |
- |
- // Commit the search by pressing Enter. |
- browser()->window()->GetLocationBar()->AcceptInput(); |
- |
- // 'Enter' commits the query as it was typed. |
- EXPECT_EQ(ASCIIToUTF16("santa"), omnibox()->GetText()); |
- |
- // Suggestion should be cleared at this point. |
- EXPECT_EQ(ASCIIToUTF16(""), omnibox()->GetInstantSuggestion()); |
-} |
- |
-// Test that omnibox text is correctly set when committed with focus lost. |
-IN_PROC_BROWSER_TEST_F(InstantExtendedTest, OmniboxTextUponFocusLostCommit) { |
- ASSERT_NO_FATAL_FAILURE(SetupInstant(browser())); |
- FocusOmniboxAndWaitForInstantExtendedSupport(); |
- |
- // Set autocomplete text (grey text). |
- EXPECT_TRUE(ExecuteScript("suggestion = 'johnny depp';")); |
- |
- // Set the text, and wait for suggestions to show up. |
- SetOmniboxTextAndWaitForOverlayToShow("johnny"); |
- EXPECT_EQ(ASCIIToUTF16("johnny"), omnibox()->GetText()); |
- |
- // Test that the current suggestion is correctly set. |
- EXPECT_EQ(ASCIIToUTF16(" depp"), omnibox()->GetInstantSuggestion()); |
- |
- // Commit the overlay by lost focus (e.g. clicking on the page). |
- instant()->CommitIfPossible(INSTANT_COMMIT_FOCUS_LOST); |
- |
- // Search term extraction should kick in with the autocompleted text. |
- EXPECT_EQ(ASCIIToUTF16("johnny depp"), omnibox()->GetText()); |
- |
- // Suggestion should be cleared at this point. |
- EXPECT_EQ(ASCIIToUTF16(""), omnibox()->GetInstantSuggestion()); |
-} |
- |
-// Test that omnibox text is correctly set when clicking on committed SERP. |
-// Disabled on Mac because omnibox focus loss is not working correctly. |
-#if defined(OS_MACOSX) |
-#define MAYBE_OmniboxTextUponFocusedCommittedSERP \ |
- DISABLED_OmniboxTextUponFocusedCommittedSERP |
-#else |
-#define MAYBE_OmniboxTextUponFocusedCommittedSERP \ |
- OmniboxTextUponFocusedCommittedSERP |
-#endif |
-IN_PROC_BROWSER_TEST_F(InstantExtendedTest, |
- MAYBE_OmniboxTextUponFocusedCommittedSERP) { |
- // Setup Instant. |
- ASSERT_NO_FATAL_FAILURE(SetupInstant(browser())); |
- FocusOmniboxAndWaitForInstantExtendedSupport(); |
- |
- // Do a search and commit it. |
- SetOmniboxTextAndWaitForOverlayToShow("hello k"); |
- EXPECT_EQ(ASCIIToUTF16("hello k"), omnibox()->GetText()); |
- browser()->window()->GetLocationBar()->AcceptInput(); |
- |
- // With a committed results page, do a search by unfocusing the omnibox and |
- // focusing the contents. |
- SetOmniboxText("hello"); |
- // Calling handleOnChange manually to make sure it is called before the |
- // Focus() call below. |
- EXPECT_TRUE(content::ExecuteScript(instant()->instant_tab()->contents(), |
- "suggestion = 'hello kitty';" |
- "handleOnChange();")); |
- instant()->instant_tab()->contents()->GetView()->Focus(); |
- |
- // Search term extraction should kick in with the autocompleted text. |
- EXPECT_EQ(ASCIIToUTF16("hello kitty"), omnibox()->GetText()); |
- |
- // Suggestion should be cleared at this point. |
- EXPECT_EQ(ASCIIToUTF16(""), omnibox()->GetInstantSuggestion()); |
-} |
- |
-// This test simulates a search provider using the InstantExtended API to |
-// navigate through the suggested results and back to the original user query. |
-IN_PROC_BROWSER_TEST_F(InstantExtendedTest, NavigateSuggestionsWithArrowKeys) { |
- ASSERT_NO_FATAL_FAILURE(SetupInstant(browser())); |
- FocusOmniboxAndWaitForInstantExtendedSupport(); |
- |
- SetOmniboxTextAndWaitForOverlayToShow("hello"); |
- EXPECT_EQ("hello", GetOmniboxText()); |
- |
- SendDownArrow(); |
- EXPECT_EQ("result 1", GetOmniboxText()); |
- SendDownArrow(); |
- EXPECT_EQ("result 2", GetOmniboxText()); |
- SendUpArrow(); |
- EXPECT_EQ("result 1", GetOmniboxText()); |
- SendUpArrow(); |
- EXPECT_EQ("hello", GetOmniboxText()); |
- |
- // Ensure that the API's value is set correctly. |
- std::string result; |
- EXPECT_TRUE(GetStringFromJS(instant()->GetOverlayContents(), |
- "window.chrome.searchBox.value", |
- &result)); |
- EXPECT_EQ("hello", result); |
- |
- EXPECT_TRUE(HasUserInputInProgress()); |
- // TODO(beaudoin): Figure out why this fails. |
- // EXPECT_FALSE(HasTemporaryText()); |
- |
- |
- // Commit the search by pressing Enter. |
- // TODO(sreeram): Enable this check once @mathp's CL lands: |
- // https://codereview.chromium.org/12179025/ |
- // browser()->window()->GetLocationBar()->AcceptInput(); |
- // EXPECT_EQ("hello", GetOmniboxText()); |
-} |
- |
-// This test simulates a search provider using the InstantExtended API to |
-// navigate through the suggested results and hitting escape to get back to the |
-// original user query. |
-IN_PROC_BROWSER_TEST_F(InstantExtendedTest, NavigateSuggestionsAndHitEscape) { |
- ASSERT_NO_FATAL_FAILURE(SetupInstant(browser())); |
- FocusOmniboxAndWaitForInstantExtendedSupport(); |
- |
- SetOmniboxTextAndWaitForOverlayToShow("hello"); |
- EXPECT_EQ("hello", GetOmniboxText()); |
- |
- SendDownArrow(); |
- EXPECT_EQ("result 1", GetOmniboxText()); |
- SendDownArrow(); |
- EXPECT_EQ("result 2", GetOmniboxText()); |
- SendEscape(); |
- EXPECT_EQ("hello", GetOmniboxText()); |
- |
- // Ensure that the API's value is set correctly. |
- std::string result; |
- EXPECT_TRUE(GetStringFromJS(instant()->GetOverlayContents(), |
- "window.chrome.searchBox.value", |
- &result)); |
- EXPECT_EQ("hello", result); |
- |
- EXPECT_TRUE(HasUserInputInProgress()); |
- EXPECT_FALSE(HasTemporaryText()); |
- |
- // Commit the search by pressing Enter. |
- // TODO(sreeram): Enable this check once @mathp's CL lands: |
- // https://codereview.chromium.org/12179025/ |
- // browser()->window()->GetLocationBar()->AcceptInput(); |
- // EXPECT_EQ("hello", GetOmniboxText()); |
-} |
- |
-IN_PROC_BROWSER_TEST_F(InstantExtendedTest, NTPIsPreloaded) { |
- // Setup Instant. |
- ASSERT_NO_FATAL_FAILURE(SetupInstant(browser())); |
- FocusOmniboxAndWaitForInstantExtendedSupport(); |
- |
- // NTP contents should be preloaded. |
- ASSERT_NE(static_cast<InstantNTP*>(NULL), instant()->ntp()); |
- content::WebContents* ntp_contents = instant()->ntp_->contents(); |
- EXPECT_TRUE(ntp_contents); |
-} |
- |
-IN_PROC_BROWSER_TEST_F(InstantExtendedTest, PreloadedNTPIsUsedInNewTab) { |
- // Setup Instant. |
- ASSERT_NO_FATAL_FAILURE(SetupInstant(browser())); |
- FocusOmniboxAndWaitForInstantExtendedSupport(); |
- |
- // NTP contents should be preloaded. |
- ASSERT_NE(static_cast<InstantNTP*>(NULL), instant()->ntp()); |
- content::WebContents* ntp_contents = instant()->ntp_->contents(); |
- EXPECT_TRUE(ntp_contents); |
- |
- // Open new tab. Preloaded NTP contents should have been used. |
- ui_test_utils::NavigateToURLWithDisposition( |
- browser(), |
- GURL(chrome::kChromeUINewTabURL), |
- NEW_FOREGROUND_TAB, |
- ui_test_utils::BROWSER_TEST_WAIT_FOR_TAB); |
- content::WebContents* active_tab = |
- browser()->tab_strip_model()->GetActiveWebContents(); |
- EXPECT_EQ(ntp_contents, active_tab); |
- EXPECT_TRUE(chrome::search::IsInstantNTP(active_tab)); |
-} |
- |
-IN_PROC_BROWSER_TEST_F(InstantExtendedTest, PreloadedNTPIsUsedInSameTab) { |
- // Setup Instant. |
- ASSERT_NO_FATAL_FAILURE(SetupInstant(browser())); |
- FocusOmniboxAndWaitForInstantExtendedSupport(); |
- |
- // NTP contents should be preloaded. |
- ASSERT_NE(static_cast<InstantNTP*>(NULL), instant()->ntp()); |
- content::WebContents* ntp_contents = instant()->ntp_->contents(); |
- EXPECT_TRUE(ntp_contents); |
- |
- // Open new tab. Preloaded NTP contents should have been used. |
- ui_test_utils::NavigateToURLWithDisposition( |
- browser(), |
- GURL(chrome::kChromeUINewTabURL), |
- CURRENT_TAB, |
- ui_test_utils::BROWSER_TEST_NONE); |
- content::WebContents* active_tab = |
- browser()->tab_strip_model()->GetActiveWebContents(); |
- EXPECT_EQ(ntp_contents, active_tab); |
- EXPECT_TRUE(chrome::search::IsInstantNTP(active_tab)); |
-} |
- |
-IN_PROC_BROWSER_TEST_F(InstantExtendedTest, OmniboxHasFocusOnNewTab) { |
- // Setup Instant. |
- ASSERT_NO_FATAL_FAILURE(SetupInstant(browser())); |
- FocusOmniboxAndWaitForInstantExtendedSupport(); |
- |
- // Explicitly unfocus the omnibox. |
- EXPECT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser())); |
- ui_test_utils::ClickOnView(browser(), VIEW_ID_TAB_CONTAINER); |
- EXPECT_FALSE(omnibox()->model()->has_focus()); |
- |
- // Open new tab. Preloaded NTP contents should have been used. |
- ui_test_utils::NavigateToURLWithDisposition( |
- browser(), |
- GURL(chrome::kChromeUINewTabURL), |
- NEW_FOREGROUND_TAB, |
- ui_test_utils::BROWSER_TEST_WAIT_FOR_TAB); |
- |
- // Omnibox should have focus. |
- EXPECT_TRUE(omnibox()->model()->has_focus()); |
-} |
- |
-IN_PROC_BROWSER_TEST_F(InstantExtendedTest, OmniboxEmptyOnNewTabPage) { |
- // Setup Instant. |
- ASSERT_NO_FATAL_FAILURE(SetupInstant(browser())); |
- FocusOmniboxAndWaitForInstantExtendedSupport(); |
- |
- // Open new tab. Preloaded NTP contents should have been used. |
- ui_test_utils::NavigateToURLWithDisposition( |
- browser(), |
- GURL(chrome::kChromeUINewTabURL), |
- CURRENT_TAB, |
- ui_test_utils::BROWSER_TEST_NONE); |
- |
- // Omnibox should be empty. |
- EXPECT_TRUE(omnibox()->GetText().empty()); |
-} |
- |
-// TODO(dhollowa): Fix flakes. http://crbug.com/179930. |
-IN_PROC_BROWSER_TEST_F(InstantExtendedTest, DISABLED_NoFaviconOnNewTabPage) { |
- // Setup Instant. |
- ASSERT_NO_FATAL_FAILURE(SetupInstant(browser())); |
- FocusOmniboxAndWaitForInstantExtendedSupport(); |
- |
- // Open new tab. Preloaded NTP contents should have been used. |
- ui_test_utils::NavigateToURLWithDisposition( |
- browser(), |
- GURL(chrome::kChromeUINewTabURL), |
- CURRENT_TAB, |
- ui_test_utils::BROWSER_TEST_NONE); |
- |
- // No favicon should be shown. |
- content::WebContents* active_tab = |
- browser()->tab_strip_model()->GetActiveWebContents(); |
- FaviconTabHelper* favicon_tab_helper = |
- FaviconTabHelper::FromWebContents(active_tab); |
- EXPECT_FALSE(favicon_tab_helper->ShouldDisplayFavicon()); |
- |
- // Favicon should be shown off the NTP. |
- ui_test_utils::NavigateToURL(browser(), GURL(chrome::kChromeUIAboutURL)); |
- active_tab = browser()->tab_strip_model()->GetActiveWebContents(); |
- favicon_tab_helper = FaviconTabHelper::FromWebContents(active_tab); |
- EXPECT_TRUE(favicon_tab_helper->ShouldDisplayFavicon()); |
-} |
- |
-IN_PROC_BROWSER_TEST_F(InstantExtendedTest, InputOnNTPDoesntShowOverlay) { |
- ASSERT_NO_FATAL_FAILURE(SetupInstant(browser())); |
- |
- // Focus omnibox and confirm overlay isn't shown. |
- FocusOmniboxAndWaitForInstantExtendedSupport(); |
- content::WebContents* overlay = instant()->GetOverlayContents(); |
- EXPECT_TRUE(overlay); |
- EXPECT_FALSE(instant()->IsOverlayingSearchResults()); |
- EXPECT_TRUE(instant()->model()->mode().is_default()); |
- |
- // Navigate to the NTP. |
- ui_test_utils::NavigateToURLWithDisposition( |
- browser(), |
- GURL(chrome::kChromeUINewTabURL), |
- CURRENT_TAB, |
- ui_test_utils::BROWSER_TEST_NONE); |
- |
- // Typing in the omnibox should not show the overlay. |
- SetOmniboxText("query"); |
- EXPECT_FALSE(instant()->IsOverlayingSearchResults()); |
- EXPECT_TRUE(instant()->model()->mode().is_default()); |
-} |
- |
-IN_PROC_BROWSER_TEST_F(InstantExtendedTest, ProcessIsolation) { |
- // Prior to setup, Instant has an overlay with a failed "google.com" load in |
- // it, which is rendered in the dedicated Instant renderer process. |
- // |
- // TODO(sreeram): Fix this up when we stop doing crazy things on init. |
- InstantService* instant_service = |
- InstantServiceFactory::GetForProfile(browser()->profile()); |
- ASSERT_NE(static_cast<InstantService*>(NULL), instant_service); |
- EXPECT_EQ(1, instant_service->GetInstantProcessCount()); |
- |
- // Setup Instant. |
- ASSERT_NO_FATAL_FAILURE(SetupInstant(browser())); |
- FocusOmniboxAndWaitForInstantExtendedSupport(); |
- |
- // The registered Instant render process should still exist. |
- EXPECT_EQ(1, instant_service->GetInstantProcessCount()); |
- |
- // And the Instant overlay and ntp should live inside it. |
- content::WebContents* overlay = instant()->GetOverlayContents(); |
- EXPECT_TRUE(instant_service->IsInstantProcess( |
- overlay->GetRenderProcessHost()->GetID())); |
- content::WebContents* ntp_contents = instant()->ntp_->contents(); |
- EXPECT_TRUE(instant_service->IsInstantProcess( |
- ntp_contents->GetRenderProcessHost()->GetID())); |
- |
- // Navigating to the NTP should use the Instant render process. |
- ui_test_utils::NavigateToURLWithDisposition( |
- browser(), |
- GURL(chrome::kChromeUINewTabURL), |
- CURRENT_TAB, |
- ui_test_utils::BROWSER_TEST_NONE); |
- content::WebContents* active_tab = |
- browser()->tab_strip_model()->GetActiveWebContents(); |
- EXPECT_TRUE(instant_service->IsInstantProcess( |
- active_tab->GetRenderProcessHost()->GetID())); |
- |
- // Navigating elsewhere should not use the Instant render process. |
- ui_test_utils::NavigateToURL(browser(), GURL(chrome::kChromeUIAboutURL)); |
- EXPECT_FALSE(instant_service->IsInstantProcess( |
- active_tab->GetRenderProcessHost()->GetID())); |
-} |
- |
-// Verification of fix for BUG=176365. Ensure that each Instant WebContents in |
-// a tab uses a new BrowsingInstance, to avoid conflicts in the |
-// NavigationController. |
-// Flaky: http://crbug.com/177516 |
-IN_PROC_BROWSER_TEST_F(InstantExtendedTest, DISABLED_UnrelatedSiteInstance) { |
- // Setup Instant. |
- ASSERT_NO_FATAL_FAILURE(SetupInstant(browser())); |
- FocusOmniboxAndWaitForInstantExtendedSupport(); |
- |
- // Check that the uncommited ntp page and uncommited overlay have unrelated |
- // site instances. |
- // TODO(sreeram): |ntp_| is going away, so this check can be removed in the |
- // future. |
- content::WebContents* overlay = instant()->GetOverlayContents(); |
- content::WebContents* ntp_contents = instant()->ntp_->contents(); |
- EXPECT_FALSE(overlay->GetSiteInstance()->IsRelatedSiteInstance( |
- ntp_contents->GetSiteInstance())); |
- |
- // Type a query and hit enter to get a results page. The overlay becomes the |
- // active tab. |
- SetOmniboxTextAndWaitForOverlayToShow("hello"); |
- EXPECT_EQ("hello", GetOmniboxText()); |
- browser()->window()->GetLocationBar()->AcceptInput(); |
- content::WebContents* first_active_tab = |
- browser()->tab_strip_model()->GetActiveWebContents(); |
- EXPECT_EQ(first_active_tab, overlay); |
- scoped_refptr<content::SiteInstance> first_site_instance = |
- first_active_tab->GetSiteInstance(); |
- EXPECT_FALSE(first_site_instance->IsRelatedSiteInstance( |
- ntp_contents->GetSiteInstance())); |
- |
- // Navigating elsewhere gets us off of the commited page. The next |
- // query will give us a new |overlay| which we will then commit. |
- ui_test_utils::NavigateToURL(browser(), GURL(chrome::kChromeUIAboutURL)); |
- |
- // Show and commit the new overlay. |
- SetOmniboxTextAndWaitForOverlayToShow("hello again"); |
- EXPECT_EQ("hello again", GetOmniboxText()); |
- browser()->window()->GetLocationBar()->AcceptInput(); |
- content::WebContents* second_active_tab = |
- browser()->tab_strip_model()->GetActiveWebContents(); |
- EXPECT_NE(first_active_tab, second_active_tab); |
- scoped_refptr<content::SiteInstance> second_site_instance = |
- second_active_tab->GetSiteInstance(); |
- EXPECT_NE(first_site_instance, second_site_instance); |
- EXPECT_FALSE(first_site_instance->IsRelatedSiteInstance( |
- second_site_instance)); |
-} |
- |
-// Tests that suggestions are sanity checked. |
-IN_PROC_BROWSER_TEST_F(InstantExtendedTest, ValidatesSuggestions) { |
- ASSERT_NO_FATAL_FAILURE(SetupInstant(browser())); |
- FocusOmniboxAndWaitForInstantExtendedSupport(); |
- |
- // Do not set gray text that is not a suffix of the query. |
- EXPECT_TRUE(ExecuteScript("behavior = 2")); |
- EXPECT_TRUE(ExecuteScript("suggestion = 'potato'")); |
- SetOmniboxTextAndWaitForOverlayToShow("query"); |
- EXPECT_EQ(ASCIIToUTF16("query"), omnibox()->GetText()); |
- EXPECT_EQ(ASCIIToUTF16(""), omnibox()->GetInstantSuggestion()); |
- |
- omnibox()->RevertAll(); |
- |
- // Do not set blue text that is not a valid URL completion. |
- EXPECT_TRUE(ExecuteScript("behavior = 1")); |
- EXPECT_TRUE(ExecuteScript("suggestion = 'this is not a url!'")); |
- SetOmniboxTextAndWaitForOverlayToShow("this is"); |
- EXPECT_EQ(ASCIIToUTF16("this is"), omnibox()->GetText()); |
- EXPECT_EQ(ASCIIToUTF16(""), omnibox()->GetInstantSuggestion()); |
- |
- omnibox()->RevertAll(); |
- |
- // Do not set gray text when blue text is already set. |
- // First set up some blue text completion. |
- EXPECT_TRUE(ExecuteScript("behavior = 1")); |
- EXPECT_TRUE(ExecuteScript("suggestion = 'www.example.com'")); |
- SetOmniboxTextAndWaitForOverlayToShow("http://www.ex"); |
- string16 text = omnibox()->GetText(); |
- EXPECT_EQ(ASCIIToUTF16("http://www.example.com"), text); |
- size_t start = 0, end = 0; |
- omnibox()->GetSelectionBounds(&start, &end); |
- if (start > end) |
- std::swap(start, end); |
- EXPECT_EQ(ASCIIToUTF16("ample.com"), text.substr(start, end - start)); |
- // Now try to set gray text for the same query. |
- EXPECT_TRUE(ExecuteScript("behavior = 2")); |
- EXPECT_TRUE(ExecuteScript("suggestion = 'www.example.com rocks'")); |
- SetOmniboxText("http://www.ex"); |
- EXPECT_EQ(ASCIIToUTF16("http://www.example.com"), omnibox()->GetText()); |
- EXPECT_EQ(ASCIIToUTF16(""), omnibox()->GetInstantSuggestion()); |
- |
- omnibox()->RevertAll(); |
- |
- // Ignore an out-of-date blue text suggestion. (Simulates a laggy |
- // SetSuggestion IPC by directly calling into InstantController.) |
- SetOmniboxTextAndWaitForOverlayToShow("http://www.example.com/"); |
- instant()->SetSuggestions( |
- instant()->overlay()->contents(), |
- std::vector<InstantSuggestion>( |
- 1, |
- InstantSuggestion(ASCIIToUTF16("www.exa"), |
- INSTANT_COMPLETE_NOW, |
- INSTANT_SUGGESTION_URL, |
- ASCIIToUTF16("www.exa")))); |
- EXPECT_EQ( |
- "http://www.example.com/", |
- omnibox()->model()->result().default_match()->destination_url.spec()); |
- |
- omnibox()->RevertAll(); |
- |
- // TODO(samarth): uncomment after fixing crbug.com/191656. |
- // Use an out-of-date blue text suggestion, if the text typed by the user is |
- // contained in the suggestion. |
- // SetOmniboxTextAndWaitForOverlayToShow("ex"); |
- // instant()->SetSuggestions( |
- // instant()->overlay()->contents(), |
- // std::vector<InstantSuggestion>( |
- // 1, |
- // InstantSuggestion(ASCIIToUTF16("www.example.com"), |
- // INSTANT_COMPLETE_NOW, |
- // INSTANT_SUGGESTION_URL, |
- // ASCIIToUTF16("e")))); |
- // EXPECT_EQ( |
- // "http://www.example.com/", |
- // omnibox()->model()->result().default_match()->destination_url.spec()); |
- |
- // omnibox()->RevertAll(); |
- |
- // When asked to suggest blue text in verbatim mode, suggest the exact |
- // omnibox text rather than using the supplied suggestion text. |
- EXPECT_TRUE(ExecuteScript("behavior = 1")); |
- EXPECT_TRUE(ExecuteScript("suggestion = 'www.example.com/q'")); |
- SetOmniboxText("www.example.com/q"); |
- omnibox()->OnBeforePossibleChange(); |
- SetOmniboxText("www.example.com/"); |
- omnibox()->OnAfterPossibleChange(); |
- EXPECT_EQ(ASCIIToUTF16("www.example.com/"), omnibox()->GetText()); |
-} |
- |
-// Tests that a previous navigation suggestion is not discarded if it's not |
-// stale. |
-IN_PROC_BROWSER_TEST_F(InstantExtendedTest, |
- NavigationSuggestionIsNotDiscarded) { |
- ASSERT_NO_FATAL_FAILURE(SetupInstant(browser())); |
- FocusOmniboxAndWaitForInstantExtendedSupport(); |
- |
- // Tell the page to send a URL suggestion. |
- EXPECT_TRUE(ExecuteScript("suggestion = 'http://www.example.com';" |
- "behavior = 0;")); |
- SetOmniboxTextAndWaitForOverlayToShow("exa"); |
- EXPECT_EQ(ASCIIToUTF16("example.com"), omnibox()->GetText()); |
- SetOmniboxText("exam"); |
- EXPECT_EQ(ASCIIToUTF16("example.com"), omnibox()->GetText()); |
- |
- // TODO(jered): Remove this after fixing OnBlur(). |
- omnibox()->RevertAll(); |
-} |
- |
-// TODO(dhollowa): Fix flakes. http://crbug.com/179930. |
-IN_PROC_BROWSER_TEST_F(InstantExtendedTest, DISABLED_MostVisited) { |
- content::WindowedNotificationObserver observer( |
- chrome::NOTIFICATION_INSTANT_SENT_MOST_VISITED_ITEMS, |
- content::NotificationService::AllSources()); |
- // Initialize Instant. |
- ASSERT_NO_FATAL_FAILURE(SetupInstant(browser())); |
- FocusOmniboxAndWaitForInstantExtendedSupport(); |
- |
- // Get a handle to the NTP and the current state of the JS. |
- ASSERT_NE(static_cast<InstantNTP*>(NULL), instant()->ntp()); |
- content::WebContents* overlay = instant()->ntp_->contents(); |
- EXPECT_TRUE(overlay); |
- EXPECT_TRUE(UpdateSearchState(overlay)); |
- |
- // Wait for most visited data to be ready, if necessary. |
- if (on_most_visited_change_calls_ == 0) { |
- observer.Wait(); |
- EXPECT_TRUE(UpdateSearchState(overlay)); |
- } |
- |
- EXPECT_EQ(1, on_most_visited_change_calls_); |
- |
- // Make sure we have at least two Most Visited Items and save that number. |
- // TODO(pedrosimonetti): For now, we're relying on the fact that the Top |
- // Sites will have at lease two items in it. The correct approach would be |
- // adding those items to the Top Sites manually before starting the test. |
- EXPECT_GT(most_visited_items_count_, 1); |
- int old_most_visited_items_count = most_visited_items_count_; |
- |
- // Delete the fist Most Visited Item. |
- int rid = first_most_visited_item_id_; |
- std::ostringstream stream; |
- stream << "newTabPageHandle.deleteMostVisitedItem(" << rid << ")"; |
- EXPECT_TRUE(ExecuteScript(stream.str())); |
- observer.Wait(); |
- |
- // Update Most Visited state. |
- EXPECT_TRUE(UpdateSearchState(overlay)); |
- |
- // Make sure we have one less item in there. |
- EXPECT_EQ(most_visited_items_count_, old_most_visited_items_count - 1); |
- |
- // Undo the deletion of the fist Most Visited Item. |
- stream.str(std::string()); |
- stream << "newTabPageHandle.undoMostVisitedDeletion(" << rid << ")"; |
- EXPECT_TRUE(ExecuteScript(stream.str())); |
- observer.Wait(); |
- |
- // Update Most Visited state. |
- EXPECT_TRUE(UpdateSearchState(overlay)); |
- |
- // Make sure we have the same number of items as before. |
- EXPECT_EQ(most_visited_items_count_, old_most_visited_items_count); |
- |
- // Delete the fist Most Visited Item. |
- rid = first_most_visited_item_id_; |
- stream.str(std::string()); |
- stream << "newTabPageHandle.deleteMostVisitedItem(" << rid << ")"; |
- EXPECT_TRUE(ExecuteScript(stream.str())); |
- observer.Wait(); |
- |
- // Update Most Visited state. |
- EXPECT_TRUE(UpdateSearchState(overlay)); |
- |
- // Delete the second Most Visited Item. |
- rid = first_most_visited_item_id_; |
- stream.str(std::string()); |
- stream << "newTabPageHandle.deleteMostVisitedItem(" << rid << ")"; |
- EXPECT_TRUE(ExecuteScript(stream.str())); |
- observer.Wait(); |
- |
- // Update Most Visited state. |
- EXPECT_TRUE(UpdateSearchState(overlay)); |
- |
- // Make sure we have two less items in there. |
- EXPECT_EQ(most_visited_items_count_, old_most_visited_items_count - 2); |
- |
- // Delete the second Most Visited Item. |
- stream.str(std::string()); |
- stream << "newTabPageHandle.undoAllMostVisitedDeletions()"; |
- EXPECT_TRUE(ExecuteScript(stream.str())); |
- observer.Wait(); |
- |
- // Update Most Visited state. |
- EXPECT_TRUE(UpdateSearchState(overlay)); |
- |
- // Make sure we have the same number of items as before. |
- EXPECT_EQ(most_visited_items_count_, old_most_visited_items_count); |
-} |
- |
-IN_PROC_BROWSER_TEST_F(InstantPolicyTest, ThemeBackgroundAccess) { |
- InstallThemeSource(); |
- ASSERT_NO_FATAL_FAILURE(InstallThemeAndVerify("theme", "camo theme")); |
- ASSERT_NO_FATAL_FAILURE(SetupInstant(browser())); |
- FocusOmniboxAndWaitForInstantExtendedSupport(); |
- |
- // The "Instant" New Tab should have access to chrome-search: scheme but not |
- // chrome: scheme. |
- ui_test_utils::NavigateToURLWithDisposition( |
- browser(), |
- GURL(chrome::kChromeUINewTabURL), |
- NEW_FOREGROUND_TAB, |
- ui_test_utils::BROWSER_TEST_WAIT_FOR_TAB); |
- |
- content::RenderViewHost* rvh = |
- browser()->tab_strip_model()->GetActiveWebContents()->GetRenderViewHost(); |
- |
- const std::string chrome_url("chrome://theme/IDR_THEME_NTP_BACKGROUND"); |
- const std::string search_url( |
- "chrome-search://theme/IDR_THEME_NTP_BACKGROUND"); |
- bool loaded = false; |
- ASSERT_TRUE(LoadImage(rvh, chrome_url, &loaded)); |
- EXPECT_FALSE(loaded) << chrome_url; |
- ASSERT_TRUE(LoadImage(rvh, search_url, &loaded)); |
- EXPECT_TRUE(loaded) << search_url; |
-} |
- |
-// TODO(dhollowa): Fix flakes. http://crbug.com/179930. |
-IN_PROC_BROWSER_TEST_F(InstantExtendedTest, DISABLED_FaviconAccess) { |
- // Create a favicon. |
- history::TopSites* top_sites = browser()->profile()->GetTopSites(); |
- GURL url("http://www.google.com/foo.html"); |
- gfx::Image thumbnail(CreateBitmap(SK_ColorWHITE)); |
- ThumbnailScore high_score(0.0, true, true, base::Time::Now()); |
- EXPECT_TRUE(top_sites->SetPageThumbnail(url, thumbnail, high_score)); |
- |
- ASSERT_NO_FATAL_FAILURE(SetupInstant(browser())); |
- FocusOmniboxAndWaitForInstantExtendedSupport(); |
- |
- // The "Instant" New Tab should have access to chrome-search: scheme but not |
- // chrome: scheme. |
- ui_test_utils::NavigateToURLWithDisposition( |
- browser(), |
- GURL(chrome::kChromeUINewTabURL), |
- NEW_FOREGROUND_TAB, |
- ui_test_utils::BROWSER_TEST_WAIT_FOR_TAB); |
- |
- content::RenderViewHost* rvh = |
- browser()->tab_strip_model()->GetActiveWebContents()->GetRenderViewHost(); |
- |
- // Get the favicons. |
- const std::string chrome_favicon_url( |
- "chrome://favicon/largest/http://www.google.com/foo.html"); |
- const std::string search_favicon_url( |
- "chrome-search://favicon/largest/http://www.google.com/foo.html"); |
- bool loaded = false; |
- ASSERT_TRUE(LoadImage(rvh, chrome_favicon_url, &loaded)); |
- EXPECT_FALSE(loaded) << chrome_favicon_url; |
- ASSERT_TRUE(LoadImage(rvh, search_favicon_url, &loaded)); |
- EXPECT_TRUE(loaded) << search_favicon_url; |
-} |
- |
-// WebUIBindings should never be enabled on ANY Instant web contents. |
-IN_PROC_BROWSER_TEST_F(InstantExtendedTest, NoWebUIBindingsOnNTP) { |
- ASSERT_NO_FATAL_FAILURE(SetupInstant(browser())); |
- FocusOmniboxAndWaitForInstantExtendedSupport(); |
- |
- ui_test_utils::NavigateToURLWithDisposition( |
- browser(), |
- GURL(chrome::kChromeUINewTabURL), |
- NEW_FOREGROUND_TAB, |
- ui_test_utils::BROWSER_TEST_WAIT_FOR_TAB); |
- const content::WebContents* tab = |
- browser()->tab_strip_model()->GetActiveWebContents(); |
- |
- // Instant-provided NTP should not have any bindings enabled. |
- EXPECT_EQ(0, tab->GetRenderViewHost()->GetEnabledBindings()); |
-} |
- |
-// WebUIBindings should never be enabled on ANY Instant web contents. |
-IN_PROC_BROWSER_TEST_F(InstantExtendedTest, NoWebUIBindingsOnPreview) { |
- ASSERT_NO_FATAL_FAILURE(SetupInstant(browser())); |
- FocusOmniboxAndWaitForInstantExtendedSupport(); |
- |
- // Typing in the omnibox shows the overlay. |
- SetOmniboxTextAndWaitForOverlayToShow("query"); |
- EXPECT_TRUE(instant()->model()->mode().is_search_suggestions()); |
- content::WebContents* preview = instant()->GetOverlayContents(); |
- ASSERT_NE(static_cast<content::WebContents*>(NULL), preview); |
- |
- // Instant preview should not have any bindings enabled. |
- EXPECT_EQ(0, preview->GetRenderViewHost()->GetEnabledBindings()); |
-} |
- |
-// WebUIBindings should never be enabled on ANY Instant web contents. |
-IN_PROC_BROWSER_TEST_F(InstantExtendedTest, NoWebUIBindingsOnResults) { |
- ASSERT_NO_FATAL_FAILURE(SetupInstant(browser())); |
- FocusOmniboxAndWaitForInstantExtendedSupport(); |
- |
- // Typing in the omnibox shows the overlay. |
- SetOmniboxTextAndWaitForOverlayToShow("query"); |
- content::WebContents* preview = instant()->GetOverlayContents(); |
- EXPECT_TRUE(instant()->model()->mode().is_search_suggestions()); |
- // Commit the search by pressing Enter. |
- browser()->window()->GetLocationBar()->AcceptInput(); |
- EXPECT_TRUE(instant()->model()->mode().is_default()); |
- const content::WebContents* tab = |
- browser()->tab_strip_model()->GetActiveWebContents(); |
- EXPECT_EQ(preview, tab); |
- |
- // The commited Instant page should not have any bindings enabled. |
- EXPECT_EQ(0, tab->GetRenderViewHost()->GetEnabledBindings()); |
-} |
- |
-// Only implemented in Views and Mac currently: http://crbug.com/164723 |
-#if defined(OS_WIN) || defined(OS_CHROMEOS) || defined(OS_MACOSX) |
-#define MAYBE_HomeButtonAffectsMargin HomeButtonAffectsMargin |
-#else |
-#define MAYBE_HomeButtonAffectsMargin DISABLED_HomeButtonAffectsMargin |
-#endif |
-// Check that toggling the state of the home button changes the start-edge |
-// margin and width. |
-IN_PROC_BROWSER_TEST_F(InstantExtendedTest, MAYBE_HomeButtonAffectsMargin) { |
- ASSERT_NO_FATAL_FAILURE(SetupInstant(browser())); |
- |
- // Get the current value of the start-edge margin and width. |
- int start_margin; |
- int width; |
- content::WebContents* overlay = instant()->GetOverlayContents(); |
- EXPECT_TRUE(GetIntFromJS(overlay, "chrome.searchBox.startMargin", |
- &start_margin)); |
- EXPECT_TRUE(GetIntFromJS(overlay, "chrome.searchBox.width", &width)); |
- |
- // Toggle the home button visibility pref. |
- PrefService* profile_prefs = browser()->profile()->GetPrefs(); |
- bool show_home = profile_prefs->GetBoolean(prefs::kShowHomeButton); |
- profile_prefs->SetBoolean(prefs::kShowHomeButton, !show_home); |
- |
- // Make sure the margin and width changed. |
- int new_start_margin; |
- int new_width; |
- EXPECT_TRUE(GetIntFromJS(overlay, "chrome.searchBox.startMargin", |
- &new_start_margin)); |
- EXPECT_TRUE(GetIntFromJS(overlay, "chrome.searchBox.width", &new_width)); |
- EXPECT_NE(start_margin, new_start_margin); |
- EXPECT_NE(width, new_width); |
- EXPECT_EQ(new_width - width, start_margin - new_start_margin); |
-} |
- |
-// Commit does not happen on Mac: http://crbug.com/178520 |
-#if defined(OS_MACOSX) |
-#define MAYBE_CommitWhenFocusLostInFullHeight \ |
- DISABLED_CommitWhenFocusLostInFullHeight |
-#else |
-#define MAYBE_CommitWhenFocusLostInFullHeight CommitWhenFocusLostInFullHeight |
-#endif |
-// Test that the overlay is committed when the omnibox loses focus when it is |
-// shown at 100% height. |
-IN_PROC_BROWSER_TEST_F(InstantExtendedTest, |
- MAYBE_CommitWhenFocusLostInFullHeight) { |
- ASSERT_NO_FATAL_FAILURE(SetupInstant(browser())); |
- |
- // Focus omnibox and confirm overlay isn't shown. |
- FocusOmniboxAndWaitForInstantExtendedSupport(); |
- content::WebContents* overlay = instant()->GetOverlayContents(); |
- EXPECT_TRUE(overlay); |
- EXPECT_TRUE(instant()->model()->mode().is_default()); |
- EXPECT_FALSE(instant()->IsOverlayingSearchResults()); |
- |
- // Typing in the omnibox should show the overlay. |
- SetOmniboxTextAndWaitForOverlayToShow("query"); |
- EXPECT_TRUE(instant()->IsOverlayingSearchResults()); |
- EXPECT_EQ(overlay, instant()->GetOverlayContents()); |
- |
- // Explicitly unfocus the omnibox without triggering a click. Note that this |
- // doesn't actually change the focus state of the omnibox, only what the |
- // Instant controller sees it as. |
- omnibox()->model()->OnWillKillFocus(NULL); |
- omnibox()->model()->OnKillFocus(); |
- |
- // Confirm that the overlay has been committed. |
- content::WebContents* active_tab = |
- browser()->tab_strip_model()->GetActiveWebContents(); |
- EXPECT_EQ(overlay, active_tab); |
-} |
- |
-// Test that the overlay is committed when shown at 100% height without focus |
-// in the omnibox. |
-IN_PROC_BROWSER_TEST_F(InstantExtendedTest, |
- CommitWhenShownInFullHeightWithoutFocus) { |
- ASSERT_NO_FATAL_FAILURE(SetupInstant(browser())); |
- |
- // Focus omnibox and confirm overlay isn't shown. |
- FocusOmniboxAndWaitForInstantExtendedSupport(); |
- content::WebContents* overlay = instant()->GetOverlayContents(); |
- EXPECT_TRUE(overlay); |
- EXPECT_TRUE(instant()->model()->mode().is_default()); |
- EXPECT_FALSE(instant()->IsOverlayingSearchResults()); |
- |
- // Create an observer to wait for the commit. |
- content::WindowedNotificationObserver observer( |
- chrome::NOTIFICATION_INSTANT_COMMITTED, |
- content::NotificationService::AllSources()); |
- |
- // Typing in the omnibox should show the overlay. Don't wait for the overlay |
- // to show however. |
- SetOmniboxText("query"); |
- |
- // Explicitly unfocus the omnibox without triggering a click. Note that this |
- // doesn't actually change the focus state of the omnibox, only what the |
- // Instant controller sees it as. |
- omnibox()->model()->OnWillKillFocus(NULL); |
- omnibox()->model()->OnKillFocus(); |
- |
- // Wait for the overlay to show. |
- observer.Wait(); |
- |
- // Confirm that the overlay has been committed. |
- content::WebContents* active_tab = |
- browser()->tab_strip_model()->GetActiveWebContents(); |
- EXPECT_EQ(overlay, active_tab); |
-} |
- |
-// Test that a transient entry is set properly when the overlay is committed |
-// without a navigation. |
-IN_PROC_BROWSER_TEST_F(InstantExtendedTest, TransientEntrySet) { |
- ASSERT_NO_FATAL_FAILURE(SetupInstant(browser())); |
- |
- // Focus omnibox and confirm overlay isn't shown. |
- FocusOmniboxAndWaitForInstantSupport(); |
- content::WebContents* overlay = instant()->GetOverlayContents(); |
- EXPECT_TRUE(overlay); |
- EXPECT_TRUE(instant()->model()->mode().is_default()); |
- EXPECT_FALSE(instant()->IsOverlayingSearchResults()); |
- |
- // Commit the overlay without triggering a navigation. |
- content::WindowedNotificationObserver observer( |
- chrome::NOTIFICATION_INSTANT_COMMITTED, |
- content::NotificationService::AllSources()); |
- SetOmniboxText("query"); |
- browser()->window()->GetLocationBar()->AcceptInput(); |
- observer.Wait(); |
- |
- // Confirm that the overlay has been committed. |
- content::WebContents* active_tab = |
- browser()->tab_strip_model()->GetActiveWebContents(); |
- EXPECT_EQ(overlay, active_tab); |
- |
- // The page hasn't navigated so there should be a transient entry with the |
- // same URL but different page ID as the last committed entry. |
- const content::NavigationEntry* transient_entry = |
- active_tab->GetController().GetTransientEntry(); |
- const content::NavigationEntry* committed_entry = |
- active_tab->GetController().GetLastCommittedEntry(); |
- EXPECT_EQ(transient_entry->GetURL(), committed_entry->GetURL()); |
- EXPECT_NE(transient_entry->GetPageID(), committed_entry->GetPageID()); |
-} |
- |
-// Test that the a transient entry is cleared when the overlay is committed |
-// with a navigation. |
-// TODO(samarth) : this test fails, http://crbug.com/181070. |
-IN_PROC_BROWSER_TEST_F(InstantExtendedTest, DISABLED_TransientEntryRemoved) { |
- ASSERT_NO_FATAL_FAILURE(SetupInstant(browser())); |
- |
- // Focus omnibox and confirm overlay isn't shown. |
- FocusOmniboxAndWaitForInstantSupport(); |
- content::WebContents* overlay = instant()->GetOverlayContents(); |
- EXPECT_TRUE(overlay); |
- EXPECT_TRUE(instant()->model()->mode().is_default()); |
- EXPECT_FALSE(instant()->IsOverlayingSearchResults()); |
- |
- // Create an observer to wait for the commit. |
- content::WindowedNotificationObserver observer( |
- chrome::NOTIFICATION_INSTANT_COMMITTED, |
- content::NotificationService::AllSources()); |
- |
- // Trigger a navigation on commit. |
- EXPECT_TRUE(ExecuteScript( |
- "getApiHandle().oncancel = function() {" |
- " location.replace(location.href + '#q=query');" |
- "};" |
- )); |
- |
- // Commit the overlay. |
- SetOmniboxText("query"); |
- browser()->window()->GetLocationBar()->AcceptInput(); |
- observer.Wait(); |
- |
- // Confirm that the overlay has been committed. |
- content::WebContents* active_tab = |
- browser()->tab_strip_model()->GetActiveWebContents(); |
- EXPECT_EQ(overlay, active_tab); |
- |
- // The page has navigated so there should be no transient entry. |
- const content::NavigationEntry* transient_entry = |
- active_tab->GetController().GetTransientEntry(); |
- EXPECT_EQ(NULL, transient_entry); |
- |
- // The last committed entry should be the URL the page navigated to. |
- const content::NavigationEntry* committed_entry = |
- active_tab->GetController().GetLastCommittedEntry(); |
- EXPECT_TRUE(EndsWith(committed_entry->GetURL().spec(), "#q=query", true)); |
-} |
- |
-IN_PROC_BROWSER_TEST_F(InstantExtendedTest, RestrictedItemReadback) { |
- // Initialize Instant. |
- ASSERT_NO_FATAL_FAILURE(SetupInstant(browser())); |
- FocusOmniboxAndWaitForInstantSupport(); |
- |
- // Get a handle to the NTP and the current state of the JS. |
- ASSERT_NE(static_cast<InstantNTP*>(NULL), instant()->ntp()); |
- content::WebContents* preview_tab = instant()->ntp()->contents(); |
- EXPECT_TRUE(preview_tab); |
- |
- // Manufacture a few autocomplete results and get them down to the page. |
- std::vector<InstantAutocompleteResult> autocomplete_results; |
- for (int i = 0; i < 3; ++i) { |
- std::string description(base::StringPrintf("Test Description %d", i)); |
- std::string url(base::StringPrintf("http://www.testurl%d.com", i)); |
- |
- InstantAutocompleteResult res; |
- res.provider = ASCIIToUTF16(AutocompleteProvider::TypeToString( |
- AutocompleteProvider::TYPE_BUILTIN)); |
- res.type = ASCIIToUTF16(AutocompleteMatch::TypeToString( |
- AutocompleteMatch::SEARCH_WHAT_YOU_TYPED)), |
- res.description = ASCIIToUTF16(description); |
- res.destination_url = ASCIIToUTF16(url); |
- res.transition = content::PAGE_TRANSITION_TYPED; |
- res.relevance = 42 + i; |
- |
- autocomplete_results.push_back(res); |
- } |
- instant()->overlay()->SendAutocompleteResults(autocomplete_results); |
- |
- // Apparently, one needs to access nativeSuggestions before |
- // apiHandle.setRestrictedValue can work. |
- EXPECT_TRUE(ExecuteScript("var foo = apiHandle.nativeSuggestions;")); |
- |
- const char kQueryString[] = "Hippos go berzerk!"; |
- |
- // First set the query text to a non restricted value and ensure it can be |
- // read back. |
- std::ostringstream stream; |
- stream << "apiHandle.setValue('" << kQueryString << "');"; |
- EXPECT_TRUE(ExecuteScript(stream.str())); |
- |
- std::string result; |
- EXPECT_TRUE(GetStringFromJS(instant()->GetOverlayContents(), |
- "apiHandle.value", |
- &result)); |
- EXPECT_EQ(kQueryString, result); |
- |
- // Set the query text to the first restricted autocomplete item. |
- int rid = 0; |
- stream.str(std::string()); |
- stream << "apiHandle.setRestrictedValue(" << rid << ")"; |
- EXPECT_TRUE(ExecuteScript(stream.str())); |
- |
- // Expect that we now receive the empty string when reading the value back. |
- EXPECT_TRUE(GetStringFromJS(instant()->GetOverlayContents(), |
- "apiHandle.value", |
- &result)); |
- EXPECT_EQ("", result); |
- |
- // Now set the query text to a non restricted value and ensure that the |
- // visibility has been reset and the string can again be read back. |
- stream.str(std::string()); |
- stream << "apiHandle.setValue('" << kQueryString << "');"; |
- EXPECT_TRUE(ExecuteScript(stream.str())); |
- |
- EXPECT_TRUE(GetStringFromJS(instant()->GetOverlayContents(), |
- "apiHandle.value", |
- &result)); |
- EXPECT_EQ(kQueryString, result); |
-} |