         return prepareToFetch(request) != nil
     }
     
+    public override class func canonicalRequestForRequest(request: NSURLRequest) -> NSURLRequest {
+        return request
+    }
+    
+    public class func prepareToFetch(request: NSURLRequest) -> (NSURL, WebCacheSource)? {
+        // subclass should override this
+        return nil
+    }
+
     private var progress: NSProgress?
     private var hasRange = false
     

        
        if handler.hasRange {
            guard let totalLength = info.totalLength else {
               self.onReceiveAborted(handler.error("err.length.unknown"))
               return
            }
            

            return
        }
        
        handler.client?.URLProtocol(handler, didFailWithError: WebCacheError("WebCacheMonk.Cancalled", url: handler.request.URL?.absoluteString))
    }
}

