25 #ifndef NET_INSTAWEB_REWRITER_PUBLIC_CRITICAL_SELECTOR_FILTER_H_
26 #define NET_INSTAWEB_REWRITER_PUBLIC_CRITICAL_SELECTOR_FILTER_H_
33 #include "pagespeed/kernel/base/basictypes.h"
34 #include "pagespeed/kernel/base/string.h"
35 #include "pagespeed/kernel/base/string_util.h"
36 #include "pagespeed/kernel/html/html_element.h"
37 #include "pagespeed/kernel/html/html_filter.h"
38 #include "pagespeed/kernel/html/html_node.h"
39 #include "pagespeed/kernel/http/semantic_type.h"
47 namespace net_instaweb {
51 static const char kAddStylesFunction[];
52 static const char kAddStylesInvocation[];
53 static const char kApplyFlushEarlyCss[];
54 static const char kInvokeFlushEarlyCssTemplate[];
55 static const char kMoveScriptId[];
56 static const char kNoscriptStylesClass[];
61 virtual const char* Name()
const {
return "CriticalSelectorFilter"; }
62 virtual const char* id()
const {
return "cl"; }
71 return driver()->
options()->HasInlineUnauthorizedResourceType(
72 semantic_type::kStylesheet) ?
73 RewriteDriver::kInlineUnauthorizedResources :
74 RewriteDriver::kInlineOnlyAuthorizedResources;
79 ScriptUsage GetScriptUsage()
const override {
return kWillInjectScripts; }
87 virtual void Summarize(Css::Stylesheet* stylesheet,
88 GoogleString* out)
const;
91 HtmlCharactersNode* char_node,
92 bool* is_element_deleted);
95 HtmlCharactersNode* char_node,
96 bool* is_element_deleted);
104 virtual void EndDocument();
105 virtual void RenderDone();
112 class CssStyleElement;
113 typedef std::vector<CssElement*> CssElementVector;
115 void RememberFullCss(
int pos,
116 HtmlElement* element,
117 HtmlCharactersNode* char_node);
119 bool IsCssFlushedEarly(
const GoogleString& url)
const;
120 void ApplyCssFlushedEarly(HtmlElement* element,
121 const GoogleString& style_id,
127 StringSet critical_selectors_;
130 GoogleString cache_key_suffix_;
135 CssElementVector css_elements_;
138 bool saw_end_document_;
144 bool is_flush_script_added_;
virtual void RenderSummary(int pos, HtmlElement *element, HtmlCharactersNode *char_node, bool *is_element_deleted)
virtual void WillNotRenderSummary(int pos, HtmlElement *element, HtmlCharactersNode *char_node, bool *is_element_deleted)
Definition: critical_selector_filter.h:49
virtual RewriteDriver::InlineAuthorizationPolicy AllowUnauthorizedDomain() const
Definition: critical_selector_filter.h:69
virtual bool IntendedForInlining() const
Selectors are inlined into the html.
Definition: critical_selector_filter.h:78
virtual void Summarize(Css::Stylesheet *stylesheet, GoogleString *out) const
Definition: rewrite_driver.h:98
InlineAuthorizationPolicy
See CreateInputResource.
Definition: rewrite_driver.h:135
virtual void StartDocumentImpl()
Parser callbacks.
virtual void DetermineEnabled(GoogleString *disabled_reason)
Filter control API.
const RewriteOptions * options() const
Return the options used for this RewriteDriver.
Definition: rewrite_driver.h:490
virtual GoogleString CacheKeySuffix() const
Definition: css_summarizer_base.h:52