15d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
25d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// found in the LICENSE file.
45d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
55d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/extensions/test_blacklist_state_fetcher.h"
65d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
75d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/message_loop/message_loop.h"
85d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/stl_util.h"
95d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "net/url_request/url_request_test_util.h"
105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)namespace extensions {
125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)namespace {
135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)static const char kUrlPrefix[] = "https://prefix.com/foo";
155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)static const char kBackupConnectUrlPrefix[] = "https://alt1-prefix.com/foo";
165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)static const char kBackupHttpUrlPrefix[] = "https://alt2-prefix.com/foo";
175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)static const char kBackupNetworkUrlPrefix[] = "https://alt3-prefix.com/foo";
185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)static const char kClient[] = "unittest";
195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)static const char kAppVer[] = "1.0";
205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)SafeBrowsingProtocolConfig CreateSafeBrowsingProtocolConfig() {
225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  SafeBrowsingProtocolConfig config;
235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  config.client_name = kClient;
245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  config.url_prefix = kUrlPrefix;
255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  config.backup_connect_error_url_prefix = kBackupConnectUrlPrefix;
265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  config.backup_http_error_url_prefix = kBackupHttpUrlPrefix;
275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  config.backup_network_error_url_prefix = kBackupNetworkUrlPrefix;
285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  config.version = kAppVer;
295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return config;
305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}  // namespace
335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)TestBlacklistStateFetcher::TestBlacklistStateFetcher(
355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    BlacklistStateFetcher* fetcher) : fetcher_(fetcher) {
365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  fetcher_->SetSafeBrowsingConfig(CreateSafeBrowsingProtocolConfig());
375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  scoped_refptr<net::TestURLRequestContextGetter> context =
385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        new net::TestURLRequestContextGetter(
395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)            base::MessageLoopProxy::current());
401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  fetcher_->SetURLRequestContextForTest(context.get());
415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)TestBlacklistStateFetcher::~TestBlacklistStateFetcher() {
445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void TestBlacklistStateFetcher::SetBlacklistVerdict(
475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    const std::string& id, ClientCRXListInfoResponse_Verdict state) {
485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  verdicts_[id] = state;
495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)bool TestBlacklistStateFetcher::HandleFetcher(int fetcher_id) {
525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  net::TestURLFetcher* url_fetcher = url_fetcher_factory_.GetFetcherByID(
535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      fetcher_id);
545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  if (!url_fetcher)
555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    return false;
565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  const std::string& request_str = url_fetcher->upload_data();
585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  ClientCRXListInfoRequest request;
595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  if (!request.ParseFromString(request_str))
605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    return false;
615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  std::string id = request.id();
635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  ClientCRXListInfoResponse response;
655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  if (ContainsKey(verdicts_, id))
665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    response.set_verdict(verdicts_[id]);
675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  else
685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    response.set_verdict(ClientCRXListInfoResponse::NOT_IN_BLACKLIST);
695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  std::string response_str;
715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  response.SerializeToString(&response_str);
725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  url_fetcher->set_status(net::URLRequestStatus());
745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  url_fetcher->set_response_code(200);
755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  url_fetcher->SetResponseString(response_str);
765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  url_fetcher->delegate()->OnURLFetchComplete(url_fetcher);
775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return true;
795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}  // namespace extensions
82