instant_extended_interactive_uitest.cc revision 6e8cce623b6e4fe0c9e4af605d675dd9d0338c38
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/autocomplete/search_provider.h"
20c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/bookmarks/bookmark_model_factory.h"
217dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/chrome_notification_types.h"
22c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/extensions/extension_browsertest.h"
23c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/extensions/extension_service.h"
24c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/favicon/favicon_tab_helper.h"
25c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/history/history_db_task.h"
26c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/history/history_service.h"
27c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/history/history_service_factory.h"
28c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/history/history_types.h"
29c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/history/top_sites.h"
30c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/profiles/profile.h"
31c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/search/instant_service.h"
32c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/search/instant_service_factory.h"
33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/search/search.h"
34c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/search_engines/template_url_service_factory.h"
35868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "chrome/browser/task_manager/task_manager.h"
36868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "chrome/browser/task_manager/task_manager_browsertest_util.h"
37c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/themes/theme_service.h"
38c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/themes/theme_service_factory.h"
39c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/ui/browser_list.h"
40c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/ui/browser_tabstrip.h"
41c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/ui/omnibox/omnibox_view.h"
42c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/ui/search/instant_tab.h"
43c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/ui/search/instant_test_utils.h"
44c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/ui/search/search_tab_helper.h"
45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/ui/tabs/tab_strip_model.h"
46c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/ui/webui/theme_source.h"
47c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/common/chrome_switches.h"
48b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)#include "chrome/common/instant_types.h"
49c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/common/pref_names.h"
50c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/common/url_constants.h"
51c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/test/base/in_process_browser_test.h"
52c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/test/base/interactive_test_utils.h"
53c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/test/base/ui_test_utils.h"
54cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "components/bookmarks/browser/bookmark_utils.h"
55cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "components/bookmarks/test/bookmark_test_helpers.h"
56f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "components/google/core/browser/google_url_tracker.h"
57f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "components/history/core/common/thumbnail_score.h"
585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "components/omnibox/autocomplete_match.h"
595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "components/omnibox/autocomplete_provider.h"
606e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "components/omnibox/autocomplete_result.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"
74868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "grit/generated_resources.h"
75eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "net/base/network_change_notifier.h"
760f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#include "net/http/http_status_code.h"
77424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#include "net/url_request/test_url_fetcher_factory.h"
78424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#include "net/url_request/url_fetcher_impl.h"
79f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "net/url_request/url_request_status.h"
80868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "testing/gmock/include/gmock/gmock.h"
81c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "third_party/skia/include/core/SkBitmap.h"
82868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)using base::ASCIIToUTF16;
84868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)using testing::HasSubstr;
85c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
86c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace {
87c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
88c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Task used to make sure history has finished processing a request. Intended
89c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// for use with BlockUntilHistoryProcessesPendingRequests.
90c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class QuittingHistoryDBTask : public history::HistoryDBTask {
91c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public:
92c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  QuittingHistoryDBTask() {}
93c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
94c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  virtual bool RunOnDBThread(history::HistoryBackend* backend,
95c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                             history::HistoryDatabase* db) OVERRIDE {
96c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    return true;
97c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
98c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
99c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  virtual void DoneRunOnMainThread() OVERRIDE {
100b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    base::MessageLoop::current()->Quit();
101c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
102c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
103c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) private:
104c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  virtual ~QuittingHistoryDBTask() {}
105c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
106c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(QuittingHistoryDBTask);
107c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)};
108c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
109eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochclass FakeNetworkChangeNotifier : public net::NetworkChangeNotifier {
110eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch public:
111eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  FakeNetworkChangeNotifier() : connection_type_(CONNECTION_NONE) {}
112eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
113eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  virtual ConnectionType GetCurrentConnectionType() const OVERRIDE {
114eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    return connection_type_;
115eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  }
116eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
117eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  void SetConnectionType(ConnectionType type) {
118eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    connection_type_ = type;
119eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    NotifyObserversOfNetworkChange(type);
120eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    base::RunLoop().RunUntilIdle();
121eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  }
122eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
123eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  virtual ~FakeNetworkChangeNotifier() {}
124eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
125eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch private:
126eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ConnectionType connection_type_;
127eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  DISALLOW_COPY_AND_ASSIGN(FakeNetworkChangeNotifier);
128eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch};
129c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}  // namespace
130c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
131c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class InstantExtendedTest : public InProcessBrowserTest,
132c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                            public InstantTestBase {
133c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public:
134c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  InstantExtendedTest()
135c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      : on_most_visited_change_calls_(0),
136c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        most_visited_items_count_(0),
137c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        first_most_visited_item_id_(0),
138c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        on_native_suggestions_calls_(0),
139c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        on_change_calls_(0),
140b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)        submit_count_(0),
141868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        on_esc_key_press_event_calls_(0),
142868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        on_focus_changed_calls_(0),
143868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        is_focused_(false),
144868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        on_toggle_voice_search_calls_(0) {
145c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
146c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) protected:
147c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  virtual void SetUpInProcessBrowserTestFixture() OVERRIDE {
148f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    chrome::EnableQueryExtractionForTesting();
149c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ASSERT_TRUE(https_test_server().Start());
150c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    GURL instant_url = https_test_server().GetURL(
151c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        "files/instant_extended.html?strk=1&");
1525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    GURL ntp_url = https_test_server().GetURL(
1535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        "files/instant_extended_ntp.html?strk=1&");
1545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    InstantTestBase::Init(instant_url, ntp_url, false);
155c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
156c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
157a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)  int64 GetHistogramCount(const char* name) {
158a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)    base::HistogramBase* histogram =
159a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)        base::StatisticsRecorder::FindHistogram(name);
160a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)    if (!histogram) {
161a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)      // If no histogram is found, it's possible that no values have been
162a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)      // recorded yet. Assume that the value is zero.
163a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)      return 0;
164a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)    }
165a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)    return histogram->SnapshotSamples()->TotalCount();
166a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)  }
167a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)
168c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  bool UpdateSearchState(content::WebContents* contents) WARN_UNUSED_RESULT {
169c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    return GetIntFromJS(contents, "onMostVisitedChangedCalls",
170c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                        &on_most_visited_change_calls_) &&
171c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)           GetIntFromJS(contents, "mostVisitedItemsCount",
172c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                        &most_visited_items_count_) &&
173c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)           GetIntFromJS(contents, "firstMostVisitedItemId",
174c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                        &first_most_visited_item_id_) &&
175c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)           GetIntFromJS(contents, "onNativeSuggestionsCalls",
176c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                        &on_native_suggestions_calls_) &&
177c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)           GetIntFromJS(contents, "onChangeCalls",
178c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                        &on_change_calls_) &&
179c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)           GetIntFromJS(contents, "submitCount",
180c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                        &submit_count_) &&
181c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)           GetStringFromJS(contents, "apiHandle.value",
182b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)                           &query_value_) &&
183b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)           GetIntFromJS(contents, "onEscKeyPressedCalls",
184868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)                        &on_esc_key_press_event_calls_) &&
185868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)           GetIntFromJS(contents, "onFocusChangedCalls",
186868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)                       &on_focus_changed_calls_) &&
187868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)           GetBoolFromJS(contents, "isFocused",
188868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)                         &is_focused_) &&
189868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)           GetIntFromJS(contents, "onToggleVoiceSearchCalls",
190424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)                        &on_toggle_voice_search_calls_) &&
191424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)           GetStringFromJS(contents, "prefetchQuery", &prefetch_query_value_);
192424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
193c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
194c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
195c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  TemplateURL* GetDefaultSearchProviderTemplateURL() {
196c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    TemplateURLService* template_url_service =
197c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        TemplateURLServiceFactory::GetForProfile(browser()->profile());
198c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    if (template_url_service)
199c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      return template_url_service->GetDefaultSearchProvider();
200c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    return NULL;
201c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
202c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
2035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  bool AddSearchToHistory(base::string16 term, int visit_count) {
204c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    TemplateURL* template_url = GetDefaultSearchProviderTemplateURL();
205c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    if (!template_url)
206c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      return false;
207c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
208c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    HistoryService* history = HistoryServiceFactory::GetForProfile(
209c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        browser()->profile(), Profile::EXPLICIT_ACCESS);
210c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    GURL search(template_url->url_ref().ReplaceSearchTerms(
211f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)        TemplateURLRef::SearchTermsArgs(term),
212f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)        TemplateURLServiceFactory::GetForProfile(
213f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)            browser()->profile())->search_terms_data()));
214c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    history->AddPageWithDetails(
215a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        search, base::string16(), visit_count, visit_count,
216c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        base::Time::Now(), false, history::SOURCE_BROWSED);
217c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    history->SetKeywordSearchTermsForURL(
218c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        search, template_url->id(), term);
219c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    return true;
220c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
221c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
222c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  void BlockUntilHistoryProcessesPendingRequests() {
223c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    HistoryService* history = HistoryServiceFactory::GetForProfile(
224c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        browser()->profile(), Profile::EXPLICIT_ACCESS);
225c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    DCHECK(history);
226b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    DCHECK(base::MessageLoop::current());
227c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
228116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    base::CancelableTaskTracker tracker;
2295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    history->ScheduleDBTask(
2305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        scoped_ptr<history::HistoryDBTask>(
2315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            new QuittingHistoryDBTask()),
2325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        &tracker);
233b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    base::MessageLoop::current()->Run();
234c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
235c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
236c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  int CountSearchProviderSuggestions() {
237c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    return omnibox()->model()->autocomplete_controller()->search_provider()->
238c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        matches().size();
239c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
240c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
241c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  int on_most_visited_change_calls_;
242c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  int most_visited_items_count_;
243c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  int first_most_visited_item_id_;
244c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  int on_native_suggestions_calls_;
245c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  int on_change_calls_;
246c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  int submit_count_;
247b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  int on_esc_key_press_event_calls_;
248c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  std::string query_value_;
249868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  int on_focus_changed_calls_;
250868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  bool is_focused_;
251868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  int on_toggle_voice_search_calls_;
252424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  std::string prefetch_query_value_;
253424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)};
254424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
255424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)class InstantExtendedPrefetchTest : public InstantExtendedTest {
256424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) public:
257424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  InstantExtendedPrefetchTest()
258424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)      : factory_(new net::URLFetcherImplFactory()),
259424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)        fake_factory_(new net::FakeURLFetcherFactory(factory_.get())) {
260424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  }
261424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
262424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  virtual void SetUpInProcessBrowserTestFixture() OVERRIDE {
263f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    chrome::EnableQueryExtractionForTesting();
264424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    ASSERT_TRUE(https_test_server().Start());
265424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    GURL instant_url = https_test_server().GetURL(
266424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)        "files/instant_extended.html?strk=1&");
2675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    GURL ntp_url = https_test_server().GetURL(
2685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        "files/instant_extended_ntp.html?strk=1&");
2695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    InstantTestBase::Init(instant_url, ntp_url, true);
270424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  }
271424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
272a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE {
273a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    command_line->AppendSwitchASCII(
274a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        switches::kForceFieldTrials,
2755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        "EmbeddedSearch/Group11 prefetch_results_srp:1/");
276a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  }
277a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
278424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  net::FakeURLFetcherFactory* fake_factory() { return fake_factory_.get(); }
279424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
280424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) private:
281424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  // Used to instantiate FakeURLFetcherFactory.
282424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  scoped_ptr<net::URLFetcherImplFactory> factory_;
283424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
284424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  // Used to mock default search provider suggest response.
285424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  scoped_ptr<net::FakeURLFetcherFactory> fake_factory_;
286424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
287424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(InstantExtendedPrefetchTest);
288c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)};
289c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
290eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochclass InstantExtendedNetworkTest : public InstantExtendedTest {
291eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch protected:
292eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  virtual void SetUpOnMainThread() OVERRIDE {
293eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    disable_for_test_.reset(new net::NetworkChangeNotifier::DisableForTest);
294eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    fake_network_change_notifier_.reset(new FakeNetworkChangeNotifier);
295eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    InstantExtendedTest::SetUpOnMainThread();
296eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  }
297eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
2985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual void TearDownOnMainThread() OVERRIDE {
2995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    InstantExtendedTest::TearDownOnMainThread();
300eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    fake_network_change_notifier_.reset();
301eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    disable_for_test_.reset();
302eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  }
303eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
304eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  void SetConnectionType(net::NetworkChangeNotifier::ConnectionType type) {
305eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    fake_network_change_notifier_->SetConnectionType(type);
306eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  }
307eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
308eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch private:
309eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  scoped_ptr<net::NetworkChangeNotifier::DisableForTest> disable_for_test_;
310eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  scoped_ptr<FakeNetworkChangeNotifier> fake_network_change_notifier_;
311eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch};
312eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
313c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Test class used to verify chrome-search: scheme and access policy from the
314c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Instant overlay.  This is a subclass of |ExtensionBrowserTest| because it
315c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// loads a theme that provides a background image.
316c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class InstantPolicyTest : public ExtensionBrowserTest, public InstantTestBase {
317c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public:
318c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  InstantPolicyTest() {}
319c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
320c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) protected:
321c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  virtual void SetUpInProcessBrowserTestFixture() OVERRIDE {
322c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ASSERT_TRUE(https_test_server().Start());
323c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    GURL instant_url = https_test_server().GetURL(
324c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        "files/instant_extended.html?strk=1&");
3255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    GURL ntp_url = https_test_server().GetURL(
3265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        "files/instant_extended_ntp.html?strk=1&");
3275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    InstantTestBase::Init(instant_url, ntp_url, false);
328c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
329c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
330c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  void InstallThemeSource() {
331c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ThemeSource* theme = new ThemeSource(profile());
332c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    content::URLDataSource::Add(profile(), theme);
333c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
334c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
335c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  void InstallThemeAndVerify(const std::string& theme_dir,
336c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                             const std::string& theme_name) {
3373551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    const extensions::Extension* theme =
3383551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)        ThemeServiceFactory::GetThemeForProfile(
3393551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)            ExtensionBrowserTest::browser()->profile());
3403551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    // If there is already a theme installed, the current theme should be
3413551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    // disabled and the new one installed + enabled.
3423551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    int expected_change = theme ? 0 : 1;
3433551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
344c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    const base::FilePath theme_path = test_data_dir_.AppendASCII(theme_dir);
345c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ASSERT_TRUE(InstallExtensionWithUIAutoConfirm(
3463551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)        theme_path, expected_change, ExtensionBrowserTest::browser()));
3473551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    const extensions::Extension* new_theme =
348c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        ThemeServiceFactory::GetThemeForProfile(
349c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            ExtensionBrowserTest::browser()->profile());
3503551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    ASSERT_NE(static_cast<extensions::Extension*>(NULL), new_theme);
3513551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    ASSERT_EQ(new_theme->name(), theme_name);
352c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
353c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
354c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) private:
355c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(InstantPolicyTest);
356c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)};
357c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
358868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(InstantExtendedTest, SearchReusesInstantTab) {
359868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  ASSERT_NO_FATAL_FAILURE(SetupInstant(browser()));
3605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  FocusOmnibox();
361eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
362868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  content::WindowedNotificationObserver observer(
363868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      chrome::NOTIFICATION_INSTANT_TAB_SUPPORT_DETERMINED,
364868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      content::NotificationService::AllSources());
365868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  SetOmniboxText("flowers");
36646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  PressEnterAndWaitForFrameLoad();
367868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  observer.Wait();
368868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
369868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  // Just did a regular search.
370eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  content::WebContents* active_tab =
371eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      browser()->tab_strip_model()->GetActiveWebContents();
372eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ASSERT_THAT(active_tab->GetURL().spec(), HasSubstr("q=flowers"));
373eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ASSERT_TRUE(UpdateSearchState(active_tab));
374868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  ASSERT_EQ(0, submit_count_);
375868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
376868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  SetOmniboxText("puppies");
377eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  PressEnterAndWaitForNavigation();
378868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
379868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  // Should have reused the tab and sent an onsubmit message.
380eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  active_tab = browser()->tab_strip_model()->GetActiveWebContents();
381eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ASSERT_THAT(active_tab->GetURL().spec(), HasSubstr("q=puppies"));
382eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ASSERT_TRUE(UpdateSearchState(active_tab));
383868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  EXPECT_EQ(1, submit_count_);
384868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)}
385868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
386868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(InstantExtendedTest,
387868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)                       SearchDoesntReuseInstantTabWithoutSupport) {
388868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  ASSERT_NO_FATAL_FAILURE(SetupInstant(browser()));
3895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  FocusOmnibox();
390868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
391868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  // Don't wait for the navigation to complete.
392868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  SetOmniboxText("flowers");
393868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  browser()->window()->GetLocationBar()->AcceptInput();
394868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
395868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  SetOmniboxText("puppies");
396868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  browser()->window()->GetLocationBar()->AcceptInput();
397868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
398868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  // Should not have reused the tab.
399868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  ASSERT_THAT(
400868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      browser()->tab_strip_model()->GetActiveWebContents()->GetURL().spec(),
401868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      HasSubstr("q=puppies"));
402868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)}
403868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
404868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(InstantExtendedTest,
405868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)                       TypedSearchURLDoesntReuseInstantTab) {
406868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  ASSERT_NO_FATAL_FAILURE(SetupInstant(browser()));
4075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  FocusOmnibox();
408eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
409868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  // Create an observer to wait for the instant tab to support Instant.
410eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  content::WindowedNotificationObserver observer_1(
411868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      chrome::NOTIFICATION_INSTANT_TAB_SUPPORT_DETERMINED,
412868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      content::NotificationService::AllSources());
413868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  SetOmniboxText("flowers");
41446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  PressEnterAndWaitForFrameLoad();
415eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  observer_1.Wait();
416868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
417868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  // Just did a regular search.
418eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  content::WebContents* active_tab =
419eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      browser()->tab_strip_model()->GetActiveWebContents();
420eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ASSERT_THAT(active_tab->GetURL().spec(), HasSubstr("q=flowers"));
421eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ASSERT_TRUE(UpdateSearchState(active_tab));
422868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  ASSERT_EQ(0, submit_count_);
423868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
424868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  // Typed in a search URL "by hand".
425eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  content::WindowedNotificationObserver observer_2(
426eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      chrome::NOTIFICATION_INSTANT_TAB_SUPPORT_DETERMINED,
427eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      content::NotificationService::AllSources());
4284e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  SetOmniboxText(instant_url().Resolve("#q=puppies").spec());
429eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  PressEnterAndWaitForNavigation();
430eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  observer_2.Wait();
431868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
432868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  // Should not have reused the tab.
433eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  active_tab = browser()->tab_strip_model()->GetActiveWebContents();
434eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ASSERT_THAT(active_tab->GetURL().spec(), HasSubstr("q=puppies"));
435868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)}
4365e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)
4375e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(InstantExtendedTest, OmniboxMarginSetForSearchURLs) {
4385e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)  ASSERT_NO_FATAL_FAILURE(SetupInstant(browser()));
4395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  FocusOmnibox();
440eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
4415e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)  // Create an observer to wait for the instant tab to support Instant.
4425e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)  content::WindowedNotificationObserver observer(
4435e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)      chrome::NOTIFICATION_INSTANT_TAB_SUPPORT_DETERMINED,
4445e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)      content::NotificationService::AllSources());
4455e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)
4465e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)  SetOmniboxText("flowers");
4475e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)  browser()->window()->GetLocationBar()->AcceptInput();
4485e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)  observer.Wait();
4495e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)
4505e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)  const std::string& url =
4515e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)      browser()->tab_strip_model()->GetActiveWebContents()->GetURL().spec();
4525e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)  // Make sure we actually used search_url, not instant_url.
4535e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)  ASSERT_THAT(url, HasSubstr("&is_search"));
4545e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)  EXPECT_THAT(url, HasSubstr("&es_sm="));
4555e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)}
4565e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)
4577d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// Test to verify that switching tabs should not dispatch onmostvisitedchanged
4587d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// events.
4597d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(InstantExtendedTest, NoMostVisitedChangedOnTabSwitch) {
4607d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  // Initialize Instant.
4617d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  ASSERT_NO_FATAL_FAILURE(SetupInstant(browser()));
4627d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
4635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // Open new tab.
4647d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  ui_test_utils::NavigateToURLWithDisposition(
4657d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      browser(),
4667d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      GURL(chrome::kChromeUINewTabURL),
4677d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      NEW_FOREGROUND_TAB,
4685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      ui_test_utils::BROWSER_TEST_WAIT_FOR_TAB |
4695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION);
4707d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  EXPECT_EQ(2, browser()->tab_strip_model()->count());
4717d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
4727d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  // Make sure new tab received the onmostvisitedchanged event once.
4737d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  content::WebContents* active_tab =
4747d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      browser()->tab_strip_model()->GetActiveWebContents();
4757d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  EXPECT_TRUE(UpdateSearchState(active_tab));
476eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(1, on_most_visited_change_calls_);
4777d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
4787d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  // Activate the previous tab.
4797d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  browser()->tab_strip_model()->ActivateTabAt(0, false);
4807d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
4817d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  // Switch back to new tab.
4827d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  browser()->tab_strip_model()->ActivateTabAt(1, false);
4837d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
4847d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  // Confirm that new tab got no onmostvisitedchanged event.
4857d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  active_tab = browser()->tab_strip_model()->GetActiveWebContents();
4867d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  EXPECT_TRUE(UpdateSearchState(active_tab));
487eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(1, on_most_visited_change_calls_);
488eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}
489eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
490eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochIN_PROC_BROWSER_TEST_F(InstantPolicyTest, ThemeBackgroundAccess) {
491eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  InstallThemeSource();
492eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ASSERT_NO_FATAL_FAILURE(InstallThemeAndVerify("theme", "camo theme"));
493eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ASSERT_NO_FATAL_FAILURE(SetupInstant(browser()));
494eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
495eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // The "Instant" New Tab should have access to chrome-search: scheme but not
496eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // chrome: scheme.
497eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ui_test_utils::NavigateToURLWithDisposition(
498eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      browser(),
499eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      GURL(chrome::kChromeUINewTabURL),
500eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      NEW_FOREGROUND_TAB,
5015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      ui_test_utils::BROWSER_TEST_WAIT_FOR_TAB |
5025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION);
503eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
504eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  content::RenderViewHost* rvh =
505eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      browser()->tab_strip_model()->GetActiveWebContents()->GetRenderViewHost();
506eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
507eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  const std::string chrome_url("chrome://theme/IDR_THEME_NTP_BACKGROUND");
508eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  const std::string search_url(
509eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      "chrome-search://theme/IDR_THEME_NTP_BACKGROUND");
510eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  bool loaded = false;
511eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ASSERT_TRUE(LoadImage(rvh, chrome_url, &loaded));
512eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_FALSE(loaded) << chrome_url;
513eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ASSERT_TRUE(LoadImage(rvh, search_url, &loaded));
514eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_TRUE(loaded) << search_url;
515eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}
516eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
5175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Flaky on all bots. http://crbug.com/335297.
518eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochIN_PROC_BROWSER_TEST_F(InstantPolicyTest,
5195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                       DISABLED_NoThemeBackgroundChangeEventOnTabSwitch) {
520eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  InstallThemeSource();
521eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ASSERT_NO_FATAL_FAILURE(SetupInstant(browser()));
522eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
523eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Install a theme.
524eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ASSERT_NO_FATAL_FAILURE(InstallThemeAndVerify("theme", "camo theme"));
525eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(1, browser()->tab_strip_model()->count());
526eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
5275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // Open new tab.
528eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ui_test_utils::NavigateToURLWithDisposition(
529eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      browser(),
530eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      GURL(chrome::kChromeUINewTabURL),
531eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      NEW_FOREGROUND_TAB,
5325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      ui_test_utils::BROWSER_TEST_WAIT_FOR_TAB |
5335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION);
534eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(2, browser()->tab_strip_model()->count());
535eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
536eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  content::WebContents* active_tab =
537eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      browser()->tab_strip_model()->GetActiveWebContents();
538eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ASSERT_EQ(1, browser()->tab_strip_model()->active_index());
539eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  int on_theme_changed_calls = 0;
540eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_TRUE(GetIntFromJS(active_tab, "onThemeChangedCalls",
541eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                           &on_theme_changed_calls));
542eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(1, on_theme_changed_calls);
543eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
544eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Activate the previous tab.
545eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  browser()->tab_strip_model()->ActivateTabAt(0, false);
546eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ASSERT_EQ(0, browser()->tab_strip_model()->active_index());
547eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
548eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Switch back to new tab.
549eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  browser()->tab_strip_model()->ActivateTabAt(1, false);
550eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ASSERT_EQ(1, browser()->tab_strip_model()->active_index());
551eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
552eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Confirm that new tab got no onthemechanged event while switching tabs.
553eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  active_tab = browser()->tab_strip_model()->GetActiveWebContents();
554eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  on_theme_changed_calls = 0;
555eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_TRUE(GetIntFromJS(active_tab, "onThemeChangedCalls",
556eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                           &on_theme_changed_calls));
557eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(1, on_theme_changed_calls);
558eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}
559eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
5605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Flaky on all bots. http://crbug.com/335297, http://crbug.com/265971.
561eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochIN_PROC_BROWSER_TEST_F(InstantPolicyTest,
5625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                       DISABLED_SendThemeBackgroundChangedEvent) {
563eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  InstallThemeSource();
564eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ASSERT_NO_FATAL_FAILURE(SetupInstant(browser()));
565eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
566eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Install a theme.
567eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ASSERT_NO_FATAL_FAILURE(InstallThemeAndVerify("theme", "camo theme"));
568eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
5695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // Open new tab.
570eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ui_test_utils::NavigateToURLWithDisposition(
571eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      browser(),
572eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      GURL(chrome::kChromeUINewTabURL),
573eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      NEW_FOREGROUND_TAB,
5745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      ui_test_utils::BROWSER_TEST_WAIT_FOR_TAB |
5755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION);
576eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(2, browser()->tab_strip_model()->count());
577eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
578eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Make sure new tab received an onthemechanged event.
579eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  content::WebContents* active_tab =
580eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      browser()->tab_strip_model()->GetActiveWebContents();
581eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ASSERT_EQ(1, browser()->tab_strip_model()->active_index());
582eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  int on_theme_changed_calls = 0;
583eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_TRUE(GetIntFromJS(active_tab, "onThemeChangedCalls",
584eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                           &on_theme_changed_calls));
585eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(1, on_theme_changed_calls);
586eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
587eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Install a new theme.
588eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ASSERT_NO_FATAL_FAILURE(InstallThemeAndVerify("theme2", "snowflake theme"));
589eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
590eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Confirm that new tab is notified about the theme changed event.
591eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  on_theme_changed_calls = 0;
592eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_TRUE(GetIntFromJS(active_tab, "onThemeChangedCalls",
593eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                           &on_theme_changed_calls));
594eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(2, on_theme_changed_calls);
595eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}
596eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
597eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// Flaky on Mac and Linux Tests bots.
598eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#if defined(OS_MACOSX) || defined(OS_LINUX)
599eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#define MAYBE_UpdateSearchQueryOnBackNavigation DISABLED_UpdateSearchQueryOnBackNavigation
600eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#else
601eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#define MAYBE_UpdateSearchQueryOnBackNavigation UpdateSearchQueryOnBackNavigation
602eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#endif
603eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// Test to verify that the omnibox search query is updated on browser
604eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// back button press event.
605eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochIN_PROC_BROWSER_TEST_F(InstantExtendedTest,
606eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                       MAYBE_UpdateSearchQueryOnBackNavigation) {
607eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ASSERT_NO_FATAL_FAILURE(SetupInstant(browser()));
608eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
609eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Focus omnibox and confirm overlay isn't shown.
6105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  FocusOmnibox();
611eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
612eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Create an observer to wait for the instant tab to support Instant.
613eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  content::WindowedNotificationObserver observer(
614eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      chrome::NOTIFICATION_INSTANT_TAB_SUPPORT_DETERMINED,
615eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      content::NotificationService::AllSources());
616eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
617eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  SetOmniboxText("flowers");
618eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Commit the search by pressing 'Enter'.
619eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  PressEnterAndWaitForNavigation();
620eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  observer.Wait();
621eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
622eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(ASCIIToUTF16("flowers"), omnibox()->GetText());
623eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
624eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Typing in the new search query in omnibox.
625eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  SetOmniboxText("cattles");
626eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Commit the search by pressing 'Enter'.
627eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  PressEnterAndWaitForNavigation();
628eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // 'Enter' commits the query as it was typed. This creates a navigation entry
629eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // in the history.
630eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(ASCIIToUTF16("cattles"), omnibox()->GetText());
631eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
632eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  content::WebContents* active_tab =
633eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      browser()->tab_strip_model()->GetActiveWebContents();
634eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_TRUE(active_tab->GetController().CanGoBack());
635eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  content::WindowedNotificationObserver load_stop_observer(
636eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      content::NOTIFICATION_LOAD_STOP,
637eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      content::Source<content::NavigationController>(
638eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch          &active_tab->GetController()));
639eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  active_tab->GetController().GoBack();
640eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  load_stop_observer.Wait();
641eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
642eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(ASCIIToUTF16("flowers"), omnibox()->GetText());
643eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Commit the search by pressing 'Enter'.
644eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  FocusOmnibox();
645eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  PressEnterAndWaitForNavigation();
646eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(ASCIIToUTF16("flowers"), omnibox()->GetText());
647eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}
648eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
6493551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)// Flaky: crbug.com/253092.
650eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// Test to verify that the omnibox search query is updated on browser
651eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// forward button press events.
652eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochIN_PROC_BROWSER_TEST_F(InstantExtendedTest,
6533551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)                       DISABLED_UpdateSearchQueryOnForwardNavigation) {
654eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ASSERT_NO_FATAL_FAILURE(SetupInstant(browser()));
655eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
656eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Focus omnibox and confirm overlay isn't shown.
6575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  FocusOmnibox();
658eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
659eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Create an observer to wait for the instant tab to support Instant.
660eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  content::WindowedNotificationObserver observer(
661eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      chrome::NOTIFICATION_INSTANT_TAB_SUPPORT_DETERMINED,
662eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      content::NotificationService::AllSources());
663eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
664eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  SetOmniboxText("flowers");
665eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Commit the search by pressing 'Enter'.
666eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  PressEnterAndWaitForNavigation();
667eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  observer.Wait();
668eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
669eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(ASCIIToUTF16("flowers"), omnibox()->GetText());
670eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
671eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Typing in the new search query in omnibox.
672eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  SetOmniboxText("cattles");
673eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Commit the search by pressing 'Enter'.
674eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  PressEnterAndWaitForNavigation();
675eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // 'Enter' commits the query as it was typed. This creates a navigation entry
676eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // in the history.
677eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(ASCIIToUTF16("cattles"), omnibox()->GetText());
678eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
679eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  content::WebContents* active_tab =
680eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      browser()->tab_strip_model()->GetActiveWebContents();
681eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_TRUE(active_tab->GetController().CanGoBack());
682eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  content::WindowedNotificationObserver load_stop_observer(
683eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      content::NOTIFICATION_LOAD_STOP,
684eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      content::Source<content::NavigationController>(
685eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch          &active_tab->GetController()));
686eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  active_tab->GetController().GoBack();
687eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  load_stop_observer.Wait();
688eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
689eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(ASCIIToUTF16("flowers"), omnibox()->GetText());
690eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
691eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  active_tab = browser()->tab_strip_model()->GetActiveWebContents();
692eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_TRUE(active_tab->GetController().CanGoForward());
693eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  content::WindowedNotificationObserver load_stop_observer_2(
694eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      content::NOTIFICATION_LOAD_STOP,
695eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      content::Source<content::NavigationController>(
696eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch          &active_tab->GetController()));
697eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  active_tab->GetController().GoForward();
698eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  load_stop_observer_2.Wait();
699eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
700eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Commit the search by pressing 'Enter'.
701eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  FocusOmnibox();
702eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(ASCIIToUTF16("cattles"), omnibox()->GetText());
703eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  PressEnterAndWaitForNavigation();
704eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(ASCIIToUTF16("cattles"), omnibox()->GetText());
705eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}
706eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
707eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// Flaky on all bots since re-enabled in r208032, crbug.com/253092
708eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochIN_PROC_BROWSER_TEST_F(InstantExtendedTest, DISABLED_NavigateBackToNTP) {
709eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ASSERT_NO_FATAL_FAILURE(SetupInstant(browser()));
7105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  FocusOmnibox();
711eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
712eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Open a new tab page.
713eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ui_test_utils::NavigateToURLWithDisposition(
714eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      browser(),
715eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      GURL(chrome::kChromeUINewTabURL),
716eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      NEW_FOREGROUND_TAB,
7175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      ui_test_utils::BROWSER_TEST_WAIT_FOR_TAB |
7185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION);
719eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(2, browser()->tab_strip_model()->count());
720eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
721eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  content::WindowedNotificationObserver observer(
722eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      chrome::NOTIFICATION_INSTANT_TAB_SUPPORT_DETERMINED,
723eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      content::NotificationService::AllSources());
724eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  SetOmniboxText("flowers");
725eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  PressEnterAndWaitForNavigation();
726eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  observer.Wait();
727eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
728eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(ASCIIToUTF16("flowers"), omnibox()->GetText());
729eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
730eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Typing in the new search query in omnibox.
731eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Commit the search by pressing 'Enter'.
732eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  SetOmniboxText("cattles");
733eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  PressEnterAndWaitForNavigation();
734eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
735eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // 'Enter' commits the query as it was typed. This creates a navigation entry
736eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // in the history.
737eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(ASCIIToUTF16("cattles"), omnibox()->GetText());
738eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
739eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Navigate back to "flowers" search result page.
740eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  content::WebContents* active_tab =
741eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      browser()->tab_strip_model()->GetActiveWebContents();
742eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_TRUE(active_tab->GetController().CanGoBack());
743eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  content::WindowedNotificationObserver load_stop_observer(
744eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      content::NOTIFICATION_LOAD_STOP,
745eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      content::Source<content::NavigationController>(
746eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch          &active_tab->GetController()));
747eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  active_tab->GetController().GoBack();
748eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  load_stop_observer.Wait();
749eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
750eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(ASCIIToUTF16("flowers"), omnibox()->GetText());
751eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
752eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Navigate back to NTP.
753eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  active_tab = browser()->tab_strip_model()->GetActiveWebContents();
754eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_TRUE(active_tab->GetController().CanGoBack());
755eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  content::WindowedNotificationObserver load_stop_observer_2(
756eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      content::NOTIFICATION_LOAD_STOP,
757eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      content::Source<content::NavigationController>(
758eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch          &active_tab->GetController()));
759eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  active_tab->GetController().GoBack();
760eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  load_stop_observer_2.Wait();
761eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
762eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  active_tab = browser()->tab_strip_model()->GetActiveWebContents();
763eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_TRUE(chrome::IsInstantNTP(active_tab));
764eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}
765eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
766a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)// Flaky: crbug.com/267119
767eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochIN_PROC_BROWSER_TEST_F(InstantExtendedTest,
768a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)                       DISABLED_DispatchMVChangeEventWhileNavigatingBackToNTP) {
769eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Setup Instant.
770eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ASSERT_NO_FATAL_FAILURE(SetupInstant(browser()));
7715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  FocusOmnibox();
772eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
7735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // Open new tab.
774eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ui_test_utils::NavigateToURLWithDisposition(
775eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      browser(),
776eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      GURL(chrome::kChromeUINewTabURL),
777eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      NEW_FOREGROUND_TAB,
7785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      ui_test_utils::BROWSER_TEST_WAIT_FOR_TAB |
7795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION);
780eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
781eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  content::WebContents* active_tab =
782eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      browser()->tab_strip_model()->GetActiveWebContents();
783eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_TRUE(UpdateSearchState(active_tab));
784eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(1, on_most_visited_change_calls_);
785eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
786eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  content::WindowedNotificationObserver observer(
787eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      content::NOTIFICATION_LOAD_STOP,
788eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      content::NotificationService::AllSources());
789eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Set the text and press enter to navigate from NTP.
790eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  SetOmniboxText("Pen");
791eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  PressEnterAndWaitForNavigation();
792eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(ASCIIToUTF16("Pen"), omnibox()->GetText());
793eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  observer.Wait();
794eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
795eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Navigate back to NTP.
796eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  content::WindowedNotificationObserver back_observer(
797eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      content::NOTIFICATION_LOAD_STOP,
798eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      content::NotificationService::AllSources());
799eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  active_tab = browser()->tab_strip_model()->GetActiveWebContents();
800eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_TRUE(active_tab->GetController().CanGoBack());
801eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  active_tab->GetController().GoBack();
802eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  back_observer.Wait();
803eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
804eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Verify that onmostvisitedchange event is dispatched when we navigate from
805eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // SRP to NTP.
806eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  active_tab = browser()->tab_strip_model()->GetActiveWebContents();
807eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_TRUE(UpdateSearchState(active_tab));
808eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(1, on_most_visited_change_calls_);
8097d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}
8109ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch
811424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(InstantExtendedPrefetchTest, SetPrefetchQuery) {
812424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  ASSERT_NO_FATAL_FAILURE(SetupInstant(browser()));
8135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  FocusOmnibox();
814424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
815424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  content::WindowedNotificationObserver new_tab_observer(
816424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)      content::NOTIFICATION_NAV_ENTRY_COMMITTED,
817424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)      content::NotificationService::AllSources());
818424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  ui_test_utils::NavigateToURLWithDisposition(
819424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)      browser(),
820424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)      GURL(chrome::kChromeUINewTabURL),
821424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)      CURRENT_TAB,
822424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)      ui_test_utils::BROWSER_TEST_NONE);
823424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  new_tab_observer.Wait();
824424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
825424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  omnibox()->model()->autocomplete_controller()->search_provider()->
826424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)      kMinimumTimeBetweenSuggestQueriesMs = 0;
827424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
828a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // Set the fake response for search query.
829a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  fake_factory()->SetFakeResponse(instant_url().Resolve("#q=flowers"),
830a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                                  "",
831a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                                  net::HTTP_OK,
832a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                                  net::URLRequestStatus::SUCCESS);
833a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
834a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // Navigate to a search results page.
835a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  content::WindowedNotificationObserver observer(
836a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      chrome::NOTIFICATION_INSTANT_TAB_SUPPORT_DETERMINED,
837a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      content::NotificationService::AllSources());
838a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  SetOmniboxText("flowers");
839a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  PressEnterAndWaitForNavigation();
840a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  observer.Wait();
841a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
842424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  // Set the fake response for suggest request. Response has prefetch details.
843424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  // Ensure that the page received the prefetch query.
844424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  fake_factory()->SetFakeResponse(
8454e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      instant_url().Resolve("#q=pupp"),
846424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)      "[\"pupp\",[\"puppy\", \"puppies\"],[],[],"
847424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)      "{\"google:clientdata\":{\"phi\": 0},"
848424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)          "\"google:suggesttype\":[\"QUERY\", \"QUERY\"],"
849424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)          "\"google:suggestrelevance\":[1400, 9]}]",
850f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      net::HTTP_OK,
851f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      net::URLRequestStatus::SUCCESS);
852424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
853424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  SetOmniboxText("pupp");
854424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  while (!omnibox()->model()->autocomplete_controller()->done()) {
855424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    content::WindowedNotificationObserver ready_observer(
856424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)        chrome::NOTIFICATION_AUTOCOMPLETE_CONTROLLER_RESULT_READY,
857424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)        content::Source<AutocompleteController>(
858424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)            omnibox()->model()->autocomplete_controller()));
859424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    ready_observer.Wait();
860424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  }
861424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
862424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  ASSERT_EQ(3, CountSearchProviderSuggestions());
863424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  content::WebContents* active_tab =
864424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)      browser()->tab_strip_model()->GetActiveWebContents();
865424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  ASSERT_TRUE(UpdateSearchState(active_tab));
866424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  ASSERT_TRUE(SearchProvider::ShouldPrefetch(*(
867424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)      omnibox()->model()->result().default_match())));
868424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  ASSERT_EQ("puppy", prefetch_query_value_);
869424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)}
870424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
871424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(InstantExtendedPrefetchTest, ClearPrefetchedResults) {
872424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  ASSERT_NO_FATAL_FAILURE(SetupInstant(browser()));
8735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  FocusOmnibox();
874424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
875424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  content::WindowedNotificationObserver new_tab_observer(
876424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)      content::NOTIFICATION_NAV_ENTRY_COMMITTED,
877424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)      content::NotificationService::AllSources());
878424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  ui_test_utils::NavigateToURLWithDisposition(
879424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)      browser(),
880424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)      GURL(chrome::kChromeUINewTabURL),
881424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)      CURRENT_TAB,
882424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)      ui_test_utils::BROWSER_TEST_NONE);
883424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  new_tab_observer.Wait();
884424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
885424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  omnibox()->model()->autocomplete_controller()->search_provider()->
886424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)      kMinimumTimeBetweenSuggestQueriesMs = 0;
887424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
888a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // Set the fake response for search query.
889a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  fake_factory()->SetFakeResponse(instant_url().Resolve("#q=flowers"),
890a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                                  "",
891a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                                  net::HTTP_OK,
892a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                                  net::URLRequestStatus::SUCCESS);
893a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
894a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // Navigate to a search results page.
895a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  content::WindowedNotificationObserver observer(
896a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      chrome::NOTIFICATION_INSTANT_TAB_SUPPORT_DETERMINED,
897a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      content::NotificationService::AllSources());
898a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  SetOmniboxText("flowers");
899a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  PressEnterAndWaitForNavigation();
900a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  observer.Wait();
901a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
902424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  // Set the fake response for suggest request. Response has no prefetch
903424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  // details. Ensure that the page received a blank query to clear the
904424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  // prefetched results.
905424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  fake_factory()->SetFakeResponse(
9064e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      instant_url().Resolve("#q=dogs"),
907424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)      "[\"dogs\",[\"https://dogs.com\"],[],[],"
908424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)          "{\"google:suggesttype\":[\"NAVIGATION\"],"
909424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)          "\"google:suggestrelevance\":[2]}]",
910f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      net::HTTP_OK,
911f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      net::URLRequestStatus::SUCCESS);
912424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
913424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  SetOmniboxText("dogs");
914424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  while (!omnibox()->model()->autocomplete_controller()->done()) {
915424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    content::WindowedNotificationObserver ready_observer(
916424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)        chrome::NOTIFICATION_AUTOCOMPLETE_CONTROLLER_RESULT_READY,
917424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)        content::Source<AutocompleteController>(
918424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)            omnibox()->model()->autocomplete_controller()));
919424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    ready_observer.Wait();
920424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  }
921424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
922424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  ASSERT_EQ(2, CountSearchProviderSuggestions());
923424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  ASSERT_FALSE(SearchProvider::ShouldPrefetch(*(
924424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)      omnibox()->model()->result().default_match())));
925424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  content::WebContents* active_tab =
926424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)      browser()->tab_strip_model()->GetActiveWebContents();
927424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  ASSERT_TRUE(UpdateSearchState(active_tab));
928424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  ASSERT_EQ("", prefetch_query_value_);
929424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)}
930d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
931d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(InstantExtendedTest, ShowURL) {
932d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  ASSERT_NO_FATAL_FAILURE(SetupInstant(browser()));
933d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  FocusOmnibox();
934d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
935d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  // Create an observer to wait for the instant tab to support Instant.
936d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  content::WindowedNotificationObserver observer(
937d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)      chrome::NOTIFICATION_INSTANT_TAB_SUPPORT_DETERMINED,
938d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)      content::NotificationService::AllSources());
939d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
940d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  // Do a search and commit it.  The omnibox should show the search terms.
941d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  SetOmniboxText("foo");
942d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  EXPECT_EQ(ASCIIToUTF16("foo"), omnibox()->GetText());
943d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  browser()->window()->GetLocationBar()->AcceptInput();
944d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  observer.Wait();
945d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  EXPECT_FALSE(omnibox()->model()->user_input_in_progress());
946d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  EXPECT_TRUE(browser()->toolbar_model()->WouldPerformSearchTermReplacement(
947d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)      false));
948d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  EXPECT_EQ(ASCIIToUTF16("foo"), omnibox()->GetText());
949d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
950d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  // Calling ShowURL() should disable search term replacement and show the URL.
951d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  omnibox()->ShowURL();
952d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  EXPECT_FALSE(browser()->toolbar_model()->WouldPerformSearchTermReplacement(
953d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)      false));
954d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  // Don't bother looking for a specific URL; ensuring we're no longer showing
955d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  // the search terms is sufficient.
956d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  EXPECT_NE(ASCIIToUTF16("foo"), omnibox()->GetText());
957d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)}
95868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
95968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// Check that clicking on a result sends the correct referrer.
96068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(InstantExtendedTest, Referrer) {
96168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  ASSERT_TRUE(test_server()->Start());
96268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  GURL result_url =
96368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      test_server()->GetURL("files/referrer_policy/referrer-policy-log.html");
96468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  ASSERT_NO_FATAL_FAILURE(SetupInstant(browser()));
9655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  FocusOmnibox();
96668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
96768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  // Type a query and press enter to get results.
96868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  SetOmniboxText("query");
96946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  PressEnterAndWaitForFrameLoad();
97068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
97168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  // Simulate going to a result.
97268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  content::WebContents* contents =
97368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      browser()->tab_strip_model()->GetActiveWebContents();
97468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  std::ostringstream stream;
97568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  stream << "var link = document.createElement('a');";
97668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  stream << "link.href = \"" << result_url.spec() << "\";";
97768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  stream << "document.body.appendChild(link);";
97868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  stream << "link.click();";
97968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  EXPECT_TRUE(content::ExecuteScript(contents, stream.str()));
98068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
98168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  content::WaitForLoadStop(contents);
98268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  std::string expected_title =
98368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      "Referrer is " + instant_url().GetWithEmptyPath().spec();
98468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  EXPECT_EQ(ASCIIToUTF16(expected_title), contents->GetTitle());
98568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)}
986