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
11namespace extensions {
12namespace {
13
14static const char kUrlPrefix[] = "https://prefix.com/foo";
15static const char kBackupConnectUrlPrefix[] = "https://alt1-prefix.com/foo";
16static const char kBackupHttpUrlPrefix[] = "https://alt2-prefix.com/foo";
17static const char kBackupNetworkUrlPrefix[] = "https://alt3-prefix.com/foo";
18static const char kClient[] = "unittest";
19static const char kAppVer[] = "1.0";
20
21SafeBrowsingProtocolConfig 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
34TestBlacklistStateFetcher::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
43TestBlacklistStateFetcher::~TestBlacklistStateFetcher() {
44}
45
46void TestBlacklistStateFetcher::SetBlacklistVerdict(
47    const std::string& id, ClientCRXListInfoResponse_Verdict state) {
48  verdicts_[id] = state;
49}
50
51bool 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