1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef CHROME_BROWSER_COMPONENT_UPDATER_COMPONENT_UPDATER_INTERCEPTOR_H_ 6 #define CHROME_BROWSER_COMPONENT_UPDATER_COMPONENT_UPDATER_INTERCEPTOR_H_ 7 8 #include <string> 9 10 #include "base/basictypes.h" 11 12 class GURL; 13 14 namespace base { 15 class FilePath; 16 } 17 18 namespace content { 19 20 // Intercepts HTTP requests and gives pre-defined responses to specified URLs. 21 // The pre-defined responses are loaded from files on disk. The interception 22 // occurs while the URLRequestPrepackagedInterceptor is alive. 23 class URLRequestPrepackagedInterceptor { 24 public: 25 // Registers an interceptor for urls using |scheme| and |hostname|. Urls 26 // passed to "SetResponse" are required to use |scheme| and |hostname|. 27 URLRequestPrepackagedInterceptor(const std::string& scheme, 28 const std::string& hostname); 29 virtual ~URLRequestPrepackagedInterceptor(); 30 31 // When requests for |url| arrive, respond with the contents of |path|. The 32 // hostname and scheme of |url| must match the corresponding parameters 33 // passed as constructor arguments. 34 void SetResponse(const GURL& url, const base::FilePath& path); 35 36 // Identical to SetResponse except that query parameters are ignored on 37 // incoming URLs when comparing against |url|. 38 void SetResponseIgnoreQuery(const GURL& url, const base::FilePath& path); 39 40 // Returns how many requests have been issued that have a stored reply. 41 int GetHitCount(); 42 43 private: 44 class Delegate; 45 46 const std::string scheme_; 47 const std::string hostname_; 48 49 // After creation, |delegate_| lives on the IO thread, and a task to delete 50 // it is posted from ~URLRequestPrepackagedInterceptor(). 51 Delegate* delegate_; 52 53 DISALLOW_COPY_AND_ASSIGN(URLRequestPrepackagedInterceptor); 54 }; 55 56 // Specialization of URLRequestPrepackagedInterceptor where scheme is "http" and 57 // hostname is "localhost". 58 class URLLocalHostRequestPrepackagedInterceptor 59 : public URLRequestPrepackagedInterceptor { 60 public: 61 URLLocalHostRequestPrepackagedInterceptor(); 62 63 private: 64 DISALLOW_COPY_AND_ASSIGN(URLLocalHostRequestPrepackagedInterceptor); 65 }; 66 67 } // namespace content 68 69 #endif // CHROME_BROWSER_COMPONENT_UPDATER_COMPONENT_UPDATER_INTERCEPTOR_H_ 70