Chromium Code Reviews

Unified Diff: chrome/browser/privacy_blacklist/blacklist.h

Issue 337025: Design changes in browser/privacy_blacklist needed to integrate (Closed)
Patch Set: fixes Created 11 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View side-by-side diff with in-line comments
« no previous file with comments | « chrome/browser/browser_main.cc ('k') | chrome/browser/privacy_blacklist/blacklist.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/privacy_blacklist/blacklist.h
diff --git a/chrome/browser/privacy_blacklist/blacklist.h b/chrome/browser/privacy_blacklist/blacklist.h
index 7c72a0e3fac414a695a032b0b68dd72e05ab2446..c57efff4cc30b6d197bd4d1689080737a34fb0df 100644
--- a/chrome/browser/privacy_blacklist/blacklist.h
+++ b/chrome/browser/privacy_blacklist/blacklist.h
@@ -9,6 +9,7 @@
#include <vector>
#include "base/basictypes.h"
+#include "base/linked_ptr.h"
#include "googleurl/src/gurl.h"
#include "net/url_request/url_request.h"
@@ -22,15 +23,15 @@ class FilePath;
// A blacklist is essentially a map from resource-match patterns to filter-
// attributes. Each time a resources matches a pattern the filter-attributes
// are used to determine how the browser handles the matching resource.
-//
-// TODO(idanan): Implement this efficiently.
-// To get things started, the initial implementation is as simple as
-// it gets and cannot scale to large blacklists but it should be enough
-// for testing on the order of a hundred or so entries.
-//
////////////////////////////////////////////////////////////////////////////////
class Blacklist {
public:
+ class Entry;
+ class Provider;
+
+ typedef std::vector<linked_ptr<Entry> > EntryList;
+ typedef std::vector<linked_ptr<Provider> > ProviderList;
+
// Filter attributes (more to come):
static const unsigned int kBlockAll;
static const unsigned int kDontSendCookies;
@@ -51,7 +52,8 @@ class Blacklist {
// Key used to access data attached to URLRequest objects.
static const void* const kRequestDataKey;
- // Takes a string an returns the matching attribute, 0 if none matches.
+ // Converts a stringized filter attribute (see above) back to its integer
+ // value. Returns 0 on error.
static unsigned int String2Attribute(const std::string&);
// Blacklist entries come from a provider, defined by a name and source URL.
@@ -59,10 +61,13 @@ class Blacklist {
public:
Provider() {}
Provider(const char* name, const char* url) : name_(name), url_(url) {}
+
const std::string& name() const { return name_; }
- const std::string& url() const { return url_; }
void set_name(const std::string& name) { name_ = name; }
+
+ const std::string& url() const { return url_; }
void set_url(const std::string& url) { url_ = url; }
+
private:
std::string name_;
std::string url_;
@@ -72,6 +77,9 @@ class Blacklist {
// the patterns. Entry objects are owned by the Blacklist that stores them.
class Entry {
public:
+ // Construct with given pattern.
+ Entry(const std::string& pattern, const Provider* provider);
+
// Returns the pattern which this entry matches.
const std::string& pattern() const { return pattern_; }
@@ -85,25 +93,24 @@ class Blacklist {
// the filter-attributes of this pattern apply. This needs only to be
// checked for content-type specific rules, as determined by calling
// attributes().
- bool MatchType(const std::string&) const;
+ bool MatchesType(const std::string&) const;
// Returns true of the given URL is blocked, assumes it matches the
// pattern of this entry.
bool IsBlocked(const GURL&) const;
- private:
- // Construct with given pattern.
- explicit Entry(const std::string& pattern, const Provider* provider);
-
void AddAttributes(unsigned int attributes);
void AddType(const std::string& type);
+
+ // Swap the contents of the internal types vector with the given vector.
+ void SwapTypes(std::vector<std::string>* types);
+ private:
+ friend class BlacklistIO;
+
// Merge the attributes and types of the given entry with this one.
void Merge(const Entry& entry);
- // Swap the given vector content for the type vector for quick loading.
- void SwapTypes(std::vector<std::string>* types);
-
std::string pattern_;
unsigned int attributes_;
std::vector<std::string> types_;
@@ -111,9 +118,6 @@ class Blacklist {
// Points to the provider of this entry, the providers are all
// owned by the blacklist.
const Provider* provider_;
-
- friend class Blacklist;
- friend class BlacklistIO;
};
// A request may match one or more Blacklist rules. The Match class packages
@@ -141,26 +145,39 @@ class Blacklist {
friend class Blacklist; // Only blacklist constructs and sets these.
};
- // Constructs a Blacklist given the filename of the persistent version.
- //
- // For startup efficiency, and because the blacklist must be available
- // before any http request is made (including the homepage, if one is
- // set to be loaded at startup), it is important to load the blacklist
- // from a local source as efficiently as possible. For this reason, the
- // combined rules from all active blacklists are stored in one local file.
- explicit Blacklist(const FilePath& path);
+ // Constructs an empty blacklist.
+ Blacklist();
// Destructor.
~Blacklist();
+
+ // Adds a new entry to the blacklist. It is now owned by the blacklist.
+ void AddEntry(Entry* entry);
+
+ // Adds a new provider to the blacklist. It is now owned by the blacklist.
+ void AddProvider(Provider* provider);
+
+ EntryList::const_iterator entries_begin() const {
+ return blacklist_.begin();
+ }
+
+ EntryList::const_iterator entries_end() const {
+ return blacklist_.end();
+ }
+
+ ProviderList::const_iterator providers_begin() const {
+ return providers_.begin();
+ }
+
+ ProviderList::const_iterator providers_end() const {
+ return providers_.end();
+ }
// Returns a pointer to a Match structure holding all matching entries.
// If no matching Entry is found, returns null. Ownership belongs to the
// caller.
Match* findMatch(const GURL&) const;
- // Returns true if the blacklist object is in good health.
- bool is_good() const { return is_good_; }
-
// Helper to remove cookies from a header.
static std::string StripCookies(const std::string&);
@@ -173,12 +190,9 @@ class Blacklist {
// internally but made static so that access can be given to tests.
static bool Matches(const std::string& pattern, const std::string& url);
- std::vector<Entry*> blacklist_;
- std::vector<Provider*> providers_;
-
- bool is_good_; // True if the blacklist was read successfully.
+ EntryList blacklist_;
+ ProviderList providers_;
- FRIEND_TEST(BlacklistTest, Generic);
FRIEND_TEST(BlacklistTest, PatternMatch);
DISALLOW_COPY_AND_ASSIGN(Blacklist);
};
« no previous file with comments | « chrome/browser/browser_main.cc ('k') | chrome/browser/privacy_blacklist/blacklist.cc » ('j') | no next file with comments »

Powered by Google App Engine