Page Speed Optimization Libraries
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Public Types | Public Member Functions | List of all members
net_instaweb::HtmlFilter Class Referenceabstract

#include "html_filter.h"

Inheritance diagram for net_instaweb::HtmlFilter:
net_instaweb::EmptyHtmlFilter net_instaweb::HtmlWriterFilter net_instaweb::AddHeadFilter net_instaweb::AddIdsFilter net_instaweb::AmpDocumentFilter net_instaweb::BaseTagFilter net_instaweb::CanonicalAttributes net_instaweb::CollapseWhitespaceFilter net_instaweb::CommonFilter net_instaweb::CssInlineImportToLinkFilter net_instaweb::DebugFilter net_instaweb::DecodeRewrittenUrlsFilter net_instaweb::DisableTestFilter net_instaweb::ElideAttributesFilter net_instaweb::ExplicitCloseTag net_instaweb::FixReflowFilter net_instaweb::GoogleAnalyticsFilter net_instaweb::HandleNoscriptRedirectFilter net_instaweb::HtmlAttributeQuoteRemoval net_instaweb::LoggingFilter net_instaweb::MockFilter net_instaweb::PedanticFilter net_instaweb::RemoveCommentsFilter net_instaweb::RewrittenContentScanningFilter net_instaweb::ScanFilter net_instaweb::StripScriptsFilter net_instaweb::StripSubresourceHintsFilter net_instaweb::SupportNoscriptFilter

Public Types

enum  ScriptUsage { kWillInjectScripts, kMayInjectScripts, kNeverInjectsScripts }
 Describes a filter's relationship with scripts. More...

Public Member Functions

virtual void StartDocument ()=0
virtual void EndDocument ()=0
virtual void StartElement (HtmlElement *element)=0
virtual void EndElement (HtmlElement *element)=0
virtual void Cdata (HtmlCdataNode *cdata)=0
 Called for CDATA blocks (e.g. <![CDATA[foobar]]>)
virtual void Comment (HtmlCommentNode *comment)=0
 Called for HTML comments that aren't IE directives (e.g. ).
virtual void IEDirective (HtmlIEDirectiveNode *directive)=0
virtual void Characters (HtmlCharactersNode *characters)=0
 Called for raw characters between tags.
virtual void Directive (HtmlDirectiveNode *directive)=0
 Called for HTML directives (e.g. <!doctype foobar>).
virtual void Flush ()=0
virtual void RenderDone ()
virtual void DetermineEnabled (GoogleString *disabled_reason)=0
bool is_enabled () const
void set_is_enabled (bool is_enabled)
virtual bool CanModifyUrls ()=0
virtual ScriptUsage GetScriptUsage () const =0
virtual const char * Name () const =0
 The name of this filter – used for logging and debugging.

Detailed Description

Base-class used to register for HTML Parser Callbacks. Derive from this class and register with HtmlParse::AddFilter to use the HTML Parser.

Member Enumeration Documentation

Describes a filter's relationship with scripts.


Indicates that this filter generally needs to inject scripts, and therefore should be disabled in environments where scripts are not allowed, such as amp. The system also DCHECKs of scripts are injected from a filter where CanInjectScripts() is false.


Indicates that this filter may in some cases inject scripts, but still has value even if scripts are forbidden. For the rare cases where this value is appropriate, the filter must be explicitly verified to function correctly.


Indicates this filter never injects scripts.

TODO(jmarantz): Remove kRequiresScriptExecutionFilterSet in, and instead add new enum choices here covering combinations of requiring 'noscript' behavior and their injection behavior.

Member Function Documentation

virtual bool net_instaweb::HtmlFilter::CanModifyUrls ( )
pure virtual

Invoked by the rewrite driver to query whether this filter will rewrite any urls.

Implemented in net_instaweb::EmptyHtmlFilter, net_instaweb::HtmlWriterFilter, and net_instaweb::RewriteFilter.

virtual void net_instaweb::HtmlFilter::DetermineEnabled ( GoogleString disabled_reason)
pure virtual
virtual void net_instaweb::HtmlFilter::EndDocument ( )
pure virtual
virtual void net_instaweb::HtmlFilter::Flush ( )
pure virtual

Notifies the Filter that a flush is occurring. A filter that's generating streamed output should flush at this time. A filter that's mutating elements can mutate any element seen since the most recent flush; once an element is flushed it is already on the wire to its destination and it's too late to mutate. Flush is initiated by an application calling HttpParse::Flush().

Flush() is called after all other handlers during a HttpParse::Flush(), except RenderDone(), which (if in use) happens after Flush().

Implemented in net_instaweb::CombiningFilter, net_instaweb::GoogleAnalyticsFilter, net_instaweb::JsCombineFilter, net_instaweb::CssInlineImportToLinkFilter, net_instaweb::CssCombineFilter, net_instaweb::MetaTagFilter, net_instaweb::ScanFilter, net_instaweb::HtmlWriterFilter, net_instaweb::EmptyHtmlFilter, net_instaweb::CssOutlineFilter, net_instaweb::JsOutlineFilter, net_instaweb::DebugFilter, net_instaweb::FlushHtmlFilter, and net_instaweb::AddHeadFilter.

virtual ScriptUsage net_instaweb::HtmlFilter::GetScriptUsage ( ) const
pure virtual
virtual void net_instaweb::HtmlFilter::IEDirective ( HtmlIEDirectiveNode directive)
pure virtual

Called for an IE directive; typically used for CSS styling. See

TODO(mdsteele): Should we try to maintain the nested structure of the conditionals, in the same way that we maintain nesting of elements?

Implemented in net_instaweb::GoogleAnalyticsFilter, net_instaweb::JsCombineFilter, net_instaweb::LoggingFilter, net_instaweb::JavascriptFilter, net_instaweb::CssCombineFilter, net_instaweb::ScanFilter, net_instaweb::HtmlWriterFilter, and net_instaweb::EmptyHtmlFilter.

bool net_instaweb::HtmlFilter::is_enabled ( ) const

Intended to be called from DetermineEnabled implementations in filters. Returns whether a filter is enabled.

virtual void net_instaweb::HtmlFilter::RenderDone ( )

Notifies a filter that an asynchronous rewrite & render computation phase has finished. This is not used by HtmlParse itself, but only by RewriteDriver for pre-render filters. Happens after the corresponding flush, for every flush window. Default implementation does nothing.

TODO(morlovich): Push this down into CommonFilter and convert all the pre-render filters to inherit off it.

Reimplemented in net_instaweb::CssSummarizerBase, net_instaweb::ImageRewriteFilter, and net_instaweb::CriticalSelectorFilter.

void net_instaweb::HtmlFilter::set_is_enabled ( bool  is_enabled)

Set whether this filter is enabled or not. Note that a filter may be included in the filter-chain for a configuration, but be disabled for a request based on the request properties, or even due to content (see HtmlParse::set_is_buffered()).

virtual void net_instaweb::HtmlFilter::StartDocument ( )
pure virtual
virtual void net_instaweb::HtmlFilter::StartElement ( HtmlElement element)
pure virtual

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