22 #ifndef NET_INSTAWEB_REWRITER_PUBLIC_INSERT_GA_FILTER_H_
23 #define NET_INSTAWEB_REWRITER_PUBLIC_INSERT_GA_FILTER_H_
27 #include "pagespeed/kernel/base/basictypes.h"
28 #include "pagespeed/kernel/base/string.h"
29 #include "pagespeed/kernel/base/string_util.h"
30 #include "pagespeed/kernel/html/html_element.h"
31 #include "pagespeed/kernel/html/html_filter.h"
32 #include "pagespeed/kernel/html/html_node.h"
34 namespace net_instaweb {
41 extern const char kGAJsSnippet[];
42 extern const char kAnalyticsJsSnippet[];
43 extern const char kAnalyticsJsIncreaseSiteSpeedTracking[];
44 extern const char kAnalyticsJsIncreaseSiteSpeedTrackingMinimal[];
45 extern const char kContentExperimentsJsClientUrl[];
46 extern const char kContentExperimentsNonNumericVariantComment[];
47 extern const char kContentExperimentsSetChosenVariationSnippet[];
48 extern const char kContentExperimentsSetExpAndVariantSnippet[];
49 extern const char kGASpeedTracking[];
63 virtual void StartElementImpl(HtmlElement* element);
64 virtual void EndElementImpl(HtmlElement* element);
66 virtual void Characters(HtmlCharactersNode* characters);
68 virtual const char* Name()
const {
return "InsertGASnippet"; }
69 ScriptUsage GetScriptUsage()
const override {
return kWillInjectScripts; }
72 enum AnalyticsStatus {
76 kUnusableSnippetFound,
95 GoogleString ConstructExperimentSnippet()
const;
98 virtual void EndDocument();
101 void HandleEndScript(HtmlElement* script);
108 void RewriteInlineScript(HtmlCharactersNode* characters);
116 AnalyticsStatus FindSnippetInScript(
const GoogleString& s);
119 GoogleString AnalyticsJsExperimentSnippet()
const;
120 GoogleString GaJsExperimentSnippet()
const;
124 bool ShouldInsertExperimentTracking(
bool analytics_js);
126 bool StringLiteralMatches(StringPiece literal, StringPiece desired);
127 bool StringLiteralEndsWith(StringPiece literal, StringPiece desired);
130 Variable* inserted_ga_snippets_count_;
134 HtmlElement* script_element_;
136 bool added_analytics_js_;
138 bool added_experiment_snippet_;
148 bool increase_speed_tracking_;
153 bool seen_sync_ga_js_;
158 GoogleString postponed_script_body_;
Definition: common_filter.h:47
static void InitStats(Statistics *stats)
Set up statistics for this filter.
virtual void StartDocumentImpl()
Definition: insert_ga_filter.h:54
const char kGAExperimentSnippet[]
Visible only for use in tests.
Definition: rewrite_driver.h:98
virtual void Characters(HtmlCharactersNode *characters)
HTML Events we expect to be in <script> elements.