     
     var isUnexpectedResponseError: Bool {
         return domain == Fetcher.unexpectedResponseError.domain && code == Fetcher.unexpectedResponseError.code
+    }
+    
+    var isCancelledError: Bool {
+        return domain == NSURLErrorDomain &&
+        code == NSURLErrorCancelled
+    }
+    
+    var isInvalidParameterError: Bool {
+        return self == Fetcher.invalidParametersError
     }
 }
 

                    WMFAlertManager.sharedInstance.showErrorAlert(error, sticky: false, dismissPreviousAlerts: false)
                }
            }
        } else if error.isUnexpectedResponseError {
            
            showExternal(url: url, source: source)
            

    
    private func processFailure(error: NSError, source: ProcessSource, url: URL) {
        
        if error.isCancelledError { //error came via cancelled fetch, no need to propogate to user
            return
        }
        
