00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00018
00019 #ifndef NET_INSTAWEB_REWRITER_PUBLIC_FILE_LOAD_POLICY_H_
00020 #define NET_INSTAWEB_REWRITER_PUBLIC_FILE_LOAD_POLICY_H_
00021
00022 #include <list>
00023 #include "net/instaweb/util/public/basictypes.h"
00024 #include "net/instaweb/util/public/gtest_prod.h"
00025 #include "net/instaweb/util/public/string.h"
00026 #include "net/instaweb/util/public/string_util.h"
00027
00028 namespace net_instaweb {
00029
00030 class GoogleUrl;
00031
00036 class FileLoadPolicy {
00037 public:
00038 FileLoadPolicy() {}
00039 virtual ~FileLoadPolicy();
00040
00043 virtual bool ShouldLoadFromFile(const GoogleUrl& url,
00044 GoogleString* filename) const;
00045
00052 virtual void Associate(const StringPiece& url_prefix,
00053 const StringPiece& filename_prefix);
00054
00056 virtual void Merge(const FileLoadPolicy& other);
00057
00058 private:
00059 struct UrlFilename {
00060 UrlFilename(const StringPiece& url_prefix_in,
00061 const StringPiece& filename_prefix_in)
00062 : url_prefix(url_prefix_in.data(), url_prefix_in.size()),
00063 filename_prefix(filename_prefix_in.data(), filename_prefix_in.size())
00064 {}
00065
00066 GoogleString url_prefix;
00067 GoogleString filename_prefix;
00068 };
00071 typedef std::list<UrlFilename> UrlFilenames;
00072 UrlFilenames url_filenames_;
00073
00074 FRIEND_TEST(FileLoadPolicyTest, Merge);
00075
00076 DISALLOW_COPY_AND_ASSIGN(FileLoadPolicy);
00077 };
00078
00079 }
00080
00081 #endif ///< NET_INSTAWEB_REWRITER_PUBLIC_FILE_LOAD_POLICY_H_