Home | History | Annotate | Download | only in custom_handlers
      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 #include "chrome/browser/custom_handlers/protocol_handler.h"
      6 
      7 #include "base/string_util.h"
      8 #include "net/base/escape.h"
      9 
     10 ProtocolHandler::ProtocolHandler(const std::string& protocol,
     11                                  const GURL& url,
     12                                  const string16& title)
     13   : protocol_(protocol),
     14     url_(url),
     15     title_(title) {
     16 }
     17 
     18 ProtocolHandler* ProtocolHandler::CreateProtocolHandler(
     19     const std::string& protocol,
     20     const GURL& url,
     21     const string16& title) {
     22   std::string lower_protocol(protocol);
     23   lower_protocol = StringToLowerASCII(protocol);
     24   return new ProtocolHandler(lower_protocol, url, title);
     25 }
     26 
     27 ProtocolHandler* ProtocolHandler::CreateProtocolHandler(
     28     const DictionaryValue* value) {
     29   std::string protocol, url;
     30   string16 title;
     31   value->GetString("protocol", &protocol);
     32   value->GetString("url", &url);
     33   value->GetString("title", &title);
     34   return ProtocolHandler::CreateProtocolHandler(protocol, GURL(url), title);
     35 }
     36 
     37 GURL ProtocolHandler::TranslateUrl(const GURL& url) {
     38   std::string translatedUrlSpec(url_.spec());
     39   ReplaceSubstringsAfterOffset(&translatedUrlSpec, 0, "%s",
     40       EscapeQueryParamValue(url.spec(), true));
     41   return GURL(translatedUrlSpec);
     42 }
     43 
     44 Value* ProtocolHandler::Encode() {
     45   DictionaryValue* d = new DictionaryValue();
     46   d->Set("protocol", Value::CreateStringValue(protocol_));
     47   d->Set("url", Value::CreateStringValue(url_.spec()));
     48   d->Set("title", Value::CreateStringValue(title_));
     49   return d;
     50 }
     51 
     52 bool ProtocolHandler::operator==(const ProtocolHandler &other) const {
     53   return protocol_ == other.protocol_ &&
     54     url_ == other.url_ &&
     55     title_ == other.title_;
     56 }
     57 
     58