00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00018
00019 #ifndef NET_INSTAWEB_REWRITER_PUBLIC_CSS_TAG_SCANNER_H_
00020 #define NET_INSTAWEB_REWRITER_PUBLIC_CSS_TAG_SCANNER_H_
00021
00022 #include "net/instaweb/htmlparse/public/html_element.h"
00023 #include "net/instaweb/util/public/basictypes.h"
00024 #include "net/instaweb/util/public/string.h"
00025 #include "net/instaweb/util/public/string_util.h"
00026
00027 namespace net_instaweb {
00028
00029 class DomainRewriteFilter;
00030 class GoogleUrl;
00031 class HtmlParse;
00032 class MessageHandler;
00033 class RewriteDriver;
00034 class UrlLeftTrimFilter;
00035 class Writer;
00036
00037 class CssTagScanner {
00038 public:
00041 class Transformer {
00042 public:
00043 virtual ~Transformer();
00044
00045 enum TransformStatus { kSuccess, kNoChange, kFailure };
00046 virtual TransformStatus Transform(const StringPiece& in,
00047 GoogleString* out) = 0;
00048 };
00049
00050 static const char kStylesheet[];
00051 static const char kUriValue[];
00052
00053 explicit CssTagScanner(HtmlParse* html_parse);
00054
00057 bool ParseCssElement(
00058 HtmlElement* element, HtmlElement::Attribute** href, const char** media);
00059
00064 static bool TransformUrls(
00065 const StringPiece& contents, Writer* writer, Transformer* transformer,
00066 MessageHandler* handler);
00067
00070 static bool HasImport(const StringPiece& contents, MessageHandler* handler);
00071
00073 static bool HasUrl(const StringPiece& contents);
00074
00075 private:
00076 DISALLOW_COPY_AND_ASSIGN(CssTagScanner);
00077 };
00078
00083 class RewriteDomainTransformer : public CssTagScanner::Transformer {
00084 public:
00085 RewriteDomainTransformer(const GoogleUrl* old_base_url,
00086 const GoogleUrl* new_base_url,
00087 RewriteDriver* driver);
00088 virtual ~RewriteDomainTransformer();
00089
00090 virtual TransformStatus Transform(const StringPiece& in, GoogleString* out);
00091
00092 void set_trim_urls(bool x) { trim_urls_ = x; }
00093
00094 private:
00095 const GoogleUrl* old_base_url_;
00096 const GoogleUrl* new_base_url_;
00097
00098 DomainRewriteFilter* domain_rewriter_;
00099 UrlLeftTrimFilter* url_trim_filter_;
00100 MessageHandler* handler_;
00101 bool trim_urls_;
00102
00103 DISALLOW_COPY_AND_ASSIGN(RewriteDomainTransformer);
00104 };
00105
00106
00107 }
00108
00109 #endif ///< NET_INSTAWEB_REWRITER_PUBLIC_CSS_TAG_SCANNER_H_