Page Speed Optimization Libraries
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Public Member Functions | Protected Member Functions | List of all members
net_instaweb::FileLoadPolicy Class Reference

#include "file_load_policy.h"

Public Member Functions

virtual bool ShouldLoadFromFile (const GoogleUrl &url, GoogleString *filename) const
virtual void Associate (StringPiece url_prefix, StringPiece filename_prefix)
virtual bool AssociateRegexp (StringPiece url_regexp, StringPiece filename_prefix, GoogleString *error)
virtual bool AddRule (const GoogleString &rule, bool is_regexp, bool allowed, GoogleString *error)
virtual void Merge (const FileLoadPolicy &other)
 Merge in other policies (needed for rewrite_options).

Protected Member Functions

virtual bool ShouldLoadFromFileHelper (const GoogleUrl &url, GoogleString *filename) const

Detailed Description

Class for deciding which URLs get loaded from which files.

Currently, you must explicitly set which directories to load directly from filesystem.

Files with unknown extensions are never loaded from file because we wouldn't be able to set a content type.

Member Function Documentation

virtual bool net_instaweb::FileLoadPolicy::AddRule ( const GoogleString rule,
bool  is_regexp,
bool  allowed,
GoogleString error 

By default Associate permits directly loading anything under the specified filesystem path prefix. So if we were given:

Associate("", "/var/www/")

we would use load-from-file for everything on the site. If some of those files actually need to be loaded through HTTP, for example because they need to be interpreted, we might need:

AddRule("/var/www/cgi-bin/", false, false); ///< literal blacklist.


// blacklist regexp AddRule("\\.php$", true, false); ///< regexp blacklist.

In cases where it's easier to list what's allowed than what's prohibited, you can whitelist:

GoogleString e; ///< For regexp errors. Associate("", "/var/www/") AddRule(".*", true, false, &e) // regexp blacklist. AddRule("\\.html$", true, true, &e) // regexp whitelist. AddRule("/var/www/static/", false, true, &e) // literal whitelist. // regexp blacklist. AddRule("^/var/www/static/legacy/.*\\.php$", true, false, &e)

AddRule will fail if RE2 can't compile the regular expression, and will write an error message to it's error string and return false if that happens.

virtual void net_instaweb::FileLoadPolicy::Associate ( StringPiece  url_prefix,
StringPiece  filename_prefix 

Tells us to load all URLs with this prefix from filename_prefix directory. Both prefixes must specify directories, if they do not end in slashes, we add them.

Tests against youngest association first in case of overlapping prefixes. Because we support regular expressions, checking for overlapping prefixes isn't practical.

virtual bool net_instaweb::FileLoadPolicy::AssociateRegexp ( StringPiece  url_regexp,
StringPiece  filename_prefix,
GoogleString error 

A version of Associate supporting RE2-format regular expressions. Backreferences are supported, as in:

AssociateRegexp("^https?://[^/]*)/static/", "/var/static/\\1", &error);

Which will map urls as: -> /var/static/pat/cat.jpg -> /var/static/sam/dog.jpg -> /var/static/al/css/ie

If the regular expression and substitution validate, returns true. Otherwise it writes a message to error and returns false.

virtual bool net_instaweb::FileLoadPolicy::ShouldLoadFromFile ( const GoogleUrl url,
GoogleString filename 
) const

Note: This is O(N+M) for N calls to Associate and M calls to AddRule.

TODO(sligocki): Set up a more efficient mapper.

The documentation for this class was generated from the following file: