oschaaf commented on a change in pull request #1785: Fix mismatch between decompression and headers URL: https://github.com/apache/incubator-pagespeed-mod/pull/1785#discussion_r200569035
########## File path: net/instaweb/rewriter/resource.cc ########## @@ -269,17 +270,38 @@ void Resource::LinkFallbackValue(HTTPValue* value) { } StringPiece Resource::ExtractUncompressedContents() const { - ResponseHeaders headers; - if (!extracted_ && value_.ExtractHeaders(&headers, NULL)) { - if (headers.IsGzipped()) { - StringWriter inflate_writer(&extracted_contents_); - if (GzipInflater::Inflate(raw_contents(), GzipInflater::kGzip, - &inflate_writer)) { - extracted_ = true; - } + bool use_extracted = EnsureExtractedIfNeeded(); + return use_extracted ? extracted_contents_ : raw_contents(); +} + +const ResponseHeaders* Resource::UncompressedHeaders() const { + bool use_extracted = EnsureExtractedIfNeeded(); + return use_extracted ? extracted_headers_.get() : response_headers(); +} + +bool Resource::EnsureExtractedIfNeeded() const { + if (extracted_state_ == kExtractNotComputed) { Review comment: I wonder what happens when `response_headers_` gets changed after `extracted_state_` is computed. If that is a valid case, perhaps this needs to reset `extracted_state_` to `kExtractNotComputed` when we observe response_headers_ is dirty / has been modified? ---------------------------------------------------------------- This is an automated message from the Apache Git Service. To respond to the message, please log on GitHub and use the URL above to go to the specific comment. For queries about this service, please contact Infrastructure at: us...@infra.apache.org With regards, Apache Git Services