48 #ifndef NET_INSTAWEB_REWRITER_PUBLIC_GOOGLE_ANALYTICS_FILTER_H_
49 #define NET_INSTAWEB_REWRITER_PUBLIC_GOOGLE_ANALYTICS_FILTER_H_
53 #include "pagespeed/kernel/base/basictypes.h"
54 #include "pagespeed/kernel/base/scoped_ptr.h"
55 #include "pagespeed/kernel/base/string.h"
56 #include "pagespeed/kernel/base/string_util.h"
57 #include "pagespeed/kernel/html/empty_html_filter.h"
58 #include "pagespeed/kernel/html/html_filter.h"
60 namespace net_instaweb {
62 class HtmlCharactersNode;
63 class HtmlCommentNode;
65 class HtmlIEDirectiveNode;
75 kGaJsScriptSrcLoad = 0,
80 HtmlCharactersNode* characters_node,
81 GoogleString::size_type pos,
82 GoogleString::size_type len,
85 HtmlElement* GetScriptElement()
const {
return script_element_; }
86 HtmlCharactersNode* GetScriptCharactersNode()
const {
87 return script_characters_node_;
89 Type GetType()
const {
return editor_type_; }
91 void NewContents(
const StringPiece &replacement,
92 GoogleString* contents)
const;
95 HtmlElement* script_element_;
96 HtmlCharactersNode* script_characters_node_;
98 GoogleString::size_type pos_;
99 GoogleString::size_type len_;
110 typedef StringPieceVector MethodVector;
113 Statistics* statistics);
118 Statistics* statistics,
119 MethodVector* glue_methods,
120 MethodVector* unhandled_methods);
122 static void InitStats(Statistics* statistics);
124 virtual void StartDocument();
125 virtual void EndDocument();
126 virtual void StartElement(HtmlElement* element);
127 virtual void EndElement(HtmlElement* element);
129 virtual void Flush();
132 virtual void Characters(HtmlCharactersNode* characters_node);
135 virtual void Comment(HtmlCommentNode* comment);
136 virtual void Cdata(HtmlCdataNode* cdata);
137 virtual void IEDirective(HtmlIEDirectiveNode* directive);
139 virtual const char* Name()
const {
return "GoogleAnalytics"; }
140 ScriptUsage GetScriptUsage()
const override {
return kWillInjectScripts; }
142 static const char kPageLoadCount[];
143 static const char kRewrittenCount[];
148 bool MatchSyncLoad(StringPiece contents,
149 GoogleString::size_type* pos,
150 GoogleString::size_type* len)
const;
151 bool MatchSyncInit(StringPiece contents,
152 GoogleString::size_type start_pos,
153 GoogleString::size_type* pos,
154 GoogleString::size_type* len)
const;
155 bool MatchUnhandledCalls(StringPiece contents,
156 GoogleString::size_type start_pos)
const;
157 void FindRewritableScripts();
158 void GetSyncToAsyncScript(GoogleString* buffer)
const;
159 bool RewriteAsAsync();
163 std::vector<ScriptEditor*> script_editors_;
165 scoped_ptr<MethodVector> glue_methods_;
166 scoped_ptr<MethodVector> unhandled_methods_;
168 HtmlParse* html_parse_;
169 HtmlElement* script_element_;
170 HtmlCharactersNode* script_characters_node_;
172 Variable* page_load_count_;
173 Variable* rewritten_count_;
Definition: google_analytics_filter.h:108
virtual void Characters(HtmlCharactersNode *characters_node)
Expected HTML Events in <script> elements.
Edit a substring in a script element.
Definition: google_analytics_filter.h:72
virtual void Comment(HtmlCommentNode *comment)
Unexpected HTML Events in <script> elements.