1c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
2c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
3c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// found in the LICENSE file.
4c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
5c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include <sstream>
6c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
7c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/command_line.h"
8a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)#include "base/metrics/histogram_base.h"
9a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)#include "base/metrics/histogram_samples.h"
10a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)#include "base/metrics/statistics_recorder.h"
11c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/prefs/pref_service.h"
12eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/run_loop.h"
13c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/strings/string_number_conversions.h"
14868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/string_util.h"
15868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/stringprintf.h"
16868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h"
17eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/time/time.h"
18c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/autocomplete/autocomplete_controller.h"
19c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/bookmarks/bookmark_model_factory.h"
207dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/chrome_notification_types.h"
21c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/extensions/extension_browsertest.h"
22c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/extensions/extension_service.h"
23c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/favicon/favicon_tab_helper.h"
24c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/history/history_db_task.h"
25c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/history/history_service.h"
26c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/history/history_service_factory.h"
27c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/history/top_sites.h"
28c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/profiles/profile.h"
29c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/search/instant_service.h"
30c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/search/instant_service_factory.h"
31c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/search/search.h"
32c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/search_engines/template_url_service_factory.h"
33868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "chrome/browser/task_manager/task_manager.h"
34868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "chrome/browser/task_manager/task_manager_browsertest_util.h"
35c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/themes/theme_service.h"
36c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/themes/theme_service_factory.h"
37c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/ui/browser_list.h"
38c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/ui/browser_tabstrip.h"
39c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/ui/omnibox/omnibox_view.h"
40c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/ui/search/instant_tab.h"
41c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/ui/search/instant_test_utils.h"
42c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/ui/search/search_tab_helper.h"
43c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/ui/tabs/tab_strip_model.h"
44c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/ui/webui/theme_source.h"
45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/common/chrome_switches.h"
46b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)#include "chrome/common/instant_types.h"
47c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/common/pref_names.h"
48c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/common/url_constants.h"
49c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/test/base/in_process_browser_test.h"
50c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/test/base/interactive_test_utils.h"
51c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/test/base/ui_test_utils.h"
52cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "components/bookmarks/browser/bookmark_utils.h"
53cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "components/bookmarks/test/bookmark_test_helpers.h"
54f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "components/google/core/browser/google_url_tracker.h"
551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "components/history/core/browser/history_types.h"
56f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "components/history/core/common/thumbnail_score.h"
575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "components/omnibox/autocomplete_match.h"
585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "components/omnibox/autocomplete_provider.h"
596e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "components/omnibox/autocomplete_result.h"
601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "components/omnibox/search_provider.h"
61116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "components/search_engines/template_url_service.h"
6290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "components/sessions/serialized_navigation_entry.h"
63c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "content/public/browser/navigation_controller.h"
64c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "content/public/browser/navigation_entry.h"
65c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "content/public/browser/notification_service.h"
66c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "content/public/browser/render_process_host.h"
67c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "content/public/browser/render_view_host.h"
68c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "content/public/browser/site_instance.h"
69c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "content/public/browser/url_data_source.h"
70c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "content/public/browser/web_contents.h"
71c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "content/public/common/bindings_policy.h"
72c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "content/public/test/browser_test_utils.h"
73c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "content/public/test/test_utils.h"
74eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "net/base/network_change_notifier.h"
750f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#include "net/http/http_status_code.h"
76424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#include "net/url_request/test_url_fetcher_factory.h"
77424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#include "net/url_request/url_fetcher_impl.h"
78f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "net/url_request/url_request_status.h"
79868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "testing/gmock/include/gmock/gmock.h"
80c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "third_party/skia/include/core/SkBitmap.h"
81868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)using base::ASCIIToUTF16;
83868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)using testing::HasSubstr;
84c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
85c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace {
86c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
87c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Task used to make sure history has finished processing a request. Intended
88c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// for use with BlockUntilHistoryProcessesPendingRequests.
89c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class QuittingHistoryDBTask : public history::HistoryDBTask {
90c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public:
91c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  QuittingHistoryDBTask() {}
92c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
93c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  virtual bool RunOnDBThread(history::HistoryBackend* backend,
94c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                             history::HistoryDatabase* db) OVERRIDE {
95c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    return true;
96c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
97c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
98c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  virtual void DoneRunOnMainThread() OVERRIDE {
99b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    base::MessageLoop::current()->Quit();
100c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
101c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
102c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) private:
103c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  virtual ~QuittingHistoryDBTask() {}
104c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
105c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(QuittingHistoryDBTask);
106c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)};
107c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
108eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochclass FakeNetworkChangeNotifier : public net::NetworkChangeNotifier {
109eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch public:
110eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  FakeNetworkChangeNotifier() : connection_type_(CONNECTION_NONE) {}
111eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
112eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  virtual ConnectionType GetCurrentConnectionType() const OVERRIDE {
113eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    return connection_type_;
114eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  }
115eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
116eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  void SetConnectionType(ConnectionType type) {
117eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    connection_type_ = type;
118eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    NotifyObserversOfNetworkChange(type);
119eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    base::RunLoop().RunUntilIdle();
120eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  }
121eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
122eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  virtual ~FakeNetworkChangeNotifier() {}
123eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
124eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch private:
125eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ConnectionType connection_type_;
126eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  DISALLOW_COPY_AND_ASSIGN(FakeNetworkChangeNotifier);
127eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch};
128c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}  // namespace
129c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
130c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class InstantExtendedTest : public InProcessBrowserTest,
131c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                            public InstantTestBase {
132c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public:
133c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  InstantExtendedTest()
134c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      : on_most_visited_change_calls_(0),
135c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        most_visited_items_count_(0),
136c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        first_most_visited_item_id_(0),
137c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        on_native_suggestions_calls_(0),
138c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        on_change_calls_(0),
139b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)        submit_count_(0),
140868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        on_esc_key_press_event_calls_(0),
141868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        on_focus_changed_calls_(0),
142868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        is_focused_(false),
143868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        on_toggle_voice_search_calls_(0) {
144c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
145c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) protected:
146c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  virtual void SetUpInProcessBrowserTestFixture() OVERRIDE {
147f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    chrome::EnableQueryExtractionForTesting();
148c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ASSERT_TRUE(https_test_server().Start());
149c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    GURL instant_url = https_test_server().GetURL(
150c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        "files/instant_extended.html?strk=1&");
1515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    GURL ntp_url = https_test_server().GetURL(
1525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        "files/instant_extended_ntp.html?strk=1&");
1535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    InstantTestBase::Init(instant_url, ntp_url, false);
154c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
155c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
156a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)  int64 GetHistogramCount(const char* name) {
157a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)    base::HistogramBase* histogram =
158a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)        base::StatisticsRecorder::FindHistogram(name);
159a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)    if (!histogram) {
160a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)      // If no histogram is found, it's possible that no values have been
161a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)      // recorded yet. Assume that the value is zero.
162a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)      return 0;
163a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)    }
164a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)    return histogram->SnapshotSamples()->TotalCount();
165a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)  }
166a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)
167c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  bool UpdateSearchState(content::WebContents* contents) WARN_UNUSED_RESULT {
168c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    return GetIntFromJS(contents, "onMostVisitedChangedCalls",
169c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                        &on_most_visited_change_calls_) &&
170c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)           GetIntFromJS(contents, "mostVisitedItemsCount",
171c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                        &most_visited_items_count_) &&
172c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)           GetIntFromJS(contents, "firstMostVisitedItemId",
173c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                        &first_most_visited_item_id_) &&
174c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)           GetIntFromJS(contents, "onNativeSuggestionsCalls",
175c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                        &on_native_suggestions_calls_) &&
176c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)           GetIntFromJS(contents, "onChangeCalls",
177c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                        &on_change_calls_) &&
178c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)           GetIntFromJS(contents, "submitCount",
179c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                        &submit_count_) &&
180c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)           GetStringFromJS(contents, "apiHandle.value",
181b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)                           &query_value_) &&
182b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)           GetIntFromJS(contents, "onEscKeyPressedCalls",
183868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)                        &on_esc_key_press_event_calls_) &&
184868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)           GetIntFromJS(contents, "onFocusChangedCalls",
185868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)                       &on_focus_changed_calls_) &&
186868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)           GetBoolFromJS(contents, "isFocused",
187868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)                         &is_focused_) &&
188868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)           GetIntFromJS(contents, "onToggleVoiceSearchCalls",
189424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)                        &on_toggle_voice_search_calls_) &&
190424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)           GetStringFromJS(contents, "prefetchQuery", &prefetch_query_value_);
191424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
192c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
193c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
194c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  TemplateURL* GetDefaultSearchProviderTemplateURL() {
195c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    TemplateURLService* template_url_service =
196c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        TemplateURLServiceFactory::GetForProfile(browser()->profile());
197c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    if (template_url_service)
198c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      return template_url_service->GetDefaultSearchProvider();
199c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    return NULL;
200c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
201c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
2025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  bool AddSearchToHistory(base::string16 term, int visit_count) {
203c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    TemplateURL* template_url = GetDefaultSearchProviderTemplateURL();
204c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    if (!template_url)
205c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      return false;
206c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
207c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    HistoryService* history = HistoryServiceFactory::GetForProfile(
208c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        browser()->profile(), Profile::EXPLICIT_ACCESS);
209c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    GURL search(template_url->url_ref().ReplaceSearchTerms(
210f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)        TemplateURLRef::SearchTermsArgs(term),
211f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)        TemplateURLServiceFactory::GetForProfile(
212f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)            browser()->profile())->search_terms_data()));
213c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    history->AddPageWithDetails(
214a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        search, base::string16(), visit_count, visit_count,
215c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        base::Time::Now(), false, history::SOURCE_BROWSED);
216c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    history->SetKeywordSearchTermsForURL(
217c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        search, template_url->id(), term);
218c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    return true;
219c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
220c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
221c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  void BlockUntilHistoryProcessesPendingRequests() {
222c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    HistoryService* history = HistoryServiceFactory::GetForProfile(
223c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        browser()->profile(), Profile::EXPLICIT_ACCESS);
224c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    DCHECK(history);
225b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    DCHECK(base::MessageLoop::current());
226c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
227116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    base::CancelableTaskTracker tracker;
2285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    history->ScheduleDBTask(
2295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        scoped_ptr<history::HistoryDBTask>(
2305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            new QuittingHistoryDBTask()),
2315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        &tracker);
232b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    base::MessageLoop::current()->Run();
233c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
234c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
235c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  int CountSearchProviderSuggestions() {
236c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    return omnibox()->model()->autocomplete_controller()->search_provider()->
237c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        matches().size();
238c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
239c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
240c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  int on_most_visited_change_calls_;
241c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  int most_visited_items_count_;
242c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  int first_most_visited_item_id_;
243c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  int on_native_suggestions_calls_;
244c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  int on_change_calls_;
245c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  int submit_count_;
246b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  int on_esc_key_press_event_calls_;
247c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  std::string query_value_;
248868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  int on_focus_changed_calls_;
249868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  bool is_focused_;
250868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  int on_toggle_voice_search_calls_;
251424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  std::string prefetch_query_value_;
252424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)};
253424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
254424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)class InstantExtendedPrefetchTest : public InstantExtendedTest {
255424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) public:
256424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  InstantExtendedPrefetchTest()
257424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)      : factory_(new net::URLFetcherImplFactory()),
258424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)        fake_factory_(new net::FakeURLFetcherFactory(factory_.get())) {
259424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  }
260424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
261424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  virtual void SetUpInProcessBrowserTestFixture() OVERRIDE {
262f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    chrome::EnableQueryExtractionForTesting();
263424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    ASSERT_TRUE(https_test_server().Start());
264424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    GURL instant_url = https_test_server().GetURL(
265424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)        "files/instant_extended.html?strk=1&");
2665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    GURL ntp_url = https_test_server().GetURL(
2675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        "files/instant_extended_ntp.html?strk=1&");
2685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    InstantTestBase::Init(instant_url, ntp_url, true);
269424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  }
270424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
271a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE {
272a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    command_line->AppendSwitchASCII(
273a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        switches::kForceFieldTrials,
2745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        "EmbeddedSearch/Group11 prefetch_results_srp:1/");
275a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  }
276a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
277424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  net::FakeURLFetcherFactory* fake_factory() { return fake_factory_.get(); }
278424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
279424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) private:
280424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  // Used to instantiate FakeURLFetcherFactory.
281424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  scoped_ptr<net::URLFetcherImplFactory> factory_;
282424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
283424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  // Used to mock default search provider suggest response.
284424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  scoped_ptr<net::FakeURLFetcherFactory> fake_factory_;
285424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
286424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(InstantExtendedPrefetchTest);
287c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)};
288c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
289eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochclass InstantExtendedNetworkTest : public InstantExtendedTest {
290eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch protected:
291eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  virtual void SetUpOnMainThread() OVERRIDE {
292eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    disable_for_test_.reset(new net::NetworkChangeNotifier::DisableForTest);
293eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    fake_network_change_notifier_.reset(new FakeNetworkChangeNotifier);
294eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    InstantExtendedTest::SetUpOnMainThread();
295eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  }
296eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
2975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual void TearDownOnMainThread() OVERRIDE {
2985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    InstantExtendedTest::TearDownOnMainThread();
299eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    fake_network_change_notifier_.reset();
300eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    disable_for_test_.reset();
301eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  }
302eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
303eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  void SetConnectionType(net::NetworkChangeNotifier::ConnectionType type) {
304eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    fake_network_change_notifier_->SetConnectionType(type);
305eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  }
306eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
307eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch private:
308eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  scoped_ptr<net::NetworkChangeNotifier::DisableForTest> disable_for_test_;
309eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  scoped_ptr<FakeNetworkChangeNotifier> fake_network_change_notifier_;
310eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch};
311eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
312c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Test class used to verify chrome-search: scheme and access policy from the
313c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Instant overlay.  This is a subclass of |ExtensionBrowserTest| because it
314c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// loads a theme that provides a background image.
315c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class InstantPolicyTest : public ExtensionBrowserTest, public InstantTestBase {
316c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public:
317c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  InstantPolicyTest() {}
318c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
319c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) protected:
320c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  virtual void SetUpInProcessBrowserTestFixture() OVERRIDE {
321c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ASSERT_TRUE(https_test_server().Start());
322c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    GURL instant_url = https_test_server().GetURL(
323c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        "files/instant_extended.html?strk=1&");
3245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    GURL ntp_url = https_test_server().GetURL(
3255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        "files/instant_extended_ntp.html?strk=1&");
3265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    InstantTestBase::Init(instant_url, ntp_url, false);
327c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
328c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
329c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  void InstallThemeSource() {
330c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ThemeSource* theme = new ThemeSource(profile());
331c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    content::URLDataSource::Add(profile(), theme);
332c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
333c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
334c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  void InstallThemeAndVerify(const std::string& theme_dir,
335c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                             const std::string& theme_name) {
3363551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    const extensions::Extension* theme =
3373551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)        ThemeServiceFactory::GetThemeForProfile(
3383551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)            ExtensionBrowserTest::browser()->profile());
3393551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    // If there is already a theme installed, the current theme should be
3403551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    // disabled and the new one installed + enabled.
3413551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    int expected_change = theme ? 0 : 1;
3423551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
343c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    const base::FilePath theme_path = test_data_dir_.AppendASCII(theme_dir);
344c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ASSERT_TRUE(InstallExtensionWithUIAutoConfirm(
3453551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)        theme_path, expected_change, ExtensionBrowserTest::browser()));
3463551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    const extensions::Extension* new_theme =
347c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        ThemeServiceFactory::GetThemeForProfile(
348c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            ExtensionBrowserTest::browser()->profile());
3493551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    ASSERT_NE(static_cast<extensions::Extension*>(NULL), new_theme);
3503551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    ASSERT_EQ(new_theme->name(), theme_name);
351c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
352c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
353c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) private:
354c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(InstantPolicyTest);
355c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)};
356c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
357868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(InstantExtendedTest, SearchReusesInstantTab) {
358868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  ASSERT_NO_FATAL_FAILURE(SetupInstant(browser()));
3595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  FocusOmnibox();
360eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
361868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  content::WindowedNotificationObserver observer(
362868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      chrome::NOTIFICATION_INSTANT_TAB_SUPPORT_DETERMINED,
363868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      content::NotificationService::AllSources());
364868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  SetOmniboxText("flowers");
36546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  PressEnterAndWaitForFrameLoad();
366868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  observer.Wait();
367868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
368868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  // Just did a regular search.
369eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  content::WebContents* active_tab =
370eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      browser()->tab_strip_model()->GetActiveWebContents();
371eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ASSERT_THAT(active_tab->GetURL().spec(), HasSubstr("q=flowers"));
372eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ASSERT_TRUE(UpdateSearchState(active_tab));
373868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  ASSERT_EQ(0, submit_count_);
374868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
375868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  SetOmniboxText("puppies");
376eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  PressEnterAndWaitForNavigation();
377868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
378868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  // Should have reused the tab and sent an onsubmit message.
379eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  active_tab = browser()->tab_strip_model()->GetActiveWebContents();
380eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ASSERT_THAT(active_tab->GetURL().spec(), HasSubstr("q=puppies"));
381eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ASSERT_TRUE(UpdateSearchState(active_tab));
382868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  EXPECT_EQ(1, submit_count_);
383868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)}
384868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
385868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(InstantExtendedTest,
386868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)                       SearchDoesntReuseInstantTabWithoutSupport) {
387868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  ASSERT_NO_FATAL_FAILURE(SetupInstant(browser()));
3885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  FocusOmnibox();
389868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
390868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  // Don't wait for the navigation to complete.
391868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  SetOmniboxText("flowers");
392868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  browser()->window()->GetLocationBar()->AcceptInput();
393868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
394868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  SetOmniboxText("puppies");
395868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  browser()->window()->GetLocationBar()->AcceptInput();
396868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
397868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  // Should not have reused the tab.
398868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  ASSERT_THAT(
399868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      browser()->tab_strip_model()->GetActiveWebContents()->GetURL().spec(),
400868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      HasSubstr("q=puppies"));
401868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)}
402868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
403868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(InstantExtendedTest,
404868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)                       TypedSearchURLDoesntReuseInstantTab) {
405868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  ASSERT_NO_FATAL_FAILURE(SetupInstant(browser()));
4065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  FocusOmnibox();
407eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
408868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  // Create an observer to wait for the instant tab to support Instant.
409eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  content::WindowedNotificationObserver observer_1(
410868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      chrome::NOTIFICATION_INSTANT_TAB_SUPPORT_DETERMINED,
411868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      content::NotificationService::AllSources());
412868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  SetOmniboxText("flowers");
41346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  PressEnterAndWaitForFrameLoad();
414eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  observer_1.Wait();
415868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
416868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  // Just did a regular search.
417eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  content::WebContents* active_tab =
418eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      browser()->tab_strip_model()->GetActiveWebContents();
419eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ASSERT_THAT(active_tab->GetURL().spec(), HasSubstr("q=flowers"));
420eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ASSERT_TRUE(UpdateSearchState(active_tab));
421868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  ASSERT_EQ(0, submit_count_);
422868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
423868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  // Typed in a search URL "by hand".
424eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  content::WindowedNotificationObserver observer_2(
425eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      chrome::NOTIFICATION_INSTANT_TAB_SUPPORT_DETERMINED,
426eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      content::NotificationService::AllSources());
4274e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  SetOmniboxText(instant_url().Resolve("#q=puppies").spec());
428eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  PressEnterAndWaitForNavigation();
429eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  observer_2.Wait();
430868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
431868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  // Should not have reused the tab.
432eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  active_tab = browser()->tab_strip_model()->GetActiveWebContents();
433eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ASSERT_THAT(active_tab->GetURL().spec(), HasSubstr("q=puppies"));
434868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)}
4355e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)
4365e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(InstantExtendedTest, OmniboxMarginSetForSearchURLs) {
4375e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)  ASSERT_NO_FATAL_FAILURE(SetupInstant(browser()));
4385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  FocusOmnibox();
439eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
4405e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)  // Create an observer to wait for the instant tab to support Instant.
4415e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)  content::WindowedNotificationObserver observer(
4425e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)      chrome::NOTIFICATION_INSTANT_TAB_SUPPORT_DETERMINED,
4435e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)      content::NotificationService::AllSources());
4445e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)
4455e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)  SetOmniboxText("flowers");
4465e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)  browser()->window()->GetLocationBar()->AcceptInput();
4475e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)  observer.Wait();
4485e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)
4495e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)  const std::string& url =
4505e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)      browser()->tab_strip_model()->GetActiveWebContents()->GetURL().spec();
4515e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)  // Make sure we actually used search_url, not instant_url.
4525e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)  ASSERT_THAT(url, HasSubstr("&is_search"));
4535e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)  EXPECT_THAT(url, HasSubstr("&es_sm="));
4545e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)}
4555e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)
4567d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// Test to verify that switching tabs should not dispatch onmostvisitedchanged
4577d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// events.
4587d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(InstantExtendedTest, NoMostVisitedChangedOnTabSwitch) {
4597d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  // Initialize Instant.
4607d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  ASSERT_NO_FATAL_FAILURE(SetupInstant(browser()));
4617d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
4625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // Open new tab.
4637d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  ui_test_utils::NavigateToURLWithDisposition(
4647d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      browser(),
4657d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      GURL(chrome::kChromeUINewTabURL),
4667d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      NEW_FOREGROUND_TAB,
4675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      ui_test_utils::BROWSER_TEST_WAIT_FOR_TAB |
4685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION);
4697d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  EXPECT_EQ(2, browser()->tab_strip_model()->count());
4707d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
4717d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  // Make sure new tab received the onmostvisitedchanged event once.
4727d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  content::WebContents* active_tab =
4737d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      browser()->tab_strip_model()->GetActiveWebContents();
4747d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  EXPECT_TRUE(UpdateSearchState(active_tab));
475eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(1, on_most_visited_change_calls_);
4767d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
4777d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  // Activate the previous tab.
4787d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  browser()->tab_strip_model()->ActivateTabAt(0, false);
4797d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
4807d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  // Switch back to new tab.
4817d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  browser()->tab_strip_model()->ActivateTabAt(1, false);
4827d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
4837d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  // Confirm that new tab got no onmostvisitedchanged event.
4847d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  active_tab = browser()->tab_strip_model()->GetActiveWebContents();
4857d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  EXPECT_TRUE(UpdateSearchState(active_tab));
486eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(1, on_most_visited_change_calls_);
487eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}
488eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
489eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochIN_PROC_BROWSER_TEST_F(InstantPolicyTest, ThemeBackgroundAccess) {
490eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  InstallThemeSource();
491eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ASSERT_NO_FATAL_FAILURE(InstallThemeAndVerify("theme", "camo theme"));
492eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ASSERT_NO_FATAL_FAILURE(SetupInstant(browser()));
493eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
494eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // The "Instant" New Tab should have access to chrome-search: scheme but not
495eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // chrome: scheme.
496eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ui_test_utils::NavigateToURLWithDisposition(
497eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      browser(),
498eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      GURL(chrome::kChromeUINewTabURL),
499eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      NEW_FOREGROUND_TAB,
5005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      ui_test_utils::BROWSER_TEST_WAIT_FOR_TAB |
5015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION);
502eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
503eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  content::RenderViewHost* rvh =
504eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      browser()->tab_strip_model()->GetActiveWebContents()->GetRenderViewHost();
505eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
506eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  const std::string chrome_url("chrome://theme/IDR_THEME_NTP_BACKGROUND");
507eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  const std::string search_url(
508eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      "chrome-search://theme/IDR_THEME_NTP_BACKGROUND");
509eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  bool loaded = false;
510eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ASSERT_TRUE(LoadImage(rvh, chrome_url, &loaded));
511eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_FALSE(loaded) << chrome_url;
512eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ASSERT_TRUE(LoadImage(rvh, search_url, &loaded));
513eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_TRUE(loaded) << search_url;
514eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}
515eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
5165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Flaky on all bots. http://crbug.com/335297.
517eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochIN_PROC_BROWSER_TEST_F(InstantPolicyTest,
5185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                       DISABLED_NoThemeBackgroundChangeEventOnTabSwitch) {
519eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  InstallThemeSource();
520eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ASSERT_NO_FATAL_FAILURE(SetupInstant(browser()));
521eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
522eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Install a theme.
523eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ASSERT_NO_FATAL_FAILURE(InstallThemeAndVerify("theme", "camo theme"));
524eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(1, browser()->tab_strip_model()->count());
525eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
5265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // Open new tab.
527eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ui_test_utils::NavigateToURLWithDisposition(
528eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      browser(),
529eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      GURL(chrome::kChromeUINewTabURL),
530eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      NEW_FOREGROUND_TAB,
5315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      ui_test_utils::BROWSER_TEST_WAIT_FOR_TAB |
5325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION);
533eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(2, browser()->tab_strip_model()->count());
534eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
535eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  content::WebContents* active_tab =
536eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      browser()->tab_strip_model()->GetActiveWebContents();
537eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ASSERT_EQ(1, browser()->tab_strip_model()->active_index());
538eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  int on_theme_changed_calls = 0;
539eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_TRUE(GetIntFromJS(active_tab, "onThemeChangedCalls",
540eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                           &on_theme_changed_calls));
541eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(1, on_theme_changed_calls);
542eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
543eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Activate the previous tab.
544eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  browser()->tab_strip_model()->ActivateTabAt(0, false);
545eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ASSERT_EQ(0, browser()->tab_strip_model()->active_index());
546eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
547eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Switch back to new tab.
548eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  browser()->tab_strip_model()->ActivateTabAt(1, false);
549eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ASSERT_EQ(1, browser()->tab_strip_model()->active_index());
550eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
551eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Confirm that new tab got no onthemechanged event while switching tabs.
552eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  active_tab = browser()->tab_strip_model()->GetActiveWebContents();
553eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  on_theme_changed_calls = 0;
554eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_TRUE(GetIntFromJS(active_tab, "onThemeChangedCalls",
555eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                           &on_theme_changed_calls));
556eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(1, on_theme_changed_calls);
557eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}
558eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
5595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Flaky on all bots. http://crbug.com/335297, http://crbug.com/265971.
560eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochIN_PROC_BROWSER_TEST_F(InstantPolicyTest,
5615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                       DISABLED_SendThemeBackgroundChangedEvent) {
562eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  InstallThemeSource();
563eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ASSERT_NO_FATAL_FAILURE(SetupInstant(browser()));
564eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
565eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Install a theme.
566eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ASSERT_NO_FATAL_FAILURE(InstallThemeAndVerify("theme", "camo theme"));
567eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
5685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // Open new tab.
569eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ui_test_utils::NavigateToURLWithDisposition(
570eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      browser(),
571eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      GURL(chrome::kChromeUINewTabURL),
572eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      NEW_FOREGROUND_TAB,
5735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      ui_test_utils::BROWSER_TEST_WAIT_FOR_TAB |
5745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION);
575eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(2, browser()->tab_strip_model()->count());
576eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
577eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Make sure new tab received an onthemechanged event.
578eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  content::WebContents* active_tab =
579eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      browser()->tab_strip_model()->GetActiveWebContents();
580eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ASSERT_EQ(1, browser()->tab_strip_model()->active_index());
581eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  int on_theme_changed_calls = 0;
582eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_TRUE(GetIntFromJS(active_tab, "onThemeChangedCalls",
583eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                           &on_theme_changed_calls));
584eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(1, on_theme_changed_calls);
585eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
586eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Install a new theme.
587eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ASSERT_NO_FATAL_FAILURE(InstallThemeAndVerify("theme2", "snowflake theme"));
588eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
589eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Confirm that new tab is notified about the theme changed event.
590eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  on_theme_changed_calls = 0;
591eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_TRUE(GetIntFromJS(active_tab, "onThemeChangedCalls",
592eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                           &on_theme_changed_calls));
593eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(2, on_theme_changed_calls);
594eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}
595eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
59603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)// Flaky on all bots.  http://crbug.com/253092
597eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// Test to verify that the omnibox search query is updated on browser
598eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// back button press event.
599eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochIN_PROC_BROWSER_TEST_F(InstantExtendedTest,
60003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)                       DISABLED_UpdateSearchQueryOnBackNavigation) {
601eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ASSERT_NO_FATAL_FAILURE(SetupInstant(browser()));
602eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
603eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Focus omnibox and confirm overlay isn't shown.
6045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  FocusOmnibox();
605eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
606eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Create an observer to wait for the instant tab to support Instant.
607eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  content::WindowedNotificationObserver observer(
608eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      chrome::NOTIFICATION_INSTANT_TAB_SUPPORT_DETERMINED,
609eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      content::NotificationService::AllSources());
610eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
611eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  SetOmniboxText("flowers");
612eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Commit the search by pressing 'Enter'.
613eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  PressEnterAndWaitForNavigation();
614eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  observer.Wait();
615eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
616eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(ASCIIToUTF16("flowers"), omnibox()->GetText());
617eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
618eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Typing in the new search query in omnibox.
619eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  SetOmniboxText("cattles");
620eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Commit the search by pressing 'Enter'.
621eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  PressEnterAndWaitForNavigation();
622eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // 'Enter' commits the query as it was typed. This creates a navigation entry
623eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // in the history.
624eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(ASCIIToUTF16("cattles"), omnibox()->GetText());
625eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
626eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  content::WebContents* active_tab =
627eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      browser()->tab_strip_model()->GetActiveWebContents();
628eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_TRUE(active_tab->GetController().CanGoBack());
629eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  content::WindowedNotificationObserver load_stop_observer(
630eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      content::NOTIFICATION_LOAD_STOP,
631eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      content::Source<content::NavigationController>(
632eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch          &active_tab->GetController()));
633eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  active_tab->GetController().GoBack();
634eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  load_stop_observer.Wait();
635eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
636eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(ASCIIToUTF16("flowers"), omnibox()->GetText());
637eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Commit the search by pressing 'Enter'.
638eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  FocusOmnibox();
639eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  PressEnterAndWaitForNavigation();
640eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(ASCIIToUTF16("flowers"), omnibox()->GetText());
641eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}
642eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
6433551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)// Flaky: crbug.com/253092.
644eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// Test to verify that the omnibox search query is updated on browser
645eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// forward button press events.
646eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochIN_PROC_BROWSER_TEST_F(InstantExtendedTest,
6473551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)                       DISABLED_UpdateSearchQueryOnForwardNavigation) {
648eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ASSERT_NO_FATAL_FAILURE(SetupInstant(browser()));
649eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
650eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Focus omnibox and confirm overlay isn't shown.
6515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  FocusOmnibox();
652eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
653eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Create an observer to wait for the instant tab to support Instant.
654eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  content::WindowedNotificationObserver observer(
655eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      chrome::NOTIFICATION_INSTANT_TAB_SUPPORT_DETERMINED,
656eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      content::NotificationService::AllSources());
657eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
658eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  SetOmniboxText("flowers");
659eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Commit the search by pressing 'Enter'.
660eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  PressEnterAndWaitForNavigation();
661eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  observer.Wait();
662eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
663eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(ASCIIToUTF16("flowers"), omnibox()->GetText());
664eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
665eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Typing in the new search query in omnibox.
666eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  SetOmniboxText("cattles");
667eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Commit the search by pressing 'Enter'.
668eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  PressEnterAndWaitForNavigation();
669eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // 'Enter' commits the query as it was typed. This creates a navigation entry
670eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // in the history.
671eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(ASCIIToUTF16("cattles"), omnibox()->GetText());
672eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
673eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  content::WebContents* active_tab =
674eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      browser()->tab_strip_model()->GetActiveWebContents();
675eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_TRUE(active_tab->GetController().CanGoBack());
676eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  content::WindowedNotificationObserver load_stop_observer(
677eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      content::NOTIFICATION_LOAD_STOP,
678eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      content::Source<content::NavigationController>(
679eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch          &active_tab->GetController()));
680eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  active_tab->GetController().GoBack();
681eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  load_stop_observer.Wait();
682eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
683eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(ASCIIToUTF16("flowers"), omnibox()->GetText());
684eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
685eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  active_tab = browser()->tab_strip_model()->GetActiveWebContents();
686eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_TRUE(active_tab->GetController().CanGoForward());
687eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  content::WindowedNotificationObserver load_stop_observer_2(
688eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      content::NOTIFICATION_LOAD_STOP,
689eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      content::Source<content::NavigationController>(
690eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch          &active_tab->GetController()));
691eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  active_tab->GetController().GoForward();
692eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  load_stop_observer_2.Wait();
693eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
694eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Commit the search by pressing 'Enter'.
695eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  FocusOmnibox();
696eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(ASCIIToUTF16("cattles"), omnibox()->GetText());
697eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  PressEnterAndWaitForNavigation();
698eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(ASCIIToUTF16("cattles"), omnibox()->GetText());
699eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}
700eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
701eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// Flaky on all bots since re-enabled in r208032, crbug.com/253092
702eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochIN_PROC_BROWSER_TEST_F(InstantExtendedTest, DISABLED_NavigateBackToNTP) {
703eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ASSERT_NO_FATAL_FAILURE(SetupInstant(browser()));
7045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  FocusOmnibox();
705eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
706eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Open a new tab page.
707eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ui_test_utils::NavigateToURLWithDisposition(
708eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      browser(),
709eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      GURL(chrome::kChromeUINewTabURL),
710eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      NEW_FOREGROUND_TAB,
7115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      ui_test_utils::BROWSER_TEST_WAIT_FOR_TAB |
7125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION);
713eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(2, browser()->tab_strip_model()->count());
714eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
715eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  content::WindowedNotificationObserver observer(
716eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      chrome::NOTIFICATION_INSTANT_TAB_SUPPORT_DETERMINED,
717eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      content::NotificationService::AllSources());
718eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  SetOmniboxText("flowers");
719eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  PressEnterAndWaitForNavigation();
720eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  observer.Wait();
721eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
722eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(ASCIIToUTF16("flowers"), omnibox()->GetText());
723eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
724eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Typing in the new search query in omnibox.
725eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Commit the search by pressing 'Enter'.
726eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  SetOmniboxText("cattles");
727eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  PressEnterAndWaitForNavigation();
728eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
729eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // 'Enter' commits the query as it was typed. This creates a navigation entry
730eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // in the history.
731eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(ASCIIToUTF16("cattles"), omnibox()->GetText());
732eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
733eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Navigate back to "flowers" search result page.
734eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  content::WebContents* active_tab =
735eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      browser()->tab_strip_model()->GetActiveWebContents();
736eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_TRUE(active_tab->GetController().CanGoBack());
737eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  content::WindowedNotificationObserver load_stop_observer(
738eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      content::NOTIFICATION_LOAD_STOP,
739eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      content::Source<content::NavigationController>(
740eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch          &active_tab->GetController()));
741eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  active_tab->GetController().GoBack();
742eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  load_stop_observer.Wait();
743eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
744eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(ASCIIToUTF16("flowers"), omnibox()->GetText());
745eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
746eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Navigate back to NTP.
747eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  active_tab = browser()->tab_strip_model()->GetActiveWebContents();
748eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_TRUE(active_tab->GetController().CanGoBack());
749eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  content::WindowedNotificationObserver load_stop_observer_2(
750eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      content::NOTIFICATION_LOAD_STOP,
751eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      content::Source<content::NavigationController>(
752eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch          &active_tab->GetController()));
753eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  active_tab->GetController().GoBack();
754eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  load_stop_observer_2.Wait();
755eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
756eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  active_tab = browser()->tab_strip_model()->GetActiveWebContents();
757eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_TRUE(chrome::IsInstantNTP(active_tab));
758eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}
759eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
760a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)// Flaky: crbug.com/267119
761eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochIN_PROC_BROWSER_TEST_F(InstantExtendedTest,
762a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)                       DISABLED_DispatchMVChangeEventWhileNavigatingBackToNTP) {
763eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Setup Instant.
764eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ASSERT_NO_FATAL_FAILURE(SetupInstant(browser()));
7655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  FocusOmnibox();
766eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
7675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // Open new tab.
768eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ui_test_utils::NavigateToURLWithDisposition(
769eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      browser(),
770eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      GURL(chrome::kChromeUINewTabURL),
771eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      NEW_FOREGROUND_TAB,
7725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      ui_test_utils::BROWSER_TEST_WAIT_FOR_TAB |
7735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION);
774eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
775eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  content::WebContents* active_tab =
776eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      browser()->tab_strip_model()->GetActiveWebContents();
777eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_TRUE(UpdateSearchState(active_tab));
778eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(1, on_most_visited_change_calls_);
779eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
780eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  content::WindowedNotificationObserver observer(
781eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      content::NOTIFICATION_LOAD_STOP,
782eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      content::NotificationService::AllSources());
783eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Set the text and press enter to navigate from NTP.
784eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  SetOmniboxText("Pen");
785eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  PressEnterAndWaitForNavigation();
786eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(ASCIIToUTF16("Pen"), omnibox()->GetText());
787eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  observer.Wait();
788eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
789eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Navigate back to NTP.
790eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  content::WindowedNotificationObserver back_observer(
791eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      content::NOTIFICATION_LOAD_STOP,
792eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      content::NotificationService::AllSources());
793eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  active_tab = browser()->tab_strip_model()->GetActiveWebContents();
794eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_TRUE(active_tab->GetController().CanGoBack());
795eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  active_tab->GetController().GoBack();
796eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  back_observer.Wait();
797eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
798eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Verify that onmostvisitedchange event is dispatched when we navigate from
799eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // SRP to NTP.
800eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  active_tab = browser()->tab_strip_model()->GetActiveWebContents();
801eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_TRUE(UpdateSearchState(active_tab));
802eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(1, on_most_visited_change_calls_);
8037d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}
8049ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch
805424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(InstantExtendedPrefetchTest, SetPrefetchQuery) {
806424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  ASSERT_NO_FATAL_FAILURE(SetupInstant(browser()));
8075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  FocusOmnibox();
808424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
809424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  content::WindowedNotificationObserver new_tab_observer(
810424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)      content::NOTIFICATION_NAV_ENTRY_COMMITTED,
811424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)      content::NotificationService::AllSources());
812424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  ui_test_utils::NavigateToURLWithDisposition(
813424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)      browser(),
814424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)      GURL(chrome::kChromeUINewTabURL),
815424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)      CURRENT_TAB,
816424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)      ui_test_utils::BROWSER_TEST_NONE);
817424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  new_tab_observer.Wait();
818424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
819424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  omnibox()->model()->autocomplete_controller()->search_provider()->
820424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)      kMinimumTimeBetweenSuggestQueriesMs = 0;
821424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
822a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // Set the fake response for search query.
823a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  fake_factory()->SetFakeResponse(instant_url().Resolve("#q=flowers"),
824a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                                  "",
825a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                                  net::HTTP_OK,
826a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                                  net::URLRequestStatus::SUCCESS);
827a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
828a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // Navigate to a search results page.
829a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  content::WindowedNotificationObserver observer(
830a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      chrome::NOTIFICATION_INSTANT_TAB_SUPPORT_DETERMINED,
831a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      content::NotificationService::AllSources());
832a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  SetOmniboxText("flowers");
833a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  PressEnterAndWaitForNavigation();
834a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  observer.Wait();
835a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
836424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  // Set the fake response for suggest request. Response has prefetch details.
8371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Ensure that the page received the suggest response, then add another
8381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // keystroke to allow the asynchronously-received inline autocomplete
8391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // suggestion to actually be inlined (which in turn triggers it to prefetch).
840424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  fake_factory()->SetFakeResponse(
8411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      instant_url().Resolve("#q=pup"),
8421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      "[\"pup\",[\"puppy\", \"puppies\"],[],[],"
843424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)      "{\"google:clientdata\":{\"phi\": 0},"
844424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)          "\"google:suggesttype\":[\"QUERY\", \"QUERY\"],"
845424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)          "\"google:suggestrelevance\":[1400, 9]}]",
846f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      net::HTTP_OK,
847f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      net::URLRequestStatus::SUCCESS);
848424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
8491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  SetOmniboxText("pup");
850424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  while (!omnibox()->model()->autocomplete_controller()->done()) {
851424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    content::WindowedNotificationObserver ready_observer(
852424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)        chrome::NOTIFICATION_AUTOCOMPLETE_CONTROLLER_RESULT_READY,
853424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)        content::Source<AutocompleteController>(
854424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)            omnibox()->model()->autocomplete_controller()));
855424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    ready_observer.Wait();
856424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  }
8571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  SetOmniboxText("pupp");
858424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
859424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  ASSERT_EQ(3, CountSearchProviderSuggestions());
860424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  content::WebContents* active_tab =
861424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)      browser()->tab_strip_model()->GetActiveWebContents();
862424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  ASSERT_TRUE(UpdateSearchState(active_tab));
863424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  ASSERT_TRUE(SearchProvider::ShouldPrefetch(*(
864424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)      omnibox()->model()->result().default_match())));
865424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  ASSERT_EQ("puppy", prefetch_query_value_);
866424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)}
867424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
868424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(InstantExtendedPrefetchTest, ClearPrefetchedResults) {
869424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  ASSERT_NO_FATAL_FAILURE(SetupInstant(browser()));
8705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  FocusOmnibox();
871424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
872424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  content::WindowedNotificationObserver new_tab_observer(
873424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)      content::NOTIFICATION_NAV_ENTRY_COMMITTED,
874424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)      content::NotificationService::AllSources());
875424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  ui_test_utils::NavigateToURLWithDisposition(
876424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)      browser(),
877424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)      GURL(chrome::kChromeUINewTabURL),
878424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)      CURRENT_TAB,
879424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)      ui_test_utils::BROWSER_TEST_NONE);
880424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  new_tab_observer.Wait();
881424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
882424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  omnibox()->model()->autocomplete_controller()->search_provider()->
883424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)      kMinimumTimeBetweenSuggestQueriesMs = 0;
884424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
885a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // Set the fake response for search query.
886a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  fake_factory()->SetFakeResponse(instant_url().Resolve("#q=flowers"),
887a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                                  "",
888a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                                  net::HTTP_OK,
889a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                                  net::URLRequestStatus::SUCCESS);
890a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
891a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // Navigate to a search results page.
892a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  content::WindowedNotificationObserver observer(
893a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      chrome::NOTIFICATION_INSTANT_TAB_SUPPORT_DETERMINED,
894a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      content::NotificationService::AllSources());
895a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  SetOmniboxText("flowers");
896a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  PressEnterAndWaitForNavigation();
897a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  observer.Wait();
898a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
899424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  // Set the fake response for suggest request. Response has no prefetch
900424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  // details. Ensure that the page received a blank query to clear the
901424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  // prefetched results.
902424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  fake_factory()->SetFakeResponse(
9034e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      instant_url().Resolve("#q=dogs"),
904424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)      "[\"dogs\",[\"https://dogs.com\"],[],[],"
905424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)          "{\"google:suggesttype\":[\"NAVIGATION\"],"
906424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)          "\"google:suggestrelevance\":[2]}]",
907f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      net::HTTP_OK,
908f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      net::URLRequestStatus::SUCCESS);
909424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
910424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  SetOmniboxText("dogs");
911424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  while (!omnibox()->model()->autocomplete_controller()->done()) {
912424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    content::WindowedNotificationObserver ready_observer(
913424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)        chrome::NOTIFICATION_AUTOCOMPLETE_CONTROLLER_RESULT_READY,
914424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)        content::Source<AutocompleteController>(
915424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)            omnibox()->model()->autocomplete_controller()));
916424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    ready_observer.Wait();
917424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  }
918424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
919424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  ASSERT_EQ(2, CountSearchProviderSuggestions());
920424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  ASSERT_FALSE(SearchProvider::ShouldPrefetch(*(
921424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)      omnibox()->model()->result().default_match())));
922424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  content::WebContents* active_tab =
923424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)      browser()->tab_strip_model()->GetActiveWebContents();
924424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  ASSERT_TRUE(UpdateSearchState(active_tab));
925424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  ASSERT_EQ("", prefetch_query_value_);
926424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)}
927d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
928d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(InstantExtendedTest, ShowURL) {
929d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  ASSERT_NO_FATAL_FAILURE(SetupInstant(browser()));
930d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  FocusOmnibox();
931d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
932d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  // Create an observer to wait for the instant tab to support Instant.
933d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  content::WindowedNotificationObserver observer(
934d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)      chrome::NOTIFICATION_INSTANT_TAB_SUPPORT_DETERMINED,
935d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)      content::NotificationService::AllSources());
936d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
937d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  // Do a search and commit it.  The omnibox should show the search terms.
938d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  SetOmniboxText("foo");
939d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  EXPECT_EQ(ASCIIToUTF16("foo"), omnibox()->GetText());
940d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  browser()->window()->GetLocationBar()->AcceptInput();
941d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  observer.Wait();
942d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  EXPECT_FALSE(omnibox()->model()->user_input_in_progress());
943d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  EXPECT_TRUE(browser()->toolbar_model()->WouldPerformSearchTermReplacement(
944d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)      false));
945d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  EXPECT_EQ(ASCIIToUTF16("foo"), omnibox()->GetText());
946d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
947d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  // Calling ShowURL() should disable search term replacement and show the URL.
948d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  omnibox()->ShowURL();
949d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  EXPECT_FALSE(browser()->toolbar_model()->WouldPerformSearchTermReplacement(
950d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)      false));
951d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  // Don't bother looking for a specific URL; ensuring we're no longer showing
952d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  // the search terms is sufficient.
953d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  EXPECT_NE(ASCIIToUTF16("foo"), omnibox()->GetText());
954d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)}
95568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
95668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// Check that clicking on a result sends the correct referrer.
95768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(InstantExtendedTest, Referrer) {
95868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  ASSERT_TRUE(test_server()->Start());
95968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  GURL result_url =
96068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      test_server()->GetURL("files/referrer_policy/referrer-policy-log.html");
96168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  ASSERT_NO_FATAL_FAILURE(SetupInstant(browser()));
9625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  FocusOmnibox();
96368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
96468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  // Type a query and press enter to get results.
96568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  SetOmniboxText("query");
96646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  PressEnterAndWaitForFrameLoad();
96768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
96868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  // Simulate going to a result.
96968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  content::WebContents* contents =
97068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      browser()->tab_strip_model()->GetActiveWebContents();
97168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  std::ostringstream stream;
97268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  stream << "var link = document.createElement('a');";
97368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  stream << "link.href = \"" << result_url.spec() << "\";";
97468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  stream << "document.body.appendChild(link);";
97568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  stream << "link.click();";
97668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  EXPECT_TRUE(content::ExecuteScript(contents, stream.str()));
97768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
97868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  content::WaitForLoadStop(contents);
97968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  std::string expected_title =
98068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      "Referrer is " + instant_url().GetWithEmptyPath().spec();
98168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  EXPECT_EQ(ASCIIToUTF16(expected_title), contents->GetTitle());
98268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)}
983