Page Speed Optimization Libraries  1.9.32.2
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
critical_css_filter.h
Go to the documentation of this file.
1 /*
2  * Copyright 2013 Google Inc.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http:///www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
29 
30 #ifndef NET_INSTAWEB_REWRITER_PUBLIC_CRITICAL_CSS_FILTER_H_
31 #define NET_INSTAWEB_REWRITER_PUBLIC_CRITICAL_CSS_FILTER_H_
32 
33 #include <map>
34 #include <vector>
35 
36 #include "net/instaweb/rewriter/critical_css.pb.h"
39 #include "pagespeed/kernel/base/basictypes.h"
40 #include "pagespeed/kernel/base/string.h"
41 
42 namespace net_instaweb {
43 
44 class CriticalCssFinder;
45 class CriticalCssResult;
46 class CriticalCssResult_LinkRules;
47 class HtmlCharactersNode;
48 class HtmlElement;
49 class RewriteDriver;
50 
52  public:
53  explicit CriticalCssFilter(RewriteDriver* rewrite_driver,
54  CriticalCssFinder* finder);
55  virtual ~CriticalCssFilter();
56 
57  static const char kAddStylesScript[];
58  static const char kStatsScriptTemplate[];
59 
61  virtual void DetermineEnabled(GoogleString* disabled_reason);
62  virtual void StartDocumentImpl();
63  virtual void EndDocument();
64  virtual void StartElementImpl(HtmlElement* element);
65  virtual void EndElementImpl(HtmlElement* element);
66  virtual void Characters(HtmlCharactersNode* characters);
67 
68  virtual const char* Name() const { return "CriticalCss"; }
69 
70  private:
72  GoogleString DecodeUrl(const GoogleString& url);
73 
77  const CriticalCssResult_LinkRules* GetLinkRules(
78  const GoogleString& decoded_url);
79 
82  void LogRewrite(int status);
83 
84  CssTagScanner css_tag_scanner_;
85  CriticalCssFinder* finder_;
86 
87  CriticalCssResult* critical_css_result_;
88 
90  typedef std::map<GoogleString, int> UrlIndexes;
91  UrlIndexes url_indexes_;
92 
93  bool has_critical_css_;
94  bool is_move_link_script_added_;
95 
96  class CssElement;
97  class CssStyleElement;
98  typedef std::vector<CssElement*> CssElementVector;
99  CssElementVector css_elements_;
100  CssStyleElement* current_style_element_;
101 
106  int total_critical_size_;
107  int total_original_size_;
108  int repeated_style_blocks_size_;
109  int num_repeated_style_blocks_;
110  int num_links_;
111  int num_replaced_links_;
112 
113  DISALLOW_COPY_AND_ASSIGN(CriticalCssFilter);
114 };
115 
116 }
117 
118 #endif
Definition: common_filter.h:48
Definition: critical_css_filter.h:51
Finds critical CSS rules (i.e. CSS needed for the initial page load).
Definition: critical_css_finder.h:33
Definition: rewrite_driver.h:98
Definition: css_tag_scanner.h:37
virtual void Characters(HtmlCharactersNode *characters)
virtual void DetermineEnabled(GoogleString *disabled_reason)
Overridden from CommonFilter: