@@ -17,10 +17,11 @@ class UserScriptManager: FeatureFlaggable {
17
17
source: " window.__firefox__.NoImageMode.setEnabled(true) " ,
18
18
injectionTime: . atDocumentStart,
19
19
forMainFrameOnly: true )
20
- private let nightModeUserScript = WKUserScript . createInDefaultContentWorld (
21
- source: " window.__firefox__.NightMode.setEnabled (true)" ,
20
+ private let nightModeUserScript = WKUserScript (
21
+ source: NightModeHelper . jsCallbackBuilder ( true ) ,
22
22
injectionTime: . atDocumentEnd,
23
- forMainFrameOnly: true )
23
+ forMainFrameOnly: true ,
24
+ in: . world( name: NightModeHelper . name ( ) ) )
24
25
private let printHelperUserScript = WKUserScript . createInPageContentWorld (
25
26
source: " window.print = function () { window.webkit.messageHandlers.printHandler.postMessage({}) } " ,
26
27
injectionTime: . atDocumentEnd,
@@ -39,8 +40,7 @@ class UserScriptManager: FeatureFlaggable {
39
40
let mainframeString = mainFrameOnly ? " MainFrame " : " AllFrames "
40
41
let injectionString = injectionTime == . atDocumentStart ? " Start " : " End "
41
42
let name = mainframeString + " AtDocument " + injectionString
42
- if let path = Bundle . main. path ( forResource: name, ofType: " js " ) ,
43
- let source = try ? NSString ( contentsOfFile: path, encoding: String . Encoding. utf8. rawValue) as String {
43
+ if let source = UserScriptManager . getScriptSource ( name) {
44
44
let wrappedSource = " (function() { const APP_ID_TOKEN = ' \( UserScriptManager . appIdToken) '; \( source) })() "
45
45
let userScript = WKUserScript . createInDefaultContentWorld (
46
46
source: wrappedSource,
@@ -52,11 +52,7 @@ class UserScriptManager: FeatureFlaggable {
52
52
53
53
// Autofill scripts
54
54
let autofillName = " Autofill \( name) "
55
- if let autofillScriptCompatPath = Bundle . main. path (
56
- forResource: autofillName, ofType: " js " ) ,
57
- let source = try ? NSString (
58
- contentsOfFile: autofillScriptCompatPath,
59
- encoding: String . Encoding. utf8. rawValue) as String {
55
+ if let source = UserScriptManager . getScriptSource ( autofillName) {
60
56
let wrappedSource = " (function() { const APP_ID_TOKEN = ' \( UserScriptManager . appIdToken) '; \( source) })() "
61
57
let userScript = WKUserScript . createInDefaultContentWorld (
62
58
source: wrappedSource,
@@ -65,15 +61,20 @@ class UserScriptManager: FeatureFlaggable {
65
61
compiledUserScripts [ autofillName] = userScript
66
62
}
67
63
64
+ // NightMode scripts
65
+ let nightModeName = " NightMode \( name) "
66
+ if let source = UserScriptManager . getScriptSource ( nightModeName) {
67
+ let wrappedSource = " (function() { const APP_ID_TOKEN = ' \( UserScriptManager . appIdToken) '; \( source) })() "
68
+ let userScript = WKUserScript (
69
+ source: wrappedSource,
70
+ injectionTime: injectionTime,
71
+ forMainFrameOnly: mainFrameOnly,
72
+ in: . world( name: NightModeHelper . name ( ) ) )
73
+ compiledUserScripts [ nightModeName] = userScript
74
+ }
75
+
68
76
let webcompatName = " Webcompat \( name) "
69
- if let webCompatPath = Bundle . main. path (
70
- forResource: webcompatName,
71
- ofType: " js "
72
- ) ,
73
- let source = try ? NSString (
74
- contentsOfFile: webCompatPath,
75
- encoding: String . Encoding. utf8. rawValue
76
- ) as String {
77
+ if let source = UserScriptManager . getScriptSource ( webcompatName) {
77
78
let wrappedSource = " (function() { const APP_ID_TOKEN = ' \( UserScriptManager . appIdToken) '; \( source) })() "
78
79
let userScript = WKUserScript . createInPageContentWorld (
79
80
source: wrappedSource,
@@ -87,6 +88,13 @@ class UserScriptManager: FeatureFlaggable {
87
88
self . compiledUserScripts = compiledUserScripts
88
89
}
89
90
91
+ private static func getScriptSource( _ scriptName: String ) -> String ? {
92
+ guard let path = Bundle . main. path ( forResource: scriptName, ofType: " js " ) else {
93
+ return nil
94
+ }
95
+ return try ? NSString ( contentsOfFile: path, encoding: String . Encoding. utf8. rawValue) as String
96
+ }
97
+
90
98
public func injectUserScriptsIntoWebView( _ webView: WKWebView ? , nightMode: Bool , noImageMode: Bool ) {
91
99
// Start off by ensuring that any previously-added user scripts are
92
100
// removed to prevent the same script from being injected twice.
@@ -110,6 +118,11 @@ class UserScriptManager: FeatureFlaggable {
110
118
webView? . configuration. userContentController. addUserScript ( autofillScript)
111
119
}
112
120
121
+ let nightModeName = " NightMode \( name) "
122
+ if let nightModeScript = compiledUserScripts [ nightModeName] {
123
+ webView? . configuration. userContentController. addUserScript ( nightModeScript)
124
+ }
125
+
113
126
let webcompatName = " Webcompat \( name) "
114
127
if let webcompatUserScript = compiledUserScripts [ webcompatName] {
115
128
webView? . configuration. userContentController. addUserScript ( webcompatUserScript)
0 commit comments