Page Speed Optimization Libraries  1.6.29.3
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines
Classes | Public Member Functions | Protected Types | Protected Member Functions
net_instaweb::CssSummarizerBase Class Reference

#include "css_summarizer_base.h"

Inheritance diagram for net_instaweb::CssSummarizerBase:
net_instaweb::RewriteFilter net_instaweb::CommonFilter net_instaweb::CriticalCssBeaconFilter net_instaweb::CriticalSelectorFilter

List of all members.

Classes

struct  SummaryInfo

Public Member Functions

 CssSummarizerBase (RewriteDriver *driver)

Protected Types

enum  SummaryState {
  kSummaryOk, kSummaryStillPending, kSummaryCssParseError, kSummaryResourceCreationFailed,
  kSummaryInputUnavailable, kSummarySlotRemoved
}

Protected Member Functions

virtual GoogleString CacheKeySuffix () const
virtual bool MustSummarize (HtmlElement *element) const
virtual void Summarize (Css::Stylesheet *stylesheet, GoogleString *out) const =0
virtual void RenderSummary (int pos, HtmlElement *element, HtmlCharactersNode *char_node)
virtual void WillNotRenderSummary (int pos, HtmlElement *element, HtmlCharactersNode *char_node)
virtual void SummariesDone ()
int NumStyles () const
const SummaryInfoGetSummaryForStyle (int pos) const
virtual void StartDocumentImpl ()
virtual void EndDocument ()
virtual void StartElementImpl (HtmlElement *element)
virtual void Characters (HtmlCharactersNode *characters)
virtual void EndElementImpl (HtmlElement *element)
virtual void RenderDone ()
virtual RewriteContextMakeRewriteContext ()

Detailed Description

This class helps implement filters that try to compute some properties of all the screen-affecting CSS in the page. They are expected to override Summarize() to perform the per-CSS computation; then at SummariesDone() they can lookup summaries via NumStyles/GetSummaryForStyle.


Member Enumeration Documentation

Enumerator:
kSummaryOk 

All OK!

kSummaryStillPending 

Computation/Fetches ongoing, we don't have a result yet.

kSummaryCssParseError 

CSS parse error we can't recover from.

kSummaryResourceCreationFailed 

Could not create the resource object, so its URL is malformed or we do not have permission to rewrite it.

kSummaryInputUnavailable 

Fetch result unusable, either error or not cacheable.

kSummarySlotRemoved 

Slot got removed by an another optimization.


Member Function Documentation

virtual GoogleString net_instaweb::CssSummarizerBase::CacheKeySuffix ( ) const [protected, virtual]

This method should be overridden in case the subclass's summary computation depends on things other than the input CSS.

Reimplemented in net_instaweb::CriticalSelectorFilter.

virtual void net_instaweb::CssSummarizerBase::Characters ( HtmlCharactersNode *  characters) [protected, virtual]

If a subclass overloads this function and wishes to use InsertNodeAtBodyEnd(), it needs to make an upcall to this implementation for InsertNodeAtBodyEnd() to work correctly.

Reimplemented from net_instaweb::CommonFilter.

const SummaryInfo& net_instaweb::CssSummarizerBase::GetSummaryForStyle ( int  pos) const [inline, protected]

Returns summary computed for the pos'th style in the document.

pos must be in [0, NumStyles())

Should be called from a thread context that has HTML parser state access.

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.

virtual bool net_instaweb::CssSummarizerBase::MustSummarize ( HtmlElement *  element) const [inline, protected, virtual]

This method should be overridden if some CSS should not go through the summarization process (eg because it uses an inapplicable media type and we'll just throw it away when we're done anyway). By default all CSS must be summarized.

Reimplemented in net_instaweb::CriticalCssBeaconFilter.

int net_instaweb::CssSummarizerBase::NumStyles ( ) const [inline, protected]

Returns total number of <link> and <style> elements we encountered. This includes those for which we had problem computing summary information.

Should be called from a thread context that has HTML parser state access.

virtual void net_instaweb::CssSummarizerBase::RenderSummary ( int  pos,
HtmlElement *  element,
HtmlCharactersNode *  char_node 
) [protected, virtual]

This can be optionally overridden to modify a CSS element based on a successfully computed summary. It might not be invoked if cached information is not readily available, and will not be invoked if CSS parsing failed or some other error occurred. Invocation occurs from a thread with HTML parser context state, so both DOM modification and GetSummaryForStyle() are safe to use. If invoked, the method will be called before SummariesDone().

pos is the position of the element in the summary table.

element points to the <link> or <style> element that was summarized. If the element was a <style>, char_node will also point to its contents node; otherwise it will be NULL.

The default implementation does nothing.

Reimplemented in net_instaweb::CriticalSelectorFilter.

virtual void net_instaweb::CssSummarizerBase::StartDocumentImpl ( ) [protected, virtual]

Overrides of the filter APIs. You MUST call through to this class's implementations if you override them.

Implements net_instaweb::CommonFilter.

Reimplemented in net_instaweb::CriticalSelectorFilter.

virtual void net_instaweb::CssSummarizerBase::SummariesDone ( ) [protected, virtual]

This is called at the end of the document when all outstanding summary computations have completed, regardless of whether successful or not. It will not be called at all if they are still ongoing, however.

It's called from a context which allows HTML parser state access. You can insert things at end of document by constructing an HtmlNode* using the factories in HtmlParse and calling CommonFilter::InsertNodeAtBodyEnd(node).

Note that the timing of this can vary widely --- it can occur during initial parse, during the render phase, or even at RenderDone, so implementors should not make assumptions about what other filters may have done to the DOM.

Base version does nothing.

Reimplemented in net_instaweb::CriticalCssBeaconFilter.

virtual void net_instaweb::CssSummarizerBase::Summarize ( Css::Stylesheet *  stylesheet,
GoogleString *  out 
) const [protected, pure virtual]

This should be overridden to compute a per-resource summary. The method should not modify the object state, and only put the result into *out as it may not be invoked in case of a cache hit. The subclass may mutate *stylesheet if it so wishes.

Note: this is called on a rewrite thread, so it should not access HTML parser state.

Implemented in net_instaweb::CriticalSelectorFilter, and net_instaweb::CriticalCssBeaconFilter.

virtual void net_instaweb::CssSummarizerBase::WillNotRenderSummary ( int  pos,
HtmlElement *  element,
HtmlCharactersNode *  char_node 
) [protected, virtual]

Like RenderSummary, but called in cases where we're unable to render a summary for some reason (including not being able to compute one). Note: not called when we're canceled due to disable_further_processing.

Like with RenderSummary, this corresponds to entry [pos] in the summary table, and elements points to the <link> or <style> containing CSS, with char_node being non-null in case it was a <style>.

Reimplemented in net_instaweb::CriticalSelectorFilter.


The documentation for this class was generated from the following file:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines