| Index: chrome/browser/custom_handlers/protocol_handler.cc | 
| diff --git a/chrome/browser/custom_handlers/protocol_handler.cc b/chrome/browser/custom_handlers/protocol_handler.cc | 
| new file mode 100644 | 
| index 0000000000000000000000000000000000000000..1b60be60d8da1bae017eec8a697cc1ec91439af5 | 
| --- /dev/null | 
| +++ b/chrome/browser/custom_handlers/protocol_handler.cc | 
| @@ -0,0 +1,57 @@ | 
| +// Copyright (c) 2011 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 "chrome/browser/custom_handlers/protocol_handler.h" | 
| + | 
| +#include "base/string_util.h" | 
| +#include "net/base/escape.h" | 
| + | 
| +ProtocolHandler::ProtocolHandler(const std::string& protocol, | 
| +                                 const GURL& url, | 
| +                                 const string16& title) | 
| +  : protocol_(protocol), | 
| +    url_(url), | 
| +    title_(title) { | 
| +} | 
| + | 
| +ProtocolHandler* ProtocolHandler::CreateProtocolHandler( | 
| +    const std::string& protocol, | 
| +    const GURL& url, | 
| +    const string16& title) { | 
| +  std::string lower_protocol(protocol); | 
| +  lower_protocol = StringToLowerASCII(protocol); | 
| +  return new ProtocolHandler(lower_protocol, url, title); | 
| +} | 
| + | 
| +ProtocolHandler* ProtocolHandler::CreateProtocolHandler( | 
| +    const DictionaryValue* value) { | 
| +  std::string protocol, url; | 
| +  string16 title; | 
| +  value->GetString("protocol", &protocol); | 
| +  value->GetString("url", &url); | 
| +  value->GetString("title", &title); | 
| +  return ProtocolHandler::CreateProtocolHandler(protocol, GURL(url), title); | 
| +} | 
| + | 
| +GURL ProtocolHandler::TranslateUrl(const GURL& url) { | 
| +  std::string translatedUrlSpec(url_.spec()); | 
| +  ReplaceSubstringsAfterOffset(&translatedUrlSpec, 0, "%s", | 
| +      EscapeQueryParamValue(url.spec(), true)); | 
| +  return GURL(translatedUrlSpec); | 
| +} | 
| + | 
| +Value* ProtocolHandler::Encode() { | 
| +  DictionaryValue* d = new DictionaryValue(); | 
| +  d->Set("protocol", Value::CreateStringValue(protocol_)); | 
| +  d->Set("url", Value::CreateStringValue(url_.spec())); | 
| +  d->Set("title", Value::CreateStringValue(title_)); | 
| +  return d; | 
| +} | 
| + | 
| +bool ProtocolHandler::operator==(const ProtocolHandler &other) const { | 
| +  return protocol_ == other.protocol_ && | 
| +    url_ == other.url_ && | 
| +    title_ == other.title_; | 
| +} | 
| + | 
|  |