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 3 // found in the LICENSE file. 4 5 #include "chrome/browser/extensions/test_blacklist_state_fetcher.h" 6 7 #include "base/message_loop/message_loop.h" 8 #include "base/stl_util.h" 9 #include "net/url_request/url_request_test_util.h" 10 11 namespace extensions { 12 namespace { 13 14 static const char kUrlPrefix[] = "https://prefix.com/foo"; 15 static const char kBackupConnectUrlPrefix[] = "https://alt1-prefix.com/foo"; 16 static const char kBackupHttpUrlPrefix[] = "https://alt2-prefix.com/foo"; 17 static const char kBackupNetworkUrlPrefix[] = "https://alt3-prefix.com/foo"; 18 static const char kClient[] = "unittest"; 19 static const char kAppVer[] = "1.0"; 20 21 SafeBrowsingProtocolConfig CreateSafeBrowsingProtocolConfig() { 22 SafeBrowsingProtocolConfig config; 23 config.client_name = kClient; 24 config.url_prefix = kUrlPrefix; 25 config.backup_connect_error_url_prefix = kBackupConnectUrlPrefix; 26 config.backup_http_error_url_prefix = kBackupHttpUrlPrefix; 27 config.backup_network_error_url_prefix = kBackupNetworkUrlPrefix; 28 config.version = kAppVer; 29 return config; 30 } 31 32 } // namespace 33 34 TestBlacklistStateFetcher::TestBlacklistStateFetcher( 35 BlacklistStateFetcher* fetcher) : fetcher_(fetcher) { 36 fetcher_->SetSafeBrowsingConfig(CreateSafeBrowsingProtocolConfig()); 37 scoped_refptr<net::TestURLRequestContextGetter> context = 38 new net::TestURLRequestContextGetter( 39 base::MessageLoopProxy::current()); 40 fetcher_->SetURLRequestContextForTest(context.get()); 41 } 42 43 TestBlacklistStateFetcher::~TestBlacklistStateFetcher() { 44 } 45 46 void TestBlacklistStateFetcher::SetBlacklistVerdict( 47 const std::string& id, ClientCRXListInfoResponse_Verdict state) { 48 verdicts_[id] = state; 49 } 50 51 bool TestBlacklistStateFetcher::HandleFetcher(int fetcher_id) { 52 net::TestURLFetcher* url_fetcher = url_fetcher_factory_.GetFetcherByID( 53 fetcher_id); 54 if (!url_fetcher) 55 return false; 56 57 const std::string& request_str = url_fetcher->upload_data(); 58 ClientCRXListInfoRequest request; 59 if (!request.ParseFromString(request_str)) 60 return false; 61 62 std::string id = request.id(); 63 64 ClientCRXListInfoResponse response; 65 if (ContainsKey(verdicts_, id)) 66 response.set_verdict(verdicts_[id]); 67 else 68 response.set_verdict(ClientCRXListInfoResponse::NOT_IN_BLACKLIST); 69 70 std::string response_str; 71 response.SerializeToString(&response_str); 72 73 url_fetcher->set_status(net::URLRequestStatus()); 74 url_fetcher->set_response_code(200); 75 url_fetcher->SetResponseString(response_str); 76 url_fetcher->delegate()->OnURLFetchComplete(url_fetcher); 77 78 return true; 79 } 80 81 } // namespace extensions 82