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

Unified Diff: content/common/frame_messages.h

Issue 1417323006: OOPIFs: Deduplicating MHTML parts across frames. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@mhtml-serialization-per-frame
Patch Set: Rebasing... Created 5 years 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
« no previous file with comments | « content/browser/frame_host/render_frame_host_impl.cc ('k') | content/renderer/render_frame_impl.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/common/frame_messages.h
diff --git a/content/common/frame_messages.h b/content/common/frame_messages.h
index 561e0e97e1fad0fe23e57ef8712b9a7d26b07e42..59f3284e56c21469d54d9f1ce84b7562cca21664 100644
--- a/content/common/frame_messages.h
+++ b/content/common/frame_messages.h
@@ -8,6 +8,11 @@
#include <stddef.h>
#include <stdint.h>
+#include <map>
+#include <set>
+#include <string>
+#include <vector>
+
#include "build/build_config.h"
#include "cc/surfaces/surface_id.h"
#include "cc/surfaces/surface_sequence.h"
@@ -453,6 +458,38 @@ IPC_STRUCT_TRAITS_BEGIN(content::SavableSubframe)
IPC_STRUCT_TRAITS_MEMBER(routing_id)
IPC_STRUCT_TRAITS_END()
+IPC_STRUCT_BEGIN(FrameMsg_SerializeAsMHTML_Params)
+ // Job id - used to match responses to requests.
+ IPC_STRUCT_MEMBER(int, job_id)
+
+ // Destination file handle.
+ IPC_STRUCT_MEMBER(IPC::PlatformFileForTransit, destination_file)
+
+ // MHTML boundary marker / MIME multipart boundary maker. The same
+ // |mhtml_boundary_marker| should be used for serialization of each frame.
+ IPC_STRUCT_MEMBER(std::string, mhtml_boundary_marker)
+
+ // Frame to content-id map.
+ // Keys are routing ids of either RenderFrames or RenderFrameProxies.
+ // Values are MHTML content-ids - see WebPageSerializer::generateMHTMLParts.
+ IPC_STRUCT_MEMBER(FrameMsg_SerializeAsMHTML_FrameRoutingIdToContentIdMap,
+ frame_routing_id_to_content_id)
+
+ // |digests_of_uris_to_skip| contains digests of uris of MHTML parts that
+ // should be skipped. This helps deduplicate mhtml parts across frames.
+ // SECURITY NOTE: Sha256 digests (rather than uris) are used to prevent
+ // disclosing uris to other renderer processes; the digests should be
+ // generated using SHA256HashString function from crypto/sha2.h and hashing
+ // |salt + url.spec()|.
+ IPC_STRUCT_MEMBER(std::set<std::string>, digests_of_uris_to_skip)
+
+ // Salt used for |digests_of_uris_to_skip|.
+ IPC_STRUCT_MEMBER(std::string, salt)
+
+ // If |is_last_frame| is true, then an MHTML footer will be generated.
+ IPC_STRUCT_MEMBER(bool, is_last_frame)
+IPC_STRUCT_END()
+
#if defined(OS_MACOSX) || defined(OS_ANDROID)
// This message is used for supporting popup menus on Mac OS X and Android using
// native controls. See the FrameHostMsg_ShowPopup message.
@@ -752,28 +789,11 @@ IPC_MESSAGE_ROUTED1(FrameMsg_GetSerializedHtmlWithLocalLinks,
FrameMsg_GetSerializedHtmlWithLocalLinks_Map)
// Serialize target frame and its resources into MHTML and write it into the
-// provided destination file handle.
-//
-// When starting generation of a new MHTML document, one needs to start by
-// sending FrameMsg_SerializeAsMHTML for the *main* frame (main frame needs to
-// be the first part in the MHTML document + main frame will trigger generation
-// of the MHTML header).
-//
-// The same |mhtml_boundary_marker| should be used for serialization of each
-// frame (this string will be used as a mime multipart boundary within the mhtml
-// document).
-//
-// For more details about frame to content id map please see
-// WebPageSerializer::generateMHTMLParts method.
-//
-// |is_last_frame| controls whether the serializer in the renderer will
-// emit the MHTML footer.
-IPC_MESSAGE_ROUTED5(FrameMsg_SerializeAsMHTML,
- int /* job_id (used to match responses to requests) */,
- IPC::PlatformFileForTransit /* destination file handle */,
- std::string /* mhtml boundary marker */,
- FrameMsg_SerializeAsMHTML_FrameRoutingIdToContentIdMap,
- bool /* is last frame */)
+// provided destination file handle. Note that when serializing multiple
+// frames, one needs to serialize the *main* frame first (the main frame
+// needs to go first according to RFC2557 + the main frame will trigger
+// generation of the MHTML header).
+IPC_MESSAGE_ROUTED1(FrameMsg_SerializeAsMHTML, FrameMsg_SerializeAsMHTML_Params)
IPC_MESSAGE_ROUTED1(FrameMsg_SetFrameOwnerProperties,
blink::WebFrameOwnerProperties /* frame_owner_properties */)
@@ -1319,9 +1339,11 @@ IPC_MESSAGE_ROUTED2(FrameHostMsg_SerializedHtmlWithLocalLinksResponse,
bool /* end of data? */)
// Response to FrameMsg_SerializeAsMHTML.
-IPC_MESSAGE_ROUTED2(FrameHostMsg_SerializeAsMHTMLResponse,
- int /* job_id (used to match responses to requests) */,
- bool /* true if success, false if error */)
+IPC_MESSAGE_ROUTED3(
+ FrameHostMsg_SerializeAsMHTMLResponse,
+ int /* job_id (used to match responses to requests) */,
+ bool /* true if success, false if error */,
+ std::set<std::string> /* digests of uris of serialized resources */)
// Sent when the renderer updates hint for importance of a tab.
IPC_MESSAGE_ROUTED1(FrameHostMsg_UpdatePageImportanceSignals,
« no previous file with comments | « content/browser/frame_host/render_frame_host_impl.cc ('k') | content/renderer/render_frame_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698