File: ProgressDelegate.swift

package info (click to toggle)
firefox 147.0.3-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 4,683,320 kB
  • sloc: cpp: 7,607,359; javascript: 6,533,295; ansic: 3,775,223; python: 1,415,500; xml: 634,561; asm: 438,949; java: 186,241; sh: 62,752; makefile: 18,079; objc: 13,092; perl: 12,808; yacc: 4,583; cs: 3,846; pascal: 3,448; lex: 1,720; ruby: 1,003; php: 436; lisp: 258; awk: 247; sql: 66; sed: 54; csh: 10; exp: 6
file content (66 lines) | stat: -rw-r--r-- 2,812 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/.

public protocol ProgressDelegate {
    /// A View has started loading content from the network.
    func onPageStart(session: GeckoSession, url: String)

    /// A View has finished loading content from the network.
    func onPageStop(session: GeckoSession, success: Bool)

    /// Page loading has progressed.
    func onProgressChange(session: GeckoSession, progress: Int)

    /// The security status has been updated.
    // FIXME: Implement onSecurityChange & SecurityInformation
    // func onSecurityChange(session: GeckoSession, securityInfo: SecurityInformation)

    /// The browser session state has changed. This can happen in response to navigation, scrolling,
    /// or form data changes; the session state passed includes the most up to date information on
    /// all of these.
    // FIXME: Implement onSessionStateChange & SessionState
    // func onSessionStateChange(session: GeckoSession, sessionState: SessionState)
}

// All methods on ProgressDelegate are optional, provide default implementations.
extension ProgressDelegate {
    public func onPageStart(session: GeckoSession, url: String) {}
    public func onPageStop(session: GeckoSession, success: Bool) {}
    public func onProgressChange(session: GeckoSession, progress: Int) {}
    // func onSecurityChange(session: GeckoSession, securityInfo: SecurityInformation) {}
    // func onSessionStateChange(session: GeckoSession, sessionState: SessionState) {}
}

enum ProgressEvents: String, CaseIterable {
    case pageStart = "GeckoView:PageStart"
    case pageStop = "GeckoView:PageStop"
    case progressChanged = "GeckoView:ProgressChanged"
    case securityChanged = "GeckoView:SecurityChanged"
    case stateUpdated = "GeckoView:StateUpdated"
}

func newProgressHandler(_ session: GeckoSession) -> GeckoSessionHandler<
    ProgressDelegate, ProgressEvents
> {
    GeckoSessionHandler(moduleName: "GeckoViewProgress", session: session) {
        @MainActor session, delegate, event, message in
        switch event {
        case .pageStart:
            delegate?.onPageStart(session: session, url: message!["uri"] as! String)
            return nil
        case .pageStop:
            delegate?.onPageStop(session: session, success: message!["success"] as! Bool)
            return nil
        case .progressChanged:
            delegate?.onProgressChange(session: session, progress: message!["progress"] as! Int)
            return nil
        case .securityChanged:
            // TODO: Implement
            return nil
        case .stateUpdated:
            // TODO: Implement
            return nil
        }
    }
}