Home | History | Annotate | Download | only in proxy
      1 // Copyright (c) 2011 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 // ProxyScriptFetcher is an async interface for fetching a proxy auto config
      6 // script. It is specific to fetching a PAC script; enforces timeout, max-size,
      7 // status code.
      8 
      9 #ifndef NET_PROXY_PROXY_SCRIPT_FETCHER_H_
     10 #define NET_PROXY_PROXY_SCRIPT_FETCHER_H_
     11 #pragma once
     12 
     13 #include "base/string16.h"
     14 #include "net/base/completion_callback.h"
     15 
     16 class GURL;
     17 
     18 namespace net {
     19 
     20 class URLRequestContext;
     21 
     22 // Interface for downloading a PAC script. Implementations can enforce
     23 // timeouts, maximum size constraints, content encoding, etc..
     24 class ProxyScriptFetcher {
     25  public:
     26   // Destruction should cancel any outstanding requests.
     27   virtual ~ProxyScriptFetcher() {}
     28 
     29   // Downloads the given PAC URL, and invokes |callback| on completion.
     30   // Returns OK on success, otherwise the error code. If the return code is
     31   // ERR_IO_PENDING, then the request completes asynchronously, and |callback|
     32   // will be invoked later with the final error code.
     33   // After synchronous or asynchronous completion with a result code of OK,
     34   // |*utf16_text| is filled with the response. On failure, the result text is
     35   // an empty string, and the result code is a network error. Some special
     36   // network errors that may occur are:
     37   //
     38   //    ERR_TIMED_OUT         -- the fetch took too long to complete.
     39   //    ERR_FILE_TOO_BIG      -- the response's body was too large.
     40   //    ERR_PAC_STATUS_NOT_OK -- non-200 HTTP status code.
     41   //    ERR_NOT_IMPLEMENTED   -- the response required authentication.
     42   //
     43   // If the request is cancelled (either using the "Cancel()" method or by
     44   // deleting |this|), then no callback is invoked.
     45   //
     46   // Only one fetch is allowed to be outstanding at a time.
     47   virtual int Fetch(const GURL& url, string16* utf16_text,
     48                     CompletionCallback* callback) = 0;
     49 
     50   // Aborts the in-progress fetch (if any).
     51   virtual void Cancel() = 0;
     52 
     53   // Returns the request context that this fetcher uses to issue downloads,
     54   // or NULL.
     55   virtual URLRequestContext* GetRequestContext() = 0;
     56 };
     57 
     58 }  // namespace net
     59 
     60 #endif  // NET_PROXY_PROXY_SCRIPT_FETCHER_H_
     61