@openreplay/tracker 9.0.8 → 9.0.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (79) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/cjs/app/index.js +1 -1
  3. package/cjs/index.js +1 -1
  4. package/cjs/modules/attributeSender.js +10 -8
  5. package/cjs/modules/timing.d.ts +1 -0
  6. package/cjs/modules/timing.js +7 -0
  7. package/coverage/clover.xml +3426 -0
  8. package/coverage/coverage-final.json +50 -0
  9. package/coverage/lcov-report/base.css +224 -0
  10. package/coverage/lcov-report/block-navigation.js +87 -0
  11. package/coverage/lcov-report/favicon.png +0 -0
  12. package/coverage/lcov-report/index.html +206 -0
  13. package/coverage/lcov-report/main/app/guards.ts.html +229 -0
  14. package/coverage/lcov-report/main/app/index.html +221 -0
  15. package/coverage/lcov-report/main/app/index.ts.html +2182 -0
  16. package/coverage/lcov-report/main/app/logger.ts.html +277 -0
  17. package/coverage/lcov-report/main/app/messages.gen.ts.html +2827 -0
  18. package/coverage/lcov-report/main/app/nodes.ts.html +385 -0
  19. package/coverage/lcov-report/main/app/observer/iframe_observer.ts.html +148 -0
  20. package/coverage/lcov-report/main/app/observer/iframe_offsets.ts.html +289 -0
  21. package/coverage/lcov-report/main/app/observer/index.html +161 -0
  22. package/coverage/lcov-report/main/app/observer/shadow_root_observer.ts.html +142 -0
  23. package/coverage/lcov-report/main/app/observer/top_observer.ts.html +538 -0
  24. package/coverage/lcov-report/main/app/sanitizer.ts.html +394 -0
  25. package/coverage/lcov-report/main/app/session.ts.html +601 -0
  26. package/coverage/lcov-report/main/app/ticker.ts.html +250 -0
  27. package/coverage/lcov-report/main/index.html +131 -0
  28. package/coverage/lcov-report/main/index.ts.html +1213 -0
  29. package/coverage/lcov-report/main/modules/Network/beaconProxy.ts.html +391 -0
  30. package/coverage/lcov-report/main/modules/Network/fetchProxy.ts.html +1027 -0
  31. package/coverage/lcov-report/main/modules/Network/index.html +191 -0
  32. package/coverage/lcov-report/main/modules/Network/index.ts.html +244 -0
  33. package/coverage/lcov-report/main/modules/Network/networkMessage.ts.html +385 -0
  34. package/coverage/lcov-report/main/modules/Network/utils.ts.html +700 -0
  35. package/coverage/lcov-report/main/modules/Network/xhrProxy.ts.html +850 -0
  36. package/coverage/lcov-report/main/modules/attributeSender.ts.html +232 -0
  37. package/coverage/lcov-report/main/modules/axiosSpy.ts.html +709 -0
  38. package/coverage/lcov-report/main/modules/connection.ts.html +160 -0
  39. package/coverage/lcov-report/main/modules/console.ts.html +541 -0
  40. package/coverage/lcov-report/main/modules/constructedStyleSheets.ts.html +559 -0
  41. package/coverage/lcov-report/main/modules/cssrules.ts.html +418 -0
  42. package/coverage/lcov-report/main/modules/exception.ts.html +385 -0
  43. package/coverage/lcov-report/main/modules/featureFlags.ts.html +412 -0
  44. package/coverage/lcov-report/main/modules/focus.ts.html +220 -0
  45. package/coverage/lcov-report/main/modules/fonts.ts.html +289 -0
  46. package/coverage/lcov-report/main/modules/img.ts.html +433 -0
  47. package/coverage/lcov-report/main/modules/index.html +401 -0
  48. package/coverage/lcov-report/main/modules/input.ts.html +826 -0
  49. package/coverage/lcov-report/main/modules/mouse.ts.html +826 -0
  50. package/coverage/lcov-report/main/modules/network.ts.html +1123 -0
  51. package/coverage/lcov-report/main/modules/performance.ts.html +367 -0
  52. package/coverage/lcov-report/main/modules/scroll.ts.html +364 -0
  53. package/coverage/lcov-report/main/modules/selection.ts.html +202 -0
  54. package/coverage/lcov-report/main/modules/tabs.ts.html +124 -0
  55. package/coverage/lcov-report/main/modules/timing.ts.html +841 -0
  56. package/coverage/lcov-report/main/modules/userTesting/dnd.ts.html +232 -0
  57. package/coverage/lcov-report/main/modules/userTesting/index.html +161 -0
  58. package/coverage/lcov-report/main/modules/userTesting/index.ts.html +1210 -0
  59. package/coverage/lcov-report/main/modules/userTesting/recorder.ts.html +361 -0
  60. package/coverage/lcov-report/main/modules/userTesting/styles.ts.html +865 -0
  61. package/coverage/lcov-report/main/modules/viewport.ts.html +250 -0
  62. package/coverage/lcov-report/main/utils.ts.html +406 -0
  63. package/coverage/lcov-report/prettify.css +1 -0
  64. package/coverage/lcov-report/prettify.js +2 -0
  65. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  66. package/coverage/lcov-report/sorter.js +196 -0
  67. package/coverage/lcov-report/webworker/BatchWriter.ts.html +481 -0
  68. package/coverage/lcov-report/webworker/MessageEncoder.gen.ts.html +961 -0
  69. package/coverage/lcov-report/webworker/PrimitiveEncoder.ts.html +436 -0
  70. package/coverage/lcov-report/webworker/QueueSender.ts.html +505 -0
  71. package/coverage/lcov-report/webworker/index.html +176 -0
  72. package/coverage/lcov-report/webworker/index.ts.html +628 -0
  73. package/coverage/lcov.info +6631 -0
  74. package/lib/app/index.js +1 -1
  75. package/lib/index.js +1 -1
  76. package/lib/modules/attributeSender.js +10 -8
  77. package/lib/modules/timing.d.ts +1 -0
  78. package/lib/modules/timing.js +7 -0
  79. package/package.json +1 -1
@@ -0,0 +1,538 @@
1
+
2
+ <!doctype html>
3
+ <html lang="en">
4
+
5
+ <head>
6
+ <title>Code coverage report for main/app/observer/top_observer.ts</title>
7
+ <meta charset="utf-8" />
8
+ <link rel="stylesheet" href="../../../prettify.css" />
9
+ <link rel="stylesheet" href="../../../base.css" />
10
+ <link rel="shortcut icon" type="image/x-icon" href="../../../favicon.png" />
11
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
12
+ <style type='text/css'>
13
+ .coverage-summary .sorter {
14
+ background-image: url(../../../sort-arrow-sprite.png);
15
+ }
16
+ </style>
17
+ </head>
18
+
19
+ <body>
20
+ <div class='wrapper'>
21
+ <div class='pad1'>
22
+ <h1><a href="../../../index.html">All files</a> / <a href="index.html">main/app/observer</a> top_observer.ts</h1>
23
+ <div class='clearfix'>
24
+
25
+ <div class='fl pad1y space-right2'>
26
+ <span class="strong">0% </span>
27
+ <span class="quiet">Statements</span>
28
+ <span class='fraction'>0/67</span>
29
+ </div>
30
+
31
+
32
+ <div class='fl pad1y space-right2'>
33
+ <span class="strong">0% </span>
34
+ <span class="quiet">Branches</span>
35
+ <span class='fraction'>0/19</span>
36
+ </div>
37
+
38
+
39
+ <div class='fl pad1y space-right2'>
40
+ <span class="strong">0% </span>
41
+ <span class="quiet">Functions</span>
42
+ <span class='fraction'>0/17</span>
43
+ </div>
44
+
45
+
46
+ <div class='fl pad1y space-right2'>
47
+ <span class="strong">0% </span>
48
+ <span class="quiet">Lines</span>
49
+ <span class='fraction'>0/62</span>
50
+ </div>
51
+
52
+
53
+ </div>
54
+ <p class="quiet">
55
+ Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
56
+ </p>
57
+ <template id="filterTemplate">
58
+ <div class="quiet">
59
+ Filter:
60
+ <input oninput="onInput()" type="search" id="fileSearch">
61
+ </div>
62
+ </template>
63
+ </div>
64
+ <div class='status-line low'></div>
65
+ <pre><table class="coverage">
66
+ <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
67
+ <a name='L2'></a><a href='#L2'>2</a>
68
+ <a name='L3'></a><a href='#L3'>3</a>
69
+ <a name='L4'></a><a href='#L4'>4</a>
70
+ <a name='L5'></a><a href='#L5'>5</a>
71
+ <a name='L6'></a><a href='#L6'>6</a>
72
+ <a name='L7'></a><a href='#L7'>7</a>
73
+ <a name='L8'></a><a href='#L8'>8</a>
74
+ <a name='L9'></a><a href='#L9'>9</a>
75
+ <a name='L10'></a><a href='#L10'>10</a>
76
+ <a name='L11'></a><a href='#L11'>11</a>
77
+ <a name='L12'></a><a href='#L12'>12</a>
78
+ <a name='L13'></a><a href='#L13'>13</a>
79
+ <a name='L14'></a><a href='#L14'>14</a>
80
+ <a name='L15'></a><a href='#L15'>15</a>
81
+ <a name='L16'></a><a href='#L16'>16</a>
82
+ <a name='L17'></a><a href='#L17'>17</a>
83
+ <a name='L18'></a><a href='#L18'>18</a>
84
+ <a name='L19'></a><a href='#L19'>19</a>
85
+ <a name='L20'></a><a href='#L20'>20</a>
86
+ <a name='L21'></a><a href='#L21'>21</a>
87
+ <a name='L22'></a><a href='#L22'>22</a>
88
+ <a name='L23'></a><a href='#L23'>23</a>
89
+ <a name='L24'></a><a href='#L24'>24</a>
90
+ <a name='L25'></a><a href='#L25'>25</a>
91
+ <a name='L26'></a><a href='#L26'>26</a>
92
+ <a name='L27'></a><a href='#L27'>27</a>
93
+ <a name='L28'></a><a href='#L28'>28</a>
94
+ <a name='L29'></a><a href='#L29'>29</a>
95
+ <a name='L30'></a><a href='#L30'>30</a>
96
+ <a name='L31'></a><a href='#L31'>31</a>
97
+ <a name='L32'></a><a href='#L32'>32</a>
98
+ <a name='L33'></a><a href='#L33'>33</a>
99
+ <a name='L34'></a><a href='#L34'>34</a>
100
+ <a name='L35'></a><a href='#L35'>35</a>
101
+ <a name='L36'></a><a href='#L36'>36</a>
102
+ <a name='L37'></a><a href='#L37'>37</a>
103
+ <a name='L38'></a><a href='#L38'>38</a>
104
+ <a name='L39'></a><a href='#L39'>39</a>
105
+ <a name='L40'></a><a href='#L40'>40</a>
106
+ <a name='L41'></a><a href='#L41'>41</a>
107
+ <a name='L42'></a><a href='#L42'>42</a>
108
+ <a name='L43'></a><a href='#L43'>43</a>
109
+ <a name='L44'></a><a href='#L44'>44</a>
110
+ <a name='L45'></a><a href='#L45'>45</a>
111
+ <a name='L46'></a><a href='#L46'>46</a>
112
+ <a name='L47'></a><a href='#L47'>47</a>
113
+ <a name='L48'></a><a href='#L48'>48</a>
114
+ <a name='L49'></a><a href='#L49'>49</a>
115
+ <a name='L50'></a><a href='#L50'>50</a>
116
+ <a name='L51'></a><a href='#L51'>51</a>
117
+ <a name='L52'></a><a href='#L52'>52</a>
118
+ <a name='L53'></a><a href='#L53'>53</a>
119
+ <a name='L54'></a><a href='#L54'>54</a>
120
+ <a name='L55'></a><a href='#L55'>55</a>
121
+ <a name='L56'></a><a href='#L56'>56</a>
122
+ <a name='L57'></a><a href='#L57'>57</a>
123
+ <a name='L58'></a><a href='#L58'>58</a>
124
+ <a name='L59'></a><a href='#L59'>59</a>
125
+ <a name='L60'></a><a href='#L60'>60</a>
126
+ <a name='L61'></a><a href='#L61'>61</a>
127
+ <a name='L62'></a><a href='#L62'>62</a>
128
+ <a name='L63'></a><a href='#L63'>63</a>
129
+ <a name='L64'></a><a href='#L64'>64</a>
130
+ <a name='L65'></a><a href='#L65'>65</a>
131
+ <a name='L66'></a><a href='#L66'>66</a>
132
+ <a name='L67'></a><a href='#L67'>67</a>
133
+ <a name='L68'></a><a href='#L68'>68</a>
134
+ <a name='L69'></a><a href='#L69'>69</a>
135
+ <a name='L70'></a><a href='#L70'>70</a>
136
+ <a name='L71'></a><a href='#L71'>71</a>
137
+ <a name='L72'></a><a href='#L72'>72</a>
138
+ <a name='L73'></a><a href='#L73'>73</a>
139
+ <a name='L74'></a><a href='#L74'>74</a>
140
+ <a name='L75'></a><a href='#L75'>75</a>
141
+ <a name='L76'></a><a href='#L76'>76</a>
142
+ <a name='L77'></a><a href='#L77'>77</a>
143
+ <a name='L78'></a><a href='#L78'>78</a>
144
+ <a name='L79'></a><a href='#L79'>79</a>
145
+ <a name='L80'></a><a href='#L80'>80</a>
146
+ <a name='L81'></a><a href='#L81'>81</a>
147
+ <a name='L82'></a><a href='#L82'>82</a>
148
+ <a name='L83'></a><a href='#L83'>83</a>
149
+ <a name='L84'></a><a href='#L84'>84</a>
150
+ <a name='L85'></a><a href='#L85'>85</a>
151
+ <a name='L86'></a><a href='#L86'>86</a>
152
+ <a name='L87'></a><a href='#L87'>87</a>
153
+ <a name='L88'></a><a href='#L88'>88</a>
154
+ <a name='L89'></a><a href='#L89'>89</a>
155
+ <a name='L90'></a><a href='#L90'>90</a>
156
+ <a name='L91'></a><a href='#L91'>91</a>
157
+ <a name='L92'></a><a href='#L92'>92</a>
158
+ <a name='L93'></a><a href='#L93'>93</a>
159
+ <a name='L94'></a><a href='#L94'>94</a>
160
+ <a name='L95'></a><a href='#L95'>95</a>
161
+ <a name='L96'></a><a href='#L96'>96</a>
162
+ <a name='L97'></a><a href='#L97'>97</a>
163
+ <a name='L98'></a><a href='#L98'>98</a>
164
+ <a name='L99'></a><a href='#L99'>99</a>
165
+ <a name='L100'></a><a href='#L100'>100</a>
166
+ <a name='L101'></a><a href='#L101'>101</a>
167
+ <a name='L102'></a><a href='#L102'>102</a>
168
+ <a name='L103'></a><a href='#L103'>103</a>
169
+ <a name='L104'></a><a href='#L104'>104</a>
170
+ <a name='L105'></a><a href='#L105'>105</a>
171
+ <a name='L106'></a><a href='#L106'>106</a>
172
+ <a name='L107'></a><a href='#L107'>107</a>
173
+ <a name='L108'></a><a href='#L108'>108</a>
174
+ <a name='L109'></a><a href='#L109'>109</a>
175
+ <a name='L110'></a><a href='#L110'>110</a>
176
+ <a name='L111'></a><a href='#L111'>111</a>
177
+ <a name='L112'></a><a href='#L112'>112</a>
178
+ <a name='L113'></a><a href='#L113'>113</a>
179
+ <a name='L114'></a><a href='#L114'>114</a>
180
+ <a name='L115'></a><a href='#L115'>115</a>
181
+ <a name='L116'></a><a href='#L116'>116</a>
182
+ <a name='L117'></a><a href='#L117'>117</a>
183
+ <a name='L118'></a><a href='#L118'>118</a>
184
+ <a name='L119'></a><a href='#L119'>119</a>
185
+ <a name='L120'></a><a href='#L120'>120</a>
186
+ <a name='L121'></a><a href='#L121'>121</a>
187
+ <a name='L122'></a><a href='#L122'>122</a>
188
+ <a name='L123'></a><a href='#L123'>123</a>
189
+ <a name='L124'></a><a href='#L124'>124</a>
190
+ <a name='L125'></a><a href='#L125'>125</a>
191
+ <a name='L126'></a><a href='#L126'>126</a>
192
+ <a name='L127'></a><a href='#L127'>127</a>
193
+ <a name='L128'></a><a href='#L128'>128</a>
194
+ <a name='L129'></a><a href='#L129'>129</a>
195
+ <a name='L130'></a><a href='#L130'>130</a>
196
+ <a name='L131'></a><a href='#L131'>131</a>
197
+ <a name='L132'></a><a href='#L132'>132</a>
198
+ <a name='L133'></a><a href='#L133'>133</a>
199
+ <a name='L134'></a><a href='#L134'>134</a>
200
+ <a name='L135'></a><a href='#L135'>135</a>
201
+ <a name='L136'></a><a href='#L136'>136</a>
202
+ <a name='L137'></a><a href='#L137'>137</a>
203
+ <a name='L138'></a><a href='#L138'>138</a>
204
+ <a name='L139'></a><a href='#L139'>139</a>
205
+ <a name='L140'></a><a href='#L140'>140</a>
206
+ <a name='L141'></a><a href='#L141'>141</a>
207
+ <a name='L142'></a><a href='#L142'>142</a>
208
+ <a name='L143'></a><a href='#L143'>143</a>
209
+ <a name='L144'></a><a href='#L144'>144</a>
210
+ <a name='L145'></a><a href='#L145'>145</a>
211
+ <a name='L146'></a><a href='#L146'>146</a>
212
+ <a name='L147'></a><a href='#L147'>147</a>
213
+ <a name='L148'></a><a href='#L148'>148</a>
214
+ <a name='L149'></a><a href='#L149'>149</a>
215
+ <a name='L150'></a><a href='#L150'>150</a>
216
+ <a name='L151'></a><a href='#L151'>151</a>
217
+ <a name='L152'></a><a href='#L152'>152</a></td><td class="line-coverage quiet"><span class="cline-any cline-no">&nbsp;</span>
218
+ <span class="cline-any cline-no">&nbsp;</span>
219
+ <span class="cline-any cline-neutral">&nbsp;</span>
220
+ <span class="cline-any cline-neutral">&nbsp;</span>
221
+ <span class="cline-any cline-no">&nbsp;</span>
222
+ <span class="cline-any cline-no">&nbsp;</span>
223
+ <span class="cline-any cline-no">&nbsp;</span>
224
+ <span class="cline-any cline-neutral">&nbsp;</span>
225
+ <span class="cline-any cline-no">&nbsp;</span>
226
+ <span class="cline-any cline-neutral">&nbsp;</span>
227
+ <span class="cline-any cline-no">&nbsp;</span>
228
+ <span class="cline-any cline-neutral">&nbsp;</span>
229
+ <span class="cline-any cline-neutral">&nbsp;</span>
230
+ <span class="cline-any cline-neutral">&nbsp;</span>
231
+ <span class="cline-any cline-neutral">&nbsp;</span>
232
+ <span class="cline-any cline-neutral">&nbsp;</span>
233
+ <span class="cline-any cline-neutral">&nbsp;</span>
234
+ <span class="cline-any cline-neutral">&nbsp;</span>
235
+ <span class="cline-any cline-neutral">&nbsp;</span>
236
+ <span class="cline-any cline-no">&nbsp;</span>
237
+ <span class="cline-any cline-neutral">&nbsp;</span>
238
+ <span class="cline-any cline-no">&nbsp;</span>
239
+ <span class="cline-any cline-neutral">&nbsp;</span>
240
+ <span class="cline-any cline-no">&nbsp;</span>
241
+ <span class="cline-any cline-neutral">&nbsp;</span>
242
+ <span class="cline-any cline-neutral">&nbsp;</span>
243
+ <span class="cline-any cline-no">&nbsp;</span>
244
+ <span class="cline-any cline-no">&nbsp;</span>
245
+ <span class="cline-any cline-neutral">&nbsp;</span>
246
+ <span class="cline-any cline-neutral">&nbsp;</span>
247
+ <span class="cline-any cline-neutral">&nbsp;</span>
248
+ <span class="cline-any cline-neutral">&nbsp;</span>
249
+ <span class="cline-any cline-neutral">&nbsp;</span>
250
+ <span class="cline-any cline-neutral">&nbsp;</span>
251
+ <span class="cline-any cline-neutral">&nbsp;</span>
252
+ <span class="cline-any cline-no">&nbsp;</span>
253
+ <span class="cline-any cline-no">&nbsp;</span>
254
+ <span class="cline-any cline-neutral">&nbsp;</span>
255
+ <span class="cline-any cline-neutral">&nbsp;</span>
256
+ <span class="cline-any cline-neutral">&nbsp;</span>
257
+ <span class="cline-any cline-neutral">&nbsp;</span>
258
+ <span class="cline-any cline-no">&nbsp;</span>
259
+ <span class="cline-any cline-neutral">&nbsp;</span>
260
+ <span class="cline-any cline-neutral">&nbsp;</span>
261
+ <span class="cline-any cline-neutral">&nbsp;</span>
262
+ <span class="cline-any cline-neutral">&nbsp;</span>
263
+ <span class="cline-any cline-no">&nbsp;</span>
264
+ <span class="cline-any cline-no">&nbsp;</span>
265
+ <span class="cline-any cline-no">&nbsp;</span>
266
+ <span class="cline-any cline-neutral">&nbsp;</span>
267
+ <span class="cline-any cline-neutral">&nbsp;</span>
268
+ <span class="cline-any cline-neutral">&nbsp;</span>
269
+ <span class="cline-any cline-neutral">&nbsp;</span>
270
+ <span class="cline-any cline-no">&nbsp;</span>
271
+ <span class="cline-any cline-neutral">&nbsp;</span>
272
+ <span class="cline-any cline-neutral">&nbsp;</span>
273
+ <span class="cline-any cline-no">&nbsp;</span>
274
+ <span class="cline-any cline-neutral">&nbsp;</span>
275
+ <span class="cline-any cline-no">&nbsp;</span>
276
+ <span class="cline-any cline-neutral">&nbsp;</span>
277
+ <span class="cline-any cline-neutral">&nbsp;</span>
278
+ <span class="cline-any cline-neutral">&nbsp;</span>
279
+ <span class="cline-any cline-no">&nbsp;</span>
280
+ <span class="cline-any cline-neutral">&nbsp;</span>
281
+ <span class="cline-any cline-neutral">&nbsp;</span>
282
+ <span class="cline-any cline-no">&nbsp;</span>
283
+ <span class="cline-any cline-neutral">&nbsp;</span>
284
+ <span class="cline-any cline-no">&nbsp;</span>
285
+ <span class="cline-any cline-neutral">&nbsp;</span>
286
+ <span class="cline-any cline-neutral">&nbsp;</span>
287
+ <span class="cline-any cline-no">&nbsp;</span>
288
+ <span class="cline-any cline-no">&nbsp;</span>
289
+ <span class="cline-any cline-no">&nbsp;</span>
290
+ <span class="cline-any cline-no">&nbsp;</span>
291
+ <span class="cline-any cline-neutral">&nbsp;</span>
292
+ <span class="cline-any cline-no">&nbsp;</span>
293
+ <span class="cline-any cline-neutral">&nbsp;</span>
294
+ <span class="cline-any cline-no">&nbsp;</span>
295
+ <span class="cline-any cline-no">&nbsp;</span>
296
+ <span class="cline-any cline-no">&nbsp;</span>
297
+ <span class="cline-any cline-no">&nbsp;</span>
298
+ <span class="cline-any cline-no">&nbsp;</span>
299
+ <span class="cline-any cline-no">&nbsp;</span>
300
+ <span class="cline-any cline-no">&nbsp;</span>
301
+ <span class="cline-any cline-no">&nbsp;</span>
302
+ <span class="cline-any cline-neutral">&nbsp;</span>
303
+ <span class="cline-any cline-no">&nbsp;</span>
304
+ <span class="cline-any cline-neutral">&nbsp;</span>
305
+ <span class="cline-any cline-no">&nbsp;</span>
306
+ <span class="cline-any cline-neutral">&nbsp;</span>
307
+ <span class="cline-any cline-neutral">&nbsp;</span>
308
+ <span class="cline-any cline-neutral">&nbsp;</span>
309
+ <span class="cline-any cline-neutral">&nbsp;</span>
310
+ <span class="cline-any cline-neutral">&nbsp;</span>
311
+ <span class="cline-any cline-neutral">&nbsp;</span>
312
+ <span class="cline-any cline-no">&nbsp;</span>
313
+ <span class="cline-any cline-neutral">&nbsp;</span>
314
+ <span class="cline-any cline-no">&nbsp;</span>
315
+ <span class="cline-any cline-neutral">&nbsp;</span>
316
+ <span class="cline-any cline-neutral">&nbsp;</span>
317
+ <span class="cline-any cline-neutral">&nbsp;</span>
318
+ <span class="cline-any cline-neutral">&nbsp;</span>
319
+ <span class="cline-any cline-no">&nbsp;</span>
320
+ <span class="cline-any cline-no">&nbsp;</span>
321
+ <span class="cline-any cline-neutral">&nbsp;</span>
322
+ <span class="cline-any cline-neutral">&nbsp;</span>
323
+ <span class="cline-any cline-no">&nbsp;</span>
324
+ <span class="cline-any cline-neutral">&nbsp;</span>
325
+ <span class="cline-any cline-no">&nbsp;</span>
326
+ <span class="cline-any cline-no">&nbsp;</span>
327
+ <span class="cline-any cline-no">&nbsp;</span>
328
+ <span class="cline-any cline-neutral">&nbsp;</span>
329
+ <span class="cline-any cline-neutral">&nbsp;</span>
330
+ <span class="cline-any cline-neutral">&nbsp;</span>
331
+ <span class="cline-any cline-neutral">&nbsp;</span>
332
+ <span class="cline-any cline-neutral">&nbsp;</span>
333
+ <span class="cline-any cline-no">&nbsp;</span>
334
+ <span class="cline-any cline-no">&nbsp;</span>
335
+ <span class="cline-any cline-neutral">&nbsp;</span>
336
+ <span class="cline-any cline-no">&nbsp;</span>
337
+ <span class="cline-any cline-no">&nbsp;</span>
338
+ <span class="cline-any cline-no">&nbsp;</span>
339
+ <span class="cline-any cline-neutral">&nbsp;</span>
340
+ <span class="cline-any cline-neutral">&nbsp;</span>
341
+ <span class="cline-any cline-neutral">&nbsp;</span>
342
+ <span class="cline-any cline-neutral">&nbsp;</span>
343
+ <span class="cline-any cline-neutral">&nbsp;</span>
344
+ <span class="cline-any cline-neutral">&nbsp;</span>
345
+ <span class="cline-any cline-neutral">&nbsp;</span>
346
+ <span class="cline-any cline-neutral">&nbsp;</span>
347
+ <span class="cline-any cline-no">&nbsp;</span>
348
+ <span class="cline-any cline-neutral">&nbsp;</span>
349
+ <span class="cline-any cline-neutral">&nbsp;</span>
350
+ <span class="cline-any cline-no">&nbsp;</span>
351
+ <span class="cline-any cline-neutral">&nbsp;</span>
352
+ <span class="cline-any cline-no">&nbsp;</span>
353
+ <span class="cline-any cline-neutral">&nbsp;</span>
354
+ <span class="cline-any cline-neutral">&nbsp;</span>
355
+ <span class="cline-any cline-neutral">&nbsp;</span>
356
+ <span class="cline-any cline-neutral">&nbsp;</span>
357
+ <span class="cline-any cline-neutral">&nbsp;</span>
358
+ <span class="cline-any cline-neutral">&nbsp;</span>
359
+ <span class="cline-any cline-no">&nbsp;</span>
360
+ <span class="cline-any cline-no">&nbsp;</span>
361
+ <span class="cline-any cline-no">&nbsp;</span>
362
+ <span class="cline-any cline-no">&nbsp;</span>
363
+ <span class="cline-any cline-no">&nbsp;</span>
364
+ <span class="cline-any cline-no">&nbsp;</span>
365
+ <span class="cline-any cline-no">&nbsp;</span>
366
+ <span class="cline-any cline-neutral">&nbsp;</span>
367
+ <span class="cline-any cline-neutral">&nbsp;</span>
368
+ <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js"><span class="cstat-no" title="statement not covered" >import Observer from './observer.js'</span>
369
+ <span class="cstat-no" title="statement not covered" >import { isElementNode, hasTag } from '../guards.js'</span>
370
+ import Network from '../../modules/network.js'
371
+ &nbsp;
372
+ <span class="cstat-no" title="statement not covered" >import IFrameObserver from './iframe_observer.js'</span>
373
+ <span class="cstat-no" title="statement not covered" >import ShadowRootObserver from './shadow_root_observer.js'</span>
374
+ <span class="cstat-no" title="statement not covered" >import IFrameOffsets, { Offset } from './iframe_offsets.js'</span>
375
+ &nbsp;
376
+ <span class="cstat-no" title="statement not covered" >import { CreateDocument } from '../messages.gen.js'</span>
377
+ import App from '../index.js'
378
+ <span class="cstat-no" title="statement not covered" >import { IN_BROWSER, hasOpenreplayAttribute, canAccessIframe } from '../../utils.js'</span>
379
+ &nbsp;
380
+ export interface Options {
381
+ captureIFrames: boolean
382
+ }
383
+ &nbsp;
384
+ type Context = Window &amp; typeof globalThis
385
+ type ContextCallback = (context: Context) =&gt; void
386
+ &nbsp;
387
+ const attachShadowNativeFn = <span class="cstat-no" title="statement not covered" >IN_BROWSER ? Element.prototype.attachShadow : <span class="fstat-no" title="function not covered" >() =</span>&gt; <span class="cstat-no" title="statement not covered" >new ShadowRoot()</span></span>
388
+ &nbsp;
389
+ <span class="cstat-no" title="statement not covered" >export default class T</span>opObserver extends Observer {
390
+ private readonly options: Options
391
+ private readonly <span class="cstat-no" title="statement not covered" >iframeOffsets: IFrameOffsets = new IFrameOffsets()</span>
392
+ &nbsp;
393
+ <span class="fstat-no" title="function not covered" > constructor(a</span>pp: App, options: Partial&lt;Options&gt;) {
394
+ <span class="cstat-no" title="statement not covered" > super(app, true)</span>
395
+ <span class="cstat-no" title="statement not covered" > this.options = Object.assign(</span>
396
+ {
397
+ captureIFrames: true,
398
+ },
399
+ options,
400
+ )
401
+ &nbsp;
402
+ // IFrames
403
+ <span class="cstat-no" title="statement not covered" > this.app.nodes.attachNodeCallback(<span class="fstat-no" title="function not covered" >(n</span>ode) =&gt; {</span>
404
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (</span>
405
+ hasTag(node, 'iframe') &amp;&amp;
406
+ ((this.options.captureIFrames &amp;&amp; !hasOpenreplayAttribute(node, 'obscured')) ||
407
+ hasOpenreplayAttribute(node, 'capture'))
408
+ ) {
409
+ <span class="cstat-no" title="statement not covered" > this.handleIframe(node)</span>
410
+ }
411
+ })
412
+ &nbsp;
413
+ // ShadowDOM
414
+ <span class="cstat-no" title="statement not covered" > this.app.nodes.attachNodeCallback(<span class="fstat-no" title="function not covered" >(n</span>ode) =&gt; {</span>
415
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (isElementNode(node) &amp;&amp; node.shadowRoot !== null) {</span>
416
+ <span class="cstat-no" title="statement not covered" > this.handleShadowRoot(node.shadowRoot)</span>
417
+ }
418
+ })
419
+ }
420
+ &nbsp;
421
+ private readonly <span class="cstat-no" title="statement not covered" >contextCallbacks: Array&lt;ContextCallback&gt; = []</span>
422
+ &nbsp;
423
+ // Attached once per Tracker instance
424
+ private readonly <span class="cstat-no" title="statement not covered" >contextsSet: Set&lt;Window&gt; = new Set()</span>
425
+ <span class="fstat-no" title="function not covered" > attachContextCallback(</span>cb: ContextCallback) {
426
+ <span class="cstat-no" title="statement not covered" > this.contextCallbacks.push(cb)</span>
427
+ }
428
+ &nbsp;
429
+ <span class="fstat-no" title="function not covered" > getDocumentOffset(</span>doc: Document): Offset {
430
+ <span class="cstat-no" title="statement not covered" > return this.iframeOffsets.getDocumentOffset(doc)</span>
431
+ }
432
+ &nbsp;
433
+ private <span class="cstat-no" title="statement not covered" >iframeObservers: IFrameObserver[] = []</span>
434
+ private <span class="fstat-no" title="function not covered" >handleIframe(</span>iframe: HTMLIFrameElement): void {
435
+ let doc: Document | null = <span class="cstat-no" title="statement not covered" >null</span>
436
+ // setTimeout is required. Otherwise some event listeners (scroll, mousemove) applied in modules
437
+ // do not work on the iframe document when it 've been loaded dynamically ((why?))
438
+ const handle = <span class="cstat-no" title="statement not covered" >this.app.safe(<span class="fstat-no" title="function not covered" >() =</span>&gt;</span>
439
+ <span class="cstat-no" title="statement not covered" > setTimeout(<span class="fstat-no" title="function not covered" >() =</span>&gt; {</span>
440
+ const id = <span class="cstat-no" title="statement not covered" >this.app.nodes.getID(iframe)</span>
441
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (id === undefined) {</span>
442
+ //log
443
+ <span class="cstat-no" title="statement not covered" > return</span>
444
+ }
445
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!canAccessIframe(iframe)) <span class="cstat-no" title="statement not covered" >return</span></span>
446
+ const currentWin = <span class="cstat-no" title="statement not covered" >iframe.contentWindow</span>
447
+ const currentDoc = <span class="cstat-no" title="statement not covered" >iframe.contentDocument</span>
448
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (currentDoc &amp;&amp; currentDoc !== doc) {</span>
449
+ const observer = <span class="cstat-no" title="statement not covered" >new IFrameObserver(this.app)</span>
450
+ <span class="cstat-no" title="statement not covered" > this.iframeObservers.push(observer)</span>
451
+ <span class="cstat-no" title="statement not covered" > observer.observe(iframe) /</span>/ TODO: call unregisterNode for the previous doc if present (incapsulate: one iframe - one observer)
452
+ <span class="cstat-no" title="statement not covered" > doc = currentDoc</span>
453
+ &nbsp;
454
+ <span class="cstat-no" title="statement not covered" > this.iframeOffsets.observe(iframe)</span>
455
+ }
456
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (</span>
457
+ currentWin &amp;&amp;
458
+ // Sometimes currentWin.window is null (not in specification). Such window object is not functional
459
+ currentWin === currentWin.window &amp;&amp;
460
+ !this.contextsSet.has(currentWin) // for each context callbacks called once per Tracker (TopObserver) instance
461
+ //TODO: more explicit logic
462
+ ) {
463
+ <span class="cstat-no" title="statement not covered" > this.contextsSet.add(currentWin)</span>
464
+ //@ts-ignore https://github.com/microsoft/TypeScript/issues/41684
465
+ <span class="cstat-no" title="statement not covered" > this.contextCallbacks.forEach(<span class="fstat-no" title="function not covered" >(c</span>b) =&gt; <span class="cstat-no" title="statement not covered" >cb(currentWin))</span></span>
466
+ }
467
+ // we need this delay because few iframes stacked one in another with rapid updates will break the player (or browser engine rather?)
468
+ }, 100),
469
+ )
470
+ <span class="cstat-no" title="statement not covered" > iframe.addEventListener('load', handle) /</span>/ why app.attachEventListener not working?
471
+ <span class="cstat-no" title="statement not covered" > handle()</span>
472
+ }
473
+ &nbsp;
474
+ private <span class="cstat-no" title="statement not covered" >shadowRootObservers: ShadowRootObserver[] = []</span>
475
+ private <span class="fstat-no" title="function not covered" >handleShadowRoot(</span>shRoot: ShadowRoot) {
476
+ const observer = <span class="cstat-no" title="statement not covered" >new ShadowRootObserver(this.app)</span>
477
+ <span class="cstat-no" title="statement not covered" > this.shadowRootObservers.push(observer)</span>
478
+ <span class="cstat-no" title="statement not covered" > observer.observe(shRoot.host)</span>
479
+ }
480
+ &nbsp;
481
+ <span class="fstat-no" title="function not covered" > observe(</span>): void {
482
+ // Protection from several subsequent calls?
483
+ &nbsp;
484
+ const observer = <span class="cstat-no" title="statement not covered" >this</span>
485
+ <span class="cstat-no" title="statement not covered" > Element.prototype.attachShadow = <span class="fstat-no" title="function not covered" >function () {</span></span>
486
+ // eslint-disable-next-line
487
+ const shadow = <span class="cstat-no" title="statement not covered" >attachShadowNativeFn.apply(this, arguments)</span>
488
+ <span class="cstat-no" title="statement not covered" > observer.handleShadowRoot(shadow)</span>
489
+ <span class="cstat-no" title="statement not covered" > return shadow</span>
490
+ }
491
+ &nbsp;
492
+ // Can observe documentElement (&lt;html&gt;) here, because it is not supposed to be changing.
493
+ // However, it is possible in some exotic cases and may cause an ignorance of the newly created &lt;html&gt;
494
+ // In this case context.document have to be observed, but this will cause
495
+ // the change in the re-player behaviour caused by CreateDocument message:
496
+ // the 0-node ("fRoot") will become #document rather than documentElement as it is now.
497
+ // Alternatively - observe(#document) then bindNode(documentElement)
498
+ <span class="cstat-no" title="statement not covered" > this.observeRoot(</span>
499
+ window.document,
500
+ <span class="fstat-no" title="function not covered" > () =</span>&gt; {
501
+ <span class="cstat-no" title="statement not covered" > this.app.send(CreateDocument())</span>
502
+ // it has no node_id here
503
+ <span class="cstat-no" title="statement not covered" > this.app.nodes.callNodeCallbacks(document, true)</span>
504
+ },
505
+ window.document.documentElement,
506
+ )
507
+ }
508
+ &nbsp;
509
+ <span class="fstat-no" title="function not covered" > disconnect(</span>) {
510
+ <span class="cstat-no" title="statement not covered" > this.iframeOffsets.clear()</span>
511
+ <span class="cstat-no" title="statement not covered" > Element.prototype.attachShadow = attachShadowNativeFn</span>
512
+ <span class="cstat-no" title="statement not covered" > this.iframeObservers.forEach(<span class="fstat-no" title="function not covered" >(o</span>) =&gt; <span class="cstat-no" title="statement not covered" >o.disconnect())</span></span>
513
+ <span class="cstat-no" title="statement not covered" > this.iframeObservers = []</span>
514
+ <span class="cstat-no" title="statement not covered" > this.shadowRootObservers.forEach(<span class="fstat-no" title="function not covered" >(o</span>) =&gt; <span class="cstat-no" title="statement not covered" >o.disconnect())</span></span>
515
+ <span class="cstat-no" title="statement not covered" > this.shadowRootObservers = []</span>
516
+ <span class="cstat-no" title="statement not covered" > super.disconnect()</span>
517
+ }
518
+ }
519
+ &nbsp;</pre></td></tr></table></pre>
520
+
521
+ <div class='push'></div><!-- for sticky footer -->
522
+ </div><!-- /wrapper -->
523
+ <div class='footer quiet pad2 space-top1 center small'>
524
+ Code coverage generated by
525
+ <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
526
+ at 2023-10-17T13:37:58.420Z
527
+ </div>
528
+ <script src="../../../prettify.js"></script>
529
+ <script>
530
+ window.onload = function () {
531
+ prettyPrint();
532
+ };
533
+ </script>
534
+ <script src="../../../sorter.js"></script>
535
+ <script src="../../../block-navigation.js"></script>
536
+ </body>
537
+ </html>
538
+