19 #ifndef NET_INSTAWEB_REWRITER_PUBLIC_SPLIT_HTML_FILTER_H_
20 #define NET_INSTAWEB_REWRITER_PUBLIC_SPLIT_HTML_FILTER_H_
28 #include "pagespeed/kernel/base/basictypes.h"
29 #include "pagespeed/kernel/base/json.h"
30 #include "pagespeed/kernel/base/json_writer.h"
31 #include "pagespeed/kernel/base/null_writer.h"
32 #include "pagespeed/kernel/base/scoped_ptr.h"
33 #include "pagespeed/kernel/base/string.h"
34 #include "pagespeed/kernel/base/string_util.h"
36 namespace net_instaweb {
40 class SplitHtmlConfig;
42 class StaticAssetManager;
52 static const char kSplitSuffixJsFormatString[];
53 static const char kSplitTwoChunkSuffixJsFormatString[];
54 static const char kLoadHiResImages[];
55 static const char kMetaReferer[];
60 virtual void DetermineEnabled(GoogleString* disabled_reason);
62 virtual void StartDocument();
63 virtual void EndDocument();
65 virtual void StartElement(HtmlElement* element);
66 virtual void EndElement(HtmlElement* element);
68 static const GoogleString& GetBlinkJsUrl(
72 virtual const char* Name()
const {
return "SplitHtmlFilter"; }
76 return driver()->split_html_config();
79 return driver()->server_context()->static_asset_manager();
82 void ServeNonCriticalPanelContents(
const Json::Value& json);
86 void MarkElementWithPanelId(HtmlElement* element,
87 const GoogleString& panel_id);
90 GoogleString GetPanelIdForInstance(HtmlElement* element);
93 GoogleString GenerateCriticalLineConfigString();
97 void EndPanelInstance();
100 void StartPanelInstance(HtmlElement* element);
103 void InsertPanelStub(HtmlElement* element,
const GoogleString& panel_id);
106 void AppendJsonData(Json::Value* dictionary,
const Json::Value& dict);
108 void WriteString(
const StringPiece& str);
113 void InsertSplitInitScripts(HtmlElement* element);
115 void InvokeBaseHtmlFilterStartDocument();
117 void InvokeBaseHtmlFilterStartElement(HtmlElement* element);
119 void InvokeBaseHtmlFilterEndElement(HtmlElement* element);
121 void InvokeBaseHtmlFilterEndDocument();
127 bool IsAllowedCrossDomainRequest(StringPiece cross_origin);
129 scoped_ptr<SplitHtmlState> state_;
131 std::vector<ElementJsonPair> element_json_stack_;
132 Json::FastWriter fast_writer_;
133 scoped_ptr<JsonWriter> json_writer_;
134 Writer* original_writer_;
135 NullWriter null_writer_;
137 bool script_written_;
138 bool flush_head_enabled_;
139 bool disable_filter_;
140 bool inside_pagespeed_no_defer_script_;
141 bool serve_response_in_two_chunks_;
142 int last_script_index_before_panel_stub_;
Definition: static_asset_manager.h:44
Definition: split_html_config.h:50
Definition: rewrite_driver.h:98
Definition: suppress_prehead_filter.h:41
Definition: split_html_filter.h:50
Definition: rewrite_options.h:83