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

#include "support_noscript_filter.h"

Inheritance diagram for net_instaweb::SupportNoscriptFilter:
net_instaweb::EmptyHtmlFilter net_instaweb::HtmlFilter

Public Member Functions

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

Additional Inherited Members

- Public Types inherited from net_instaweb::HtmlFilter
enum  ScriptUsage { kWillInjectScripts, kMayInjectScripts, kNeverInjectsScripts }
 Describes a filter's relationship with scripts. More...

Detailed Description

Inserts a noscript tag as the first element of body. This noscript redirects to "ModPagespeed=off" to prevent breakage when pages rewritten by filters that depend on script execution (such as lazyload_images) are rendered on browsers with script execution disabled.

Member Function Documentation

virtual void net_instaweb::SupportNoscriptFilter::DetermineEnabled ( GoogleString disabled_reason)

Invoked by rewrite driver where all filters should determine whether they are enabled for this request. The re-writer my optionally set disabled_reason to explain why it disabled itself, which will appear in the debug output.

Reimplemented from net_instaweb::EmptyHtmlFilter.

ScriptUsage net_instaweb::SupportNoscriptFilter::GetScriptUsage ( ) const

Make sure this filter gets turned off when a document is declared as AMP.

This is a little confusing; SupportNoscript does not itself inject scripts, but it injects http-equiv tags which prevent AMP-HTML from being validated. This filter is a special snowflake that is never enabled by users, but is implied by the initial enabling of other filters that do inject scripts.

Because this filter only changes HTML on behalf of filters that are themselves kWillInjectScripts, [falsely] declaring that this script as kWillInjectScripts has no particular downside.

TODO(jmarantz): consider an alterantive mechanism that is more intuitive, and doesn't entail GetScriptUsage lying to induce the right amp behavior.

Implements net_instaweb::HtmlFilter.

virtual void net_instaweb::SupportNoscriptFilter::StartElement ( HtmlElement element)

When an HTML element is encountered during parsing, each filter's StartElement method is called. The HtmlElement lives for the entire duration of the document.

TODO(jmarantz): consider passing handles rather than pointers and reference-counting them instead to save memory on long documents.

Reimplemented from net_instaweb::EmptyHtmlFilter.

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