File: mhtml_file_writer.mojom

package info (click to toggle)
chromium 139.0.7258.127-1
  • links: PTS, VCS
  • area: main
  • in suites:
  • size: 6,122,068 kB
  • sloc: cpp: 35,100,771; ansic: 7,163,530; javascript: 4,103,002; python: 1,436,920; asm: 946,517; xml: 746,709; pascal: 187,653; perl: 88,691; sh: 88,436; objc: 79,953; sql: 51,488; cs: 44,583; fortran: 24,137; makefile: 22,147; tcl: 15,277; php: 13,980; yacc: 8,984; ruby: 7,485; awk: 3,720; lisp: 3,096; lex: 1,327; ada: 727; jsp: 228; sed: 36
file content (93 lines) | stat: -rw-r--r-- 3,369 bytes parent folder | download | duplicates (9)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
// Copyright 2018 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

module content.mojom;

import "mojo/public/mojom/base/byte_string.mojom";
import "mojo/public/mojom/base/file.mojom";
import "mojo/public/mojom/base/time.mojom";

// Status result enum for MHTML generation.
// Changes to this enum must be reflected in the respective metrics enum named
// MhtmlGenerationFinalSaveStatus in enums.xml.
enum MhtmlSaveStatus {
  kSuccess = 0,

  // Could not properly close the file where data was written to. Determined by
  // the browser.
  kFileClosingError,

  // Could not create the file that would be written to. Determined by the
  // browser.
  kFileCreationError,

  // Could not write serialized data to the file. Determined by the renderer.
  kFileWritingError,

  // The DOM changed and a previously existing frame is no more. Determined by
  // the browser.
  kFrameNoLongerExists,

  // No longer used.
  kDeprecatedFrameSerializationForbidden,

  // A render process needed for the serialization of one of the page's frame is
  // no more. Determined by the browser.
  kRenderProcessExited,

  // There is a problem reading or writing serialized data to the Data Pipe.
  // Determined by either browser or renderer.
  kStreamingError
};

union MhtmlOutputHandle {
  // Destination file handle.
  mojo_base.mojom.File file_handle;

  // Data pipe producer handle for on-the-fly hashing.
  handle<data_pipe_producer> producer_handle;
};

struct SerializeAsMHTMLParams {
  // MHTML boundary marker / MIME multipart boundary maker. The same
  // |mhtml_boundary_marker| should be used for serialization of each frame.
  string mhtml_boundary_marker;

  // Whether to use binary encoding while serializing.  Binary encoding is not
  // supported outside of Chrome, so this should not be used if the MHTML is
  // intended for sharing.
  bool mhtml_binary_encoding;

  // Whether to remove popup overlay while serializing.
  bool mhtml_popup_overlay_removal;

  // To avoid duplicating MHTML parts across frames, |digests_of_uris_to_skip|
  // contains digests of parts that have already been serialized and should
  // be skipped.
  // 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()|.
  // This array MUST be sorted and contain no duplicates.
  array<mojo_base.mojom.ByteString> digests_of_uris_to_skip;

  // Salt used for |digests_of_uris_to_skip|.
  mojo_base.mojom.ByteString salt;

  // Destination handle to write MHTML data to.
  MhtmlOutputHandle output_handle;
};

// Serialize target frame and its resources into MHTML and write it into the
// provided output 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).
interface MhtmlFileWriter {
  // |renderer_main_thread_time| is the amount of time spent in the main
  // thread serializing the frame.
  SerializeAsMHTML(SerializeAsMHTMLParams params)
    =>  (MhtmlSaveStatus status,
        array<mojo_base.mojom.ByteString> digests_of_uris_to_skip);
};