12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file.
42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#ifndef CHROME_BROWSER_RENDERER_HOST_SAFE_BROWSING_RESOURCE_THROTTLE_FACTORY_H_
62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define CHROME_BROWSER_RENDERER_HOST_SAFE_BROWSING_RESOURCE_THROTTLE_FACTORY_H_
72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/basictypes.h"
91320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "content/public/common/resource_type.h"
102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class SafeBrowsingService;
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace content {
14f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)class ResourceContext;
152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class ResourceThrottle;
162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace net {
192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class URLRequest;
202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Factory for creating a SafeBrowsingResourceThrottle. If a factory is
235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// registered, the factory's CreateResourceThrottle() is called.  Otherwise,
245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// when FULL_SAFE_BROWSING is enabled, a new SafeBrowsingResourceThrottle is
255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// returned, or NULL if MOBILE_SAFE_BROWSING is enabled.
262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class SafeBrowsingResourceThrottleFactory {
272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public:
282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Registers a factory. Does not take the ownership of the factory. The
292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // caller has to make sure the factory stays alive and properly destroyed.
305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  static void RegisterFactory(SafeBrowsingResourceThrottleFactory* factory);
312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Creates a new resource throttle for safe browsing
332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  static content::ResourceThrottle* Create(
342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      net::URLRequest* request,
35f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      content::ResourceContext* resource_context,
361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      content::ResourceType resource_type,
372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      SafeBrowsingService* service);
382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected:
402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SafeBrowsingResourceThrottleFactory() { }
412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual ~SafeBrowsingResourceThrottleFactory() { }
422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual content::ResourceThrottle* CreateResourceThrottle(
442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      net::URLRequest* request,
45f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      content::ResourceContext* resource_context,
461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      content::ResourceType resource_type,
472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      SafeBrowsingService* service) = 0;
482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private:
502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  static SafeBrowsingResourceThrottleFactory* factory_;
512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(SafeBrowsingResourceThrottleFactory);
532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif  // CHROME_BROWSER_RENDERER_HOST_SAFE_BROWSING_RESOURCE_THROTTLE_FACTORY_H_
56