00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00017
00018 #ifndef NET_INSTAWEB_REWRITER_PUBLIC_IMAGE_URL_ENCODER_H_
00019 #define NET_INSTAWEB_REWRITER_PUBLIC_IMAGE_URL_ENCODER_H_
00020
00021 #include "net/instaweb/rewriter/cached_result.pb.h"
00022 #include "net/instaweb/util/public/basictypes.h"
00023 #include "net/instaweb/util/public/string.h"
00024 #include "net/instaweb/util/public/string_util.h"
00025 #include "net/instaweb/util/public/url_segment_encoder.h"
00026
00027 namespace net_instaweb {
00028 class MessageHandler;
00029
00056 class ImageUrlEncoder : public UrlSegmentEncoder {
00057 public:
00058 ImageUrlEncoder() {}
00059 virtual ~ImageUrlEncoder();
00060
00061 virtual void Encode(const StringVector& urls,
00062 const ResourceContext* dim,
00063 GoogleString* rewritten_url) const;
00064
00065 virtual bool Decode(const StringPiece& url_segment,
00066 StringVector* urls,
00067 ResourceContext* dim,
00068 MessageHandler* handler) const;
00069
00070 static bool HasDimensions(const ResourceContext& data) {
00071 return (data.has_desired_image_dims() &&
00072 HasValidDimensions(data.desired_image_dims()));
00073 }
00074
00075 static bool HasValidDimensions(const ImageDim& dims) {
00076 return (dims.has_width() && dims.has_height());
00077 }
00078
00079 static bool HasDimension(const ResourceContext& data) {
00080 return (data.has_desired_image_dims() &&
00081 HasValidDimension(data.desired_image_dims()));
00082 }
00083
00084 static bool HasValidDimension(const ImageDim& dims) {
00085 return (dims.has_width() || dims.has_height());
00086 }
00087
00088 private:
00089 DISALLOW_COPY_AND_ASSIGN(ImageUrlEncoder);
00090 };
00091
00092 }
00093
00094 #endif ///< NET_INSTAWEB_REWRITER_PUBLIC_IMAGE_URL_ENCODER_H_