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"
37 #include "pagespeed/kernel/base/basictypes.h"
38 #include "pagespeed/kernel/base/ref_counted_ptr.h"
39 #include "pagespeed/kernel/base/statistics.h"
40 #include "pagespeed/kernel/base/string.h"
41 #include "pagespeed/kernel/base/string_util.h"
42 #include "pagespeed/kernel/base/string_writer.h"
43 #include "pagespeed/kernel/http/content_type.h"
45 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;
93 &hierarchy_->css_trim_url(),
94 driver->server_context(),
96 driver->message_handler());
99 StringWriter writer(hierarchy_->input_contents_backing_store());
102 if ( driver->server_context()->url_namer()->
ProxyMode() ||
104 !driver->
options()->Enabled(RewriteOptions::kLeftTrimUrls)) {
105 transformer.set_trim_urls(
false);
108 input_resource_->ExtractUncompressedContents(), &writer,
109 &transformer, driver->message_handler())) {
110 hierarchy_->set_input_contents_to_backing_store();
111 hierarchy_->set_input_contents_resolved(
true);
114 input_resource_->ExtractUncompressedContents());
118 GoogleString failure_reason;
119 if (!hierarchy_->
Parse()) {
122 failure_reason = StrCat(
"Cannot parse the CSS in ",
123 hierarchy_->url_for_humans());
124 filter_->num_flatten_imports_minify_failed_->Add(1);
125 }
else if (!hierarchy_->
CheckCharsetOk(input_resource, &failure_reason)) {
127 filter_->num_flatten_imports_charset_mismatch_->Add(1);
133 hierarchy_->set_flattening_succeeded(
false);
157 output_partition(0)->set_inlined_data(hierarchy_->minified_contents());
162 if (Driver()->Write(ResourceVector(1, input_resource_),
163 hierarchy_->minified_contents(),
165 input_resource_->charset(),
166 output_resource_.get())) {
185 if (hierarchy_->minified_contents().empty()) {
186 hierarchy_->set_minified_contents(
187 output_partition(0)->inlined_data());
199 hierarchy_->set_flattening_succeeded(
false);
203 virtual const char*
id()
const {
204 return RewriteOptions::kCssImportFlattenerId;
212 ResourcePtr input_resource_;
213 OutputResourcePtr output_resource_;
RewriteContext * parent()
Allows a nested rewriter to walk up its parent hierarchy.
Definition: rewrite_context.h:274
Context used by CssFilter under async flow.
Definition: css_filter.h:255
void MergeNonCachingResponseHeaders(const ResourcePtr &input, const OutputResourcePtr &output)
Definition: server_context.h:513
virtual void Render()
Definition: css_flatten_imports_context.h:173
Definition: css_tag_scanner.h:147
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:2231
virtual OutputResourceKind kind() const
Definition: css_flatten_imports_context.h:206
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:143
ServerContext * FindServerContext() const
virtual const char * id() const
Returns the filter ID.
Definition: css_flatten_imports_context.h:203
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:278
Definition: rewrite_driver.h:98
Definition: server_context.h:100
virtual bool ProxyMode() const
Definition: url_namer.h:82
Definition: rewrite_context.h:146
Derived from some input resource URL or URLs.
Definition: output_resource_kind.h:27
Definition: single_rewrite_context.h:36
static void InheritChildImageInfo(RewriteContext *context)
void RewriteCssFromNested(RewriteContext *parent, CssHierarchy *hierarchy)
Definition: css_filter.h:74
const RewriteOptions * options() const
Return the options used for this RewriteDriver.
Definition: rewrite_driver.h:490
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)