Page Speed Optimization Libraries  1.9.32.2
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
css_summarizer_base.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 
18 
19 #ifndef NET_INSTAWEB_REWRITER_PUBLIC_CSS_SUMMARIZER_BASE_H_
20 #define NET_INSTAWEB_REWRITER_PUBLIC_CSS_SUMMARIZER_BASE_H_
21 
22 #include <vector>
23 
26 #include "pagespeed/kernel/base/basictypes.h"
27 #include "pagespeed/kernel/base/scoped_ptr.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 
32 namespace Css {
33 
34 class Stylesheet;
35 
36 }
37 
38 namespace net_instaweb {
39 
40 class AbstractMutex;
41 class HtmlCharactersNode;
42 class RewriteContext;
43 class RewriteDriver;
44 class Statistics;
45 class Variable;
46 
53  public:
54  static const char kNumCssUsedForCriticalCssComputation[];
55  static const char kNumCssNotUsedForCriticalCssComputation[];
56 
57  explicit CssSummarizerBase(RewriteDriver* driver);
58  virtual ~CssSummarizerBase();
59 
60  static void InitStats(Statistics* statistics);
61 
62  protected:
63  enum SummaryState {
66 
69 
72 
76 
79 
82  };
83 
84  struct SummaryInfo {
85  SummaryInfo()
87  is_external(false),
88  is_inside_noscript(false) {}
89 
92  GoogleString data;
93 
96 
99  GoogleString location;
100 
102  GoogleString base;
103 
105  GoogleString media_from_html;
106 
108  GoogleString rel;
109 
112 
115  };
116 
119  virtual GoogleString CacheKeySuffix() const;
120 
125  virtual bool MustSummarize(HtmlElement* element) const {
126  return true;
127  }
128 
136  virtual void Summarize(Css::Stylesheet* stylesheet,
137  GoogleString* out) const = 0;
138 
155  virtual void RenderSummary(int pos,
156  HtmlElement* element,
157  HtmlCharactersNode* char_node,
158  bool* is_element_deleted);
159 
168  virtual void WillNotRenderSummary(int pos,
169  HtmlElement* element,
170  HtmlCharactersNode* char_node,
171  bool* is_element_deleted);
172 
187  virtual void SummariesDone();
188 
193  int NumStyles() const { return static_cast<int>(summaries_.size()); }
194 
200  const SummaryInfo& GetSummaryForStyle(int pos) const {
201  return summaries_.at(pos);
202  }
203 
206  virtual void StartDocumentImpl();
207  virtual void EndDocument();
208  virtual void StartElementImpl(HtmlElement* element);
209  virtual void Characters(HtmlCharactersNode* characters);
210  virtual void EndElementImpl(HtmlElement* element);
211  virtual void RenderDone();
212 
214 
215  private:
216  class Context;
217 
219  void Clear();
220 
223  void ReportSummariesDone();
224 
227  void StartInlineRewrite(HtmlElement* style, HtmlCharactersNode* text);
228 
231  void StartExternalRewrite(HtmlElement* link, HtmlElement::Attribute* src,
232  StringPiece rel);
233 
239  Context* CreateContextAndSummaryInfo(const HtmlElement* element,
240  bool external,
241  const ResourceSlotPtr& slot,
242  const GoogleString& location,
243  StringPiece base_for_resources,
244  StringPiece rel);
245 
246  ResourceSlot* MakeSlotForInlineCss(HtmlElement* element,
247  const StringPiece& content);
248 
250  std::vector<SummaryInfo> summaries_;
251 
252  scoped_ptr<AbstractMutex> progress_lock_;
253  int outstanding_rewrites_;
254  bool saw_end_of_document_;
255  std::vector<int> canceled_summaries_;
259 
260  HtmlElement* style_element_;
261 
262  Variable* num_css_used_for_critical_css_computation_;
263  Variable* num_css_not_used_for_critical_css_computation_;
264 
265  DISALLOW_COPY_AND_ASSIGN(CssSummarizerBase);
266 };
267 
268 }
269 
270 #endif
GoogleString location
Definition: css_summarizer_base.h:99
const SummaryInfo & GetSummaryForStyle(int pos) const
Definition: css_summarizer_base.h:200
Slot got removed by an another optimization.
Definition: css_summarizer_base.h:81
virtual GoogleString CacheKeySuffix() const
CSS parse error we can't recover from.
Definition: css_summarizer_base.h:71
Definition: resource_slot.h:52
virtual void Summarize(Css::Stylesheet *stylesheet, GoogleString *out) const =0
virtual void WillNotRenderSummary(int pos, HtmlElement *element, HtmlCharactersNode *char_node, bool *is_element_deleted)
Definition: css_summarizer_base.h:84
Fetch result unusable, either error or not cacheable.
Definition: css_summarizer_base.h:78
bool is_inside_noscript
True if the style was included inside a noscript section.
Definition: css_summarizer_base.h:114
Computation/Fetches ongoing, we don't have a result yet.
Definition: css_summarizer_base.h:68
GoogleString rel
If it's an external stylesheet, the value of the rel attribute.
Definition: css_summarizer_base.h:108
All OK!
Definition: css_summarizer_base.h:65
bool is_external
True if it's a <link rel=stylesheet href=>, false for <style>
Definition: css_summarizer_base.h:111
Definition: rewrite_filter.h:37
SummaryState state
State of computation of 'data'.
Definition: css_summarizer_base.h:95
Definition: rewrite_driver.h:98
int NumStyles() const
Definition: css_summarizer_base.h:193
Definition: rewrite_context.h:144
SummaryState
Definition: css_summarizer_base.h:63
virtual void Characters(HtmlCharactersNode *characters)
virtual void RenderSummary(int pos, HtmlElement *element, HtmlCharactersNode *char_node, bool *is_element_deleted)
GoogleString media_from_html
CSS media there were applied to the resource by the HTML.
Definition: css_summarizer_base.h:105
GoogleString base
Base to use for resolving links in the CSS resource.
Definition: css_summarizer_base.h:102
virtual bool MustSummarize(HtmlElement *element) const
Definition: css_summarizer_base.h:125
virtual RewriteContext * MakeRewriteContext()
GoogleString data
Definition: css_summarizer_base.h:92
Definition: css_summarizer_base.h:52