19 #ifndef NET_INSTAWEB_REWRITER_PUBLIC_CSS_FLATTEN_IMPORTS_CONTEXT_H_
20 #define NET_INSTAWEB_REWRITER_PUBLIC_CSS_FLATTEN_IMPORTS_CONTEXT_H_
22 #include "base/logging.h"
23 #include "net/instaweb/rewriter/cached_result.pb.h"
35 #include "pagespeed/kernel/base/basictypes.h"
36 #include "pagespeed/kernel/base/ref_counted_ptr.h"
37 #include "pagespeed/kernel/base/statistics.h"
38 #include "pagespeed/kernel/base/string.h"
39 #include "pagespeed/kernel/base/string_util.h"
40 #include "pagespeed/kernel/base/string_writer.h"
41 #include "pagespeed/kernel/http/content_type.h"
43 namespace net_instaweb {
57 hierarchy_(hierarchy) {
67 if (hierarchy_->media().empty()) {
70 suffix = hierarchy_->media()[0];
71 for (
int i = 1, n = hierarchy_->media().size(); i < n; ++i) {
72 StrAppend(&suffix,
"_", hierarchy_->media()[i]);
79 const OutputResourcePtr& output_resource) {
80 input_resource_ = input_resource;
81 output_resource_ = output_resource;
92 &hierarchy_->css_trim_url(),
96 StringWriter writer(hierarchy_->input_contents_backing_store());
99 if ( Driver()->server_context()->url_namer()->
ProxyMode() ||
101 !Driver()->
options()->Enabled(RewriteOptions::kLeftTrimUrls)) {
102 transformer.set_trim_urls(
false);
107 Driver()->message_handler())) {
108 hierarchy_->set_input_contents_to_backing_store();
109 hierarchy_->set_input_contents_resolved(
true);
115 GoogleString failure_reason;
116 if (!hierarchy_->
Parse()) {
119 failure_reason = StrCat(
"Cannot parse the CSS in ",
120 hierarchy_->url_for_humans());
121 filter_->num_flatten_imports_minify_failed_->Add(1);
122 }
else if (!hierarchy_->
CheckCharsetOk(input_resource, &failure_reason)) {
124 filter_->num_flatten_imports_charset_mismatch_->Add(1);
130 hierarchy_->set_flattening_succeeded(
false);
151 output_partition(0)->set_inlined_data(hierarchy_->minified_contents());
156 if (Driver()->Write(ResourceVector(1, input_resource_),
157 hierarchy_->minified_contents(),
159 input_resource_->charset(),
160 output_resource_.get())) {
179 if (hierarchy_->minified_contents().empty()) {
180 hierarchy_->set_minified_contents(
181 output_partition(0)->inlined_data());
190 hierarchy_->set_flattening_succeeded(
false);
194 virtual const char*
id()
const {
195 return RewriteOptions::kCssImportFlattenerId;
203 ResourcePtr input_resource_;
204 OutputResourcePtr output_resource_;
RewriteContext * parent()
Allows a nested rewriter to walk up its parent hierarchy.
Definition: rewrite_context.h:266
Context used by CssFilter under async flow.
Definition: css_filter.h:257
void MergeNonCachingResponseHeaders(const ResourcePtr &input, const OutputResourcePtr &output)
Definition: server_context.h:527
virtual void Render()
Definition: css_flatten_imports_context.h:167
Definition: css_tag_scanner.h:110
virtual bool trim_urls_in_css() const
Return false in a subclass if you want to disallow all URL trimming in CSS.
Definition: rewrite_options.h:1936
virtual OutputResourceKind kind() const
Definition: css_flatten_imports_context.h:197
Definition: css_hierarchy.h:64
bool CheckCharsetOk(const ResourcePtr &resource, GoogleString *failure_reason)
int num_output_partitions() const
rewrite went fine
Definition: rewrite_result.h:29
Context used by CssFilter under async flow that flattens .
Definition: css_flatten_imports_context.h:48
virtual void RewriteSingle(const ResourcePtr &input_resource, const OutputResourcePtr &output_resource)
Subclasses of SingleRewriteContext must override this:
Definition: css_flatten_imports_context.h:78
rewrite is impossible or undesirable
Definition: rewrite_result.h:28
void RewriteDone(RewriteResult result, int partition_index)
virtual GoogleString CacheKeySuffix() const
Definition: css_flatten_imports_context.h:61
void Harvest()
Definition: css_flatten_imports_context.h:140
ServerContext * FindServerContext() const
virtual const char * id() const
Returns the filter ID.
Definition: css_flatten_imports_context.h:194
void set_input_contents(const StringPiece input_contents)
Definition: css_hierarchy.h:113
int num_nested() const
Accessors for the nested rewrites.
Definition: rewrite_context.h:305
Definition: server_context.h:101
virtual bool ProxyMode() const
Definition: url_namer.h:84
Definition: rewrite_context.h:144
derived from some input resource URL or URLs.
Definition: output_resource_kind.h:27
Definition: single_rewrite_context.h:36
void RewriteCssFromNested(RewriteContext *parent, CssHierarchy *hierarchy)
Definition: css_filter.h:75
const RewriteOptions * options() const
Return the options used for this RewriteDriver.
Definition: rewrite_driver.h:478
CssFlattenImportsContext(RewriteContext *parent, CssFilter *filter, CssFilter::Context *rewriter, CssHierarchy *hierarchy)
Definition: css_flatten_imports_context.h:50
OutputResourceKind
Definition: output_resource_kind.h:26
void AddFlatteningFailureReason(const GoogleString &reason)