@@ -44,13 +44,9 @@ struct BrowserManagementHandler {
4444 router. register ( " get-iframe-context " ) { _ in successResponse ( [ " context " : " main " ] ) }
4545
4646 // Dialogs
47- router. register ( " get-dialog " ) { _ in successResponse ( [ " showing " : false , " dialog " : NSNull ( ) ] ) }
48- router. register ( " handle-dialog " ) { body in
49- successResponse ( [ " action " : body [ " action " ] ?? " accept " , " dialogType " : " none " ] )
50- }
51- router. register ( " set-dialog-auto-handler " ) { body in
52- successResponse ( [ " enabled " : body [ " enabled " ] ?? true ] )
53- }
47+ router. register ( " get-dialog " ) { _ in await getDialog ( ) }
48+ router. register ( " handle-dialog " ) { body in await handleDialog ( body) }
49+ router. register ( " set-dialog-auto-handler " ) { body in await setDialogAutoHandler ( body) }
5450
5551 // Tabs (stub — full implementation needs TabManager)
5652 router. register ( " get-tabs " ) { _ in await getTabs ( ) }
@@ -284,6 +280,57 @@ struct BrowserManagementHandler {
284280 return successResponse ( [ " iframe " : [ " id " : id, " src " : " " ] , " context " : " iframe " ] )
285281 }
286282
283+ // MARK: - Dialogs
284+
285+ @MainActor
286+ private func getDialog( ) async -> [ String : Any ] {
287+ let state = context. dialogState
288+ guard let dialog = state. current else {
289+ return successResponse ( [ " showing " : false , " dialog " : NSNull ( ) ] )
290+ }
291+ var info : [ String : Any ] = [
292+ " type " : dialog. type. rawValue,
293+ " message " : dialog. message
294+ ]
295+ if let defaultText = dialog. defaultText {
296+ info [ " defaultValue " ] = defaultText
297+ } else {
298+ info [ " defaultValue " ] = NSNull ( )
299+ }
300+ return successResponse ( [ " showing " : true , " dialog " : info] )
301+ }
302+
303+ @MainActor
304+ private func handleDialog( _ body: [ String : Any ] ) async -> [ String : Any ] {
305+ let action = body [ " action " ] as? String ?? " accept "
306+ let text = body [ " promptText " ] as? String ?? body [ " text " ] as? String
307+ let result = context. dialogState. handle ( action: action, text: text)
308+ guard result. handled else {
309+ return errorResponse ( code: " NO_DIALOG " , message: " No dialog is currently showing " )
310+ }
311+ return successResponse ( [ " action " : action, " dialogType " : result. type. rawValue] )
312+ }
313+
314+ @MainActor
315+ private func setDialogAutoHandler( _ body: [ String : Any ] ) async -> [ String : Any ] {
316+ let state = context. dialogState
317+ let enabled = body [ " enabled " ] as? Bool ?? true
318+ let defaultAction = body [ " defaultAction " ] as? String ?? " accept "
319+
320+ if enabled {
321+ if defaultAction == " queue " {
322+ state. autoHandler = nil
323+ } else {
324+ state. autoHandler = defaultAction
325+ }
326+ } else {
327+ state. autoHandler = nil
328+ }
329+
330+ state. autoPromptText = body [ " promptText " ] as? String ?? " "
331+ return successResponse ( [ " enabled " : enabled] )
332+ }
333+
287334 // MARK: - Tabs
288335
289336 @MainActor
0 commit comments