| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/ui/search/instant_search_prerenderer.h" | 5 #include "chrome/browser/ui/search/instant_search_prerenderer.h" |
| 6 | 6 |
| 7 #include <stdint.h> | 7 #include <stdint.h> |
| 8 | 8 |
| 9 #include <memory> | 9 #include <memory> |
| 10 #include <tuple> | 10 #include <tuple> |
| (...skipping 10 matching lines...) Expand all Loading... |
| 21 #include "chrome/browser/prerender/prerender_manager.h" | 21 #include "chrome/browser/prerender/prerender_manager.h" |
| 22 #include "chrome/browser/prerender/prerender_manager_factory.h" | 22 #include "chrome/browser/prerender/prerender_manager_factory.h" |
| 23 #include "chrome/browser/prerender/prerender_origin.h" | 23 #include "chrome/browser/prerender/prerender_origin.h" |
| 24 #include "chrome/browser/prerender/prerender_tab_helper.h" | 24 #include "chrome/browser/prerender/prerender_tab_helper.h" |
| 25 #include "chrome/browser/profiles/profile.h" | 25 #include "chrome/browser/profiles/profile.h" |
| 26 #include "chrome/browser/search/instant_service.h" | 26 #include "chrome/browser/search/instant_service.h" |
| 27 #include "chrome/browser/search/instant_unittest_base.h" | 27 #include "chrome/browser/search/instant_unittest_base.h" |
| 28 #include "chrome/browser/search/search.h" | 28 #include "chrome/browser/search/search.h" |
| 29 #include "chrome/browser/search_engines/template_url_service_factory.h" | 29 #include "chrome/browser/search_engines/template_url_service_factory.h" |
| 30 #include "chrome/browser/ui/browser_instant_controller.h" | 30 #include "chrome/browser/ui/browser_instant_controller.h" |
| 31 #include "chrome/browser/ui/search/search_ipc_router.h" |
| 31 #include "chrome/browser/ui/search/search_tab_helper.h" | 32 #include "chrome/browser/ui/search/search_tab_helper.h" |
| 32 #include "chrome/browser/ui/tabs/tab_strip_model.h" | 33 #include "chrome/browser/ui/tabs/tab_strip_model.h" |
| 33 #include "chrome/common/render_messages.h" | 34 #include "chrome/common/render_messages.h" |
| 34 #include "chrome/common/search/instant_types.h" | 35 #include "chrome/common/search/instant_types.h" |
| 36 #include "chrome/common/search/mock_searchbox.h" |
| 35 #include "components/omnibox/browser/autocomplete_match.h" | 37 #include "components/omnibox/browser/autocomplete_match.h" |
| 36 #include "content/public/browser/navigation_controller.h" | 38 #include "content/public/browser/navigation_controller.h" |
| 37 #include "content/public/browser/web_contents.h" | 39 #include "content/public/browser/web_contents.h" |
| 38 #include "content/public/common/url_constants.h" | 40 #include "content/public/common/url_constants.h" |
| 39 #include "content/public/test/mock_render_process_host.h" | 41 #include "content/public/test/mock_render_process_host.h" |
| 40 #include "ipc/ipc_message.h" | 42 #include "ipc/ipc_message.h" |
| 41 #include "ipc/ipc_test_sink.h" | 43 #include "ipc/ipc_test_sink.h" |
| 42 #include "testing/gmock/include/gmock/gmock.h" | 44 #include "testing/gmock/include/gmock/gmock.h" |
| 43 #include "ui/gfx/geometry/size.h" | 45 #include "ui/gfx/geometry/size.h" |
| 44 | 46 |
| 45 using base::ASCIIToUTF16; | 47 using base::ASCIIToUTF16; |
| 48 using testing::_; |
| 49 using testing::AllOf; |
| 50 using testing::Eq; |
| 51 using testing::Field; |
| 52 using testing::Return; |
| 46 | 53 |
| 47 namespace { | 54 namespace { |
| 48 | 55 |
| 56 class MockSearchBoxClientFactory |
| 57 : public SearchIPCRouter::SearchBoxClientFactory { |
| 58 public: |
| 59 MOCK_METHOD0(GetSearchBox, chrome::mojom::SearchBox*(void)); |
| 60 }; |
| 61 |
| 49 using content::Referrer; | 62 using content::Referrer; |
| 50 using prerender::Origin; | 63 using prerender::Origin; |
| 51 using prerender::PrerenderContents; | 64 using prerender::PrerenderContents; |
| 52 using prerender::PrerenderHandle; | 65 using prerender::PrerenderHandle; |
| 53 using prerender::PrerenderManager; | 66 using prerender::PrerenderManager; |
| 54 using prerender::PrerenderManagerFactory; | 67 using prerender::PrerenderManagerFactory; |
| 55 using prerender::PrerenderTabHelper; | 68 using prerender::PrerenderTabHelper; |
| 56 | 69 |
| 57 class DummyPrerenderContents : public PrerenderContents { | 70 class DummyPrerenderContents : public PrerenderContents { |
| 58 public: | 71 public: |
| 59 DummyPrerenderContents( | 72 DummyPrerenderContents(PrerenderManager* prerender_manager, |
| 60 PrerenderManager* prerender_manager, | 73 Profile* profile, |
| 61 Profile* profile, | 74 const GURL& url, |
| 62 const GURL& url, | 75 const Referrer& referrer, |
| 63 const Referrer& referrer, | 76 Origin origin, |
| 64 Origin origin, | 77 bool call_did_finish_load, |
| 65 bool call_did_finish_load); | 78 chrome::mojom::SearchBox* search_box); |
| 66 | 79 |
| 67 void StartPrerendering( | 80 void StartPrerendering( |
| 68 const gfx::Rect& bounds, | 81 const gfx::Rect& bounds, |
| 69 content::SessionStorageNamespace* session_storage_namespace) override; | 82 content::SessionStorageNamespace* session_storage_namespace) override; |
| 70 bool GetChildId(int* child_id) const override; | 83 bool GetChildId(int* child_id) const override; |
| 71 bool GetRouteId(int* route_id) const override; | 84 bool GetRouteId(int* route_id) const override; |
| 72 | 85 |
| 73 private: | 86 private: |
| 74 Profile* profile_; | 87 Profile* profile_; |
| 75 const GURL url_; | 88 const GURL url_; |
| 76 bool call_did_finish_load_; | 89 bool call_did_finish_load_; |
| 90 chrome::mojom::SearchBox* search_box_; |
| 77 | 91 |
| 78 DISALLOW_COPY_AND_ASSIGN(DummyPrerenderContents); | 92 DISALLOW_COPY_AND_ASSIGN(DummyPrerenderContents); |
| 79 }; | 93 }; |
| 80 | 94 |
| 81 class DummyPrerenderContentsFactory : public PrerenderContents::Factory { | 95 class DummyPrerenderContentsFactory : public PrerenderContents::Factory { |
| 82 public: | 96 public: |
| 83 explicit DummyPrerenderContentsFactory(bool call_did_finish_load) | 97 DummyPrerenderContentsFactory(bool call_did_finish_load, |
| 84 : call_did_finish_load_(call_did_finish_load) { | 98 chrome::mojom::SearchBox* search_box) |
| 85 } | 99 : call_did_finish_load_(call_did_finish_load), search_box_(search_box) {} |
| 86 | 100 |
| 87 PrerenderContents* CreatePrerenderContents( | 101 PrerenderContents* CreatePrerenderContents( |
| 88 PrerenderManager* prerender_manager, | 102 PrerenderManager* prerender_manager, |
| 89 Profile* profile, | 103 Profile* profile, |
| 90 const GURL& url, | 104 const GURL& url, |
| 91 const Referrer& referrer, | 105 const Referrer& referrer, |
| 92 Origin origin) override; | 106 Origin origin) override; |
| 93 | 107 |
| 94 private: | 108 private: |
| 95 bool call_did_finish_load_; | 109 bool call_did_finish_load_; |
| 110 chrome::mojom::SearchBox* search_box_; |
| 96 | 111 |
| 97 DISALLOW_COPY_AND_ASSIGN(DummyPrerenderContentsFactory); | 112 DISALLOW_COPY_AND_ASSIGN(DummyPrerenderContentsFactory); |
| 98 }; | 113 }; |
| 99 | 114 |
| 100 DummyPrerenderContents::DummyPrerenderContents( | 115 DummyPrerenderContents::DummyPrerenderContents( |
| 101 PrerenderManager* prerender_manager, | 116 PrerenderManager* prerender_manager, |
| 102 Profile* profile, | 117 Profile* profile, |
| 103 const GURL& url, | 118 const GURL& url, |
| 104 const Referrer& referrer, | 119 const Referrer& referrer, |
| 105 Origin origin, | 120 Origin origin, |
| 106 bool call_did_finish_load) | 121 bool call_did_finish_load, |
| 122 chrome::mojom::SearchBox* search_box) |
| 107 : PrerenderContents(prerender_manager, profile, url, referrer, origin), | 123 : PrerenderContents(prerender_manager, profile, url, referrer, origin), |
| 108 profile_(profile), | 124 profile_(profile), |
| 109 url_(url), | 125 url_(url), |
| 110 call_did_finish_load_(call_did_finish_load) { | 126 call_did_finish_load_(call_did_finish_load), |
| 111 } | 127 search_box_(search_box) {} |
| 112 | 128 |
| 113 void DummyPrerenderContents::StartPrerendering( | 129 void DummyPrerenderContents::StartPrerendering( |
| 114 const gfx::Rect& bounds, | 130 const gfx::Rect& bounds, |
| 115 content::SessionStorageNamespace* session_storage_namespace) { | 131 content::SessionStorageNamespace* session_storage_namespace) { |
| 116 content::SessionStorageNamespaceMap session_storage_namespace_map; | 132 content::SessionStorageNamespaceMap session_storage_namespace_map; |
| 117 session_storage_namespace_map[std::string()] = session_storage_namespace; | 133 session_storage_namespace_map[std::string()] = session_storage_namespace; |
| 118 prerender_contents_.reset(content::WebContents::CreateWithSessionStorage( | 134 prerender_contents_.reset(content::WebContents::CreateWithSessionStorage( |
| 119 content::WebContents::CreateParams(profile_), | 135 content::WebContents::CreateParams(profile_), |
| 120 session_storage_namespace_map)); | 136 session_storage_namespace_map)); |
| 121 PrerenderTabHelper::CreateForWebContents(prerender_contents_.get()); | 137 PrerenderTabHelper::CreateForWebContents(prerender_contents_.get()); |
| 122 content::NavigationController::LoadURLParams params(url_); | 138 content::NavigationController::LoadURLParams params(url_); |
| 123 prerender_contents_->GetController().LoadURLWithParams(params); | 139 prerender_contents_->GetController().LoadURLWithParams(params); |
| 124 SearchTabHelper::CreateForWebContents(prerender_contents_.get()); | 140 SearchTabHelper::CreateForWebContents(prerender_contents_.get()); |
| 141 auto* search_tab = |
| 142 SearchTabHelper::FromWebContents(prerender_contents_.get()); |
| 143 auto factory = base::MakeUnique<MockSearchBoxClientFactory>(); |
| 144 ON_CALL(*factory, GetSearchBox()).WillByDefault(Return(search_box_)); |
| 145 search_tab->ipc_router().set_search_box_client_factory_for_testing( |
| 146 std::move(factory)); |
| 125 | 147 |
| 126 prerendering_has_started_ = true; | 148 prerendering_has_started_ = true; |
| 127 DCHECK(session_storage_namespace); | 149 DCHECK(session_storage_namespace); |
| 128 session_storage_namespace_id_ = session_storage_namespace->id(); | 150 session_storage_namespace_id_ = session_storage_namespace->id(); |
| 129 NotifyPrerenderStart(); | 151 NotifyPrerenderStart(); |
| 130 | 152 |
| 131 if (call_did_finish_load_) | 153 if (call_did_finish_load_) |
| 132 DidFinishLoad(prerender_contents_->GetMainFrame(), url_); | 154 DidFinishLoad(prerender_contents_->GetMainFrame(), url_); |
| 133 } | 155 } |
| 134 | 156 |
| 135 bool DummyPrerenderContents::GetChildId(int* child_id) const { | 157 bool DummyPrerenderContents::GetChildId(int* child_id) const { |
| 136 *child_id = 1; | 158 *child_id = 1; |
| 137 return true; | 159 return true; |
| 138 } | 160 } |
| 139 | 161 |
| 140 bool DummyPrerenderContents::GetRouteId(int* route_id) const { | 162 bool DummyPrerenderContents::GetRouteId(int* route_id) const { |
| 141 *route_id = 1; | 163 *route_id = 1; |
| 142 return true; | 164 return true; |
| 143 } | 165 } |
| 144 | 166 |
| 145 PrerenderContents* DummyPrerenderContentsFactory::CreatePrerenderContents( | 167 PrerenderContents* DummyPrerenderContentsFactory::CreatePrerenderContents( |
| 146 PrerenderManager* prerender_manager, | 168 PrerenderManager* prerender_manager, |
| 147 Profile* profile, | 169 Profile* profile, |
| 148 const GURL& url, | 170 const GURL& url, |
| 149 const Referrer& referrer, | 171 const Referrer& referrer, |
| 150 Origin origin) { | 172 Origin origin) { |
| 151 return new DummyPrerenderContents(prerender_manager, profile, url, referrer, | 173 return new DummyPrerenderContents(prerender_manager, profile, url, referrer, |
| 152 origin, call_did_finish_load_); | 174 origin, call_did_finish_load_, search_box_); |
| 153 } | 175 } |
| 154 | 176 |
| 155 } // namespace | 177 } // namespace |
| 156 | 178 |
| 157 class InstantSearchPrerendererTest : public InstantUnitTestBase { | 179 class InstantSearchPrerendererTest : public InstantUnitTestBase { |
| 158 public: | 180 public: |
| 159 InstantSearchPrerendererTest() {} | 181 InstantSearchPrerendererTest() {} |
| 160 | 182 |
| 161 protected: | 183 protected: |
| 162 void SetUp() override { | 184 void SetUp() override { |
| 163 ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial("EmbeddedSearch", | 185 ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial("EmbeddedSearch", |
| 164 "Group1 strk:20")); | 186 "Group1 strk:20")); |
| 165 InstantUnitTestBase::SetUp(); | 187 InstantUnitTestBase::SetUp(); |
| 166 } | 188 } |
| 167 | 189 |
| 168 void Init(bool prerender_search_results_base_page, | 190 void Init(bool prerender_search_results_base_page, |
| 169 bool call_did_finish_load) { | 191 bool call_did_finish_load) { |
| 170 AddTab(browser(), GURL(url::kAboutBlankURL)); | 192 AddTab(browser(), GURL(url::kAboutBlankURL)); |
| 171 | 193 |
| 172 PrerenderManagerFactory::GetForBrowserContext(browser()->profile()) | 194 PrerenderManagerFactory::GetForBrowserContext(browser()->profile()) |
| 173 ->SetPrerenderContentsFactoryForTest( | 195 ->SetPrerenderContentsFactoryForTest(new DummyPrerenderContentsFactory( |
| 174 new DummyPrerenderContentsFactory(call_did_finish_load)); | 196 call_did_finish_load, &mock_search_box_)); |
| 175 if (prerender_search_results_base_page) { | 197 if (prerender_search_results_base_page) { |
| 176 content::SessionStorageNamespace* session_storage_namespace = | 198 content::SessionStorageNamespace* session_storage_namespace = |
| 177 GetActiveWebContents()->GetController(). | 199 GetActiveWebContents()->GetController(). |
| 178 GetDefaultSessionStorageNamespace(); | 200 GetDefaultSessionStorageNamespace(); |
| 179 InstantSearchPrerenderer* prerenderer = GetInstantSearchPrerenderer(); | 201 InstantSearchPrerenderer* prerenderer = GetInstantSearchPrerenderer(); |
| 180 prerenderer->Init(session_storage_namespace, gfx::Size(640, 480)); | 202 prerenderer->Init(session_storage_namespace, gfx::Size(640, 480)); |
| 181 EXPECT_NE(static_cast<PrerenderHandle*>(NULL), prerender_handle()); | 203 EXPECT_NE(static_cast<PrerenderHandle*>(NULL), prerender_handle()); |
| 182 } | 204 } |
| 183 } | 205 } |
| 184 | 206 |
| 185 InstantSearchPrerenderer* GetInstantSearchPrerenderer() { | 207 InstantSearchPrerenderer* GetInstantSearchPrerenderer() { |
| 186 return instant_service_->instant_search_prerenderer(); | 208 return instant_service_->instant_search_prerenderer(); |
| 187 } | 209 } |
| 188 | 210 |
| 189 const GURL& GetPrerenderURL() { | 211 const GURL& GetPrerenderURL() { |
| 190 return GetInstantSearchPrerenderer()->prerender_url_; | 212 return GetInstantSearchPrerenderer()->prerender_url_; |
| 191 } | 213 } |
| 192 | 214 |
| 193 void SetLastQuery(const base::string16& query) { | 215 void SetLastQuery(const base::string16& query) { |
| 194 GetInstantSearchPrerenderer()->last_instant_suggestion_ = | 216 GetInstantSearchPrerenderer()->last_instant_suggestion_ = |
| 195 InstantSuggestion(query, std::string()); | 217 InstantSuggestion(query, std::string()); |
| 196 } | 218 } |
| 197 | 219 |
| 198 content::WebContents* prerender_contents() { | 220 content::WebContents* prerender_contents() { |
| 199 return GetInstantSearchPrerenderer()->prerender_contents(); | 221 return GetInstantSearchPrerenderer()->prerender_contents(); |
| 200 } | 222 } |
| 201 | 223 |
| 202 bool MessageWasSent(uint32_t id) { | |
| 203 content::MockRenderProcessHost* process = | |
| 204 static_cast<content::MockRenderProcessHost*>( | |
| 205 prerender_contents()->GetRenderViewHost()->GetProcess()); | |
| 206 return process->sink().GetFirstMessageMatching(id) != NULL; | |
| 207 } | |
| 208 | |
| 209 content::WebContents* GetActiveWebContents() const { | 224 content::WebContents* GetActiveWebContents() const { |
| 210 return browser()->tab_strip_model()->GetWebContentsAt(0); | 225 return browser()->tab_strip_model()->GetWebContentsAt(0); |
| 211 } | 226 } |
| 212 | 227 |
| 213 PrerenderHandle* prerender_handle() { | 228 PrerenderHandle* prerender_handle() { |
| 214 return GetInstantSearchPrerenderer()->prerender_handle_.get(); | 229 return GetInstantSearchPrerenderer()->prerender_handle_.get(); |
| 215 } | 230 } |
| 216 | 231 |
| 217 void PrerenderSearchQuery(const base::string16& query) { | 232 void PrerenderSearchQuery(const base::string16& query) { |
| 218 Init(true, true); | 233 Init(true, true); |
| 219 InstantSearchPrerenderer* prerenderer = GetInstantSearchPrerenderer(); | 234 InstantSearchPrerenderer* prerenderer = GetInstantSearchPrerenderer(); |
| 220 prerenderer->Prerender(InstantSuggestion(query, std::string())); | 235 prerenderer->Prerender(InstantSuggestion(query, std::string())); |
| 221 CommitPendingLoad(&prerender_contents()->GetController()); | 236 CommitPendingLoad(&prerender_contents()->GetController()); |
| 222 EXPECT_TRUE(prerenderer->CanCommitQuery(GetActiveWebContents(), query)); | 237 EXPECT_TRUE(prerenderer->CanCommitQuery(GetActiveWebContents(), query)); |
| 223 EXPECT_NE(static_cast<PrerenderHandle*>(NULL), prerender_handle()); | 238 EXPECT_NE(static_cast<PrerenderHandle*>(NULL), prerender_handle()); |
| 224 } | 239 } |
| 240 |
| 241 MockSearchBox* mock_search_box() { return &mock_search_box_; } |
| 242 |
| 243 private: |
| 244 MockSearchBox mock_search_box_; |
| 225 }; | 245 }; |
| 226 | 246 |
| 227 TEST_F(InstantSearchPrerendererTest, GetSearchTermsFromPrerenderedPage) { | 247 TEST_F(InstantSearchPrerendererTest, GetSearchTermsFromPrerenderedPage) { |
| 228 Init(false, false); | 248 Init(false, false); |
| 229 InstantSearchPrerenderer* prerenderer = GetInstantSearchPrerenderer(); | 249 InstantSearchPrerenderer* prerenderer = GetInstantSearchPrerenderer(); |
| 230 GURL url(GetPrerenderURL()); | 250 GURL url(GetPrerenderURL()); |
| 231 EXPECT_EQ(GURL("https://www.google.com/instant?ion=1&foo=foo#foo=foo&strk"), | 251 EXPECT_EQ(GURL("https://www.google.com/instant?ion=1&foo=foo#foo=foo&strk"), |
| 232 url); | 252 url); |
| 233 EXPECT_EQ( | 253 EXPECT_EQ( |
| 234 base::UTF16ToASCII(prerenderer->get_last_query()), | 254 base::UTF16ToASCII(prerenderer->get_last_query()), |
| 235 base::UTF16ToASCII(search::ExtractSearchTermsFromURL(profile(), url))); | 255 base::UTF16ToASCII(search::ExtractSearchTermsFromURL(profile(), url))); |
| 236 | 256 |
| 237 // Assume the prerendered page prefetched search results for the query | 257 // Assume the prerendered page prefetched search results for the query |
| 238 // "flowers". | 258 // "flowers". |
| 239 SetLastQuery(ASCIIToUTF16("flowers")); | 259 SetLastQuery(ASCIIToUTF16("flowers")); |
| 240 EXPECT_EQ("flowers", base::UTF16ToASCII(prerenderer->get_last_query())); | 260 EXPECT_EQ("flowers", base::UTF16ToASCII(prerenderer->get_last_query())); |
| 241 EXPECT_EQ( | 261 EXPECT_EQ( |
| 242 base::UTF16ToASCII(prerenderer->get_last_query()), | 262 base::UTF16ToASCII(prerenderer->get_last_query()), |
| 243 base::UTF16ToASCII(search::ExtractSearchTermsFromURL(profile(), url))); | 263 base::UTF16ToASCII(search::ExtractSearchTermsFromURL(profile(), url))); |
| 244 } | 264 } |
| 245 | 265 |
| 246 TEST_F(InstantSearchPrerendererTest, PrefetchSearchResults) { | 266 TEST_F(InstantSearchPrerendererTest, PrefetchSearchResults) { |
| 247 Init(true, true); | 267 Init(true, true); |
| 248 EXPECT_TRUE(prerender_handle()->IsFinishedLoading()); | 268 EXPECT_TRUE(prerender_handle()->IsFinishedLoading()); |
| 249 InstantSearchPrerenderer* prerenderer = GetInstantSearchPrerenderer(); | 269 InstantSearchPrerenderer* prerenderer = GetInstantSearchPrerenderer(); |
| 270 EXPECT_CALL(*mock_search_box(), SetSuggestionToPrefetch(_)); |
| 250 prerenderer->Prerender( | 271 prerenderer->Prerender( |
| 251 InstantSuggestion(ASCIIToUTF16("flowers"), std::string())); | 272 InstantSuggestion(ASCIIToUTF16("flowers"), std::string())); |
| 252 EXPECT_EQ("flowers", base::UTF16ToASCII(prerenderer->get_last_query())); | 273 EXPECT_EQ("flowers", base::UTF16ToASCII(prerenderer->get_last_query())); |
| 253 EXPECT_TRUE(MessageWasSent( | |
| 254 ChromeViewMsg_SearchBoxSetSuggestionToPrefetch::ID)); | |
| 255 } | 274 } |
| 256 | 275 |
| 257 TEST_F(InstantSearchPrerendererTest, DoNotPrefetchSearchResults) { | 276 TEST_F(InstantSearchPrerendererTest, DoNotPrefetchSearchResults) { |
| 258 Init(true, false); | 277 Init(true, false); |
| 259 // Page hasn't finished loading yet. | 278 // Page hasn't finished loading yet. |
| 260 EXPECT_FALSE(prerender_handle()->IsFinishedLoading()); | 279 EXPECT_FALSE(prerender_handle()->IsFinishedLoading()); |
| 261 InstantSearchPrerenderer* prerenderer = GetInstantSearchPrerenderer(); | 280 InstantSearchPrerenderer* prerenderer = GetInstantSearchPrerenderer(); |
| 281 EXPECT_CALL(*mock_search_box(), SetSuggestionToPrefetch(_)).Times(0); |
| 262 prerenderer->Prerender( | 282 prerenderer->Prerender( |
| 263 InstantSuggestion(ASCIIToUTF16("flowers"), std::string())); | 283 InstantSuggestion(ASCIIToUTF16("flowers"), std::string())); |
| 264 EXPECT_EQ("", base::UTF16ToASCII(prerenderer->get_last_query())); | 284 EXPECT_EQ("", base::UTF16ToASCII(prerenderer->get_last_query())); |
| 265 EXPECT_FALSE(MessageWasSent( | |
| 266 ChromeViewMsg_SearchBoxSetSuggestionToPrefetch::ID)); | |
| 267 } | 285 } |
| 268 | 286 |
| 269 TEST_F(InstantSearchPrerendererTest, CanCommitQuery) { | 287 TEST_F(InstantSearchPrerendererTest, CanCommitQuery) { |
| 270 Init(true, true); | 288 Init(true, true); |
| 271 InstantSearchPrerenderer* prerenderer = GetInstantSearchPrerenderer(); | 289 InstantSearchPrerenderer* prerenderer = GetInstantSearchPrerenderer(); |
| 272 base::string16 query = ASCIIToUTF16("flowers"); | 290 base::string16 query = ASCIIToUTF16("flowers"); |
| 273 prerenderer->Prerender(InstantSuggestion(query, std::string())); | 291 prerenderer->Prerender(InstantSuggestion(query, std::string())); |
| 274 EXPECT_TRUE(prerenderer->CanCommitQuery(GetActiveWebContents(), query)); | 292 EXPECT_TRUE(prerenderer->CanCommitQuery(GetActiveWebContents(), query)); |
| 275 | 293 |
| 276 // Make sure InstantSearchPrerenderer::CanCommitQuery() returns false for | 294 // Make sure InstantSearchPrerenderer::CanCommitQuery() returns false for |
| 277 // invalid search queries. | 295 // invalid search queries. |
| 278 EXPECT_TRUE(prerenderer->CanCommitQuery(GetActiveWebContents(), | 296 EXPECT_TRUE(prerenderer->CanCommitQuery(GetActiveWebContents(), |
| 279 ASCIIToUTF16("joy"))); | 297 ASCIIToUTF16("joy"))); |
| 280 EXPECT_FALSE(prerenderer->CanCommitQuery(GetActiveWebContents(), | 298 EXPECT_FALSE(prerenderer->CanCommitQuery(GetActiveWebContents(), |
| 281 base::string16())); | 299 base::string16())); |
| 282 } | 300 } |
| 283 | 301 |
| 284 TEST_F(InstantSearchPrerendererTest, CommitQuery) { | 302 TEST_F(InstantSearchPrerendererTest, CommitQuery) { |
| 285 base::string16 query = ASCIIToUTF16("flowers"); | 303 base::string16 query = ASCIIToUTF16("flowers"); |
| 286 PrerenderSearchQuery(query); | 304 PrerenderSearchQuery(query); |
| 287 InstantSearchPrerenderer* prerenderer = GetInstantSearchPrerenderer(); | 305 InstantSearchPrerenderer* prerenderer = GetInstantSearchPrerenderer(); |
| 306 EXPECT_CALL(*mock_search_box(), Submit(_, _)); |
| 288 prerenderer->Commit(query, EmbeddedSearchRequestParams()); | 307 prerenderer->Commit(query, EmbeddedSearchRequestParams()); |
| 289 EXPECT_TRUE(MessageWasSent(ChromeViewMsg_SearchBoxSubmit::ID)); | |
| 290 } | 308 } |
| 291 | 309 |
| 292 TEST_F(InstantSearchPrerendererTest, CancelPrerenderRequestOnTabChangeEvent) { | 310 TEST_F(InstantSearchPrerendererTest, CancelPrerenderRequestOnTabChangeEvent) { |
| 293 Init(true, true); | 311 Init(true, true); |
| 294 EXPECT_NE(static_cast<PrerenderHandle*>(NULL), prerender_handle()); | 312 EXPECT_NE(static_cast<PrerenderHandle*>(NULL), prerender_handle()); |
| 295 | 313 |
| 296 // Add a new tab to deactivate the current tab. | 314 // Add a new tab to deactivate the current tab. |
| 297 AddTab(browser(), GURL(url::kAboutBlankURL)); | 315 AddTab(browser(), GURL(url::kAboutBlankURL)); |
| 298 EXPECT_EQ(2, browser()->tab_strip_model()->count()); | 316 EXPECT_EQ(2, browser()->tab_strip_model()->count()); |
| 299 | 317 |
| (...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 428 } | 446 } |
| 429 | 447 |
| 430 class ReuseInstantSearchBasePageTest : public InstantSearchPrerendererTest { | 448 class ReuseInstantSearchBasePageTest : public InstantSearchPrerendererTest { |
| 431 public: | 449 public: |
| 432 ReuseInstantSearchBasePageTest() {} | 450 ReuseInstantSearchBasePageTest() {} |
| 433 | 451 |
| 434 protected: | 452 protected: |
| 435 void SetUp() override { | 453 void SetUp() override { |
| 436 ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial("EmbeddedSearch", | 454 ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial("EmbeddedSearch", |
| 437 "Group1 strk:20")); | 455 "Group1 strk:20")); |
| 438 InstantUnitTestBase::SetUp(); | 456 InstantSearchPrerendererTest::SetUp(); |
| 439 } | 457 } |
| 440 }; | 458 }; |
| 441 | 459 |
| 442 TEST_F(ReuseInstantSearchBasePageTest, CanCommitQuery) { | 460 TEST_F(ReuseInstantSearchBasePageTest, CanCommitQuery) { |
| 443 Init(true, true); | 461 Init(true, true); |
| 444 InstantSearchPrerenderer* prerenderer = GetInstantSearchPrerenderer(); | 462 InstantSearchPrerenderer* prerenderer = GetInstantSearchPrerenderer(); |
| 445 base::string16 query = ASCIIToUTF16("flowers"); | 463 base::string16 query = ASCIIToUTF16("flowers"); |
| 446 prerenderer->Prerender(InstantSuggestion(query, std::string())); | 464 prerenderer->Prerender(InstantSuggestion(query, std::string())); |
| 447 EXPECT_TRUE(prerenderer->CanCommitQuery(GetActiveWebContents(), query)); | 465 EXPECT_TRUE(prerenderer->CanCommitQuery(GetActiveWebContents(), query)); |
| 448 | 466 |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 497 browser()->OpenURL(content::OpenURLParams( | 515 browser()->OpenURL(content::OpenURLParams( |
| 498 url, Referrer(), WindowOpenDisposition::CURRENT_TAB, | 516 url, Referrer(), WindowOpenDisposition::CURRENT_TAB, |
| 499 ui::PAGE_TRANSITION_LINK, true /* is_renderer_initiated */)); | 517 ui::PAGE_TRANSITION_LINK, true /* is_renderer_initiated */)); |
| 500 EXPECT_NE(GetPrerenderURL(), GetActiveWebContents()->GetURL()); | 518 EXPECT_NE(GetPrerenderURL(), GetActiveWebContents()->GetURL()); |
| 501 EXPECT_EQ(static_cast<PrerenderHandle*>(NULL), prerender_handle()); | 519 EXPECT_EQ(static_cast<PrerenderHandle*>(NULL), prerender_handle()); |
| 502 } | 520 } |
| 503 | 521 |
| 504 TEST_F(TestUsePrerenderPage, SetEmbeddedSearchRequestParams) { | 522 TEST_F(TestUsePrerenderPage, SetEmbeddedSearchRequestParams) { |
| 505 PrerenderSearchQuery(ASCIIToUTF16("foo")); | 523 PrerenderSearchQuery(ASCIIToUTF16("foo")); |
| 506 EXPECT_TRUE(browser()->instant_controller()); | 524 EXPECT_TRUE(browser()->instant_controller()); |
| 525 EXPECT_CALL( |
| 526 *mock_search_box(), |
| 527 Submit(Eq(ASCIIToUTF16("foo")), |
| 528 AllOf(Field(&EmbeddedSearchRequestParams::original_query, |
| 529 Eq(base::ASCIIToUTF16("f"))), |
| 530 Field(&EmbeddedSearchRequestParams::input_encoding, |
| 531 Eq(base::ASCIIToUTF16("utf-8"))), |
| 532 Field(&EmbeddedSearchRequestParams::rlz_parameter_value, |
| 533 Eq(base::ASCIIToUTF16(""))), |
| 534 Field(&EmbeddedSearchRequestParams::assisted_query_stats, |
| 535 Eq(base::ASCIIToUTF16("chrome...0")))))); |
| 507 | 536 |
| 508 // Open a search results page. Query extraction flag is disabled in field | 537 // Open a search results page. Query extraction flag is disabled in field |
| 509 // trials. Search results page URL does not contain search terms replacement | 538 // trials. Search results page URL does not contain search terms replacement |
| 510 // key. | 539 // key. |
| 511 GURL url("https://www.google.com/url?bar=foo&aqs=chrome...0&ie=utf-8&oq=f"); | 540 GURL url("https://www.google.com/url?bar=foo&aqs=chrome...0&ie=utf-8&oq=f"); |
| 512 browser()->instant_controller()->OpenInstant( | 541 browser()->instant_controller()->OpenInstant( |
| 513 WindowOpenDisposition::CURRENT_TAB, url); | 542 WindowOpenDisposition::CURRENT_TAB, url); |
| 514 content::MockRenderProcessHost* process = | |
| 515 static_cast<content::MockRenderProcessHost*>( | |
| 516 prerender_contents()->GetRenderViewHost()->GetProcess()); | |
| 517 const IPC::Message* message = process->sink().GetFirstMessageMatching( | |
| 518 ChromeViewMsg_SearchBoxSubmit::ID); | |
| 519 ASSERT_TRUE(message); | |
| 520 | |
| 521 // Verify the IPC message params. | |
| 522 std::tuple<base::string16, EmbeddedSearchRequestParams> params; | |
| 523 ChromeViewMsg_SearchBoxSubmit::Read(message, ¶ms); | |
| 524 EXPECT_EQ("foo", base::UTF16ToASCII(std::get<0>(params))); | |
| 525 EXPECT_EQ("f", base::UTF16ToASCII(std::get<1>(params).original_query)); | |
| 526 EXPECT_EQ("utf-8", base::UTF16ToASCII(std::get<1>(params).input_encoding)); | |
| 527 EXPECT_EQ("", base::UTF16ToASCII(std::get<1>(params).rlz_parameter_value)); | |
| 528 EXPECT_EQ("chrome...0", | |
| 529 base::UTF16ToASCII(std::get<1>(params).assisted_query_stats)); | |
| 530 } | 543 } |
| 531 #endif | 544 #endif |
| OLD | NEW |