Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code

Unified Diff: include/AdblockPlus/ReferrerMapping.h

Issue 5768603836088320: Issue 1564-Fix FilterEngine::Matches for allowing request which is whitelisted in the ascendant node
Patch Set: fix according to comments Created Dec. 12, 2014, 4:59 p.m.
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
Download patch
« no previous file with comments | « no previous file | src/ReferrerMapping.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: include/AdblockPlus/ReferrerMapping.h
diff --git a/include/AdblockPlus/ReferrerMapping.h b/include/AdblockPlus/ReferrerMapping.h
index 76d7cbfdfed15ca0b1e022709e15e48dbe481e53..98fd0b5c092d2bec35f1021c1c742b32fe69032e 100644
--- a/include/AdblockPlus/ReferrerMapping.h
+++ b/include/AdblockPlus/ReferrerMapping.h
@@ -22,18 +22,29 @@
#include <map>
#include <string>
#include <vector>
+#include "FilterEngine.h"
namespace AdblockPlus
{
/**
* Stores a mapping between URLs and their referrers.
- * This can be used to build a chain of referrers for any URL
- * (see `BuildReferrerChain()`), which approximates the frame structure, see
- * FilterEngine::Matches().
+ * This can be used to build a frame structure for any URL
+ * (see `BuildFrameStructure()`), it's useful for FilterEngine::Matches().
*/
class ReferrerMapping
{
public:
+ /// The type for URL.
+ typedef std::string Url;
+
+ /// Contains an ordered list of URLs.
+ typedef std::vector<Url> Urls;
+
+ /// Indicates whether the URL is a frame or not.
+ enum FrameIndicator
+ {
+ FRAME_INDICATOR_NOT_FRAME = 0, FRAME_INDICATOR_FRAME = 1
+ };
/**
* Constructor.
* @param maxCachedUrls Number of URL mappings to store. The higher the
@@ -46,21 +57,37 @@ namespace AdblockPlus
* Records the refferer for a URL.
* @param url Request URL.
* @param referrer Request referrer.
+ * @param isFrame Indicates whether the url is a frame.
*/
- void Add(const std::string& url, const std::string& referrer);
+ void Add(const Url& url, const Url& referrer, FrameIndicator isFrame);
/**
- * Builds a chain of referrers for the supplied URL.
+ * Builds a frame structure for the supplied URL.
* This should reconstruct a document's parent frame URLs.
- * @param url URL to build the chain for.
- * @return List of URLs, starting with `url`.
+ * @param url URL to build the chain for, it is referrer as well.
+ * @return List of URLs, finishing with `url`.
*/
- std::vector<std::string> BuildReferrerChain(const std::string& url) const;
+ Urls BuildFrameStructure(const Url& url) const;
private:
const int maxCachedUrls;
- std::map<std::string, std::string> mapping;
- std::list<std::string> cachedUrls;
+ struct RequestInfo
+ {
+ explicit RequestInfo(const Url& referrerArg = Url(),
+ FrameIndicator frameIndicatorArg = FrameIndicator::FRAME_INDICATOR_NOT_FRAME)
+ : referrer(referrerArg), frameIndicator(frameIndicatorArg)
+ {
+ }
+ bool IsFrame() const
+ {
+ return frameIndicator == FrameIndicator::FRAME_INDICATOR_FRAME;
+ }
+ Url referrer;
+ FrameIndicator frameIndicator;
+ };
+ typedef std::map<Url, RequestInfo> ReferrerMap;
+ ReferrerMap mapping;
+ std::list<Url> cachedUrls;
};
}
« no previous file with comments | « no previous file | src/ReferrerMapping.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld