1dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// Use of this source code is governed by a BSD-style license that can be 3dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// found in the LICENSE file. 4dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 5dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "chrome/browser/custom_handlers/protocol_handler.h" 6dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 7dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "base/string_util.h" 8dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "net/base/escape.h" 9dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 10dc0f95d653279beabeb9817299e2902918ba123eKristian MonsenProtocolHandler::ProtocolHandler(const std::string& protocol, 11dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen const GURL& url, 12dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen const string16& title) 13dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen : protocol_(protocol), 14dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen url_(url), 15dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen title_(title) { 16dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen} 17dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 18dc0f95d653279beabeb9817299e2902918ba123eKristian MonsenProtocolHandler* ProtocolHandler::CreateProtocolHandler( 19dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen const std::string& protocol, 20dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen const GURL& url, 21dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen const string16& title) { 22dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen std::string lower_protocol(protocol); 23dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen lower_protocol = StringToLowerASCII(protocol); 24dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen return new ProtocolHandler(lower_protocol, url, title); 25dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen} 26dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 27dc0f95d653279beabeb9817299e2902918ba123eKristian MonsenProtocolHandler* ProtocolHandler::CreateProtocolHandler( 28dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen const DictionaryValue* value) { 29dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen std::string protocol, url; 30dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen string16 title; 31dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen value->GetString("protocol", &protocol); 32dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen value->GetString("url", &url); 33dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen value->GetString("title", &title); 34dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen return ProtocolHandler::CreateProtocolHandler(protocol, GURL(url), title); 35dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen} 36dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 37dc0f95d653279beabeb9817299e2902918ba123eKristian MonsenGURL ProtocolHandler::TranslateUrl(const GURL& url) { 38dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen std::string translatedUrlSpec(url_.spec()); 39dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen ReplaceSubstringsAfterOffset(&translatedUrlSpec, 0, "%s", 40dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen EscapeQueryParamValue(url.spec(), true)); 41dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen return GURL(translatedUrlSpec); 42dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen} 43dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 44dc0f95d653279beabeb9817299e2902918ba123eKristian MonsenValue* ProtocolHandler::Encode() { 45dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen DictionaryValue* d = new DictionaryValue(); 46dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen d->Set("protocol", Value::CreateStringValue(protocol_)); 47dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen d->Set("url", Value::CreateStringValue(url_.spec())); 48dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen d->Set("title", Value::CreateStringValue(title_)); 49dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen return d; 50dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen} 51dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 52dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenbool ProtocolHandler::operator==(const ProtocolHandler &other) const { 53dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen return protocol_ == other.protocol_ && 54dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen url_ == other.url_ && 55dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen title_ == other.title_; 56dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen} 57dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 58