| // Copyright (c) 2012 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 NET_PROXY_PROXY_RESOLVER_SCRIPT_DATA_H_ |
| #define NET_PROXY_PROXY_RESOLVER_SCRIPT_DATA_H_ |
| |
| #include "base/memory/ref_counted.h" |
| #include "base/strings/string16.h" |
| #include "net/base/net_export.h" |
| #include "url/gurl.h" |
| |
| namespace net { |
| |
| // Reference-counted wrapper for passing around a PAC script specification. |
| // The PAC script can be either specified via a URL, a deferred URL for |
| // auto-detect, or the actual javascript program text. |
| // |
| // This is thread-safe so it can be used by multi-threaded implementations of |
| // ProxyResolver to share the data between threads. |
| class NET_EXPORT_PRIVATE ProxyResolverScriptData |
| : public base::RefCountedThreadSafe<ProxyResolverScriptData> { |
| public: |
| enum Type { |
| TYPE_SCRIPT_CONTENTS, |
| TYPE_SCRIPT_URL, |
| TYPE_AUTO_DETECT, |
| }; |
| |
| // Creates a script data given the UTF8 bytes of the content. |
| static scoped_refptr<ProxyResolverScriptData> FromUTF8( |
| const std::string& utf8); |
| |
| // Creates a script data given the UTF16 bytes of the content. |
| static scoped_refptr<ProxyResolverScriptData> FromUTF16( |
| const base::string16& utf16); |
| |
| // Creates a script data given a URL to the PAC script. |
| static scoped_refptr<ProxyResolverScriptData> FromURL(const GURL& url); |
| |
| // Creates a script data for using an automatically detected PAC URL. |
| static scoped_refptr<ProxyResolverScriptData> ForAutoDetect(); |
| |
| Type type() const { |
| return type_; |
| } |
| |
| // Returns the contents of the script as UTF16. |
| // (only valid for type() == TYPE_SCRIPT_CONTENTS). |
| const base::string16& utf16() const; |
| |
| // Returns the URL of the script. |
| // (only valid for type() == TYPE_SCRIPT_URL). |
| const GURL& url() const; |
| |
| // Returns true if |this| matches |other|. |
| bool Equals(const ProxyResolverScriptData* other) const; |
| |
| private: |
| friend class base::RefCountedThreadSafe<ProxyResolverScriptData>; |
| ProxyResolverScriptData(Type type, |
| const GURL& url, |
| const base::string16& utf16); |
| virtual ~ProxyResolverScriptData(); |
| |
| |
| const Type type_; |
| const GURL url_; |
| const base::string16 utf16_; |
| }; |
| |
| } // namespace net |
| |
| #endif // NET_PROXY_PROXY_RESOLVER_SCRIPT_DATA_H_ |