// Copyright (c) 2011 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef CHROME_BROWSER_COMPONENT_UPDATER_COMPONENT_UPDATER_INTERCEPTOR_H_ #define CHROME_BROWSER_COMPONENT_UPDATER_COMPONENT_UPDATER_INTERCEPTOR_H_ #include #include #include "base/compiler_specific.h" #include "base/file_path.h" #include "googleurl/src/gurl.h" #include "net/url_request/url_request.h" #if !defined(UNIT_TEST) #error "use this class only in unit tests" #endif // This url request interceptor lets us respond to localhost http request urls // with the contents of files on disk for use in tests. class ComponentUpdateInterceptor : public net::URLRequest::Interceptor, public base::RefCountedThreadSafe { public: ComponentUpdateInterceptor(); // When requests for |url| arrive, respond with the contents of |path|. The // hostname of |url| must be "localhost" to avoid DNS lookups, and the scheme // must be "http". void SetResponse(const std::string& url, const std::string& headers, const FilePath& path); // Returns how many requests have been issued that have a stored reply. int hit_count() const { return hit_count_; } private: // When computing matches, this ignores the query parameters of the url. virtual net::URLRequestJob* MaybeIntercept( net::URLRequest* request, net::NetworkDelegate* network_delegate) OVERRIDE; friend class base::RefCountedThreadSafe; virtual ~ComponentUpdateInterceptor(); struct Response { FilePath data_path; std::string headers; }; typedef std::map ResponseMap; ResponseMap responses_; int hit_count_; DISALLOW_COPY_AND_ASSIGN(ComponentUpdateInterceptor); }; #endif // CHROME_BROWSER_COMPONENT_UPDATER_COMPONENT_UPDATER_INTERCEPTOR_H_