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

#include "image_rewrite_filter.h"

Inheritance diagram for net_instaweb::ImageRewriteFilter:
net_instaweb::RewriteFilter net_instaweb::CommonFilter

Public Member Functions

 ImageRewriteFilter (RewriteDriver *driver)
 
virtual void StartDocumentImpl ()
 
virtual void StartElementImpl (HtmlElement *element)
 
virtual void EndElementImpl (HtmlElement *element)
 
virtual const char * Name () const
 
virtual const char * id () const
 
virtual void EncodeUserAgentIntoResourceContext (ResourceContext *context) const
 
InlineResult TryInline (bool is_html, bool is_critical, int64 image_inline_max_bytes, const CachedResult *cached_result, ResourceSlot *slot, GoogleString *data_url)
 
RewriteContextMakeNestedRewriteContextForCss (int64 css_image_inline_max_bytes, RewriteContext *parent, const ResourceSlotPtr &slot)
 
virtual RewriteContextMakeNestedRewriteContext (RewriteContext *parent, const ResourceSlotPtr &slot)
 
bool UpdateDesiredImageDimsIfNecessary (const ImageDim &image_dim, const ResourceContext &resource_context, ImageDim *desired_dim)
 
bool ShouldResize (const ResourceContext &context, const GoogleString &url, Image *image, ImageDim *desired_dimensions)
 
bool ResizeImageIfNecessary (const RewriteContext *rewrite_context, const GoogleString &url, ResourceContext *context, Image *image, CachedResult *cached)
 
Image::CompressionOptionsImageOptionsForLoadedResource (const ResourceContext &context, const ResourcePtr &input_resource, bool is_css)
 
virtual const
RewriteOptions::Filter
RelatedFilters (int *num_filters) const
 
virtual const StringPieceVector * RelatedOptions () const
 
- Public Member Functions inherited from net_instaweb::RewriteFilter
 RewriteFilter (RewriteDriver *driver)
 
virtual void DetermineEnabled (GoogleString *disabled_reason)
 
virtual bool ComputeOnTheFly () const
 
- Public Member Functions inherited from net_instaweb::CommonFilter
 CommonFilter (RewriteDriver *driver)
 
const GoogleUrl & base_url () const
 Getters. More...
 
const GoogleUrl & decoded_base_url () const
 
RewriteDriverdriver () const
 
HtmlElement * noscript_element () const
 
void InsertNodeAtBodyEnd (HtmlNode *data)
 
virtual void StartDocument ()
 Note: Don't overload these methods, overload the implementers instead!
 
virtual void StartElement (HtmlElement *element)
 
virtual void EndElement (HtmlElement *element)
 
virtual void Characters (HtmlCharactersNode *characters)
 
ResourcePtr CreateInputResource (StringPiece input_url, bool *is_authorized)
 
ResourcePtr CreateInputResourceOrInsertDebugComment (StringPiece input_url, HtmlElement *element)
 
void ResolveUrl (StringPiece input_url, GoogleUrl *out_url)
 
bool BaseUrlIsValid () const
 
bool DebugMode () const
 
bool CanAddPagespeedOnloadToImage (const HtmlElement &)
 
virtual void LogFilterModifiedContent ()
 
virtual
RewriteDriver::InlineAuthorizationPolicy 
AllowUnauthorizedDomain () const
 
virtual bool IntendedForInlining () const
 

Static Public Member Functions

static void InitStats (Statistics *statistics)
 
static void Initialize ()
 
static void Terminate ()
 
static void AddRelatedOptions (StringPieceVector *target)
 
static bool ParseDimensionAttribute (const char *position, int *value)
 
static void DisableRelatedFilters (RewriteOptions *options)
 Disable all filters listed in kRelatedFilters in options.
 
- Static Public Member Functions inherited from net_instaweb::RewriteFilter
static StringPiece GetCharsetForScript (const Resource *script, const StringPiece attribute_charset, const StringPiece enclosing_charset)
 
static GoogleString GetCharsetForStylesheet (const Resource *stylesheet, const StringPiece attribute_charset, const StringPiece enclosing_charset)
 
- Static Public Member Functions inherited from net_instaweb::CommonFilter
static bool ExtractMetaTagDetails (const HtmlElement &element, const ResponseHeaders *headers, GoogleString *content, GoogleString *mime_type, GoogleString *charset)
 

Static Public Attributes

static const char kImageNoRewritesHighResolution []
 Statistic names:
 
static const char kImageOngoingRewrites []
 
static const char kImageResizedUsingRenderedDimensions []
 
static const char kImageRewriteLatencyFailedMs []
 
static const char kImageRewriteLatencyOkMs []
 
static const char kImageRewriteLatencyTotalMs []
 
static const char kImageRewritesDroppedDecodeFailure []
 
static const char kImageRewritesDroppedDueToLoad []
 
static const char kImageRewritesDroppedMIMETypeUnknown []
 
static const char kImageRewritesDroppedNoSavingNoResize []
 
static const char kImageRewritesDroppedNoSavingResize []
 
static const char kImageRewritesDroppedServerWriteFail []
 
static const char kImageRewritesSquashingForMobileScreen []
 
static const char kImageRewrites []
 
static const char kImageWebpRewrites []
 
static const char kImageWebpFromGifFailureMs []
 
static const char kImageWebpFromGifSuccessMs []
 
static const char kImageWebpFromGifTimeouts []
 
static const char kImageWebpFromJpegFailureMs []
 
static const char kImageWebpFromJpegSuccessMs []
 
static const char kImageWebpFromJpegTimeouts []
 
static const char kImageWebpFromPngFailureMs []
 
static const char kImageWebpFromPngSuccessMs []
 
static const char kImageWebpFromPngTimeouts []
 
static const char kImageWebpOpaqueFailureMs []
 
static const char kImageWebpOpaqueSuccessMs []
 
static const char kImageWebpOpaqueTimeouts []
 
static const char kImageWebpWithAlphaFailureMs []
 
static const char kImageWebpWithAlphaSuccessMs []
 
static const char kImageWebpWithAlphaTimeouts []
 
static const char kInlinableImageUrlsPropertyName []
 
static const RewriteOptions::Filter kRelatedFilters []
 
static const int kRelatedFiltersSize
 
- Static Public Attributes inherited from net_instaweb::CommonFilter
static const char kCreateResourceFailedDebugMsg []
 Debug message to be inserted when resource creation fails.
 

Protected Member Functions

virtual const UrlSegmentEncoder * encoder () const
 
virtual RewriteContextMakeRewriteContext ()
 
- Protected Member Functions inherited from net_instaweb::RewriteFilter
virtual const char * LoggingId ()
 This class logs using id().
 
- Protected Member Functions inherited from net_instaweb::CommonFilter
ServerContextserver_context () const
 
const RewriteOptionsrewrite_options ()
 

Friends

class Context
 

Detailed Description

Identify img tags in html and optimize them.

Todo:
TODO(jmaessen): Big open question: how best to link pulled-in resources to rewritten urls, when in general those urls will be in a different domain.

Member Function Documentation

virtual const UrlSegmentEncoder* net_instaweb::ImageRewriteFilter::encoder ( ) const
protectedvirtual

All RewriteFilters define how they encode URLs and other associated information needed for a rewrite into a URL. The default implementation handles a single URL with no extra data. The filter owns the encoder.

Reimplemented from net_instaweb::RewriteFilter.

virtual void net_instaweb::ImageRewriteFilter::EncodeUserAgentIntoResourceContext ( ResourceContext *  context) const
virtual

Encodes user agent information needed by the filter into ResourceContext. See additional header document for RewriteContext::EncodeUserAgentIntoResourceContext.

Reimplemented from net_instaweb::RewriteFilter.

Image::CompressionOptions* net_instaweb::ImageRewriteFilter::ImageOptionsForLoadedResource ( const ResourceContext &  context,
const ResourcePtr &  input_resource,
bool  is_css 
)

Allocate and initialize CompressionOptions object based on RewriteOptions and ResourceContext.

virtual RewriteContext* net_instaweb::ImageRewriteFilter::MakeNestedRewriteContext ( RewriteContext parent,
const ResourceSlotPtr &  slot 
)
virtual

Creates a nested rewrite for the given parent and slot and returns it. The result is not registered with the parent.

Reimplemented from net_instaweb::RewriteFilter.

RewriteContext* net_instaweb::ImageRewriteFilter::MakeNestedRewriteContextForCss ( int64  css_image_inline_max_bytes,
RewriteContext parent,
const ResourceSlotPtr &  slot 
)

Creates a nested rewrite for an image inside a CSS file with the given parent and slot, and returns it. The result is not registered with the parent.

virtual RewriteContext* net_instaweb::ImageRewriteFilter::MakeRewriteContext ( )
protectedvirtual

Generates a RewriteContext appropriate for this filter. Default implementation returns NULL. This must be overridden by filters. This is used to implement Fetch.

Reimplemented from net_instaweb::RewriteFilter.

static bool net_instaweb::ImageRewriteFilter::ParseDimensionAttribute ( const char *  position,
int *  value 
)
static

The valid contents of a dimension attribute on an image element have one of the following forms: "45%" "45%px" "+45.0%" [45% of browser width; we can't handle this] "45", "+45", "45px", "45arbitraryjunk" "45px%" [45 pixels regardless of junk] Technically 0 is an invalid dimension, so we'll reject those as well; note that 0 dimensions occur in the wild and Safari and Chrome at least don't display anything.

We actually reject the arbitraryjunk cases, as older browsers (eg FF9, which isn't that old) don't deal with them at all. So the only trailing stuff we allow is px possibly with some white space. Note that some older browsers (like FF9) accept other units such as "in" or "pt" as synonyms for px!

We round fractions, as fractional pixels appear to be rounded in practice (and our image resize algorithms require integer pixel sizes).

Far more detail in the spec at: http://www.whatwg.org/specs/web-apps/current-work/multipage/ common-microsyntaxes.html#percentages-and-dimensions

virtual const RewriteOptions::Filter* net_instaweb::ImageRewriteFilter::RelatedFilters ( int *  num_filters) const
virtual

Determines which filters are related to this RewriteFilter. Note, for example, that the ImageRewriteFilter class implements lots of different RewriteOptions::Filters.

This is used for embedding the relevant enabled filter IDs. See the doc for RewriteOptions::add_options_to_urls_. We want to support that without bloating URLs excessively adding unrelated filter settings.

The vector is returned in numerically increasing order so binary_search is possible.

*num_filters is set to the size of this array.

Ownership of the filter-vector is not transferred to the caller; it is expected to return a pointer to a static vector.

Reimplemented from net_instaweb::RewriteFilter.

virtual const StringPieceVector* net_instaweb::ImageRewriteFilter::RelatedOptions ( ) const
inlinevirtual

Return the names of options related to this RewriteFilter in case-insensitive alphabetical order. NULL means there are none. Ownership of the vector is not transferred to the caller.

Reimplemented from net_instaweb::RewriteFilter.

bool net_instaweb::ImageRewriteFilter::ResizeImageIfNecessary ( const RewriteContext rewrite_context,
const GoogleString &  url,
ResourceContext *  context,
Image image,
CachedResult *  cached 
)

Resize image if necessary, returning true if this resizing succeeds and false if it's unnecessary or fails.

bool net_instaweb::ImageRewriteFilter::ShouldResize ( const ResourceContext &  context,
const GoogleString &  url,
Image image,
ImageDim *  desired_dimensions 
)

Determines whether an image should be resized based on the current options.

Returns the dimensions to resize to in *desired_dimensions.

virtual void net_instaweb::ImageRewriteFilter::StartDocumentImpl ( )
virtual

Overload these implementer methods: Intentionally left abstract so that implementers don't forget to change the name from Blah to BlahImpl.

Implements net_instaweb::CommonFilter.

InlineResult net_instaweb::ImageRewriteFilter::TryInline ( bool  is_html,
bool  is_critical,
int64  image_inline_max_bytes,
const CachedResult *  cached_result,
ResourceSlot slot,
GoogleString *  data_url 
)

Can we inline resource? If so, encode its contents into the data_url, otherwise leave data_url alone.

bool net_instaweb::ImageRewriteFilter::UpdateDesiredImageDimsIfNecessary ( const ImageDim &  image_dim,
const ResourceContext &  resource_context,
ImageDim *  desired_dim 
)

Update desired image dimensions if necessary. Returns true if it is updated.

Member Data Documentation

const char net_instaweb::ImageRewriteFilter::kInlinableImageUrlsPropertyName[]
static

The property cache property name used to store URLs discovered when image_inlining_identify_and_cache_without_rewriting() is set in the RewriteOptions.


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