| 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);
|
| -}
|
|
|