Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1113)

Unified Diff: content/renderer/render_frame_impl.cc

Issue 1977303003: Adds a feature to MHTML serialization that omits subframes and subresources marked no-store. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@no-store
Patch Set: Adds a test that compares actual visible content. Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/renderer/render_frame_impl.cc
diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc
index 4a09e2253c41ddda7c3546282474515d521e3a9e..29eb8d71a42dbba6ccce531a84559a4758bb57de 100644
--- a/content/renderer/render_frame_impl.cc
+++ b/content/renderer/render_frame_impl.cc
@@ -707,6 +707,13 @@ class MHTMLPartsGenerationDelegate
return WebString::fromUTF8(content_id);
}
+ blink::WebFrameSerializerCacheControlPolicy cacheControlPolicy() override {
+ return static_cast<blink::WebFrameSerializerCacheControlPolicy>(
+ params_.mhtml_cache_control_policy);
+ }
+
+ bool useBinaryEncoding() override { return params_.mhtml_binary_encoding; }
+
private:
const FrameMsg_SerializeAsMHTML_Params& params_;
std::set<std::string>* digests_of_uris_of_serialized_resources_;
@@ -4948,27 +4955,35 @@ void RenderFrameImpl::OnSerializeAsMHTML(
DCHECK(!mhtml_boundary.isEmpty());
WebData data;
- bool success = true;
std::set<std::string> digests_of_uris_of_serialized_resources;
MHTMLPartsGenerationDelegate delegate(
params, &digests_of_uris_of_serialized_resources);
+ bool should_serialize_frame =
+ WebFrameSerializer::frameShouldBeSerializedAsMHTML(GetWebFrame(),
+ &delegate);
Łukasz Anforowicz 2016/05/19 17:00:13 Do we still need this (this = |should_serialize_fr
dewittj 2016/05/19 18:18:36 Done.
+ bool success = true;
+
// Generate MHTML header if needed.
if (IsMainFrame()) {
- blink::WebFrameSerializerCacheControlPolicy policy =
- static_cast<blink::WebFrameSerializerCacheControlPolicy>(
- params.mhtml_cache_control_policy);
- success = WebFrameSerializer::generateMHTMLHeader(mhtml_boundary, policy,
- GetWebFrame(), &data);
- if (success && file.WriteAtCurrentPos(data.data(), data.size()) < 0) {
+ if (should_serialize_frame) {
+ WebData data = WebFrameSerializer::generateMHTMLHeader(
+ mhtml_boundary, GetWebFrame(), &delegate);
+ if (file.WriteAtCurrentPos(data.data(), data.size()) < 0) {
Łukasz Anforowicz 2016/05/19 17:00:13 Just double-checking: do we need to check here is
dewittj 2016/05/19 18:18:35 Done.
+ success = false;
+ }
+ } else {
+ // If we can't serialize the main frame, the whole archive is bad.
success = false;
}
}
- // Generate MHTML parts.
- if (success) {
- data = WebFrameSerializer::generateMHTMLParts(
- mhtml_boundary, GetWebFrame(), params.mhtml_binary_encoding, &delegate);
+ // Generate MHTML parts. Note that if this is not the main frame, then even
+ // skipping the whole parts generation step is not an error - it simply
+ // results in an omitted resource in the final file.
+ if (success && should_serialize_frame) {
+ data = WebFrameSerializer::generateMHTMLParts(mhtml_boundary, GetWebFrame(),
+ &delegate);
Łukasz Anforowicz 2016/05/19 17:00:13 Same question as above - do we need to check if ge
dewittj 2016/05/19 18:18:36 Done.
// TODO(jcivelli): write the chunks in deferred tasks to give a chance to
// the message loop to process other events.
if (file.WriteAtCurrentPos(data.data(), data.size()) < 0) {

Powered by Google App Engine
This is Rietveld 408576698