// Copyright 2011 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef NET_URL_REQUEST_URL_REQUEST_FILTER_H_ #define NET_URL_REQUEST_URL_REQUEST_FILTER_H_ #include <map> #include <memory> #include <string> #include <unordered_map> #include "net/url_request/url_request_interceptor.h" class GURL; namespace net { class URLRequest; class URLRequestJob; class URLRequestInterceptor; // A class to help filter URLRequest jobs based on the URL of the request // rather than just the scheme. Example usage: // // // Intercept "scheme://host/" requests. // URLRequestFilter::GetInstance()->AddHostnameInterceptor( // "scheme", "host", std::move(interceptor)); // // Add special handling for the URL http://foo.com/ // URLRequestFilter::GetInstance()->AddUrlInterceptor( // GURL("http://foo.com/"), std::move(interceptor)); // // The URLRequestFilter is implemented as a singleton that is not thread-safe, // and hence must only be used in test code where the network stack is used // from a single thread. It must only be accessed on that networking thread. // One exception is that during startup, before any message loops have been // created, interceptors may be added (the session restore tests rely on this). // If the URLRequestFilter::MaybeInterceptRequest can't find a handler for a // request, it returns NULL and lets the configured ProtocolHandler handle the // request. class URLRequestFilter : public URLRequestInterceptor { … }; } // namespace net #endif // NET_URL_REQUEST_URL_REQUEST_FILTER_H_