OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/core/favicon_handler.h" | 5 #include "components/favicon/core/favicon_handler.h" |
6 | 6 |
7 #include<set> | 7 #include<set> |
8 #include<vector> | 8 #include<vector> |
9 | 9 |
10 #include "base/memory/scoped_ptr.h" | 10 #include "base/memory/scoped_ptr.h" |
(...skipping 311 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
322 | 322 |
323 // This method will take the ownership of the given handler. | 323 // This method will take the ownership of the given handler. |
324 void set_history_handler(HistoryRequestHandler* handler) { | 324 void set_history_handler(HistoryRequestHandler* handler) { |
325 history_handler_.reset(handler); | 325 history_handler_.reset(handler); |
326 } | 326 } |
327 | 327 |
328 DownloadHandler* download_handler() { | 328 DownloadHandler* download_handler() { |
329 return download_handler_.get(); | 329 return download_handler_.get(); |
330 } | 330 } |
331 | 331 |
332 // Methods to access favicon internals. | |
333 const std::vector<FaviconURL>& urls() { | |
334 return image_urls_; | |
335 } | |
336 | |
337 FaviconURL* current_candidate() { | 332 FaviconURL* current_candidate() { |
338 return FaviconHandler::current_candidate(); | 333 return FaviconHandler::current_candidate(); |
339 } | 334 } |
340 | 335 |
| 336 size_t current_candidate_index() const { |
| 337 return current_candidate_index_; |
| 338 } |
| 339 |
341 const FaviconCandidate& best_favicon_candidate() { | 340 const FaviconCandidate& best_favicon_candidate() { |
342 return best_favicon_candidate_; | 341 return best_favicon_candidate_; |
343 } | 342 } |
344 | 343 |
345 protected: | 344 protected: |
346 void UpdateFaviconMappingAndFetch( | 345 void UpdateFaviconMappingAndFetch( |
347 const GURL& page_url, | 346 const GURL& page_url, |
348 const GURL& icon_url, | 347 const GURL& icon_url, |
349 favicon_base::IconType icon_type, | 348 favicon_base::IconType icon_type, |
350 const favicon_base::FaviconResultsCallback& callback, | 349 const favicon_base::FaviconResultsCallback& callback, |
(...skipping 197 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
548 EXPECT_TRUE(driver.GetActiveFaviconValidity()); | 547 EXPECT_TRUE(driver.GetActiveFaviconValidity()); |
549 EXPECT_EQ(icon_url, driver.GetActiveFaviconURL()); | 548 EXPECT_EQ(icon_url, driver.GetActiveFaviconURL()); |
550 | 549 |
551 // Simulates update favicon url. | 550 // Simulates update favicon url. |
552 std::vector<FaviconURL> urls; | 551 std::vector<FaviconURL> urls; |
553 urls.push_back( | 552 urls.push_back( |
554 FaviconURL(icon_url, favicon_base::FAVICON, std::vector<gfx::Size>())); | 553 FaviconURL(icon_url, favicon_base::FAVICON, std::vector<gfx::Size>())); |
555 helper.OnUpdateFaviconURL(page_url, urls); | 554 helper.OnUpdateFaviconURL(page_url, urls); |
556 | 555 |
557 // Verify FaviconHandler status | 556 // Verify FaviconHandler status |
558 EXPECT_EQ(1U, helper.urls().size()); | 557 EXPECT_EQ(1u, helper.image_urls().size()); |
559 ASSERT_TRUE(helper.current_candidate()); | 558 ASSERT_TRUE(helper.current_candidate()); |
560 ASSERT_EQ(icon_url, helper.current_candidate()->icon_url); | 559 ASSERT_EQ(icon_url, helper.current_candidate()->icon_url); |
561 ASSERT_EQ(favicon_base::FAVICON, helper.current_candidate()->icon_type); | 560 ASSERT_EQ(favicon_base::FAVICON, helper.current_candidate()->icon_type); |
562 | 561 |
563 // Favicon shouldn't request to download icon. | 562 // Favicon shouldn't request to download icon. |
564 EXPECT_FALSE(helper.download_handler()->HasDownload()); | 563 EXPECT_FALSE(helper.download_handler()->HasDownload()); |
565 } | 564 } |
566 | 565 |
567 TEST_F(FaviconHandlerTest, DownloadFavicon) { | 566 TEST_F(FaviconHandlerTest, DownloadFavicon) { |
568 const GURL page_url("http://www.google.com"); | 567 const GURL page_url("http://www.google.com"); |
(...skipping 21 matching lines...) Expand all Loading... |
590 EXPECT_TRUE(driver.GetActiveFaviconValidity()); | 589 EXPECT_TRUE(driver.GetActiveFaviconValidity()); |
591 EXPECT_EQ(icon_url, driver.GetActiveFaviconURL()); | 590 EXPECT_EQ(icon_url, driver.GetActiveFaviconURL()); |
592 | 591 |
593 // Simulates update favicon url. | 592 // Simulates update favicon url. |
594 std::vector<FaviconURL> urls; | 593 std::vector<FaviconURL> urls; |
595 urls.push_back( | 594 urls.push_back( |
596 FaviconURL(icon_url, favicon_base::FAVICON, std::vector<gfx::Size>())); | 595 FaviconURL(icon_url, favicon_base::FAVICON, std::vector<gfx::Size>())); |
597 helper.OnUpdateFaviconURL(page_url, urls); | 596 helper.OnUpdateFaviconURL(page_url, urls); |
598 | 597 |
599 // Verify FaviconHandler status | 598 // Verify FaviconHandler status |
600 EXPECT_EQ(1U, helper.urls().size()); | 599 EXPECT_EQ(1u, helper.image_urls().size()); |
601 ASSERT_TRUE(helper.current_candidate()); | 600 ASSERT_TRUE(helper.current_candidate()); |
602 ASSERT_EQ(icon_url, helper.current_candidate()->icon_url); | 601 ASSERT_EQ(icon_url, helper.current_candidate()->icon_url); |
603 ASSERT_EQ(favicon_base::FAVICON, helper.current_candidate()->icon_type); | 602 ASSERT_EQ(favicon_base::FAVICON, helper.current_candidate()->icon_type); |
604 | 603 |
605 // Favicon should request to download icon now. | 604 // Favicon should request to download icon now. |
606 DownloadHandler* download_handler = helper.download_handler(); | 605 DownloadHandler* download_handler = helper.download_handler(); |
607 EXPECT_TRUE(helper.download_handler()->HasDownload()); | 606 EXPECT_TRUE(helper.download_handler()->HasDownload()); |
608 | 607 |
609 // Verify the download request. | 608 // Verify the download request. |
610 EXPECT_EQ(icon_url, download_handler->GetImageUrl()); | 609 EXPECT_EQ(icon_url, download_handler->GetImageUrl()); |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
659 // history. | 658 // history. |
660 helper.set_history_handler(nullptr); | 659 helper.set_history_handler(nullptr); |
661 | 660 |
662 // Simulates update with the different favicon url. | 661 // Simulates update with the different favicon url. |
663 std::vector<FaviconURL> urls; | 662 std::vector<FaviconURL> urls; |
664 urls.push_back(FaviconURL( | 663 urls.push_back(FaviconURL( |
665 new_icon_url, favicon_base::FAVICON, std::vector<gfx::Size>())); | 664 new_icon_url, favicon_base::FAVICON, std::vector<gfx::Size>())); |
666 helper.OnUpdateFaviconURL(page_url, urls); | 665 helper.OnUpdateFaviconURL(page_url, urls); |
667 | 666 |
668 // Verify FaviconHandler status. | 667 // Verify FaviconHandler status. |
669 EXPECT_EQ(1U, helper.urls().size()); | 668 EXPECT_EQ(1u, helper.image_urls().size()); |
670 ASSERT_TRUE(helper.current_candidate()); | 669 ASSERT_TRUE(helper.current_candidate()); |
671 ASSERT_EQ(new_icon_url, helper.current_candidate()->icon_url); | 670 ASSERT_EQ(new_icon_url, helper.current_candidate()->icon_url); |
672 ASSERT_EQ(favicon_base::FAVICON, helper.current_candidate()->icon_type); | 671 ASSERT_EQ(favicon_base::FAVICON, helper.current_candidate()->icon_type); |
673 | 672 |
674 // Favicon should be requested from history. | 673 // Favicon should be requested from history. |
675 history_handler = helper.history_handler(); | 674 history_handler = helper.history_handler(); |
676 ASSERT_TRUE(history_handler); | 675 ASSERT_TRUE(history_handler); |
677 EXPECT_EQ(new_icon_url, history_handler->icon_url_); | 676 EXPECT_EQ(new_icon_url, history_handler->icon_url_); |
678 EXPECT_EQ(favicon_base::FAVICON, history_handler->icon_type_); | 677 EXPECT_EQ(favicon_base::FAVICON, history_handler->icon_type_); |
679 EXPECT_EQ(page_url, history_handler->page_url_); | 678 EXPECT_EQ(page_url, history_handler->page_url_); |
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
807 // history. | 806 // history. |
808 helper.set_history_handler(nullptr); | 807 helper.set_history_handler(nullptr); |
809 | 808 |
810 // Simulates update with the different favicon url. | 809 // Simulates update with the different favicon url. |
811 std::vector<FaviconURL> urls; | 810 std::vector<FaviconURL> urls; |
812 urls.push_back(FaviconURL( | 811 urls.push_back(FaviconURL( |
813 new_icon_url, favicon_base::FAVICON, std::vector<gfx::Size>())); | 812 new_icon_url, favicon_base::FAVICON, std::vector<gfx::Size>())); |
814 helper.OnUpdateFaviconURL(page_url, urls); | 813 helper.OnUpdateFaviconURL(page_url, urls); |
815 | 814 |
816 // Verify FaviconHandler status. | 815 // Verify FaviconHandler status. |
817 EXPECT_EQ(1U, helper.urls().size()); | 816 EXPECT_EQ(1u, helper.image_urls().size()); |
818 ASSERT_TRUE(helper.current_candidate()); | 817 ASSERT_TRUE(helper.current_candidate()); |
819 ASSERT_EQ(new_icon_url, helper.current_candidate()->icon_url); | 818 ASSERT_EQ(new_icon_url, helper.current_candidate()->icon_url); |
820 ASSERT_EQ(favicon_base::FAVICON, helper.current_candidate()->icon_type); | 819 ASSERT_EQ(favicon_base::FAVICON, helper.current_candidate()->icon_type); |
821 | 820 |
822 // Favicon should be requested from history. | 821 // Favicon should be requested from history. |
823 history_handler = helper.history_handler(); | 822 history_handler = helper.history_handler(); |
824 ASSERT_TRUE(history_handler); | 823 ASSERT_TRUE(history_handler); |
825 EXPECT_EQ(new_icon_url, history_handler->icon_url_); | 824 EXPECT_EQ(new_icon_url, history_handler->icon_url_); |
826 EXPECT_EQ(favicon_base::FAVICON, history_handler->icon_type_); | 825 EXPECT_EQ(favicon_base::FAVICON, history_handler->icon_type_); |
827 EXPECT_EQ(page_url, history_handler->page_url_); | 826 EXPECT_EQ(page_url, history_handler->page_url_); |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
876 urls.push_back(FaviconURL(icon_url, | 875 urls.push_back(FaviconURL(icon_url, |
877 favicon_base::TOUCH_PRECOMPOSED_ICON, | 876 favicon_base::TOUCH_PRECOMPOSED_ICON, |
878 std::vector<gfx::Size>())); | 877 std::vector<gfx::Size>())); |
879 urls.push_back(FaviconURL( | 878 urls.push_back(FaviconURL( |
880 new_icon_url, favicon_base::TOUCH_ICON, std::vector<gfx::Size>())); | 879 new_icon_url, favicon_base::TOUCH_ICON, std::vector<gfx::Size>())); |
881 urls.push_back(FaviconURL( | 880 urls.push_back(FaviconURL( |
882 new_icon_url, favicon_base::FAVICON, std::vector<gfx::Size>())); | 881 new_icon_url, favicon_base::FAVICON, std::vector<gfx::Size>())); |
883 helper.OnUpdateFaviconURL(page_url, urls); | 882 helper.OnUpdateFaviconURL(page_url, urls); |
884 | 883 |
885 // Verify FaviconHandler status. | 884 // Verify FaviconHandler status. |
886 EXPECT_EQ(2U, helper.urls().size()); | 885 EXPECT_EQ(2u, helper.image_urls().size()); |
| 886 EXPECT_EQ(0u, helper.current_candidate_index()); |
887 ASSERT_TRUE(helper.current_candidate()); | 887 ASSERT_TRUE(helper.current_candidate()); |
888 ASSERT_EQ(icon_url, helper.current_candidate()->icon_url); | 888 ASSERT_EQ(icon_url, helper.current_candidate()->icon_url); |
889 ASSERT_EQ(favicon_base::TOUCH_PRECOMPOSED_ICON, | 889 ASSERT_EQ(favicon_base::TOUCH_PRECOMPOSED_ICON, |
890 helper.current_candidate()->icon_type); | 890 helper.current_candidate()->icon_type); |
891 | 891 |
892 // Favicon should be requested from history. | 892 // Favicon should be requested from history. |
893 history_handler = helper.history_handler(); | 893 history_handler = helper.history_handler(); |
894 ASSERT_TRUE(history_handler); | 894 ASSERT_TRUE(history_handler); |
895 EXPECT_EQ(icon_url, history_handler->icon_url_); | 895 EXPECT_EQ(icon_url, history_handler->icon_url_); |
896 EXPECT_EQ(favicon_base::TOUCH_PRECOMPOSED_ICON, history_handler->icon_type_); | 896 EXPECT_EQ(favicon_base::TOUCH_PRECOMPOSED_ICON, history_handler->icon_type_); |
897 EXPECT_EQ(page_url, history_handler->page_url_); | 897 EXPECT_EQ(page_url, history_handler->page_url_); |
898 | 898 |
899 // Simulate not find icon. | 899 // Simulate not find icon. |
900 history_handler->history_results_.clear(); | 900 history_handler->history_results_.clear(); |
901 history_handler->InvokeCallback(); | 901 history_handler->InvokeCallback(); |
902 | 902 |
903 // Should request download favicon. | 903 // Should request download favicon. |
904 DownloadHandler* download_handler = helper.download_handler(); | 904 DownloadHandler* download_handler = helper.download_handler(); |
905 EXPECT_TRUE(helper.download_handler()->HasDownload()); | 905 EXPECT_TRUE(helper.download_handler()->HasDownload()); |
906 | 906 |
907 // Verify the download request. | 907 // Verify the download request. |
908 EXPECT_EQ(icon_url, download_handler->GetImageUrl()); | 908 EXPECT_EQ(icon_url, download_handler->GetImageUrl()); |
909 | 909 |
910 // Reset the history_handler to verify whether favicon is request from | 910 // Reset the history_handler to verify whether favicon is request from |
911 // history. | 911 // history. |
912 helper.set_history_handler(nullptr); | 912 helper.set_history_handler(nullptr); |
913 download_handler->InvokeCallback(); | 913 download_handler->InvokeCallback(); |
914 | 914 |
915 // Left 1 url. | 915 // Left 1 url. |
916 EXPECT_EQ(1U, helper.urls().size()); | 916 EXPECT_EQ(1u, helper.current_candidate_index()); |
917 ASSERT_TRUE(helper.current_candidate()); | 917 ASSERT_TRUE(helper.current_candidate()); |
918 EXPECT_EQ(new_icon_url, helper.current_candidate()->icon_url); | 918 EXPECT_EQ(new_icon_url, helper.current_candidate()->icon_url); |
919 EXPECT_EQ(favicon_base::TOUCH_ICON, helper.current_candidate()->icon_type); | 919 EXPECT_EQ(favicon_base::TOUCH_ICON, helper.current_candidate()->icon_type); |
920 | 920 |
921 // Favicon should be requested from history. | 921 // Favicon should be requested from history. |
922 history_handler = helper.history_handler(); | 922 history_handler = helper.history_handler(); |
923 ASSERT_TRUE(history_handler); | 923 ASSERT_TRUE(history_handler); |
924 EXPECT_EQ(new_icon_url, history_handler->icon_url_); | 924 EXPECT_EQ(new_icon_url, history_handler->icon_url_); |
925 EXPECT_EQ(favicon_base::TOUCH_ICON, history_handler->icon_type_); | 925 EXPECT_EQ(favicon_base::TOUCH_ICON, history_handler->icon_type_); |
926 EXPECT_EQ(page_url, history_handler->page_url_); | 926 EXPECT_EQ(page_url, history_handler->page_url_); |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
987 urls.push_back(FaviconURL(icon_url, | 987 urls.push_back(FaviconURL(icon_url, |
988 favicon_base::TOUCH_PRECOMPOSED_ICON, | 988 favicon_base::TOUCH_PRECOMPOSED_ICON, |
989 std::vector<gfx::Size>())); | 989 std::vector<gfx::Size>())); |
990 urls.push_back(FaviconURL( | 990 urls.push_back(FaviconURL( |
991 new_icon_url, favicon_base::TOUCH_ICON, std::vector<gfx::Size>())); | 991 new_icon_url, favicon_base::TOUCH_ICON, std::vector<gfx::Size>())); |
992 urls.push_back(FaviconURL( | 992 urls.push_back(FaviconURL( |
993 new_icon_url, favicon_base::FAVICON, std::vector<gfx::Size>())); | 993 new_icon_url, favicon_base::FAVICON, std::vector<gfx::Size>())); |
994 helper.OnUpdateFaviconURL(page_url, urls); | 994 helper.OnUpdateFaviconURL(page_url, urls); |
995 | 995 |
996 // Verify FaviconHandler status. | 996 // Verify FaviconHandler status. |
997 EXPECT_EQ(2U, helper.urls().size()); | 997 EXPECT_EQ(2u, helper.image_urls().size()); |
998 ASSERT_TRUE(helper.current_candidate()); | 998 ASSERT_EQ(0u, helper.current_candidate_index()); |
999 ASSERT_EQ(icon_url, helper.current_candidate()->icon_url); | 999 ASSERT_EQ(icon_url, helper.current_candidate()->icon_url); |
1000 ASSERT_EQ(favicon_base::TOUCH_PRECOMPOSED_ICON, | 1000 ASSERT_EQ(favicon_base::TOUCH_PRECOMPOSED_ICON, |
1001 helper.current_candidate()->icon_type); | 1001 helper.current_candidate()->icon_type); |
1002 | 1002 |
1003 // Favicon should be requested from history. | 1003 // Favicon should be requested from history. |
1004 history_handler = helper.history_handler(); | 1004 history_handler = helper.history_handler(); |
1005 ASSERT_TRUE(history_handler); | 1005 ASSERT_TRUE(history_handler); |
1006 EXPECT_EQ(icon_url, history_handler->icon_url_); | 1006 EXPECT_EQ(icon_url, history_handler->icon_url_); |
1007 EXPECT_EQ(favicon_base::TOUCH_PRECOMPOSED_ICON, history_handler->icon_type_); | 1007 EXPECT_EQ(favicon_base::TOUCH_PRECOMPOSED_ICON, history_handler->icon_type_); |
1008 EXPECT_EQ(page_url, history_handler->page_url_); | 1008 EXPECT_EQ(page_url, history_handler->page_url_); |
(...skipping 11 matching lines...) Expand all Loading... |
1020 | 1020 |
1021 // Reset the history_handler to verify whether favicon is request from | 1021 // Reset the history_handler to verify whether favicon is request from |
1022 // history. | 1022 // history. |
1023 helper.set_history_handler(nullptr); | 1023 helper.set_history_handler(nullptr); |
1024 const GURL latest_icon_url("http://www.google.com/latest_favicon"); | 1024 const GURL latest_icon_url("http://www.google.com/latest_favicon"); |
1025 std::vector<FaviconURL> latest_urls; | 1025 std::vector<FaviconURL> latest_urls; |
1026 latest_urls.push_back(FaviconURL( | 1026 latest_urls.push_back(FaviconURL( |
1027 latest_icon_url, favicon_base::TOUCH_ICON, std::vector<gfx::Size>())); | 1027 latest_icon_url, favicon_base::TOUCH_ICON, std::vector<gfx::Size>())); |
1028 helper.OnUpdateFaviconURL(page_url, latest_urls); | 1028 helper.OnUpdateFaviconURL(page_url, latest_urls); |
1029 | 1029 |
1030 EXPECT_EQ(1U, helper.urls().size()); | 1030 EXPECT_EQ(1u, helper.image_urls().size()); |
| 1031 EXPECT_EQ(0u, helper.current_candidate_index()); |
1031 EXPECT_EQ(latest_icon_url, helper.current_candidate()->icon_url); | 1032 EXPECT_EQ(latest_icon_url, helper.current_candidate()->icon_url); |
1032 EXPECT_EQ(favicon_base::TOUCH_ICON, helper.current_candidate()->icon_type); | 1033 EXPECT_EQ(favicon_base::TOUCH_ICON, helper.current_candidate()->icon_type); |
1033 | 1034 |
1034 // Whether new icon is requested from history | 1035 // Whether new icon is requested from history |
1035 history_handler = helper.history_handler(); | 1036 history_handler = helper.history_handler(); |
1036 ASSERT_TRUE(history_handler); | 1037 ASSERT_TRUE(history_handler); |
1037 EXPECT_EQ(latest_icon_url, history_handler->icon_url_); | 1038 EXPECT_EQ(latest_icon_url, history_handler->icon_url_); |
1038 EXPECT_EQ(favicon_base::TOUCH_ICON, history_handler->icon_type_); | 1039 EXPECT_EQ(favicon_base::TOUCH_ICON, history_handler->icon_type_); |
1039 EXPECT_EQ(page_url, history_handler->page_url_); | 1040 EXPECT_EQ(page_url, history_handler->page_url_); |
1040 | 1041 |
(...skipping 17 matching lines...) Expand all Loading... |
1058 SetFaviconRawBitmapResult(latest_icon_url, | 1059 SetFaviconRawBitmapResult(latest_icon_url, |
1059 favicon_base::TOUCH_ICON, | 1060 favicon_base::TOUCH_ICON, |
1060 false /* expired */, | 1061 false /* expired */, |
1061 &handler->history_results_); | 1062 &handler->history_results_); |
1062 handler->InvokeCallback(); | 1063 handler->InvokeCallback(); |
1063 | 1064 |
1064 // No download request. | 1065 // No download request. |
1065 EXPECT_FALSE(download_handler->HasDownload()); | 1066 EXPECT_FALSE(download_handler->HasDownload()); |
1066 } | 1067 } |
1067 | 1068 |
| 1069 // Test that sending an icon URL update identical to the previous icon URL |
| 1070 // update is a no-op. |
| 1071 TEST_F(FaviconHandlerTest, UpdateSameIconURLs) { |
| 1072 const GURL page_url("http://www.google.com"); |
| 1073 const GURL icon_url1("http://www.google.com/favicon1"); |
| 1074 const GURL icon_url2("http://www.google.com/favicon2"); |
| 1075 std::vector<FaviconURL> favicon_urls; |
| 1076 favicon_urls.push_back(FaviconURL(GURL("http://www.google.com/favicon1"), |
| 1077 favicon_base::FAVICON, |
| 1078 std::vector<gfx::Size>())); |
| 1079 favicon_urls.push_back(FaviconURL(GURL("http://www.google.com/favicon2"), |
| 1080 favicon_base::FAVICON, |
| 1081 std::vector<gfx::Size>())); |
| 1082 |
| 1083 TestFaviconDriver driver; |
| 1084 TestFaviconHandler helper(page_url, &driver, FaviconHandler::FAVICON, false); |
| 1085 |
| 1086 // Initiate a request for favicon data for |page_url|. History does not know |
| 1087 // about the page URL or the icon URLs. |
| 1088 helper.FetchFavicon(page_url); |
| 1089 helper.history_handler()->InvokeCallback(); |
| 1090 helper.set_history_handler(nullptr); |
| 1091 |
| 1092 // Got icon URLs. |
| 1093 helper.OnUpdateFaviconURL(page_url, favicon_urls); |
| 1094 |
| 1095 // There should be an ongoing history request for |icon_url1|. |
| 1096 ASSERT_EQ(2u, helper.image_urls().size()); |
| 1097 ASSERT_EQ(0u, helper.current_candidate_index()); |
| 1098 HistoryRequestHandler* history_handler = helper.history_handler(); |
| 1099 ASSERT_TRUE(history_handler); |
| 1100 |
| 1101 // Calling OnUpdateFaviconURL() with the same icon URLs should have no effect. |
| 1102 helper.OnUpdateFaviconURL(page_url, favicon_urls); |
| 1103 EXPECT_EQ(history_handler, helper.history_handler()); |
| 1104 |
| 1105 // Complete history request for |icon_url1| and do download. |
| 1106 helper.history_handler()->InvokeCallback(); |
| 1107 helper.set_history_handler(nullptr); |
| 1108 helper.download_handler()->SetImageSizes(std::vector<int>(1u, 10)); |
| 1109 helper.download_handler()->InvokeCallback(); |
| 1110 helper.download_handler()->Reset(); |
| 1111 |
| 1112 // There should now be an ongoing history request for |icon_url2|. |
| 1113 ASSERT_EQ(1u, helper.current_candidate_index()); |
| 1114 history_handler = helper.history_handler(); |
| 1115 ASSERT_TRUE(history_handler); |
| 1116 |
| 1117 // Calling OnUpdateFaviconURL() with the same icon URLs should have no effect. |
| 1118 helper.OnUpdateFaviconURL(page_url, favicon_urls); |
| 1119 EXPECT_EQ(history_handler, helper.history_handler()); |
| 1120 } |
| 1121 |
1068 // Test the favicon which is selected when the web page provides several | 1122 // Test the favicon which is selected when the web page provides several |
1069 // favicons and none of the favicons are cached in history. | 1123 // favicons and none of the favicons are cached in history. |
1070 // The goal of this test is to be more of an integration test than | 1124 // The goal of this test is to be more of an integration test than |
1071 // SelectFaviconFramesTest.*. | 1125 // SelectFaviconFramesTest.*. |
1072 TEST_F(FaviconHandlerTest, MultipleFavicons) { | 1126 TEST_F(FaviconHandlerTest, MultipleFavicons) { |
1073 const GURL kPageURL("http://www.google.com"); | 1127 const GURL kPageURL("http://www.google.com"); |
1074 const FaviconURL kSourceIconURLs[] = { | 1128 const FaviconURL kSourceIconURLs[] = { |
1075 FaviconURL(GURL("http://www.google.com/a"), | 1129 FaviconURL(GURL("http://www.google.com/a"), |
1076 favicon_base::FAVICON, | 1130 favicon_base::FAVICON, |
1077 std::vector<gfx::Size>()), | 1131 std::vector<gfx::Size>()), |
(...skipping 22 matching lines...) Expand all Loading... |
1100 TestFaviconDriver driver1; | 1154 TestFaviconDriver driver1; |
1101 TestFaviconHandler handler1(kPageURL, &driver1, FaviconHandler::FAVICON, | 1155 TestFaviconHandler handler1(kPageURL, &driver1, FaviconHandler::FAVICON, |
1102 false); | 1156 false); |
1103 | 1157 |
1104 const int kSizes1[] = { 16, 24, 32, 48, 256 }; | 1158 const int kSizes1[] = { 16, 24, 32, 48, 256 }; |
1105 std::vector<FaviconURL> urls1(kSourceIconURLs, | 1159 std::vector<FaviconURL> urls1(kSourceIconURLs, |
1106 kSourceIconURLs + arraysize(kSizes1)); | 1160 kSourceIconURLs + arraysize(kSizes1)); |
1107 DownloadTillDoneIgnoringHistory( | 1161 DownloadTillDoneIgnoringHistory( |
1108 &driver1, &handler1, kPageURL, urls1, kSizes1); | 1162 &driver1, &handler1, kPageURL, urls1, kSizes1); |
1109 | 1163 |
1110 EXPECT_EQ(0u, handler1.image_urls().size()); | 1164 EXPECT_EQ(nullptr, handler1.current_candidate()); |
1111 EXPECT_TRUE(driver1.GetActiveFaviconValidity()); | 1165 EXPECT_TRUE(driver1.GetActiveFaviconValidity()); |
1112 EXPECT_FALSE(driver1.GetActiveFaviconImage().IsEmpty()); | 1166 EXPECT_FALSE(driver1.GetActiveFaviconImage().IsEmpty()); |
1113 EXPECT_EQ(gfx::kFaviconSize, driver1.GetActiveFaviconImage().Width()); | 1167 EXPECT_EQ(gfx::kFaviconSize, driver1.GetActiveFaviconImage().Width()); |
1114 | 1168 |
1115 size_t expected_index = 2u; | 1169 size_t expected_index = 2u; |
1116 EXPECT_EQ(32, kSizes1[expected_index]); | 1170 EXPECT_EQ(32, kSizes1[expected_index]); |
1117 EXPECT_EQ(kSourceIconURLs[expected_index].icon_url, | 1171 EXPECT_EQ(kSourceIconURLs[expected_index].icon_url, |
1118 driver1.GetActiveFaviconURL()); | 1172 driver1.GetActiveFaviconURL()); |
1119 | 1173 |
1120 // 2) Test that if there are several single resolution favicons to choose | 1174 // 2) Test that if there are several single resolution favicons to choose |
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1203 | 1257 |
1204 // Do a fetch now that the initial download for |k404IconURL| has failed. The | 1258 // Do a fetch now that the initial download for |k404IconURL| has failed. The |
1205 // behavior is different because OnDidDownloadFavicon() is invoked | 1259 // behavior is different because OnDidDownloadFavicon() is invoked |
1206 // synchronously from DownloadFavicon(). | 1260 // synchronously from DownloadFavicon(). |
1207 const int kSizes2[] = { 10, 0, 16 }; | 1261 const int kSizes2[] = { 10, 0, 16 }; |
1208 std::vector<FaviconURL> urls2(kFaviconURLs, | 1262 std::vector<FaviconURL> urls2(kFaviconURLs, |
1209 kFaviconURLs + arraysize(kFaviconURLs)); | 1263 kFaviconURLs + arraysize(kFaviconURLs)); |
1210 DownloadTillDoneIgnoringHistory( | 1264 DownloadTillDoneIgnoringHistory( |
1211 &driver, &handler, kPageURL, urls2, kSizes2); | 1265 &driver, &handler, kPageURL, urls2, kSizes2); |
1212 | 1266 |
1213 EXPECT_EQ(0u, handler.image_urls().size()); | 1267 EXPECT_EQ(nullptr, handler.current_candidate()); |
1214 EXPECT_TRUE(driver.GetActiveFaviconValidity()); | 1268 EXPECT_TRUE(driver.GetActiveFaviconValidity()); |
1215 EXPECT_FALSE(driver.GetActiveFaviconImage().IsEmpty()); | 1269 EXPECT_FALSE(driver.GetActiveFaviconImage().IsEmpty()); |
1216 int expected_index = 2u; | 1270 int expected_index = 2u; |
1217 EXPECT_EQ(16, kSizes2[expected_index]); | 1271 EXPECT_EQ(16, kSizes2[expected_index]); |
1218 EXPECT_EQ(kFaviconURLs[expected_index].icon_url, | 1272 EXPECT_EQ(kFaviconURLs[expected_index].icon_url, |
1219 driver.GetActiveFaviconURL()); | 1273 driver.GetActiveFaviconURL()); |
1220 } | 1274 } |
1221 | 1275 |
1222 // Test that no favicon is selected when: | 1276 // Test that no favicon is selected when: |
1223 // - The page provides several favicons. | 1277 // - The page provides several favicons. |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1255 EXPECT_TRUE(download_handler->DidFailDownloadForIconURL(k404IconURL2)); | 1309 EXPECT_TRUE(download_handler->DidFailDownloadForIconURL(k404IconURL2)); |
1256 | 1310 |
1257 // Do a fetch now that the initial downloads for |kFaviconURLs| have failed. | 1311 // Do a fetch now that the initial downloads for |kFaviconURLs| have failed. |
1258 // The behavior is different because OnDidDownloadFavicon() is invoked | 1312 // The behavior is different because OnDidDownloadFavicon() is invoked |
1259 // synchronously from DownloadFavicon(). | 1313 // synchronously from DownloadFavicon(). |
1260 const int kSizes[] = { 0, 0 }; | 1314 const int kSizes[] = { 0, 0 }; |
1261 std::vector<FaviconURL> urls(kFaviconURLs, | 1315 std::vector<FaviconURL> urls(kFaviconURLs, |
1262 kFaviconURLs + arraysize(kFaviconURLs)); | 1316 kFaviconURLs + arraysize(kFaviconURLs)); |
1263 DownloadTillDoneIgnoringHistory(&driver, &handler, kPageURL, urls, kSizes); | 1317 DownloadTillDoneIgnoringHistory(&driver, &handler, kPageURL, urls, kSizes); |
1264 | 1318 |
1265 EXPECT_EQ(0u, handler.image_urls().size()); | 1319 EXPECT_EQ(nullptr, handler.current_candidate()); |
1266 EXPECT_FALSE(driver.GetActiveFaviconValidity()); | 1320 EXPECT_FALSE(driver.GetActiveFaviconValidity()); |
1267 EXPECT_TRUE(driver.GetActiveFaviconImage().IsEmpty()); | 1321 EXPECT_TRUE(driver.GetActiveFaviconImage().IsEmpty()); |
1268 } | 1322 } |
1269 | 1323 |
1270 // Test that no favicon is selected when the page's only icon uses an invalid | 1324 // Test that no favicon is selected when the page's only icon uses an invalid |
1271 // URL syntax. | 1325 // URL syntax. |
1272 TEST_F(FaviconHandlerTest, FaviconInvalidURL) { | 1326 TEST_F(FaviconHandlerTest, FaviconInvalidURL) { |
1273 const GURL kPageURL("http://www.google.com"); | 1327 const GURL kPageURL("http://www.google.com"); |
1274 const GURL kInvalidFormatURL("invalid"); | 1328 const GURL kInvalidFormatURL("invalid"); |
1275 ASSERT_TRUE(kInvalidFormatURL.is_empty()); | 1329 ASSERT_TRUE(kInvalidFormatURL.is_empty()); |
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1382 } | 1436 } |
1383 handler1.download_handler()->FailDownloadForIconURLs(fail_icon_urls); | 1437 handler1.download_handler()->FailDownloadForIconURLs(fail_icon_urls); |
1384 | 1438 |
1385 std::vector<FaviconURL> urls1(kSourceIconURLs, | 1439 std::vector<FaviconURL> urls1(kSourceIconURLs, |
1386 kSourceIconURLs + arraysize(kSourceIconURLs)); | 1440 kSourceIconURLs + arraysize(kSourceIconURLs)); |
1387 UpdateFaviconURL(&driver1, &handler1, kPageURL, urls1); | 1441 UpdateFaviconURL(&driver1, &handler1, kPageURL, urls1); |
1388 | 1442 |
1389 // Simulate the download failed, to check whether the icons were requested | 1443 // Simulate the download failed, to check whether the icons were requested |
1390 // to download according their size. | 1444 // to download according their size. |
1391 struct ExpectedResult { | 1445 struct ExpectedResult { |
1392 // The size of image_urls_. | |
1393 size_t image_urls_size; | |
1394 // The favicon's index in kSourceIconURLs. | 1446 // The favicon's index in kSourceIconURLs. |
1395 size_t favicon_index; | 1447 size_t favicon_index; |
1396 // Width of largest bitmap. | 1448 // Width of largest bitmap. |
1397 int width; | 1449 int width; |
1398 } results[] = { | 1450 } results[] = { |
1399 {5, 0, 1024}, | 1451 {0, 1024}, |
1400 {4, 2, 512}, | 1452 {2, 512}, |
1401 {3, 1, 15}, | 1453 {1, 15}, |
1402 // The rest of bitmaps come in order. | 1454 // The rest of bitmaps come in order. |
1403 {2, 3, -1}, | 1455 {3, -1}, |
1404 {1, 4, -1}, | 1456 {4, -1}, |
1405 }; | 1457 }; |
1406 | 1458 |
1407 for (int i = 0; i < 5; ++i) { | 1459 for (int i = 0; i < 5; ++i) { |
1408 ASSERT_EQ(results[i].image_urls_size, handler1.image_urls().size()); | |
1409 EXPECT_EQ(kSourceIconURLs[results[i].favicon_index].icon_url, | 1460 EXPECT_EQ(kSourceIconURLs[results[i].favicon_index].icon_url, |
1410 handler1.current_candidate()->icon_url); | 1461 handler1.current_candidate()->icon_url); |
1411 if (results[i].width != -1) { | 1462 if (results[i].width != -1) { |
1412 EXPECT_EQ(results[i].width, handler1.current_candidate()-> | 1463 EXPECT_EQ(results[i].width, handler1.current_candidate()-> |
1413 icon_sizes[0].width()); | 1464 icon_sizes[0].width()); |
1414 } | 1465 } |
1415 | 1466 |
1416 // Simulate no favicon from history. | 1467 // Simulate no favicon from history. |
1417 handler1.history_handler()->history_results_.clear(); | 1468 handler1.history_handler()->history_results_.clear(); |
1418 handler1.history_handler()->InvokeCallback(); | 1469 handler1.history_handler()->InvokeCallback(); |
(...skipping 24 matching lines...) Expand all Loading... |
1443 FaviconURL( | 1494 FaviconURL( |
1444 GURL("http://www.google.com/c"), favicon_base::FAVICON, two_icons)}; | 1495 GURL("http://www.google.com/c"), favicon_base::FAVICON, two_icons)}; |
1445 | 1496 |
1446 TestFaviconDriver driver1; | 1497 TestFaviconDriver driver1; |
1447 TestFaviconHandler handler1(kPageURL, &driver1, FaviconHandler::FAVICON, | 1498 TestFaviconHandler handler1(kPageURL, &driver1, FaviconHandler::FAVICON, |
1448 true); | 1499 true); |
1449 std::vector<FaviconURL> urls1(kSourceIconURLs, | 1500 std::vector<FaviconURL> urls1(kSourceIconURLs, |
1450 kSourceIconURLs + arraysize(kSourceIconURLs)); | 1501 kSourceIconURLs + arraysize(kSourceIconURLs)); |
1451 UpdateFaviconURL(&driver1, &handler1, kPageURL, urls1); | 1502 UpdateFaviconURL(&driver1, &handler1, kPageURL, urls1); |
1452 | 1503 |
1453 ASSERT_EQ(2u, handler1.urls().size()); | 1504 ASSERT_EQ(2u, handler1.image_urls().size()); |
1454 | 1505 |
1455 // Index of largest favicon in kSourceIconURLs. | 1506 // Index of largest favicon in kSourceIconURLs. |
1456 size_t i = 1; | 1507 size_t i = 1; |
1457 // The largest bitmap's index in Favicon . | 1508 // The largest bitmap's index in Favicon . |
1458 int b = 1; | 1509 int b = 1; |
1459 | 1510 |
1460 // Verify the icon_bitmaps_ was initialized correctly. | 1511 // Verify the icon_bitmaps_ was initialized correctly. |
1461 EXPECT_EQ(kSourceIconURLs[i].icon_url, | 1512 EXPECT_EQ(kSourceIconURLs[i].icon_url, |
1462 handler1.current_candidate()->icon_url); | 1513 handler1.current_candidate()->icon_url); |
1463 EXPECT_EQ(kSourceIconURLs[i].icon_sizes[b], | 1514 EXPECT_EQ(kSourceIconURLs[i].icon_sizes[b], |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1510 FaviconURL( | 1561 FaviconURL( |
1511 GURL("http://www.google.com/c"), favicon_base::FAVICON, icon2)}; | 1562 GURL("http://www.google.com/c"), favicon_base::FAVICON, icon2)}; |
1512 | 1563 |
1513 TestFaviconDriver driver1; | 1564 TestFaviconDriver driver1; |
1514 TestFaviconHandler handler1(kPageURL, &driver1, FaviconHandler::FAVICON, | 1565 TestFaviconHandler handler1(kPageURL, &driver1, FaviconHandler::FAVICON, |
1515 true); | 1566 true); |
1516 std::vector<FaviconURL> urls1(kSourceIconURLs, | 1567 std::vector<FaviconURL> urls1(kSourceIconURLs, |
1517 kSourceIconURLs + arraysize(kSourceIconURLs)); | 1568 kSourceIconURLs + arraysize(kSourceIconURLs)); |
1518 UpdateFaviconURL(&driver1, &handler1, kPageURL, urls1); | 1569 UpdateFaviconURL(&driver1, &handler1, kPageURL, urls1); |
1519 | 1570 |
1520 ASSERT_EQ(2u, handler1.urls().size()); | 1571 ASSERT_EQ(2u, handler1.image_urls().size()); |
1521 | 1572 |
1522 // Index of largest favicon in kSourceIconURLs. | 1573 // Index of largest favicon in kSourceIconURLs. |
1523 size_t i = 1; | 1574 size_t i = 1; |
1524 // The largest bitmap's index in Favicon . | 1575 // The largest bitmap's index in Favicon . |
1525 int b = 0; | 1576 int b = 0; |
1526 | 1577 |
1527 // Verify the icon_bitmaps_ was initialized correctly. | 1578 // Verify the icon_bitmaps_ was initialized correctly. |
1528 EXPECT_EQ(kSourceIconURLs[i].icon_url, | 1579 EXPECT_EQ(kSourceIconURLs[i].icon_url, |
1529 handler1.current_candidate()->icon_url); | 1580 handler1.current_candidate()->icon_url); |
1530 EXPECT_EQ(kSourceIconURLs[i].icon_sizes[b], | 1581 EXPECT_EQ(kSourceIconURLs[i].icon_sizes[b], |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1570 FaviconURL(GURL("http://www.google.com/d"), | 1621 FaviconURL(GURL("http://www.google.com/d"), |
1571 favicon_base::FAVICON, | 1622 favicon_base::FAVICON, |
1572 std::vector<gfx::Size>())}; | 1623 std::vector<gfx::Size>())}; |
1573 | 1624 |
1574 TestFaviconDriver driver1; | 1625 TestFaviconDriver driver1; |
1575 TestFaviconHandler handler1(kPageURL, &driver1, FaviconHandler::FAVICON, | 1626 TestFaviconHandler handler1(kPageURL, &driver1, FaviconHandler::FAVICON, |
1576 true); | 1627 true); |
1577 std::vector<FaviconURL> urls1(kSourceIconURLs, | 1628 std::vector<FaviconURL> urls1(kSourceIconURLs, |
1578 kSourceIconURLs + arraysize(kSourceIconURLs)); | 1629 kSourceIconURLs + arraysize(kSourceIconURLs)); |
1579 UpdateFaviconURL(&driver1, &handler1, kPageURL, urls1); | 1630 UpdateFaviconURL(&driver1, &handler1, kPageURL, urls1); |
1580 ASSERT_EQ(3u, handler1.urls().size()); | 1631 ASSERT_EQ(3u, handler1.image_urls().size()); |
1581 | 1632 |
1582 // Simulate no favicon from history. | 1633 // Simulate no favicon from history. |
1583 handler1.history_handler()->history_results_.clear(); | 1634 handler1.history_handler()->history_results_.clear(); |
1584 handler1.history_handler()->InvokeCallback(); | 1635 handler1.history_handler()->InvokeCallback(); |
1585 | 1636 |
1586 // Verify the first icon was request to download | 1637 // Verify the first icon was request to download |
1587 ASSERT_TRUE(handler1.download_handler()->HasDownload()); | 1638 ASSERT_TRUE(handler1.download_handler()->HasDownload()); |
1588 EXPECT_EQ(kSourceIconURLs[0].icon_url, | 1639 EXPECT_EQ(kSourceIconURLs[0].icon_url, |
1589 handler1.download_handler()->GetImageUrl()); | 1640 handler1.download_handler()->GetImageUrl()); |
1590 | 1641 |
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1699 EXPECT_FALSE(driver1.update_active_favicon()); | 1750 EXPECT_FALSE(driver1.update_active_favicon()); |
1700 EXPECT_EQ(3u, driver1.num_favicon_available()); | 1751 EXPECT_EQ(3u, driver1.num_favicon_available()); |
1701 } | 1752 } |
1702 | 1753 |
1703 INSTANTIATE_TEST_CASE_P(FaviconHandlerTestActiveFaviconValidityTrueOrFalse, | 1754 INSTANTIATE_TEST_CASE_P(FaviconHandlerTestActiveFaviconValidityTrueOrFalse, |
1704 FaviconHandlerActiveFaviconValidityParamTest, | 1755 FaviconHandlerActiveFaviconValidityParamTest, |
1705 ::testing::Bool()); | 1756 ::testing::Bool()); |
1706 | 1757 |
1707 } // namespace | 1758 } // namespace |
1708 } // namespace favicon | 1759 } // namespace favicon |
OLD | NEW |