@@ -34,6 +34,8 @@ export class ContextObserver {
34
34
this . chromeEventHandler = chromeEventHandler ;
35
35
lazy . EventEmitter . decorate ( this ) ;
36
36
37
+ this . _fissionEnabled = Services . appinfo . fissionAutostart ;
38
+
37
39
this . chromeEventHandler . addEventListener ( "DOMWindowCreated" , this , {
38
40
mozSystemGroup : true ,
39
41
} ) ;
@@ -49,7 +51,11 @@ export class ContextObserver {
49
51
Services . obs . addObserver ( this , "document-element-inserted" ) ;
50
52
Services . obs . addObserver ( this , "inner-window-destroyed" ) ;
51
53
52
- Services . obs . addObserver ( this , "webnavigation-create" ) ;
54
+ // With Fission disabled the `DOMWindowCreated` event is fired too late.
55
+ // Use the `webnavigation-create` notification instead.
56
+ if ( ! this . _fissionEnabled ) {
57
+ Services . obs . addObserver ( this , "webnavigation-create" ) ;
58
+ }
53
59
Services . obs . addObserver ( this , "webnavigation-destroy" ) ;
54
60
}
55
61
@@ -67,7 +73,9 @@ export class ContextObserver {
67
73
Services . obs . removeObserver ( this , "document-element-inserted" ) ;
68
74
Services . obs . removeObserver ( this , "inner-window-destroyed" ) ;
69
75
70
- Services . obs . removeObserver ( this , "webnavigation-create" ) ;
76
+ if ( ! this . _fissionEnabled ) {
77
+ Services . obs . removeObserver ( this , "webnavigation-create" ) ;
78
+ }
71
79
Services . obs . removeObserver ( this , "webnavigation-destroy" ) ;
72
80
}
73
81
@@ -83,6 +91,13 @@ export class ContextObserver {
83
91
// what ExecutionContext(s) to destroy.
84
92
this . emit ( "context-destroyed" , { frameId } ) ;
85
93
94
+ // With Fission enabled the frame is attached early enough so that
95
+ // expected network requests and responses are handles afterward.
96
+ // Otherwise send the event when `webnavigation-create` is received.
97
+ if ( this . _fissionEnabled ) {
98
+ this . emit ( "frame-attached" , { frameId, window } ) ;
99
+ }
100
+
86
101
break ;
87
102
88
103
case "pageshow" :
0 commit comments