Skip to content
This repository has been archived by the owner on Feb 16, 2024. It is now read-only.

Commit

Permalink
Added intercept string protocol
Browse files Browse the repository at this point in the history
  • Loading branch information
true-zero committed Apr 20, 2021
1 parent 82a7730 commit a2b9bf1
Show file tree
Hide file tree
Showing 3 changed files with 82 additions and 49 deletions.
3 changes: 3 additions & 0 deletions event.go
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,9 @@ type Event struct {
WindowID string `json:"windowId,omitempty"`
WindowOptions *WindowOptions `json:"windowOptions,omitempty"`
Proxy *WindowProxyOptions `json:"proxy,omitempty"`
Scheme string `json:"scheme,omitempty"`
MimeType string `json:"mimeType,omitempty"`
Data string `json:"data,omitempty"`
}

// EventAuthInfo represents an event auth info
Expand Down
2 changes: 1 addition & 1 deletion example/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import (
"log"

"github.com/asticode/go-astikit"
"github.com/asticode/go-astilectron"
"github.com/true-zero/go-astilectron"
)

func main() {
Expand Down
126 changes: 78 additions & 48 deletions window.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,54 +12,58 @@ import (

// Window event names
const (
EventNameWebContentsEventLogin = "web.contents.event.login"
EventNameWebContentsEventLoginCallback = "web.contents.event.login.callback"
EventNameWindowCmdBlur = "window.cmd.blur"
EventNameWindowCmdCenter = "window.cmd.center"
EventNameWindowCmdClose = "window.cmd.close"
EventNameWindowCmdCreate = "window.cmd.create"
EventNameWindowCmdDestroy = "window.cmd.destroy"
EventNameWindowCmdFocus = "window.cmd.focus"
EventNameWindowCmdHide = "window.cmd.hide"
EventNameWindowCmdLog = "window.cmd.log"
EventNameWindowCmdMaximize = "window.cmd.maximize"
eventNameWindowCmdMessage = "window.cmd.message"
eventNameWindowCmdMessageCallback = "window.cmd.message.callback"
EventNameWindowCmdMinimize = "window.cmd.minimize"
EventNameWindowCmdMove = "window.cmd.move"
EventNameWindowCmdResize = "window.cmd.resize"
EventNameWindowCmdSetBounds = "window.cmd.set.bounds"
EventNameWindowCmdRestore = "window.cmd.restore"
EventNameWindowCmdShow = "window.cmd.show"
EventNameWindowCmdUnmaximize = "window.cmd.unmaximize"
EventNameWindowCmdUpdateCustomOptions = "window.cmd.update.custom.options"
EventNameWindowCmdWebContentsCloseDevTools = "window.cmd.web.contents.close.dev.tools"
EventNameWindowCmdWebContentsOpenDevTools = "window.cmd.web.contents.open.dev.tools"
EventNameWindowCmdWebContentsExecuteJavaScript = "window.cmd.web.contents.execute.javascript"
EventNameWindowCmdWebContentsSetProxy = "window.cmd.web.contents.set.proxy"
EventNameWindowCmdLoadURL = "window.cmd.load.url"
EventNameWindowEventBlur = "window.event.blur"
EventNameWindowEventClosed = "window.event.closed"
EventNameWindowEventDidFinishLoad = "window.event.did.finish.load"
EventNameWindowEventFocus = "window.event.focus"
EventNameWindowEventHide = "window.event.hide"
EventNameWindowEventMaximize = "window.event.maximize"
eventNameWindowEventMessage = "window.event.message"
eventNameWindowEventMessageCallback = "window.event.message.callback"
EventNameWindowEventMinimize = "window.event.minimize"
EventNameWindowEventMove = "window.event.move"
EventNameWindowEventReadyToShow = "window.event.ready.to.show"
EventNameWindowEventResize = "window.event.resize"
EventNameWindowEventRestore = "window.event.restore"
EventNameWindowEventShow = "window.event.show"
EventNameWindowEventUnmaximize = "window.event.unmaximize"
EventNameWindowEventUnresponsive = "window.event.unresponsive"
EventNameWindowEventDidGetRedirectRequest = "window.event.did.get.redirect.request"
EventNameWindowEventWebContentsExecutedJavaScript = "window.event.web.contents.executed.javascript"
EventNameWindowEventWebContentsSetProxy = "window.event.web.contents.set.proxy"
EventNameWindowEventWillNavigate = "window.event.will.navigate"
EventNameWindowEventUpdatedCustomOptions = "window.event.updated.custom.options"
EventNameWindowLoadedURL = "window.event.loaded.url"
EventNameWebContentsEventLogin = "web.contents.event.login"
EventNameWebContentsEventLoginCallback = "web.contents.event.login.callback"
EventNameWebContentsEventInterceptStringProtocol = "web.contents.event.intercept.string.protocol"
EventNameWebContentsEventInterceptStringProtocolCallback = "web.contents.event.intercept.string.protocol.callback"
EventNameWindowCmdBlur = "window.cmd.blur"
EventNameWindowCmdCenter = "window.cmd.center"
EventNameWindowCmdClose = "window.cmd.close"
EventNameWindowCmdCreate = "window.cmd.create"
EventNameWindowCmdDestroy = "window.cmd.destroy"
EventNameWindowCmdFocus = "window.cmd.focus"
EventNameWindowCmdHide = "window.cmd.hide"
EventNameWindowCmdLog = "window.cmd.log"
EventNameWindowCmdMaximize = "window.cmd.maximize"
eventNameWindowCmdMessage = "window.cmd.message"
eventNameWindowCmdMessageCallback = "window.cmd.message.callback"
EventNameWindowCmdMinimize = "window.cmd.minimize"
EventNameWindowCmdMove = "window.cmd.move"
EventNameWindowCmdResize = "window.cmd.resize"
EventNameWindowCmdSetBounds = "window.cmd.set.bounds"
EventNameWindowCmdRestore = "window.cmd.restore"
EventNameWindowCmdShow = "window.cmd.show"
EventNameWindowCmdUnmaximize = "window.cmd.unmaximize"
EventNameWindowCmdUpdateCustomOptions = "window.cmd.update.custom.options"
EventNameWindowCmdWebContentsCloseDevTools = "window.cmd.web.contents.close.dev.tools"
EventNameWindowCmdWebContentsOpenDevTools = "window.cmd.web.contents.open.dev.tools"
EventNameWindowCmdWebContentsExecuteJavaScript = "window.cmd.web.contents.execute.javascript"
EventNameWindowCmdWebContentsSetProxy = "window.cmd.web.contents.set.proxy"
EventNameWindowCmdWebContentsInterceptStringProtocol = "window.cmd.web.contents.intercept.string.protocol"
EventNameWindowCmdLoadURL = "window.cmd.load.url"
EventNameWindowEventBlur = "window.event.blur"
EventNameWindowEventClosed = "window.event.closed"
EventNameWindowEventDidFinishLoad = "window.event.did.finish.load"
EventNameWindowEventFocus = "window.event.focus"
EventNameWindowEventHide = "window.event.hide"
EventNameWindowEventMaximize = "window.event.maximize"
eventNameWindowEventMessage = "window.event.message"
eventNameWindowEventMessageCallback = "window.event.message.callback"
EventNameWindowEventMinimize = "window.event.minimize"
EventNameWindowEventMove = "window.event.move"
EventNameWindowEventReadyToShow = "window.event.ready.to.show"
EventNameWindowEventResize = "window.event.resize"
EventNameWindowEventRestore = "window.event.restore"
EventNameWindowEventShow = "window.event.show"
EventNameWindowEventUnmaximize = "window.event.unmaximize"
EventNameWindowEventUnresponsive = "window.event.unresponsive"
EventNameWindowEventDidGetRedirectRequest = "window.event.did.get.redirect.request"
EventNameWindowEventWebContentsExecutedJavaScript = "window.event.web.contents.executed.javascript"
EventNameWindowEventWebContentsSetProxy = "window.event.web.contents.set.proxy"
EventNameWindowEventWebContentsInterceptStringProtocol = "window.event.web.contents.intercept.string.protocol"
EventNameWindowEventWillNavigate = "window.event.will.navigate"
EventNameWindowEventUpdatedCustomOptions = "window.event.updated.custom.options"
EventNameWindowLoadedURL = "window.event.loaded.url"
)

// Title bar styles
Expand Down Expand Up @@ -427,6 +431,32 @@ func (w *Window) OnLogin(fn func(i Event) (username, password string, err error)
})
}

func (w *Window) OnInterceptStringProtocol(scheme string, fn func(i Event) (mimeType, data string, err error)) (err error) {
// Setup the event to handle the callback
w.On(EventNameWebContentsEventInterceptStringProtocol, func(i Event) (deleteListener bool) {
// Get mime type and data
mimeType, data, err := fn(i)

if err != nil {
w.l.Error(fmt.Errorf("getting mime type and data failed: %w", err))
return
}

// Send message back
if err = w.w.write(Event{CallbackID: i.CallbackID, Name: EventNameWebContentsEventInterceptStringProtocolCallback, TargetID: w.id, MimeType: mimeType, Data: data}); err != nil {
w.l.Error(fmt.Errorf("writing intercept string protocol callback message failed: %w", err))
return
}
return
})

if err = w.ctx.Err(); err != nil {
return
}
_, err = synchronousEvent(w.ctx, w, w.w, Event{Name: EventNameWindowCmdWebContentsInterceptStringProtocol, TargetID: w.id, Scheme: scheme}, EventNameWindowEventWebContentsInterceptStringProtocol)
return
}

// ListenerMessage represents a message listener executed when receiving a message from the JS
type ListenerMessage func(m *EventMessage) (v interface{})

Expand Down

0 comments on commit a2b9bf1

Please sign in to comment.