| Index: chrome/browser/privacy_blacklist/blacklist.cc
|
| diff --git a/chrome/browser/privacy_blacklist/blacklist.cc b/chrome/browser/privacy_blacklist/blacklist.cc
|
| index 3c3f96ba96398b45b39a179041e5559e5ff5999e..bbb8a38b47b464123ba55233be5c3b17f6f80890 100644
|
| --- a/chrome/browser/privacy_blacklist/blacklist.cc
|
| +++ b/chrome/browser/privacy_blacklist/blacklist.cc
|
| @@ -106,7 +106,7 @@ bool Blacklist::Matches(const std::string& pattern, const std::string& url) {
|
| return pattern[p] == '\0';
|
| }
|
|
|
| -bool Blacklist::Entry::MatchType(const std::string& type) const {
|
| +bool Blacklist::Entry::MatchesType(const std::string& type) const {
|
| return std::find(types_.begin(), types_.end(), type) != types_.end();
|
| }
|
|
|
| @@ -134,15 +134,14 @@ void Blacklist::Entry::Merge(const Entry& entry) {
|
| }
|
|
|
| void Blacklist::Entry::SwapTypes(std::vector<std::string>* types) {
|
| - if (types && types->size()) {
|
| - types->swap(types_);
|
| - }
|
| + DCHECK(types);
|
| + types->swap(types_);
|
| }
|
|
|
| bool Blacklist::Match::MatchType(const std::string& type) const {
|
| for (std::vector<const Entry*>::const_iterator i = entries_.begin();
|
| i != entries_.end(); ++i) {
|
| - if ((*i)->MatchType(type))
|
| + if ((*i)->MatchesType(type))
|
| return true;
|
| }
|
| return false;
|
| @@ -160,67 +159,25 @@ void Blacklist::Match::AddEntry(const Entry* entry) {
|
| entries_.push_back(entry);
|
| }
|
|
|
| -Blacklist::Blacklist(const FilePath& file) : is_good_(false) {
|
| - // No blacklist, nothing to load.
|
| - if (file.value().empty())
|
| - return;
|
| -
|
| - FILE* fp = file_util::OpenFile(file, "rb");
|
| - if (fp == NULL)
|
| - return;
|
| -
|
| - BlacklistStoreInput input(fp);
|
| -
|
| - // Read the providers
|
| - std::size_t n = input.ReadNumProviders();
|
| - if (n == std::numeric_limits<uint32>::max())
|
| - return;
|
| -
|
| - providers_.reserve(n);
|
| - std::string name;
|
| - std::string url;
|
| - for (std::size_t i = 0; i < n; ++i) {
|
| - if (!input.ReadProvider(&name, &url))
|
| - return;
|
| - providers_.push_back(new Provider(name.c_str(), url.c_str()));
|
| - }
|
| +Blacklist::Blacklist() {
|
| +}
|
|
|
| - // Read the entries
|
| - n = input.ReadNumEntries();
|
| - if (n == std::numeric_limits<uint32>::max())
|
| - return;
|
| -
|
| - std::string pattern;
|
| - unsigned int attributes, provider;
|
| - std::vector<std::string> types;
|
| - for (unsigned int i = 0; i < n; ++i) {
|
| - if (!input.ReadEntry(&pattern, &attributes, &types, &provider))
|
| - return;
|
| -
|
| - Entry* entry = new Entry(pattern, providers_[provider]);
|
| - entry->AddAttributes(attributes);
|
| - entry->SwapTypes(&types);
|
| - blacklist_.push_back(entry);
|
| - }
|
| +Blacklist::~Blacklist() {
|
| +}
|
|
|
| - is_good_ = true;
|
| +void Blacklist::AddEntry(Entry* entry) {
|
| + DCHECK(entry);
|
| + blacklist_.push_back(linked_ptr<Entry>(entry));
|
| }
|
|
|
| -Blacklist::~Blacklist() {
|
| - for (std::vector<Entry*>::iterator i = blacklist_.begin();
|
| - i != blacklist_.end(); ++i)
|
| - delete *i;
|
| - for (std::vector<Provider*>::iterator i = providers_.begin();
|
| - i != providers_.end(); ++i)
|
| - delete *i;
|
| +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 {
|
| - if (!is_good_)
|
| - return NULL; // Don't attempt to find matches if the data is corrupt.
|
| -
|
| // 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.
|
| @@ -229,12 +186,12 @@ Blacklist::Match* Blacklist::findMatch(const GURL& url) const {
|
| !url.SchemeIs(chrome::kFtpScheme))
|
| return 0;
|
| Match* match = NULL;
|
| - for (std::vector<Entry*>::const_iterator i = blacklist_.begin();
|
| + for (EntryList::const_iterator i = blacklist_.begin();
|
| i != blacklist_.end(); ++i) {
|
| - if (Matches((*i)->pattern(), url.host()+url.path())) {
|
| + if (Matches((*i)->pattern(), url.host() + url.path())) {
|
| if (!match)
|
| match = new Match;
|
| - match->AddEntry(*i);
|
| + match->AddEntry(i->get());
|
| }
|
| }
|
| return match;
|
|
|