Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(173)

Side by Side Diff: chrome/browser/favicon/content_favicon_driver_browsertest.cc

Issue 2949023002: [WIP] Fix history.replaceState() not propagating back favicons (Closed)
Patch Set: Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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 "components/favicon/content/content_favicon_driver.h" 5 #include "components/favicon/content/content_favicon_driver.h"
6 6
7 #include "base/location.h" 7 #include "base/location.h"
8 #include "base/macros.h" 8 #include "base/macros.h"
9 #include "base/memory/weak_ptr.h" 9 #include "base/memory/weak_ptr.h"
10 #include "base/run_loop.h" 10 #include "base/run_loop.h"
(...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after
172 content::WebContents* web_contents() { 172 content::WebContents* web_contents() {
173 return browser()->tab_strip_model()->GetActiveWebContents(); 173 return browser()->tab_strip_model()->GetActiveWebContents();
174 } 174 }
175 175
176 // FaviconDriverPendingTaskChecker: 176 // FaviconDriverPendingTaskChecker:
177 bool HasPendingTasks() override { 177 bool HasPendingTasks() override {
178 return favicon::ContentFaviconDriver::FromWebContents(web_contents()) 178 return favicon::ContentFaviconDriver::FromWebContents(web_contents())
179 ->HasPendingTasksForTest(); 179 ->HasPendingTasksForTest();
180 } 180 }
181 181
182 favicon_base::FaviconRawBitmapResult GetFaviconForPageURL(const GURL& url) { 182 favicon_base::FaviconRawBitmapResult GetFaviconForPageURL(
183 const GURL& url,
184 favicon_base::IconType icon_type) {
183 favicon::FaviconService* favicon_service = 185 favicon::FaviconService* favicon_service =
184 FaviconServiceFactory::GetForProfile( 186 FaviconServiceFactory::GetForProfile(
185 browser()->profile(), ServiceAccessType::EXPLICIT_ACCESS); 187 browser()->profile(), ServiceAccessType::EXPLICIT_ACCESS);
186 188
187 std::vector<favicon_base::FaviconRawBitmapResult> results; 189 std::vector<favicon_base::FaviconRawBitmapResult> results;
188 base::CancelableTaskTracker tracker; 190 base::CancelableTaskTracker tracker;
189 base::RunLoop loop; 191 base::RunLoop loop;
190 favicon_service->GetFaviconForPageURL( 192 favicon_service->GetFaviconForPageURL(
191 url, favicon_base::FAVICON, /*desired_size_in_dip=*/0, 193 url, icon_type, /*desired_size_in_dip=*/0,
192 base::Bind( 194 base::Bind(
193 [](std::vector<favicon_base::FaviconRawBitmapResult>* save_results, 195 [](std::vector<favicon_base::FaviconRawBitmapResult>* save_results,
194 base::RunLoop* loop, 196 base::RunLoop* loop,
195 const std::vector<favicon_base::FaviconRawBitmapResult>& 197 const std::vector<favicon_base::FaviconRawBitmapResult>&
196 results) { 198 results) {
197 *save_results = results; 199 *save_results = results;
198 loop->Quit(); 200 loop->Quit();
199 }, 201 },
200 &results, &loop), 202 &results, &loop),
201 &tracker); 203 &tracker);
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
274 content::ResourceDispatcherHost::Get()->SetDelegate(delegate.get()); 276 content::ResourceDispatcherHost::Get()->SetDelegate(delegate.get());
275 277
276 PendingTaskWaiter waiter(web_contents(), this); 278 PendingTaskWaiter waiter(web_contents(), this);
277 ui_test_utils::NavigateToURLWithDisposition( 279 ui_test_utils::NavigateToURLWithDisposition(
278 browser(), url, WindowOpenDisposition::CURRENT_TAB, 280 browser(), url, WindowOpenDisposition::CURRENT_TAB,
279 ui_test_utils::BROWSER_TEST_NONE); 281 ui_test_utils::BROWSER_TEST_NONE);
280 waiter.Wait(); 282 waiter.Wait();
281 283
282 #if defined(OS_ANDROID) 284 #if defined(OS_ANDROID)
283 EXPECT_TRUE(delegate->was_requested()); 285 EXPECT_TRUE(delegate->was_requested());
286 EXPECT_NE(
287 nullptr,
288 GetFaviconForPageURL(url, favicon_base::WEB_MANIFEST_ICON).bitmap_data);
284 #else 289 #else
285 EXPECT_FALSE(delegate->was_requested()); 290 EXPECT_FALSE(delegate->was_requested());
286 #endif 291 #endif
287 } 292 }
288 293
289 // Test that loading a page that contains a Web Manifest without icons and a 294 // Test that loading a page that contains a Web Manifest without icons and a
290 // regular favicon in the HTML reports the icon. The regular icon is initially 295 // regular favicon in the HTML reports the icon. The regular icon is initially
291 // cached in the Favicon database. 296 // cached in the Favicon database.
292 IN_PROC_BROWSER_TEST_F(ContentFaviconDriverTest, 297 IN_PROC_BROWSER_TEST_F(ContentFaviconDriverTest,
293 LoadRegularIconDespiteWebManifestWithoutIcons) { 298 LoadRegularIconDespiteWebManifestWithoutIcons) {
294 ASSERT_TRUE(embedded_test_server()->Start()); 299 ASSERT_TRUE(embedded_test_server()->Start());
295 GURL url = embedded_test_server()->GetURL( 300 GURL url = embedded_test_server()->GetURL(
296 "/favicon/page_with_manifest_without_icons.html"); 301 "/favicon/page_with_manifest_without_icons.html");
297 GURL icon_url = embedded_test_server()->GetURL("/favicon/icon.png"); 302 GURL icon_url = embedded_test_server()->GetURL("/favicon/icon.png");
298 303
299 // Initial visit with the feature still disabled, to populate the cache. 304 // Initial visit with the feature still disabled, to populate the cache.
300 { 305 {
301 PendingTaskWaiter waiter(web_contents(), this); 306 PendingTaskWaiter waiter(web_contents(), this);
302 ui_test_utils::NavigateToURLWithDisposition( 307 ui_test_utils::NavigateToURLWithDisposition(
303 browser(), url, WindowOpenDisposition::CURRENT_TAB, 308 browser(), url, WindowOpenDisposition::CURRENT_TAB,
304 ui_test_utils::BROWSER_TEST_NONE); 309 ui_test_utils::BROWSER_TEST_NONE);
305 waiter.Wait(); 310 waiter.Wait();
306 } 311 }
307 ASSERT_NE(nullptr, GetFaviconForPageURL(url).bitmap_data); 312 ASSERT_NE(nullptr,
313 GetFaviconForPageURL(url, favicon_base::FAVICON).bitmap_data);
308 314
309 ui_test_utils::NavigateToURL(browser(), GURL(url::kAboutBlankURL)); 315 ui_test_utils::NavigateToURL(browser(), GURL(url::kAboutBlankURL));
310 316
311 // Enable the feature and visit the page again. 317 // Enable the feature and visit the page again.
312 base::test::ScopedFeatureList override_features; 318 base::test::ScopedFeatureList override_features;
313 override_features.InitAndEnableFeature(favicon::kFaviconsFromWebManifest); 319 override_features.InitAndEnableFeature(favicon::kFaviconsFromWebManifest);
314 320
315 { 321 {
316 PendingTaskWaiter waiter(web_contents(), this); 322 PendingTaskWaiter waiter(web_contents(), this);
317 ui_test_utils::NavigateToURLWithDisposition( 323 ui_test_utils::NavigateToURLWithDisposition(
318 browser(), url, WindowOpenDisposition::CURRENT_TAB, 324 browser(), url, WindowOpenDisposition::CURRENT_TAB,
319 ui_test_utils::BROWSER_TEST_NONE); 325 ui_test_utils::BROWSER_TEST_NONE);
320 waiter.Wait(); 326 waiter.Wait();
321 } 327 }
322 328
323 EXPECT_NE(nullptr, GetFaviconForPageURL(url).bitmap_data); 329 EXPECT_NE(nullptr,
330 GetFaviconForPageURL(url, favicon_base::FAVICON).bitmap_data);
324 } 331 }
332
333 IN_PROC_BROWSER_TEST_F(ContentFaviconDriverTest,
334 LoadFaviconDespiteFragmentLocationOverride) {
335 ASSERT_TRUE(embedded_test_server()->Start());
336 GURL url = embedded_test_server()->GetURL(
337 "/favicon/page_with_location_override.html");
338 GURL url_with_fragment = embedded_test_server()->GetURL(
339 "/favicon/page_with_location_override.html#foo");
340
341 PendingTaskWaiter waiter(web_contents(), this);
342 ui_test_utils::NavigateToURLWithDisposition(
343 browser(), url, WindowOpenDisposition::CURRENT_TAB,
344 ui_test_utils::BROWSER_TEST_NONE);
345 waiter.Wait();
346
347 EXPECT_NE(nullptr,
348 GetFaviconForPageURL(url, favicon_base::FAVICON).bitmap_data);
349 EXPECT_NE(nullptr,
350 GetFaviconForPageURL(url_with_fragment, favicon_base::FAVICON)
351 .bitmap_data);
352 }
353
354 IN_PROC_BROWSER_TEST_F(ContentFaviconDriverTest,
355 LoadFaviconDespiteHashOverride) {
356 ASSERT_TRUE(embedded_test_server()->Start());
357 GURL url =
358 embedded_test_server()->GetURL("/favicon/page_with_hash_override.html");
359 GURL url_with_fragment = embedded_test_server()->GetURL(
360 "/favicon/page_with_hash_override.html#foo");
361
362 PendingTaskWaiter waiter(web_contents(), this);
363 ui_test_utils::NavigateToURLWithDisposition(
364 browser(), url, WindowOpenDisposition::CURRENT_TAB,
365 ui_test_utils::BROWSER_TEST_NONE);
366 waiter.Wait();
367
368 EXPECT_NE(nullptr,
369 GetFaviconForPageURL(url, favicon_base::FAVICON).bitmap_data);
370 EXPECT_NE(nullptr,
371 GetFaviconForPageURL(url_with_fragment, favicon_base::FAVICON)
372 .bitmap_data);
373 }
374
375 IN_PROC_BROWSER_TEST_F(ContentFaviconDriverTest, LoadFaviconDespitePushState) {
376 ASSERT_TRUE(embedded_test_server()->Start());
377 GURL url =
378 embedded_test_server()->GetURL("/favicon/pushstate_with_favicon.html");
379 GURL pushstate_url = embedded_test_server()->GetURL(
380 "/favicon/pushstate_with_favicon_pushed.html");
381
382 PendingTaskWaiter waiter(web_contents(), this);
383 ui_test_utils::NavigateToURLWithDisposition(
384 browser(), url, WindowOpenDisposition::CURRENT_TAB,
385 ui_test_utils::BROWSER_TEST_NONE);
386 waiter.Wait();
387
388 EXPECT_NE(nullptr,
389 GetFaviconForPageURL(url, favicon_base::FAVICON).bitmap_data);
390 EXPECT_NE(
391 nullptr,
392 GetFaviconForPageURL(pushstate_url, favicon_base::FAVICON).bitmap_data);
393 }
394
395 IN_PROC_BROWSER_TEST_F(ContentFaviconDriverTest,
396 LoadFaviconDespiteReplaceState) {
397 ASSERT_TRUE(embedded_test_server()->Start());
398 GURL url =
399 embedded_test_server()->GetURL("/favicon/replacestate_with_favicon.html");
400 GURL replacestate_url = embedded_test_server()->GetURL(
401 "/favicon/replacestate_with_favicon_replaced.html");
402
403 PendingTaskWaiter waiter(web_contents(), this);
404 ui_test_utils::NavigateToURLWithDisposition(
405 browser(), url, WindowOpenDisposition::CURRENT_TAB,
406 ui_test_utils::BROWSER_TEST_NONE);
407 waiter.Wait();
408
409 EXPECT_NE(nullptr,
410 GetFaviconForPageURL(url, favicon_base::FAVICON).bitmap_data);
411 EXPECT_NE(nullptr,
412 GetFaviconForPageURL(replacestate_url, favicon_base::FAVICON)
413 .bitmap_data);
414 }
415
416 #if defined(OS_ANDROID) || defined(OS_IOS)
417 IN_PROC_BROWSER_TEST_F(ContentFaviconDriverTest,
sky 2017/06/22 15:26:38 What is android/i-os specific here?
418 LoadIconFromWebManifestDespitePushState) {
419 base::test::ScopedFeatureList override_features;
420 override_features.InitAndEnableFeature(favicon::kFaviconsFromWebManifest);
421
422 ASSERT_TRUE(embedded_test_server()->Start());
423 GURL url =
424 embedded_test_server()->GetURL("/favicon/pushstate_with_manifest.html");
425 GURL pushstate_url = embedded_test_server()->GetURL(
426 "/favicon/pushstate_with_manifest.html#pushState");
427
428 PendingTaskWaiter waiter(web_contents(), this);
429 ui_test_utils::NavigateToURLWithDisposition(
430 browser(), url, WindowOpenDisposition::CURRENT_TAB,
431 ui_test_utils::BROWSER_TEST_NONE);
432 waiter.Wait();
433
434 EXPECT_NE(nullptr,
435 GetFaviconForPageURL(pushstate_url, favicon_base::WEB_MANIFEST_ICON)
436 .bitmap_data);
437 }
438 #endif
OLDNEW
« no previous file with comments | « no previous file | chrome/browser/history/history_tab_helper.cc » ('j') | chrome/browser/history/history_tab_helper.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698