|  | // 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. | 
|  |  | 
|  | #include "net/proxy_resolution/pac_file_data.h" | 
|  |  | 
|  | #include "base/logging.h" | 
|  | #include "base/strings/utf_string_conversions.h" | 
|  |  | 
|  | namespace net { | 
|  |  | 
|  | // static | 
|  | scoped_refptr<PacFileData> PacFileData::FromUTF8(const std::string& utf8) { | 
|  | return new PacFileData(TYPE_SCRIPT_CONTENTS, GURL(), base::UTF8ToUTF16(utf8)); | 
|  | } | 
|  |  | 
|  | // static | 
|  | scoped_refptr<PacFileData> PacFileData::FromUTF16(const base::string16& utf16) { | 
|  | return new PacFileData(TYPE_SCRIPT_CONTENTS, GURL(), utf16); | 
|  | } | 
|  |  | 
|  | // static | 
|  | scoped_refptr<PacFileData> PacFileData::FromURL(const GURL& url) { | 
|  | return new PacFileData(TYPE_SCRIPT_URL, url, base::string16()); | 
|  | } | 
|  |  | 
|  | // static | 
|  | scoped_refptr<PacFileData> PacFileData::ForAutoDetect() { | 
|  | return new PacFileData(TYPE_AUTO_DETECT, GURL(), base::string16()); | 
|  | } | 
|  |  | 
|  | const base::string16& PacFileData::utf16() const { | 
|  | DCHECK_EQ(TYPE_SCRIPT_CONTENTS, type_); | 
|  | return utf16_; | 
|  | } | 
|  |  | 
|  | const GURL& PacFileData::url() const { | 
|  | DCHECK_EQ(TYPE_SCRIPT_URL, type_); | 
|  | return url_; | 
|  | } | 
|  |  | 
|  | bool PacFileData::Equals(const PacFileData* other) const { | 
|  | if (type() != other->type()) | 
|  | return false; | 
|  |  | 
|  | switch (type()) { | 
|  | case TYPE_SCRIPT_CONTENTS: | 
|  | return utf16() == other->utf16(); | 
|  | case TYPE_SCRIPT_URL: | 
|  | return url() == other->url(); | 
|  | case TYPE_AUTO_DETECT: | 
|  | return true; | 
|  | } | 
|  |  | 
|  | return false;  // Shouldn't be reached. | 
|  | } | 
|  |  | 
|  | PacFileData::PacFileData(Type type, | 
|  | const GURL& url, | 
|  | const base::string16& utf16) | 
|  | : type_(type), url_(url), utf16_(utf16) {} | 
|  |  | 
|  | PacFileData::~PacFileData() = default; | 
|  |  | 
|  | }  // namespace net |