Make URL bar FR when creating new tab, make errors local to tabs only

This commit is contained in:
James Magahern
2021-05-06 16:42:04 -07:00
parent dd11f1c61a
commit 22652ee05f
5 changed files with 20 additions and 11 deletions

View File

@@ -68,6 +68,7 @@ class BrowserView: UIView
convenience init() { convenience init() {
self.init(frame: .zero) self.init(frame: .zero)
backgroundColor = .systemBackground
addSubview(titlebarView) addSubview(titlebarView)

View File

@@ -10,7 +10,7 @@ import WebKit
extension BrowserViewController: WKNavigationDelegate, WKUIDelegate extension BrowserViewController: WKNavigationDelegate, WKUIDelegate
{ {
func webView(_ webView: WKWebView, didStartProvisionalNavigation navigation: WKNavigation!) { func webView(_ webView: WKWebView, didStartProvisionalNavigation navigation: WKNavigation!) {
loadError = nil tab.loadError = nil
// Check to make sure we have connected to the web content process // Check to make sure we have connected to the web content process
if !tab.bridge.webContentProcessConnected { if !tab.bridge.webContentProcessConnected {
@@ -99,11 +99,15 @@ extension BrowserViewController: WKNavigationDelegate, WKUIDelegate
} }
func webView(_ webView: WKWebView, didFail navigation: WKNavigation!, withError error: Error) { func webView(_ webView: WKWebView, didFail navigation: WKNavigation!, withError error: Error) {
self.loadError = error if webView == tab.webView {
tab.loadError = error
}
} }
func webView(_ webView: WKWebView, didFailProvisionalNavigation navigation: WKNavigation!, withError error: Error) { func webView(_ webView: WKWebView, didFailProvisionalNavigation navigation: WKNavigation!, withError error: Error) {
self.loadError = error if webView == tab.webView {
tab.loadError = error
}
} }
// MARK: WKUIDelegate // MARK: WKUIDelegate

View File

@@ -35,8 +35,6 @@ class BrowserViewController: UIViewController
private var activeTabObservation: AnyCancellable? private var activeTabObservation: AnyCancellable?
private var faviconObservation: AnyCancellable? private var faviconObservation: AnyCancellable?
internal var loadError: Error?
internal var commandKeyHeld: Bool = false internal var commandKeyHeld: Bool = false
internal var windowButtonHeld: Bool { internal var windowButtonHeld: Bool {
get { toolbarController.newTabButton.isTracking } get { toolbarController.newTabButton.isTracking }
@@ -142,9 +140,7 @@ class BrowserViewController: UIViewController
if gestureRecognizer.state != .began { return } if gestureRecognizer.state != .began { return }
} }
// Create new tab self.createNewTab(withURL: nil)
let newTab = tabController.createNewTab(url: nil)
self.tab = newTab
} }
if Self.longPressWindowButtonToMakeNewTab { if Self.longPressWindowButtonToMakeNewTab {
@@ -159,7 +155,7 @@ class BrowserViewController: UIViewController
// Error button // Error button
toolbarController.urlBar.errorButton.addAction(UIAction(handler: { [unowned self] _ in toolbarController.urlBar.errorButton.addAction(UIAction(handler: { [unowned self] _ in
let alert = UIAlertController(title: "Error", message: self.loadError?.localizedDescription, preferredStyle: .actionSheet) let alert = UIAlertController(title: "Error", message: self.tab.loadError?.localizedDescription, preferredStyle: .actionSheet)
alert.popoverPresentationController?.sourceView = self.toolbarController.urlBar.errorButton alert.popoverPresentationController?.sourceView = self.toolbarController.urlBar.errorButton
alert.addAction(UIAlertAction(title: "Reload", style: .destructive, handler: { _ in alert.addAction(UIAlertAction(title: "Reload", style: .destructive, handler: { _ in
@@ -354,7 +350,7 @@ class BrowserViewController: UIViewController
} }
internal func updateLoadProgress(forWebView webView: WKWebView) { internal func updateLoadProgress(forWebView webView: WKWebView) {
if let loadError = loadError { if let loadError = tab.loadError {
toolbarController.urlBar.loadProgress = .error(error: loadError) toolbarController.urlBar.loadProgress = .error(error: loadError)
} else if webView.estimatedProgress == 1.0 { } else if webView.estimatedProgress == 1.0 {
toolbarController.urlBar.loadProgress = .complete toolbarController.urlBar.loadProgress = .complete
@@ -437,6 +433,9 @@ class BrowserViewController: UIViewController
// Enforce dark mode setting // Enforce dark mode setting
tab.bridge.darkModeEnabled = toolbarController.darkModeEnabled tab.bridge.darkModeEnabled = toolbarController.darkModeEnabled
// Blur url bar, if applicable
toolbarController.urlBar.textField.resignFirstResponder()
} }
override func viewWillAppear(_ animated: Bool) { override func viewWillAppear(_ animated: Bool) {
@@ -472,6 +471,10 @@ class BrowserViewController: UIViewController
public func createNewTab(withURL url: URL?) { public func createNewTab(withURL url: URL?) {
let newTab = tabController.createNewTab(url: url) let newTab = tabController.createNewTab(url: url)
self.tab = newTab self.tab = newTab
if url == nil {
self.toolbarController.urlBar.textField.becomeFirstResponder()
}
} }
} }

View File

@@ -62,6 +62,8 @@ class Tab: NSObject, SBRProcessBundleBridgeDelegate
public var identifier = UUID() public var identifier = UUID()
@Published public var favicon: UIImage? @Published public var favicon: UIImage?
public var loadError: Error?
private var faviconHost: String? private var faviconHost: String?
private var faviconRequest: AnyCancellable? private var faviconRequest: AnyCancellable?

View File

@@ -71,7 +71,6 @@ class URLBar: ReliefButton
textField.autocorrectionType = .no textField.autocorrectionType = .no
textField.autocapitalizationType = .none textField.autocapitalizationType = .none
textField.font = .systemFont(ofSize: 14.0) textField.font = .systemFont(ofSize: 14.0)
textField.clearingBehavior = .clearOnInsertionAndShowSelectionTint
textField.clearButtonMode = .whileEditing textField.clearButtonMode = .whileEditing
textField.addAction(UIAction(handler: { [unowned self] _ in textField.addAction(UIAction(handler: { [unowned self] _ in
// Mask view visibility is affected by editing state. // Mask view visibility is affected by editing state.