| 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 | 5 |
| 6 #include "base/memory/scoped_ptr.h" | 6 #include "base/memory/scoped_ptr.h" |
| 7 #include "base/memory/scoped_vector.h" | 7 #include "base/memory/scoped_vector.h" |
| 8 #include "base/strings/stringprintf.h" | 8 #include "base/strings/stringprintf.h" |
| 9 #include "base/test/test_simple_task_runner.h" | 9 #include "base/test/test_simple_task_runner.h" |
| 10 #include "base/thread_task_runner_handle.h" | 10 #include "base/thread_task_runner_handle.h" |
| (...skipping 18 matching lines...) Expand all Loading... |
| 29 namespace { | 29 namespace { |
| 30 | 30 |
| 31 const char kUrlPrefix[] = "https://prefix.com/foo"; | 31 const char kUrlPrefix[] = "https://prefix.com/foo"; |
| 32 const char kBackupConnectUrlPrefix[] = "https://alt1-prefix.com/foo"; | 32 const char kBackupConnectUrlPrefix[] = "https://alt1-prefix.com/foo"; |
| 33 const char kBackupHttpUrlPrefix[] = "https://alt2-prefix.com/foo"; | 33 const char kBackupHttpUrlPrefix[] = "https://alt2-prefix.com/foo"; |
| 34 const char kBackupNetworkUrlPrefix[] = "https://alt3-prefix.com/foo"; | 34 const char kBackupNetworkUrlPrefix[] = "https://alt3-prefix.com/foo"; |
| 35 const char kClient[] = "unittest"; | 35 const char kClient[] = "unittest"; |
| 36 const char kAppVer[] = "1.0"; | 36 const char kAppVer[] = "1.0"; |
| 37 const char kAdditionalQuery[] = "additional_query"; | 37 const char kAdditionalQuery[] = "additional_query"; |
| 38 | 38 |
| 39 #if defined(OS_ANDROID) |
| 40 const char kDefaultPhishList[] = "goog-mobilephish-shavar"; |
| 41 const char kDefaultMalwareList[] = "goog-mobilemalware-shavar"; |
| 42 #else |
| 43 const char kDefaultPhishList[] = "goog-phish-shavar"; |
| 44 const char kDefaultMalwareList[] = "goog-malware-shavar"; |
| 45 #endif |
| 46 |
| 39 // Add-prefix chunk with single prefix. | 47 // Add-prefix chunk with single prefix. |
| 40 const char kRawChunkPayload1[] = { | 48 const char kRawChunkPayload1[] = { |
| 41 '\0', '\0', '\0', '\x08', // 32-bit payload length in network byte order. | 49 '\0', '\0', '\0', '\x08', // 32-bit payload length in network byte order. |
| 42 '\x08', // field 1, wire format varint | 50 '\x08', // field 1, wire format varint |
| 43 '\x03', // chunk_number varint 3 | 51 '\x03', // chunk_number varint 3 |
| 44 '\x22', // field 4, wire format length-delimited | 52 '\x22', // field 4, wire format length-delimited |
| 45 '\x04', // varint 4 length | 53 '\x04', // varint 4 length |
| 46 'a', 'b', 'c', 'd' // 4-byte prefix | 54 'a', 'b', 'c', 'd' // 4-byte prefix |
| 47 }; | 55 }; |
| 48 const std::string kChunkPayload1(kRawChunkPayload1, sizeof(kRawChunkPayload1)); | 56 const std::string kChunkPayload1(kRawChunkPayload1, sizeof(kRawChunkPayload1)); |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 87 #endif | 95 #endif |
| 88 return scoped_ptr<SafeBrowsingProtocolManager>( | 96 return scoped_ptr<SafeBrowsingProtocolManager>( |
| 89 SafeBrowsingProtocolManager::Create(delegate, NULL, config)); | 97 SafeBrowsingProtocolManager::Create(delegate, NULL, config)); |
| 90 } | 98 } |
| 91 | 99 |
| 92 void ValidateUpdateFetcherRequest( | 100 void ValidateUpdateFetcherRequest( |
| 93 const net::TestURLFetcher* url_fetcher, | 101 const net::TestURLFetcher* url_fetcher, |
| 94 const std::string& expected_prefix) { | 102 const std::string& expected_prefix) { |
| 95 ASSERT_TRUE(url_fetcher); | 103 ASSERT_TRUE(url_fetcher); |
| 96 EXPECT_EQ(net::LOAD_DISABLE_CACHE, url_fetcher->GetLoadFlags()); | 104 EXPECT_EQ(net::LOAD_DISABLE_CACHE, url_fetcher->GetLoadFlags()); |
| 97 EXPECT_EQ("goog-phish-shavar;\ngoog-malware-shavar;\n", | 105 |
| 98 url_fetcher->upload_data()); | 106 std::string expected_lists(base::StringPrintf("%s;\n%s;\n", |
| 107 kDefaultPhishList, |
| 108 kDefaultMalwareList)); |
| 109 EXPECT_EQ(expected_lists, url_fetcher->upload_data()); |
| 99 EXPECT_EQ(GURL(expected_prefix + "/downloads?client=unittest&appver=1.0" | 110 EXPECT_EQ(GURL(expected_prefix + "/downloads?client=unittest&appver=1.0" |
| 100 "&pver=3.0" + key_param_), | 111 "&pver=3.0" + key_param_), |
| 101 url_fetcher->GetOriginalURL()); | 112 url_fetcher->GetOriginalURL()); |
| 102 } | 113 } |
| 103 | 114 |
| 104 void ValidateUpdateFetcherRequest(const net::TestURLFetcher* url_fetcher) { | 115 void ValidateUpdateFetcherRequest(const net::TestURLFetcher* url_fetcher) { |
| 105 ValidateUpdateFetcherRequest(url_fetcher, kUrlPrefix); | 116 ValidateUpdateFetcherRequest(url_fetcher, kUrlPrefix); |
| 106 } | 117 } |
| 107 | 118 |
| 108 void ValidateRedirectFetcherRequest(const net::TestURLFetcher* url_fetcher, | 119 void ValidateRedirectFetcherRequest(const net::TestURLFetcher* url_fetcher, |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 161 | 172 |
| 162 // Received a successful response. | 173 // Received a successful response. |
| 163 next = pm->GetNextUpdateInterval(false); | 174 next = pm->GetNextUpdateInterval(false); |
| 164 EXPECT_EQ(next, TimeDelta::FromSeconds(1800)); | 175 EXPECT_EQ(next, TimeDelta::FromSeconds(1800)); |
| 165 } | 176 } |
| 166 | 177 |
| 167 TEST_F(SafeBrowsingProtocolManagerTest, TestChunkStrings) { | 178 TEST_F(SafeBrowsingProtocolManagerTest, TestChunkStrings) { |
| 168 scoped_ptr<SafeBrowsingProtocolManager> pm(CreateProtocolManager(NULL)); | 179 scoped_ptr<SafeBrowsingProtocolManager> pm(CreateProtocolManager(NULL)); |
| 169 | 180 |
| 170 // Add and Sub chunks. | 181 // Add and Sub chunks. |
| 171 SBListChunkRanges phish("goog-phish-shavar"); | 182 SBListChunkRanges phish(kDefaultPhishList); |
| 172 phish.adds = "1,4,6,8-20,99"; | 183 phish.adds = "1,4,6,8-20,99"; |
| 173 phish.subs = "16,32,64-96"; | 184 phish.subs = "16,32,64-96"; |
| 174 EXPECT_EQ("goog-phish-shavar;a:1,4,6,8-20,99:s:16,32,64-96\n", | 185 EXPECT_EQ(base::StringPrintf("%s;a:1,4,6,8-20,99:s:16,32,64-96\n", |
| 186 kDefaultPhishList), |
| 175 safe_browsing::FormatList(phish)); | 187 safe_browsing::FormatList(phish)); |
| 176 | 188 |
| 177 // Add chunks only. | 189 // Add chunks only. |
| 178 phish.subs = ""; | 190 phish.subs = ""; |
| 179 EXPECT_EQ("goog-phish-shavar;a:1,4,6,8-20,99\n", | 191 EXPECT_EQ(base::StringPrintf("%s;a:1,4,6,8-20,99\n", |
| 192 kDefaultPhishList), |
| 180 safe_browsing::FormatList(phish)); | 193 safe_browsing::FormatList(phish)); |
| 181 | 194 |
| 182 // Sub chunks only. | 195 // Sub chunks only. |
| 183 phish.adds = ""; | 196 phish.adds = ""; |
| 184 phish.subs = "16,32,64-96"; | 197 phish.subs = "16,32,64-96"; |
| 185 EXPECT_EQ("goog-phish-shavar;s:16,32,64-96\n", | 198 EXPECT_EQ(base::StringPrintf("%s;s:16,32,64-96\n", |
| 199 kDefaultPhishList), |
| 186 safe_browsing::FormatList(phish)); | 200 safe_browsing::FormatList(phish)); |
| 187 | 201 |
| 188 // No chunks of either type. | 202 // No chunks of either type. |
| 189 phish.adds = ""; | 203 phish.adds = ""; |
| 190 phish.subs = ""; | 204 phish.subs = ""; |
| 191 EXPECT_EQ("goog-phish-shavar;\n", safe_browsing::FormatList(phish)); | 205 EXPECT_EQ(base::StringPrintf("%s;\n", kDefaultPhishList), |
| 206 safe_browsing::FormatList(phish)); |
| 192 } | 207 } |
| 193 | 208 |
| 194 TEST_F(SafeBrowsingProtocolManagerTest, TestGetHashBackOffTimes) { | 209 TEST_F(SafeBrowsingProtocolManagerTest, TestGetHashBackOffTimes) { |
| 195 scoped_ptr<SafeBrowsingProtocolManager> pm(CreateProtocolManager(NULL)); | 210 scoped_ptr<SafeBrowsingProtocolManager> pm(CreateProtocolManager(NULL)); |
| 196 | 211 |
| 197 // No errors or back off time yet. | 212 // No errors or back off time yet. |
| 198 EXPECT_EQ(0U, pm->gethash_error_count_); | 213 EXPECT_EQ(0U, pm->gethash_error_count_); |
| 199 EXPECT_TRUE(pm->next_gethash_time_.is_null()); | 214 EXPECT_TRUE(pm->next_gethash_time_.is_null()); |
| 200 | 215 |
| 201 Time now = Time::Now(); | 216 Time now = Time::Now(); |
| (...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 411 CreateProtocolManager(&test_delegate)); | 426 CreateProtocolManager(&test_delegate)); |
| 412 | 427 |
| 413 // Kick off initialization. This returns chunks from the DB synchronously. | 428 // Kick off initialization. This returns chunks from the DB synchronously. |
| 414 pm->ForceScheduleNextUpdate(TimeDelta()); | 429 pm->ForceScheduleNextUpdate(TimeDelta()); |
| 415 runner->RunPendingTasks(); | 430 runner->RunPendingTasks(); |
| 416 | 431 |
| 417 // We should have an URLFetcher at this point in time. | 432 // We should have an URLFetcher at this point in time. |
| 418 net::TestURLFetcher* url_fetcher = url_fetcher_factory.GetFetcherByID(0); | 433 net::TestURLFetcher* url_fetcher = url_fetcher_factory.GetFetcherByID(0); |
| 419 ASSERT_TRUE(url_fetcher); | 434 ASSERT_TRUE(url_fetcher); |
| 420 EXPECT_EQ(net::LOAD_DISABLE_CACHE, url_fetcher->GetLoadFlags()); | 435 EXPECT_EQ(net::LOAD_DISABLE_CACHE, url_fetcher->GetLoadFlags()); |
| 421 EXPECT_EQ("goog-phish-shavar;a:adds_phish:s:subs_phish\n" | 436 EXPECT_EQ(base::StringPrintf("%s;a:adds_phish:s:subs_phish\n" |
| 422 "unknown_list;a:adds_unknown:s:subs_unknown\n" | 437 "unknown_list;a:adds_unknown:s:subs_unknown\n" |
| 423 "goog-malware-shavar;\n", | 438 "%s;\n", |
| 439 kDefaultPhishList, kDefaultMalwareList), |
| 424 url_fetcher->upload_data()); | 440 url_fetcher->upload_data()); |
| 425 EXPECT_EQ(GURL("https://prefix.com/foo/downloads?client=unittest&appver=1.0" | 441 EXPECT_EQ(GURL("https://prefix.com/foo/downloads?client=unittest&appver=1.0" |
| 426 "&pver=3.0" + key_param_), | 442 "&pver=3.0" + key_param_), |
| 427 url_fetcher->GetOriginalURL()); | 443 url_fetcher->GetOriginalURL()); |
| 428 | 444 |
| 429 url_fetcher->set_status(net::URLRequestStatus()); | 445 url_fetcher->set_status(net::URLRequestStatus()); |
| 430 url_fetcher->set_response_code(200); | 446 url_fetcher->set_response_code(200); |
| 431 url_fetcher->SetResponseString(std::string()); | 447 url_fetcher->SetResponseString(std::string()); |
| 432 url_fetcher->delegate()->OnURLFetchComplete(url_fetcher); | 448 url_fetcher->delegate()->OnURLFetchComplete(url_fetcher); |
| 433 | 449 |
| (...skipping 486 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 920 // Kick off initialization. This returns chunks from the DB synchronously. | 936 // Kick off initialization. This returns chunks from the DB synchronously. |
| 921 pm->ForceScheduleNextUpdate(TimeDelta()); | 937 pm->ForceScheduleNextUpdate(TimeDelta()); |
| 922 runner->RunPendingTasks(); | 938 runner->RunPendingTasks(); |
| 923 | 939 |
| 924 // The update response contains a single redirect command. | 940 // The update response contains a single redirect command. |
| 925 net::TestURLFetcher* url_fetcher = url_fetcher_factory.GetFetcherByID(0); | 941 net::TestURLFetcher* url_fetcher = url_fetcher_factory.GetFetcherByID(0); |
| 926 ValidateUpdateFetcherRequest(url_fetcher); | 942 ValidateUpdateFetcherRequest(url_fetcher); |
| 927 url_fetcher->set_status(net::URLRequestStatus()); | 943 url_fetcher->set_status(net::URLRequestStatus()); |
| 928 url_fetcher->set_response_code(200); | 944 url_fetcher->set_response_code(200); |
| 929 url_fetcher->SetResponseString( | 945 url_fetcher->SetResponseString( |
| 930 "i:goog-phish-shavar\n" | 946 base::StringPrintf("i:%s\n" |
| 931 "u:redirect-server.example.com/path\n"); | 947 "u:redirect-server.example.com/path\n", |
| 948 kDefaultPhishList)); |
| 932 url_fetcher->delegate()->OnURLFetchComplete(url_fetcher); | 949 url_fetcher->delegate()->OnURLFetchComplete(url_fetcher); |
| 933 | 950 |
| 934 // The redirect response contains an empty body. | 951 // The redirect response contains an empty body. |
| 935 net::TestURLFetcher* chunk_url_fetcher = | 952 net::TestURLFetcher* chunk_url_fetcher = |
| 936 url_fetcher_factory.GetFetcherByID(1); | 953 url_fetcher_factory.GetFetcherByID(1); |
| 937 ValidateRedirectFetcherRequest( | 954 ValidateRedirectFetcherRequest( |
| 938 chunk_url_fetcher, "https://redirect-server.example.com/path"); | 955 chunk_url_fetcher, "https://redirect-server.example.com/path"); |
| 939 chunk_url_fetcher->set_status(net::URLRequestStatus()); | 956 chunk_url_fetcher->set_status(net::URLRequestStatus()); |
| 940 chunk_url_fetcher->set_response_code(200); | 957 chunk_url_fetcher->set_response_code(200); |
| 941 chunk_url_fetcher->SetResponseString(std::string()); | 958 chunk_url_fetcher->SetResponseString(std::string()); |
| (...skipping 24 matching lines...) Expand all Loading... |
| 966 // Kick off initialization. This returns chunks from the DB synchronously. | 983 // Kick off initialization. This returns chunks from the DB synchronously. |
| 967 pm->ForceScheduleNextUpdate(TimeDelta()); | 984 pm->ForceScheduleNextUpdate(TimeDelta()); |
| 968 runner->RunPendingTasks(); | 985 runner->RunPendingTasks(); |
| 969 | 986 |
| 970 // The update response contains a single redirect command. | 987 // The update response contains a single redirect command. |
| 971 net::TestURLFetcher* url_fetcher = url_fetcher_factory.GetFetcherByID(0); | 988 net::TestURLFetcher* url_fetcher = url_fetcher_factory.GetFetcherByID(0); |
| 972 ValidateUpdateFetcherRequest(url_fetcher); | 989 ValidateUpdateFetcherRequest(url_fetcher); |
| 973 url_fetcher->set_status(net::URLRequestStatus()); | 990 url_fetcher->set_status(net::URLRequestStatus()); |
| 974 url_fetcher->set_response_code(200); | 991 url_fetcher->set_response_code(200); |
| 975 url_fetcher->SetResponseString( | 992 url_fetcher->SetResponseString( |
| 976 "i:goog-phish-shavar\n" | 993 base::StringPrintf("i:%s\n" |
| 977 "u:redirect-server.example.com/path\n"); | 994 "u:redirect-server.example.com/path\n", |
| 995 kDefaultPhishList)); |
| 978 url_fetcher->delegate()->OnURLFetchComplete(url_fetcher); | 996 url_fetcher->delegate()->OnURLFetchComplete(url_fetcher); |
| 979 | 997 |
| 980 // The redirect response contains an invalid body. | 998 // The redirect response contains an invalid body. |
| 981 net::TestURLFetcher* chunk_url_fetcher = | 999 net::TestURLFetcher* chunk_url_fetcher = |
| 982 url_fetcher_factory.GetFetcherByID(1); | 1000 url_fetcher_factory.GetFetcherByID(1); |
| 983 ValidateRedirectFetcherRequest( | 1001 ValidateRedirectFetcherRequest( |
| 984 chunk_url_fetcher, "https://redirect-server.example.com/path"); | 1002 chunk_url_fetcher, "https://redirect-server.example.com/path"); |
| 985 chunk_url_fetcher->set_status(net::URLRequestStatus()); | 1003 chunk_url_fetcher->set_status(net::URLRequestStatus()); |
| 986 chunk_url_fetcher->set_response_code(200); | 1004 chunk_url_fetcher->set_response_code(200); |
| 987 chunk_url_fetcher->SetResponseString("THIS IS AN INVALID RESPONSE"); | 1005 chunk_url_fetcher->SetResponseString("THIS IS AN INVALID RESPONSE"); |
| 988 chunk_url_fetcher->delegate()->OnURLFetchComplete(chunk_url_fetcher); | 1006 chunk_url_fetcher->delegate()->OnURLFetchComplete(chunk_url_fetcher); |
| 989 | 1007 |
| 990 EXPECT_TRUE(pm->IsUpdateScheduled()); | 1008 EXPECT_TRUE(pm->IsUpdateScheduled()); |
| 991 } | 1009 } |
| 992 | 1010 |
| 993 // Tests a single valid update response, followed by a single redirect response | 1011 // Tests a single valid update response, followed by a single redirect response |
| 994 // containing chunks. | 1012 // containing chunks. |
| 995 TEST_F(SafeBrowsingProtocolManagerTest, SingleRedirectResponseWithChunks) { | 1013 TEST_F(SafeBrowsingProtocolManagerTest, SingleRedirectResponseWithChunks) { |
| 996 scoped_refptr<base::TestSimpleTaskRunner> runner( | 1014 scoped_refptr<base::TestSimpleTaskRunner> runner( |
| 997 new base::TestSimpleTaskRunner()); | 1015 new base::TestSimpleTaskRunner()); |
| 998 base::ThreadTaskRunnerHandle runner_handler(runner); | 1016 base::ThreadTaskRunnerHandle runner_handler(runner); |
| 999 net::TestURLFetcherFactory url_fetcher_factory; | 1017 net::TestURLFetcherFactory url_fetcher_factory; |
| 1000 | 1018 |
| 1001 testing::StrictMock<MockProtocolDelegate> test_delegate; | 1019 testing::StrictMock<MockProtocolDelegate> test_delegate; |
| 1002 EXPECT_CALL(test_delegate, UpdateStarted()).Times(1); | 1020 EXPECT_CALL(test_delegate, UpdateStarted()).Times(1); |
| 1003 EXPECT_CALL(test_delegate, GetChunks(_)).WillOnce( | 1021 EXPECT_CALL(test_delegate, GetChunks(_)).WillOnce( |
| 1004 Invoke(testing::CreateFunctor(InvokeGetChunksCallback, | 1022 Invoke(testing::CreateFunctor(InvokeGetChunksCallback, |
| 1005 std::vector<SBListChunkRanges>(), | 1023 std::vector<SBListChunkRanges>(), |
| 1006 false))); | 1024 false))); |
| 1007 EXPECT_CALL(test_delegate, AddChunksRaw("goog-phish-shavar", _, _)).WillOnce( | 1025 EXPECT_CALL(test_delegate, AddChunksRaw(kDefaultPhishList, _, _)).WillOnce( |
| 1008 Invoke(HandleAddChunks)); | 1026 Invoke(HandleAddChunks)); |
| 1009 EXPECT_CALL(test_delegate, UpdateFinished(true)).Times(1); | 1027 EXPECT_CALL(test_delegate, UpdateFinished(true)).Times(1); |
| 1010 | 1028 |
| 1011 scoped_ptr<SafeBrowsingProtocolManager> pm( | 1029 scoped_ptr<SafeBrowsingProtocolManager> pm( |
| 1012 CreateProtocolManager(&test_delegate)); | 1030 CreateProtocolManager(&test_delegate)); |
| 1013 | 1031 |
| 1014 // Kick off initialization. This returns chunks from the DB synchronously. | 1032 // Kick off initialization. This returns chunks from the DB synchronously. |
| 1015 pm->ForceScheduleNextUpdate(TimeDelta()); | 1033 pm->ForceScheduleNextUpdate(TimeDelta()); |
| 1016 runner->RunPendingTasks(); | 1034 runner->RunPendingTasks(); |
| 1017 | 1035 |
| 1018 // The update response contains a single redirect command. | 1036 // The update response contains a single redirect command. |
| 1019 net::TestURLFetcher* url_fetcher = url_fetcher_factory.GetFetcherByID(0); | 1037 net::TestURLFetcher* url_fetcher = url_fetcher_factory.GetFetcherByID(0); |
| 1020 ValidateUpdateFetcherRequest(url_fetcher); | 1038 ValidateUpdateFetcherRequest(url_fetcher); |
| 1021 url_fetcher->set_status(net::URLRequestStatus()); | 1039 url_fetcher->set_status(net::URLRequestStatus()); |
| 1022 url_fetcher->set_response_code(200); | 1040 url_fetcher->set_response_code(200); |
| 1023 url_fetcher->SetResponseString( | 1041 url_fetcher->SetResponseString( |
| 1024 "i:goog-phish-shavar\n" | 1042 base::StringPrintf("i:%s\n" |
| 1025 "u:redirect-server.example.com/path\n"); | 1043 "u:redirect-server.example.com/path\n", |
| 1044 kDefaultPhishList)); |
| 1026 url_fetcher->delegate()->OnURLFetchComplete(url_fetcher); | 1045 url_fetcher->delegate()->OnURLFetchComplete(url_fetcher); |
| 1027 | 1046 |
| 1028 // The redirect response contains a single chunk. | 1047 // The redirect response contains a single chunk. |
| 1029 net::TestURLFetcher* chunk_url_fetcher = | 1048 net::TestURLFetcher* chunk_url_fetcher = |
| 1030 url_fetcher_factory.GetFetcherByID(1); | 1049 url_fetcher_factory.GetFetcherByID(1); |
| 1031 ValidateRedirectFetcherRequest( | 1050 ValidateRedirectFetcherRequest( |
| 1032 chunk_url_fetcher, "https://redirect-server.example.com/path"); | 1051 chunk_url_fetcher, "https://redirect-server.example.com/path"); |
| 1033 chunk_url_fetcher->set_status(net::URLRequestStatus()); | 1052 chunk_url_fetcher->set_status(net::URLRequestStatus()); |
| 1034 chunk_url_fetcher->set_response_code(200); | 1053 chunk_url_fetcher->set_response_code(200); |
| 1035 chunk_url_fetcher->SetResponseString(kChunkPayload1); | 1054 chunk_url_fetcher->SetResponseString(kChunkPayload1); |
| (...skipping 14 matching lines...) Expand all Loading... |
| 1050 new base::TestSimpleTaskRunner()); | 1069 new base::TestSimpleTaskRunner()); |
| 1051 base::ThreadTaskRunnerHandle runner_handler(runner); | 1070 base::ThreadTaskRunnerHandle runner_handler(runner); |
| 1052 net::TestURLFetcherFactory url_fetcher_factory; | 1071 net::TestURLFetcherFactory url_fetcher_factory; |
| 1053 | 1072 |
| 1054 testing::StrictMock<MockProtocolDelegate> test_delegate; | 1073 testing::StrictMock<MockProtocolDelegate> test_delegate; |
| 1055 EXPECT_CALL(test_delegate, UpdateStarted()).Times(1); | 1074 EXPECT_CALL(test_delegate, UpdateStarted()).Times(1); |
| 1056 EXPECT_CALL(test_delegate, GetChunks(_)).WillOnce( | 1075 EXPECT_CALL(test_delegate, GetChunks(_)).WillOnce( |
| 1057 Invoke(testing::CreateFunctor(InvokeGetChunksCallback, | 1076 Invoke(testing::CreateFunctor(InvokeGetChunksCallback, |
| 1058 std::vector<SBListChunkRanges>(), | 1077 std::vector<SBListChunkRanges>(), |
| 1059 false))); | 1078 false))); |
| 1060 EXPECT_CALL(test_delegate, AddChunksRaw("goog-phish-shavar", _, _)). | 1079 EXPECT_CALL(test_delegate, AddChunksRaw(kDefaultPhishList, _, _)). |
| 1061 WillRepeatedly(Invoke(HandleAddChunks)); | 1080 WillRepeatedly(Invoke(HandleAddChunks)); |
| 1062 EXPECT_CALL(test_delegate, UpdateFinished(true)).Times(1); | 1081 EXPECT_CALL(test_delegate, UpdateFinished(true)).Times(1); |
| 1063 | 1082 |
| 1064 scoped_ptr<SafeBrowsingProtocolManager> pm( | 1083 scoped_ptr<SafeBrowsingProtocolManager> pm( |
| 1065 CreateProtocolManager(&test_delegate)); | 1084 CreateProtocolManager(&test_delegate)); |
| 1066 | 1085 |
| 1067 // Kick off initialization. This returns chunks from the DB synchronously. | 1086 // Kick off initialization. This returns chunks from the DB synchronously. |
| 1068 pm->ForceScheduleNextUpdate(TimeDelta()); | 1087 pm->ForceScheduleNextUpdate(TimeDelta()); |
| 1069 runner->RunPendingTasks(); | 1088 runner->RunPendingTasks(); |
| 1070 | 1089 |
| 1071 // The update response contains multiple redirect commands. | 1090 // The update response contains multiple redirect commands. |
| 1072 net::TestURLFetcher* url_fetcher = url_fetcher_factory.GetFetcherByID(0); | 1091 net::TestURLFetcher* url_fetcher = url_fetcher_factory.GetFetcherByID(0); |
| 1073 ValidateUpdateFetcherRequest(url_fetcher); | 1092 ValidateUpdateFetcherRequest(url_fetcher); |
| 1074 url_fetcher->set_status(net::URLRequestStatus()); | 1093 url_fetcher->set_status(net::URLRequestStatus()); |
| 1075 url_fetcher->set_response_code(200); | 1094 url_fetcher->set_response_code(200); |
| 1076 url_fetcher->SetResponseString( | 1095 url_fetcher->SetResponseString( |
| 1077 "i:goog-phish-shavar\n" | 1096 base::StringPrintf("i:%s\n" |
| 1078 "u:redirect-server.example.com/one\n" | 1097 "u:redirect-server.example.com/one\n" |
| 1079 "u:redirect-server.example.com/two\n"); | 1098 "u:redirect-server.example.com/two\n", |
| 1099 kDefaultPhishList)); |
| 1080 url_fetcher->delegate()->OnURLFetchComplete(url_fetcher); | 1100 url_fetcher->delegate()->OnURLFetchComplete(url_fetcher); |
| 1081 | 1101 |
| 1082 // The first redirect response contains a single chunk. | 1102 // The first redirect response contains a single chunk. |
| 1083 net::TestURLFetcher* first_chunk_url_fetcher = | 1103 net::TestURLFetcher* first_chunk_url_fetcher = |
| 1084 url_fetcher_factory.GetFetcherByID(1); | 1104 url_fetcher_factory.GetFetcherByID(1); |
| 1085 ValidateRedirectFetcherRequest( | 1105 ValidateRedirectFetcherRequest( |
| 1086 first_chunk_url_fetcher, "https://redirect-server.example.com/one"); | 1106 first_chunk_url_fetcher, "https://redirect-server.example.com/one"); |
| 1087 first_chunk_url_fetcher->set_status(net::URLRequestStatus()); | 1107 first_chunk_url_fetcher->set_status(net::URLRequestStatus()); |
| 1088 first_chunk_url_fetcher->set_response_code(200); | 1108 first_chunk_url_fetcher->set_response_code(200); |
| 1089 first_chunk_url_fetcher->SetResponseString(kChunkPayload1); | 1109 first_chunk_url_fetcher->SetResponseString(kChunkPayload1); |
| (...skipping 16 matching lines...) Expand all Loading... |
| 1106 second_chunk_url_fetcher->delegate()->OnURLFetchComplete( | 1126 second_chunk_url_fetcher->delegate()->OnURLFetchComplete( |
| 1107 second_chunk_url_fetcher); | 1127 second_chunk_url_fetcher); |
| 1108 | 1128 |
| 1109 EXPECT_FALSE(pm->IsUpdateScheduled()); | 1129 EXPECT_FALSE(pm->IsUpdateScheduled()); |
| 1110 | 1130 |
| 1111 // Invoke the AddChunksCallback to finish the update. | 1131 // Invoke the AddChunksCallback to finish the update. |
| 1112 runner->RunPendingTasks(); | 1132 runner->RunPendingTasks(); |
| 1113 | 1133 |
| 1114 EXPECT_TRUE(pm->IsUpdateScheduled()); | 1134 EXPECT_TRUE(pm->IsUpdateScheduled()); |
| 1115 } | 1135 } |
| OLD | NEW |