       case ios8(ActionID, UILocalNotification, () -> Void)
       case ios9(ActionID, UILocalNotification, [AnyHashable: Any], () -> Void)
     }
+    struct URLActionResponse {
+      let url: URL
+      let success: Bool
+    }
     struct BackgroundURLSessionAction {
       var identifier: String
       var completion: (Void) -> Void

      isExperiencingHealthAuthorizationRequest: false,
      isIgnoringUserEvents: false,
      isIdleTimerDisabled: false,
      openingURL: nil,
      sendingEvent: nil,
      sendingAction: nil,
      isNetworkActivityIndicatorVisible: false,

      
      UIApplication.shared.isIdleTimerDisabled = model.isIdleTimerDisabled
      
      if case .considering(let url) = model.urlAction {
        let didOpen = UIApplication.shared.openURL(url)
        var edit = model
        edit.urlAction = .allowing(
          Session.Model.URLActionResponse(url: url, success: didOpen)
        )
        output.on(.next(edit))
        // Model may change in response to output. Reevaluate before sending further output.
        if case .allowing(let x) = model.urlAction, x.url == url {
          var edit = model
          edit.urlAction = .idle
          output.on(.next(edit))
        }
      }
      
      if let new = model.sendingEvent {
