Skip to content

Commit

Permalink
Fix memory leak in WebViewController
Browse files Browse the repository at this point in the history
  • Loading branch information
ahmadAlfhajri committed Jan 3, 2025
1 parent 2bb03b3 commit 3350209
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,7 @@ class AuthenticationWebViewController: UIViewController, WKScriptMessageHandler,

webView = WKWebView(frame: view.frame, configuration: webConfiguration)
webView.navigationDelegate = self
webView.translatesAutoresizingMaskIntoConstraints = false

view.addSubview(webView)

Expand Down Expand Up @@ -134,4 +135,14 @@ class AuthenticationWebViewController: UIViewController, WKScriptMessageHandler,
Log.shared.verbose("web auth: navigation error \(error)")
authenticateCompletion(nil, XenditError(errorCode: "WEBVIEW_ERROR", message: error.localizedDescription))
}

override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
// Remove script message handler
webView.configuration.userContentController.removeAllUserScripts()
webView.configuration.userContentController.removeScriptMessageHandler(forName: "callbackHandler")
// Clear any other references
webView.navigationDelegate = nil
webView = nil
}
}
11 changes: 11 additions & 0 deletions Sources/Xendit/WebViewController/WebViewController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,7 @@ class WebViewController: UIViewController, WKScriptMessageHandler, WKNavigationD
webConfiguration.userContentController = contentController
webView = WKWebView(frame: view.frame, configuration: webConfiguration)
webView.navigationDelegate = self
webView.translatesAutoresizingMaskIntoConstraints = false

view.addSubview(webView)
NSLayoutConstraint.activate([
Expand Down Expand Up @@ -139,4 +140,14 @@ class WebViewController: UIViewController, WKScriptMessageHandler, WKNavigationD
Log.shared.verbose("web auth: navigation error \(error)")
authenticateCompletion(nil, XenditError(errorCode: "WEBVIEW_ERROR", message: error.localizedDescription))
}

override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
// Remove script message handler
webView.configuration.userContentController.removeAllUserScripts()
webView.configuration.userContentController.removeScriptMessageHandler(forName: "callbackHandler")
// Clear any other references
webView.navigationDelegate = nil
webView = nil
}
}

0 comments on commit 3350209

Please sign in to comment.