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 // History unit tests come in two flavors: | 5 // History unit tests come in two flavors: |
6 // | 6 // |
7 // 1. The more complicated style is that the unit test creates a full history | 7 // 1. The more complicated style is that the unit test creates a full history |
8 // service. This spawns a background thread for the history backend, and | 8 // service. This spawns a background thread for the history backend, and |
9 // all communication is asynchronous. This is useful for testing more | 9 // all communication is asynchronous. This is useful for testing more |
10 // complicated things or end-to-end behavior. | 10 // complicated things or end-to-end behavior. |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
67 base::Time())); | 67 base::Time())); |
68 db_->QueryDownloads(&downloads); | 68 db_->QueryDownloads(&downloads); |
69 EXPECT_EQ(1U, downloads.size()); | 69 EXPECT_EQ(1U, downloads.size()); |
70 | 70 |
71 EXPECT_EQ(base::FilePath(FILE_PATH_LITERAL("current-path")), | 71 EXPECT_EQ(base::FilePath(FILE_PATH_LITERAL("current-path")), |
72 downloads[0].current_path); | 72 downloads[0].current_path); |
73 EXPECT_EQ(base::FilePath(FILE_PATH_LITERAL("target-path")), | 73 EXPECT_EQ(base::FilePath(FILE_PATH_LITERAL("target-path")), |
74 downloads[0].target_path); | 74 downloads[0].target_path); |
75 EXPECT_EQ(1UL, downloads[0].url_chain.size()); | 75 EXPECT_EQ(1UL, downloads[0].url_chain.size()); |
76 EXPECT_EQ(GURL("foo-url"), downloads[0].url_chain[0]); | 76 EXPECT_EQ(GURL("foo-url"), downloads[0].url_chain[0]); |
77 EXPECT_EQ(std::string("http://referrer.com/"), | 77 EXPECT_EQ(std::string("http://referrer.example.com/"), |
78 std::string(downloads[0].referrer_url.spec())); | 78 downloads[0].referrer_url.spec()); |
| 79 EXPECT_EQ(std::string("http://tab-url.example.com/"), |
| 80 downloads[0].tab_url.spec()); |
| 81 EXPECT_EQ(std::string("http://tab-referrer-url.example.com/"), |
| 82 downloads[0].tab_referrer_url.spec()); |
79 EXPECT_EQ(now, downloads[0].start_time); | 83 EXPECT_EQ(now, downloads[0].start_time); |
80 EXPECT_EQ(now, downloads[0].end_time); | 84 EXPECT_EQ(now, downloads[0].end_time); |
81 EXPECT_EQ(0, downloads[0].received_bytes); | 85 EXPECT_EQ(0, downloads[0].received_bytes); |
82 EXPECT_EQ(512, downloads[0].total_bytes); | 86 EXPECT_EQ(512, downloads[0].total_bytes); |
83 EXPECT_EQ(DownloadState::COMPLETE, downloads[0].state); | 87 EXPECT_EQ(DownloadState::COMPLETE, downloads[0].state); |
84 EXPECT_EQ(DownloadDangerType::NOT_DANGEROUS, downloads[0].danger_type); | 88 EXPECT_EQ(DownloadDangerType::NOT_DANGEROUS, downloads[0].danger_type); |
85 EXPECT_EQ(kTestDownloadInterruptReasonNone, downloads[0].interrupt_reason); | 89 EXPECT_EQ(kTestDownloadInterruptReasonNone, downloads[0].interrupt_reason); |
86 EXPECT_FALSE(downloads[0].opened); | 90 EXPECT_FALSE(downloads[0].opened); |
87 EXPECT_EQ("by_ext_id", downloads[0].by_ext_id); | 91 EXPECT_EQ("by_ext_id", downloads[0].by_ext_id); |
88 EXPECT_EQ("by_ext_name", downloads[0].by_ext_name); | 92 EXPECT_EQ("by_ext_name", downloads[0].by_ext_name); |
(...skipping 515 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
604 EXPECT_TRUE(IsValidRFC4122Ver4GUID(guid)); | 608 EXPECT_TRUE(IsValidRFC4122Ver4GUID(guid)); |
605 EXPECT_EQ(guid, base::ToUpperASCII(guid)); | 609 EXPECT_EQ(guid, base::ToUpperASCII(guid)); |
606 guids.insert(guid); | 610 guids.insert(guid); |
607 } | 611 } |
608 EXPECT_TRUE(s.Succeeded()); | 612 EXPECT_TRUE(s.Succeeded()); |
609 EXPECT_EQ(kDownloadCount, guids.size()); | 613 EXPECT_EQ(kDownloadCount, guids.size()); |
610 } | 614 } |
611 } | 615 } |
612 } | 616 } |
613 | 617 |
| 618 TEST_F(HistoryBackendDBTest, MigrateTabUrls) { |
| 619 ASSERT_NO_FATAL_FAILURE(CreateDBVersion(30)); |
| 620 { |
| 621 sql::Connection db; |
| 622 ASSERT_TRUE(db.Open(history_dir_.Append(kHistoryFilename))); |
| 623 { |
| 624 sql::Statement s(db.GetUniqueStatement( |
| 625 "INSERT INTO downloads (" |
| 626 " id, guid, current_path, target_path, start_time, received_bytes," |
| 627 " total_bytes, state, danger_type, interrupt_reason, hash," |
| 628 " end_time, opened, referrer, http_method, by_ext_id, by_ext_name," |
| 629 " etag, last_modified, mime_type, original_mime_type)" |
| 630 "VALUES(" |
| 631 " 1, '435A5C7A-F6B7-4DF2-8696-22E4FCBA3EB2', 'foo.txt', 'foo.txt'," |
| 632 " 13104873187307670, 11, 11, 1, 0, 0, X'', 13104873187521021, 0," |
| 633 " 'http://example.com/dl/', '', '', '', '', '', 'text/plain'," |
| 634 " 'text/plain')")); |
| 635 ASSERT_TRUE(s.Run()); |
| 636 } |
| 637 { |
| 638 sql::Statement s(db.GetUniqueStatement( |
| 639 "INSERT INTO downloads_url_chains (id, chain_index, url) VALUES " |
| 640 "(4, 0, 'url')")); |
| 641 ASSERT_TRUE(s.Run()); |
| 642 } |
| 643 } |
| 644 |
| 645 // Re-open the db using the HistoryDatabase, which should migrate to the |
| 646 // current version, creating the tab_url and tab_referrer_url columns. |
| 647 CreateBackendAndDatabase(); |
| 648 DeleteBackend(); |
| 649 { |
| 650 // Re-open the db for manual manipulation. |
| 651 sql::Connection db; |
| 652 ASSERT_TRUE(db.Open(history_dir_.Append(kHistoryFilename))); |
| 653 // The version should have been updated. |
| 654 int cur_version = HistoryDatabase::GetCurrentVersion(); |
| 655 ASSERT_LE(31, cur_version); |
| 656 { |
| 657 sql::Statement s(db.GetUniqueStatement( |
| 658 "SELECT value FROM meta WHERE key = 'version'")); |
| 659 EXPECT_TRUE(s.Step()); |
| 660 EXPECT_EQ(cur_version, s.ColumnInt(0)); |
| 661 } |
| 662 { |
| 663 sql::Statement s(db.GetUniqueStatement( |
| 664 "SELECT tab_url, tab_referrer_url from downloads")); |
| 665 EXPECT_TRUE(s.Step()); |
| 666 EXPECT_EQ(std::string(), s.ColumnString(0)); |
| 667 EXPECT_EQ(std::string(), s.ColumnString(1)); |
| 668 } |
| 669 } |
| 670 } |
| 671 |
614 TEST_F(HistoryBackendDBTest, DownloadCreateAndQuery) { | 672 TEST_F(HistoryBackendDBTest, DownloadCreateAndQuery) { |
615 CreateBackendAndDatabase(); | 673 CreateBackendAndDatabase(); |
616 | 674 |
617 ASSERT_EQ(0u, db_->CountDownloads()); | 675 ASSERT_EQ(0u, db_->CountDownloads()); |
618 | 676 |
619 std::vector<GURL> url_chain; | 677 std::vector<GURL> url_chain; |
620 url_chain.push_back(GURL("http://example.com/a")); | 678 url_chain.push_back(GURL("http://example.com/a")); |
621 url_chain.push_back(GURL("http://example.com/b")); | 679 url_chain.push_back(GURL("http://example.com/b")); |
622 url_chain.push_back(GURL("http://example.com/c")); | 680 url_chain.push_back(GURL("http://example.com/c")); |
623 | 681 |
624 base::Time start_time(base::Time::Now()); | 682 base::Time start_time(base::Time::Now()); |
625 base::Time end_time(start_time + base::TimeDelta::FromHours(1)); | 683 base::Time end_time(start_time + base::TimeDelta::FromHours(1)); |
626 | 684 |
627 DownloadRow download_A(base::FilePath(FILE_PATH_LITERAL("/path/1")), | 685 DownloadRow download_A( |
628 base::FilePath(FILE_PATH_LITERAL("/path/2")), | 686 base::FilePath(FILE_PATH_LITERAL("/path/1")), |
629 url_chain, | 687 base::FilePath(FILE_PATH_LITERAL("/path/2")), url_chain, |
630 GURL("http://example.com/referrer"), | 688 GURL("http://example.com/referrer"), GURL("http://example.com/tab-url"), |
631 "GET", | 689 GURL("http://example.com/tab-referrer"), "GET", "mime/type", |
632 "mime/type", | 690 "original/mime-type", start_time, end_time, "etag1", "last_modified_1", |
633 "original/mime-type", | 691 100, 1000, DownloadState::INTERRUPTED, DownloadDangerType::NOT_DANGEROUS, |
634 start_time, | 692 kTestDownloadInterruptReasonCrash, "hash-value1", 1, |
635 end_time, | 693 "FE672168-26EF-4275-A149-FEC25F6A75F9", false, "extension-id", |
636 "etag1", | 694 "extension-name"); |
637 "last_modified_1", | |
638 100, | |
639 1000, | |
640 DownloadState::INTERRUPTED, | |
641 DownloadDangerType::NOT_DANGEROUS, | |
642 kTestDownloadInterruptReasonCrash, | |
643 "hash-value1", | |
644 1, | |
645 "FE672168-26EF-4275-A149-FEC25F6A75F9", | |
646 false, | |
647 "extension-id", | |
648 "extension-name"); | |
649 ASSERT_TRUE(db_->CreateDownload(download_A)); | 695 ASSERT_TRUE(db_->CreateDownload(download_A)); |
650 | 696 |
651 url_chain.push_back(GURL("http://example.com/d")); | 697 url_chain.push_back(GURL("http://example.com/d")); |
652 | 698 |
653 DownloadRow download_B(base::FilePath(FILE_PATH_LITERAL("/path/3")), | 699 base::Time start_time2(start_time + base::TimeDelta::FromHours(10)); |
654 base::FilePath(FILE_PATH_LITERAL("/path/4")), | 700 base::Time end_time2(end_time + base::TimeDelta::FromHours(10)); |
655 url_chain, | 701 |
656 GURL("http://example.com/referrer2"), | 702 DownloadRow download_B( |
657 "POST", | 703 base::FilePath(FILE_PATH_LITERAL("/path/3")), |
658 "mime/type2", | 704 base::FilePath(FILE_PATH_LITERAL("/path/4")), url_chain, |
659 "original/mime-type2", | 705 GURL("http://example.com/referrer2"), GURL("http://example.com/tab-url2"), |
660 start_time, | 706 GURL("http://example.com/tab-referrer2"), "POST", "mime/type2", |
661 end_time, | 707 "original/mime-type2", start_time2, end_time2, "etag2", "last_modified_2", |
662 "etag2", | 708 1001, 1001, DownloadState::COMPLETE, DownloadDangerType::DANGEROUS_FILE, |
663 "last_modified_2", | 709 kTestDownloadInterruptReasonNone, std::string(), 2, |
664 1001, | 710 "b70f3869-7d75-4878-acb4-4caf7026d12b", false, "extension-id", |
665 1001, | 711 "extension-name"); |
666 DownloadState::COMPLETE, | |
667 DownloadDangerType::DANGEROUS_FILE, | |
668 kTestDownloadInterruptReasonNone, | |
669 std::string(), | |
670 2, | |
671 "b70f3869-7d75-4878-acb4-4caf7026d12b", | |
672 false, | |
673 "extension-id", | |
674 "extension-name"); | |
675 ASSERT_TRUE(db_->CreateDownload(download_B)); | 712 ASSERT_TRUE(db_->CreateDownload(download_B)); |
676 | 713 |
677 EXPECT_EQ(2u, db_->CountDownloads()); | 714 EXPECT_EQ(2u, db_->CountDownloads()); |
678 | 715 |
679 std::vector<DownloadRow> results; | 716 std::vector<DownloadRow> results; |
680 db_->QueryDownloads(&results); | 717 db_->QueryDownloads(&results); |
681 | 718 |
682 ASSERT_EQ(2u, results.size()); | 719 ASSERT_EQ(2u, results.size()); |
683 | 720 |
684 const DownloadRow& retrieved_download_A = | 721 const DownloadRow& retrieved_download_A = |
685 results[0].id == 1 ? results[0] : results[1]; | 722 results[0].id == 1 ? results[0] : results[1]; |
686 const DownloadRow& retrieved_download_B = | 723 const DownloadRow& retrieved_download_B = |
687 results[0].id == 1 ? results[1] : results[0]; | 724 results[0].id == 1 ? results[1] : results[0]; |
688 | 725 |
689 EXPECT_EQ(download_A, retrieved_download_A); | 726 EXPECT_EQ(download_A, retrieved_download_A); |
690 EXPECT_EQ(download_B, retrieved_download_B); | 727 EXPECT_EQ(download_B, retrieved_download_B); |
691 } | 728 } |
692 | 729 |
693 TEST_F(HistoryBackendDBTest, DownloadCreateAndUpdate_VolatileFields) { | 730 TEST_F(HistoryBackendDBTest, DownloadCreateAndUpdate_VolatileFields) { |
694 CreateBackendAndDatabase(); | 731 CreateBackendAndDatabase(); |
695 | 732 |
696 std::vector<GURL> url_chain; | 733 std::vector<GURL> url_chain; |
697 url_chain.push_back(GURL("http://example.com/a")); | 734 url_chain.push_back(GURL("http://example.com/a")); |
698 url_chain.push_back(GURL("http://example.com/b")); | 735 url_chain.push_back(GURL("http://example.com/b")); |
699 url_chain.push_back(GURL("http://example.com/c")); | 736 url_chain.push_back(GURL("http://example.com/c")); |
700 | 737 |
701 base::Time start_time(base::Time::Now()); | 738 base::Time start_time(base::Time::Now()); |
702 base::Time end_time(start_time + base::TimeDelta::FromHours(1)); | 739 base::Time end_time(start_time + base::TimeDelta::FromHours(1)); |
703 | 740 |
704 DownloadRow download(base::FilePath(FILE_PATH_LITERAL("/path/1")), | 741 DownloadRow download( |
705 base::FilePath(FILE_PATH_LITERAL("/path/2")), | 742 base::FilePath(FILE_PATH_LITERAL("/path/1")), |
706 url_chain, | 743 base::FilePath(FILE_PATH_LITERAL("/path/2")), url_chain, |
707 GURL("http://example.com/referrer"), | 744 GURL("http://example.com/referrer"), GURL("http://example.com/tab-url"), |
708 "GET", | 745 GURL("http://example.com/tab-referrer"), "GET", "mime/type", |
709 "mime/type", | 746 "original/mime-type", start_time, end_time, "etag1", "last_modified_1", |
710 "original/mime-type", | 747 100, 1000, DownloadState::INTERRUPTED, DownloadDangerType::NOT_DANGEROUS, |
711 start_time, | 748 3, "some-hash-value", 1, "FE672168-26EF-4275-A149-FEC25F6A75F9", false, |
712 end_time, | 749 "extension-id", "extension-name"); |
713 "etag1", | |
714 "last_modified_1", | |
715 100, | |
716 1000, | |
717 DownloadState::INTERRUPTED, | |
718 DownloadDangerType::NOT_DANGEROUS, | |
719 3, | |
720 "some-hash-value", | |
721 1, | |
722 "FE672168-26EF-4275-A149-FEC25F6A75F9", | |
723 false, | |
724 "extension-id", | |
725 "extension-name"); | |
726 db_->CreateDownload(download); | 750 db_->CreateDownload(download); |
727 | 751 |
728 download.current_path = | 752 download.current_path = |
729 base::FilePath(FILE_PATH_LITERAL("/new/current_path")); | 753 base::FilePath(FILE_PATH_LITERAL("/new/current_path")); |
730 download.target_path = base::FilePath(FILE_PATH_LITERAL("/new/target_path")); | 754 download.target_path = base::FilePath(FILE_PATH_LITERAL("/new/target_path")); |
731 download.mime_type = "new/mime/type"; | 755 download.mime_type = "new/mime/type"; |
732 download.original_mime_type = "new/original/mime/type"; | 756 download.original_mime_type = "new/original/mime/type"; |
733 download.received_bytes += 1000; | 757 download.received_bytes += 1000; |
734 download.state = DownloadState::CANCELLED; | 758 download.state = DownloadState::CANCELLED; |
735 download.danger_type = DownloadDangerType::USER_VALIDATED; | 759 download.danger_type = DownloadDangerType::USER_VALIDATED; |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
805 "Select Count(*) from downloads_url_chains")); | 829 "Select Count(*) from downloads_url_chains")); |
806 EXPECT_TRUE(statement1.Step()); | 830 EXPECT_TRUE(statement1.Step()); |
807 EXPECT_EQ(1, statement1.ColumnInt(0)); | 831 EXPECT_EQ(1, statement1.ColumnInt(0)); |
808 } | 832 } |
809 } | 833 } |
810 | 834 |
811 TEST_F(HistoryBackendDBTest, DownloadNukeRecordsMissingURLs) { | 835 TEST_F(HistoryBackendDBTest, DownloadNukeRecordsMissingURLs) { |
812 CreateBackendAndDatabase(); | 836 CreateBackendAndDatabase(); |
813 base::Time now(base::Time::Now()); | 837 base::Time now(base::Time::Now()); |
814 std::vector<GURL> url_chain; | 838 std::vector<GURL> url_chain; |
815 DownloadRow download(base::FilePath(FILE_PATH_LITERAL("foo-path")), | 839 DownloadRow download( |
816 base::FilePath(FILE_PATH_LITERAL("foo-path")), | 840 base::FilePath(FILE_PATH_LITERAL("foo-path")), |
817 url_chain, | 841 base::FilePath(FILE_PATH_LITERAL("foo-path")), url_chain, |
818 GURL(std::string()), | 842 GURL(std::string()), GURL(std::string()), GURL(std::string()), |
819 std::string(), | 843 std::string(), "application/octet-stream", "application/octet-stream", |
820 "application/octet-stream", | 844 now, now, std::string(), std::string(), 0, 512, DownloadState::COMPLETE, |
821 "application/octet-stream", | 845 DownloadDangerType::NOT_DANGEROUS, kTestDownloadInterruptReasonNone, |
822 now, | 846 std::string(), 1, "05AF6C8E-E4E0-45D7-B5CE-BC99F7019918", 0, "by_ext_id", |
823 now, | 847 "by_ext_name"); |
824 std::string(), | |
825 std::string(), | |
826 0, | |
827 512, | |
828 DownloadState::COMPLETE, | |
829 DownloadDangerType::NOT_DANGEROUS, | |
830 kTestDownloadInterruptReasonNone, | |
831 std::string(), | |
832 1, | |
833 "05AF6C8E-E4E0-45D7-B5CE-BC99F7019918", | |
834 0, | |
835 "by_ext_id", | |
836 "by_ext_name"); | |
837 | 848 |
838 // Creating records without any urls should fail. | 849 // Creating records without any urls should fail. |
839 EXPECT_FALSE(db_->CreateDownload(download)); | 850 EXPECT_FALSE(db_->CreateDownload(download)); |
840 | 851 |
841 download.url_chain.push_back(GURL("foo-url")); | 852 download.url_chain.push_back(GURL("foo-url")); |
842 EXPECT_TRUE(db_->CreateDownload(download)); | 853 EXPECT_TRUE(db_->CreateDownload(download)); |
843 | 854 |
844 // Pretend that the URLs were dropped. | 855 // Pretend that the URLs were dropped. |
845 DeleteBackend(); | 856 DeleteBackend(); |
846 { | 857 { |
(...skipping 187 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1034 // Current browser version must be already higher than 28. | 1045 // Current browser version must be already higher than 28. |
1035 ASSERT_LT(28, HistoryDatabase::GetCurrentVersion()); | 1046 ASSERT_LT(28, HistoryDatabase::GetCurrentVersion()); |
1036 // Expect that version in DB remains the same. | 1047 // Expect that version in DB remains the same. |
1037 EXPECT_EQ(28, meta.GetVersionNumber()); | 1048 EXPECT_EQ(28, meta.GetVersionNumber()); |
1038 } | 1049 } |
1039 } | 1050 } |
1040 } | 1051 } |
1041 | 1052 |
1042 } // namespace | 1053 } // namespace |
1043 } // namespace history | 1054 } // namespace history |
OLD | NEW |