00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00018
00019 #ifndef NET_INSTAWEB_REWRITER_PUBLIC_IMAGE_COMBINE_FILTER_H_
00020 #define NET_INSTAWEB_REWRITER_PUBLIC_IMAGE_COMBINE_FILTER_H_
00021
00022 #include "net/instaweb/rewriter/public/css_filter.h"
00023 #include "net/instaweb/rewriter/public/resource_manager.h"
00024 #include "net/instaweb/rewriter/public/rewrite_filter.h"
00025 #include "net/instaweb/rewriter/public/rewrite_options.h"
00026 #include "net/instaweb/util/public/basictypes.h"
00027 #include "net/instaweb/util/public/string_util.h"
00028 #include "net/instaweb/util/public/url_multipart_encoder.h"
00029
00030 namespace Css {
00031
00032 class Declarations;
00033 class Values;
00034
00035 }
00036
00037 namespace net_instaweb {
00038
00039 class GoogleUrl;
00040 class HtmlElement;
00041 class MessageHandler;
00042 class RewriteContext;
00043 class RewriteDriver;
00044 class Statistics;
00045 class UrlSegmentEncoder;
00046 class Variable;
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058 class ImageCombineFilter : public RewriteFilter {
00059 public:
00060 explicit ImageCombineFilter(RewriteDriver* rewrite_driver);
00061 virtual ~ImageCombineFilter();
00062
00063 static void Initialize(Statistics* statistics);
00064
00072 void AddCssBackgroundContext(const GoogleUrl& original_url,
00073 Css::Values* values,
00074 int value_index,
00075 CssFilter::Context* parent,
00076 Css::Declarations* decls,
00077 MessageHandler* handler);
00078
00080 OutputResourcePtr MakeOutput();
00081
00083 void Reset(RewriteContext* context, const GoogleUrl& css_url,
00084 const StringPiece& css_text);
00085
00088 void RegisterOrReleaseContext();
00089
00090 protected:
00091 virtual const UrlSegmentEncoder* encoder() const { return &encoder_; }
00092 virtual const char* Name() const { return "ImageCombine"; }
00093 virtual void StartDocumentImpl() {}
00094 virtual void StartElementImpl(HtmlElement* element) {}
00095 virtual void EndElementImpl(HtmlElement* element) {}
00096
00098 virtual const char* id() const { return RewriteOptions::kImageCombineId; }
00099
00100 private:
00101 class Combiner;
00102 class Context;
00103
00104 virtual RewriteContext* MakeRewriteContext();
00105 Context* MakeNestedContext(RewriteContext* parent, const GoogleUrl& css_url,
00106 const StringPiece& css_text);
00107 bool GetDeclarationDimensions(Css::Declarations* declarations,
00108 int* width, int* height);
00109 void AddFilesReducedStat(int reduced);
00110
00111 Variable* image_file_count_reduction_;
00112 Context* context_;
00113 UrlMultipartEncoder encoder_;
00114
00115 DISALLOW_COPY_AND_ASSIGN(ImageCombineFilter);
00116 };
00117
00118 }
00119
00120 #endif ///< NET_INSTAWEB_REWRITER_PUBLIC_IMAGE_COMBINE_FILTER_H_