| Index: chrome/browser/privacy_blacklist/blacklist.cc
 | 
| diff --git a/chrome/browser/privacy_blacklist/blacklist.cc b/chrome/browser/privacy_blacklist/blacklist.cc
 | 
| deleted file mode 100644
 | 
| index 9b4bda1464d9d371e2ecebc54fabec7caf4740ed..0000000000000000000000000000000000000000
 | 
| --- a/chrome/browser/privacy_blacklist/blacklist.cc
 | 
| +++ /dev/null
 | 
| @@ -1,223 +0,0 @@
 | 
| -// Copyright (c) 2009 The Chromium Authors. All rights reserved.
 | 
| -// Use of this source code is governed by a BSD-style license that can be
 | 
| -// found in the LICENSE file.
 | 
| -
 | 
| -#include "chrome/browser/privacy_blacklist/blacklist.h"
 | 
| -
 | 
| -#include <algorithm>
 | 
| -#include <limits>
 | 
| -#include <string>
 | 
| -
 | 
| -#include "base/file_path.h"
 | 
| -#include "base/file_util.h"
 | 
| -#include "base/string_util.h"
 | 
| -#include "chrome/browser/pref_service.h"
 | 
| -#include "chrome/browser/profile.h"
 | 
| -#include "chrome/common/pref_names.h"
 | 
| -#include "chrome/common/url_constants.h"
 | 
| -#include "net/http/http_util.h"
 | 
| -
 | 
| -namespace {
 | 
| -
 | 
| -const char* const cookie_headers[2] = { "cookie", "set-cookie" };
 | 
| -
 | 
| -} // namespace
 | 
| -
 | 
| -const unsigned int Blacklist::kBlockAll = 1;
 | 
| -const unsigned int Blacklist::kBlockCookies = 1 << 1;
 | 
| -const unsigned int Blacklist::kDontSendReferrer = 1 << 2;
 | 
| -const unsigned int Blacklist::kDontSendUserAgent = 1 << 3;
 | 
| -const unsigned int Blacklist::kBlockUnsecure = 1 << 4;
 | 
| -const unsigned int Blacklist::kBlockRequest = kBlockAll | kBlockUnsecure;
 | 
| -const unsigned int Blacklist::kModifySentHeaders =
 | 
| -    kBlockCookies | kDontSendUserAgent | kDontSendReferrer;
 | 
| -const unsigned int Blacklist::kModifyReceivedHeaders = kBlockCookies;
 | 
| -
 | 
| -// static
 | 
| -bool Blacklist::Matches(const std::string& pattern, const std::string& url) {
 | 
| -  if (pattern.size() > url.size())
 | 
| -    return false;
 | 
| -
 | 
| -  std::string::size_type p = 0;
 | 
| -  std::string::size_type u = 0;
 | 
| -
 | 
| -  while (pattern[p] != '\0' && url[u] != '\0') {
 | 
| -    if (pattern[p] == '@') {
 | 
| -      while (pattern[++p] == '@') {}  // Consecutive @ are redundant.
 | 
| -
 | 
| -      if (pattern[p] == '\0')
 | 
| -        return true;  // Nothing to match after the @.
 | 
| -
 | 
| -      // Look for another wildcard to determine pattern-chunk.
 | 
| -      std::string::size_type tp = pattern.find_first_of("@", p);
 | 
| -
 | 
| -      // If it must match until the end, compare the last characters.
 | 
| -      if (tp == std::string::npos) {
 | 
| -        std::string::size_type ur = url.size() - u;
 | 
| -        std::string::size_type pr = pattern.size() - p;
 | 
| -        return (pr <= ur) &&
 | 
| -            (url.compare(url.size() - pr, pr, pattern.c_str() + p) == 0);
 | 
| -      }
 | 
| -
 | 
| -      // Else find the pattern chunk which is pattern[p:tp]
 | 
| -      std::string::size_type tu = url.find(pattern.c_str() + p, u, tp - p);
 | 
| -      if (tu == std::string::npos)
 | 
| -        return false;  // Pattern chunk not found.
 | 
| -
 | 
| -      // Since tp is strictly greater than p, both u and p always increase.
 | 
| -      u = tu + tp - p;
 | 
| -      p = tp;
 | 
| -      continue;
 | 
| -    }
 | 
| -
 | 
| -    // Match non-wildcard character.
 | 
| -    if (pattern[p++] != url[u++])
 | 
| -      return false;
 | 
| -  }
 | 
| -  return pattern[p] == '\0';
 | 
| -}
 | 
| -
 | 
| -bool Blacklist::Entry::IsBlocked(const GURL& url) const {
 | 
| -  return (attributes_ & kBlockAll) ||
 | 
| -    ((attributes_ & kBlockUnsecure) && !url.SchemeIsSecure());
 | 
| -}
 | 
| -
 | 
| -Blacklist::Entry::Entry(const std::string& pattern, const Provider* provider,
 | 
| -                        bool is_exception)
 | 
| -    : attributes_(0),
 | 
| -      is_exception_(is_exception),
 | 
| -      pattern_(pattern),
 | 
| -      provider_(provider) {}
 | 
| -
 | 
| -void Blacklist::Entry::AddAttributes(unsigned int attributes) {
 | 
| -  attributes_ |= attributes;
 | 
| -}
 | 
| -
 | 
| -bool Blacklist::Match::IsBlocked(const GURL& url) const {
 | 
| -  return (attributes() & kBlockAll) ||
 | 
| -    ((attributes() & kBlockUnsecure) && !url.SchemeIsSecure());
 | 
| -}
 | 
| -
 | 
| -Blacklist::Match::Match() : matching_attributes_(0), exception_attributes_(0) {}
 | 
| -
 | 
| -void Blacklist::Match::AddEntry(const Entry* entry) {
 | 
| -  if (entry->is_exception()) {
 | 
| -    exception_attributes_ |= entry->attributes();
 | 
| -    exception_entries_.push_back(entry);
 | 
| -  } else {
 | 
| -    matching_attributes_ |= entry->attributes();
 | 
| -    matching_entries_.push_back(entry);
 | 
| -  }
 | 
| -}
 | 
| -
 | 
| -Blacklist::Blacklist(PrefService* prefs) : prefs_(prefs) {
 | 
| -  LoadPreferences();
 | 
| -}
 | 
| -
 | 
| -Blacklist::~Blacklist() {
 | 
| -}
 | 
| -
 | 
| -void Blacklist::AddEntry(Entry* entry) {
 | 
| -  DCHECK(entry);
 | 
| -  blacklist_.push_back(linked_ptr<Entry>(entry));
 | 
| -}
 | 
| -
 | 
| -void Blacklist::AddProvider(Provider* provider) {
 | 
| -  DCHECK(provider);
 | 
| -  providers_.push_back(linked_ptr<Provider>(provider));
 | 
| -}
 | 
| -
 | 
| -// Returns a pointer to the Blacklist-owned entry which matches the given
 | 
| -// URL. If no matching Entry is found, returns null.
 | 
| -Blacklist::Match* Blacklist::FindMatch(const GURL& url) const {
 | 
| -  // Never match something which is not http, https or ftp.
 | 
| -  // TODO(idanan): Investigate if this would be an inclusion test instead of an
 | 
| -  // exclusion test and if there are other schemes to test for.
 | 
| -  if (!url.SchemeIs(chrome::kHttpScheme) &&
 | 
| -      !url.SchemeIs(chrome::kHttpsScheme) &&
 | 
| -      !url.SchemeIs(chrome::kFtpScheme))
 | 
| -    return 0;
 | 
| -  std::string url_spec = GetURLAsLookupString(url);
 | 
| -  Match* match = NULL;
 | 
| -  for (EntryList::const_iterator i = blacklist_.begin();
 | 
| -       i != blacklist_.end(); ++i) {
 | 
| -    if (Matches((*i)->pattern(), url_spec)) {
 | 
| -      if (!match)
 | 
| -        match = new Match;
 | 
| -      match->AddEntry(i->get());
 | 
| -    }
 | 
| -  }
 | 
| -  return match;
 | 
| -}
 | 
| -
 | 
| -bool Blacklist::LoadEntryPreference(const ListValue& pref,
 | 
| -                                    const Provider* provider) {
 | 
| -  EntryList entries;
 | 
| -  for (ListValue::const_iterator i = pref.begin(); i != pref.end(); ++i) {
 | 
| -    if (!(*i)->IsType(Value::TYPE_DICTIONARY))
 | 
| -      return false;
 | 
| -    const DictionaryValue* entry_pref = static_cast<DictionaryValue*>(*i);
 | 
| -    std::string pattern;
 | 
| -    int attributes;
 | 
| -    bool is_exception;
 | 
| -    if (!(entry_pref->GetString(L"pattern", &pattern) &&
 | 
| -          entry_pref->GetInteger(L"attributes", &attributes) &&
 | 
| -          entry_pref->GetBoolean(L"exception", &is_exception)))
 | 
| -      return false;
 | 
| -    Entry* entry = new Entry(pattern, provider, is_exception);
 | 
| -    entry->AddAttributes(static_cast<unsigned int>(attributes));
 | 
| -    entries.push_back(linked_ptr<Entry>(entry));
 | 
| -  }
 | 
| -  blacklist_.insert(blacklist_.end(), entries.begin(), entries.end());
 | 
| -  return true;
 | 
| -}
 | 
| -
 | 
| -bool Blacklist::LoadProviderPreference(const DictionaryValue& pref,
 | 
| -                                       const std::wstring& path) {
 | 
| -  std::string name, url;
 | 
| -  ListValue* entries;
 | 
| -  if (!(pref.GetString(L"name", &name) && pref.GetString(L"url", &url) &&
 | 
| -        pref.GetList(L"entries", &entries)))
 | 
| -    return false;
 | 
| -  linked_ptr<Provider> provider(new Provider(name, url, path));
 | 
| -  if (LoadEntryPreference(*entries, provider.get()))
 | 
| -    providers_.push_back(provider);
 | 
| -    return true;
 | 
| -  return false;
 | 
| -}
 | 
| -
 | 
| -bool Blacklist::LoadPreferences() {
 | 
| -  DCHECK(prefs_);
 | 
| -  const DictionaryValue* blacklist_rules = prefs_->GetDictionary(
 | 
| -      prefs::kPrivacyFilterRules);
 | 
| -  if (!blacklist_rules)
 | 
| -    return false;
 | 
| -  bool result = true;
 | 
| -  for (DictionaryValue::key_iterator key = blacklist_rules->begin_keys();
 | 
| -       key != blacklist_rules->end_keys(); ++key) {
 | 
| -    DictionaryValue* provider;
 | 
| -    if (!(blacklist_rules->GetDictionaryWithoutPathExpansion(*key, &provider) &&
 | 
| -         LoadProviderPreference(*provider, *key)))
 | 
| -      result = false;
 | 
| -  }
 | 
| -  return result;
 | 
| -}
 | 
| -
 | 
| -// static
 | 
| -std::string Blacklist::GetURLAsLookupString(const GURL& url) {
 | 
| -  std::string url_spec = url.host() + url.path();
 | 
| -  if (!url.query().empty())
 | 
| -    url_spec = url_spec + "?" + url.query();
 | 
| -
 | 
| -  return url_spec;
 | 
| -}
 | 
| -
 | 
| -// static
 | 
| -void Blacklist::RegisterUserPrefs(PrefService* user_prefs) {
 | 
| -  user_prefs->RegisterDictionaryPref(prefs::kPrivacyFilterRules);
 | 
| -}
 | 
| -
 | 
| -// static
 | 
| -std::string Blacklist::StripCookies(const std::string& header) {
 | 
| -  return net::HttpUtil::StripHeaders(header, cookie_headers, 2);
 | 
| -}
 | 
| 
 |