on master help sign in
Merge pull request #96 from obsidiansystems/aa-javascriptcore-4.0
f06a9c5Hamish Mackenzie
jsaddle-webkit2gtk/jsaddle-webkit2gtk.cabal+1−1
@@ -35,7 +35,7 @@ library
35 gi-gtk >=3.0.17 && <3.1,
35 gi-gtk >=3.0.17 && <3.1,
36 gi-webkit2 >=4.0.14 && <4.1,
36 gi-webkit2 >=4.0.14 && <4.1,
37 gi-javascriptcore >=4.0.14 && <4.1,
37 gi-javascriptcore >=4.0.14 && <4.1,
38− haskell-gi-base >=0.20 && <0.22,
38+ haskell-gi-base >=0.20 && <0.23,
39 haskell-gi-overloading ==0.0.*,
39 haskell-gi-overloading ==0.0.*,
40 jsaddle >=0.9.4.0 && <0.10,
40 jsaddle >=0.9.4.0 && <0.10,
41 text >=1.2.1.3 && <1.3,
41 text >=1.2.1.3 && <1.3,
jsaddle-webkit2gtk/src/Language/Javascript/JSaddle/WebKitGTK.hs+4−34
@@ -43,18 +43,13 @@ import Data.Monoid ((<>))
43import Data.ByteString.Lazy (toStrict, fromStrict)
43import Data.ByteString.Lazy (toStrict, fromStrict)
44import qualified Data.ByteString.Lazy as LB (ByteString)
44import qualified Data.ByteString.Lazy as LB (ByteString)
45import Data.Aeson (encode, decode)
45import Data.Aeson (encode, decode)
46−import Data.Text (Text)
47import qualified Data.Text as T (pack)
46import qualified Data.Text as T (pack)
48−import Data.Text.Foreign (fromPtr)
49import Data.Text.Encoding (decodeUtf8, encodeUtf8)
47import Data.Text.Encoding (decodeUtf8, encodeUtf8)
50
48
51−import Foreign.Ptr (castPtr, nullPtr)
52−
53import Data.GI.Base.BasicTypes (GObject)
49import Data.GI.Base.BasicTypes (GObject)
54import Data.GI.Base.Signals
50import Data.GI.Base.Signals
55 (connectSignalFunPtr, SignalConnectMode(..), SignalConnectMode,
51 (connectSignalFunPtr, SignalConnectMode(..), SignalConnectMode,
56 SignalHandlerId)
52 SignalHandlerId)
57−import Data.GI.Base.ManagedPtr (withManagedPtr)
58
53
59import GI.GLib (timeoutAdd, idleAdd, pattern PRIORITY_HIGH, pattern PRIORITY_DEFAULT)
54import GI.GLib (timeoutAdd, idleAdd, pattern PRIORITY_HIGH, pattern PRIORITY_DEFAULT)
60import qualified GI.Gtk as Gtk (main, init)
55import qualified GI.Gtk as Gtk (main, init)
@@ -65,7 +60,7 @@ import GI.Gtk
65 widgetGetToplevel, widgetShowAll, onWidgetDestroy,
60 widgetGetToplevel, widgetShowAll, onWidgetDestroy,
66 mainQuit)
61 mainQuit)
67import GI.Gio (noCancellable)
62import GI.Gio (noCancellable)
68−import GI.JavaScriptCore (Value(..), GlobalContext(..))
63+import GI.JavaScriptCore (valueToString)
69import GI.WebKit2
64import GI.WebKit2
70 (scriptDialogPromptSetText, scriptDialogPromptGetDefaultText,
65 (scriptDialogPromptSetText, scriptDialogPromptGetDefaultText,
71 scriptDialogGetMessage, scriptDialogGetDialogType,
66 scriptDialogGetMessage, scriptDialogGetDialogType,
@@ -74,7 +69,7 @@ import GI.WebKit2
74 setSettingsEnableJavascript, webViewNewWithUserContentManager,
69 setSettingsEnableJavascript, webViewNewWithUserContentManager,
75 userContentManagerNew,
70 userContentManagerNew,
76 userContentManagerRegisterScriptMessageHandler,
71 userContentManagerRegisterScriptMessageHandler,
77− javascriptResultGetValue, javascriptResultGetGlobalContext,
72+ javascriptResultGetJsValue,
78 webViewGetUserContentManager,
73 webViewGetUserContentManager,
79 mk_UserContentManagerScriptMessageReceivedCallback,
74 mk_UserContentManagerScriptMessageReceivedCallback,
80 wrap_UserContentManagerScriptMessageReceivedCallback,
75 wrap_UserContentManagerScriptMessageReceivedCallback,
@@ -83,13 +78,6 @@ import GI.WebKit2
83 onWebViewLoadChanged, setSettingsEnableDeveloperExtras,
78 onWebViewLoadChanged, setSettingsEnableDeveloperExtras,
84 webViewSetSettings, webViewGetSettings, ScriptDialogType(..))
79 webViewSetSettings, webViewGetSettings, ScriptDialogType(..))
85
80
86−import Graphics.UI.Gtk.WebKit.JavaScriptCore.JSBase
87− (JSValueRef, JSContextRef)
88−import Graphics.UI.Gtk.WebKit.JavaScriptCore.JSStringRef
89− (jsstringgetcharactersptr, jsstringgetlength, jsstringrelease)
90−import Graphics.UI.Gtk.WebKit.JavaScriptCore.JSValueRef
91− (jsvaluetostringcopy)
92−
93import Language.Javascript.JSaddle (JSM, Results, Batch)
81import Language.Javascript.JSaddle (JSM, Results, Batch)
94import Language.Javascript.JSaddle.Run (runJavaScript)
82import Language.Javascript.JSaddle.Run (runJavaScript)
95import Language.Javascript.JSaddle.Run.Files (initState, runBatch, ghcjsHelpers)
83import Language.Javascript.JSaddle.Run.Files (initState, runBatch, ghcjsHelpers)
@@ -109,21 +97,6 @@ postGUIAsync :: IO () -> IO ()
109postGUIAsync action =
97postGUIAsync action =
110 void . idleAdd PRIORITY_DEFAULT $ action >> return False
98 void . idleAdd PRIORITY_DEFAULT $ action >> return False
111
99
112−withJSContextRef :: GlobalContext -> (JSContextRef -> IO a) -> IO a
113−withJSContextRef (GlobalContext ctx) f = withManagedPtr ctx (f . castPtr)
114−
115−withJSValueRef :: Value -> (JSValueRef -> IO a) -> IO a
116−withJSValueRef (Value ptr) f = withManagedPtr ptr (f . castPtr)
117−
118−valueToText :: JSContextRef -> JSValueRef -> IO Text
119−valueToText ctxRef s = do
120− jsstring <- jsvaluetostringcopy ctxRef s nullPtr
121− l <- jsstringgetlength jsstring
122− p <- jsstringgetcharactersptr jsstring
123− result <- fromPtr (castPtr p) (fromIntegral l)
124− jsstringrelease jsstring
125− return result
126−
127run :: JSM () -> IO ()
100run :: JSM () -> IO ()
128run main = do
101run main = do
129 _ <- Gtk.init Nothing
102 _ <- Gtk.init Nothing
@@ -177,11 +150,8 @@ addJSaddleHandler :: WebView -> (Results -> IO ()) -> (Results -> IO Batch) -> I
177addJSaddleHandler webView processResult syncResults = do
150addJSaddleHandler webView processResult syncResults = do
178 manager <- webViewGetUserContentManager webView
151 manager <- webViewGetUserContentManager webView
179 _ <- onUserContentManagerScriptMessageReceived manager $ \result -> do
152 _ <- onUserContentManagerScriptMessageReceived manager $ \result -> do
180− ctx <- javascriptResultGetGlobalContext result
153+ arg <- javascriptResultGetJsValue result
181− arg <- javascriptResultGetValue result
154+ bs <- encodeUtf8 <$> valueToString arg
182− bs <- withJSContextRef ctx $ \ctxRef ->
183− withJSValueRef arg $ \argRef ->
184− encodeUtf8 <$> valueToText ctxRef argRef
185 mapM_ processResult (decode (fromStrict bs))
155 mapM_ processResult (decode (fromStrict bs))
186 _ <- onWebViewScriptDialog webView $ \dialog ->
156 _ <- onWebViewScriptDialog webView $ \dialog ->
187 scriptDialogGetDialogType dialog >>= \case
157 scriptDialogGetDialogType dialog >>= \case