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
ProtocolHandler(const std::string & protocol,const GURL & url,const string16 & title)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
CreateProtocolHandler(const std::string & protocol,const GURL & url,const string16 & title)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
CreateProtocolHandler(const DictionaryValue * value)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
TranslateUrl(const GURL & url)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
Encode()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
operator ==(const ProtocolHandler & other) const52 bool ProtocolHandler::operator==(const ProtocolHandler &other) const {
53 return protocol_ == other.protocol_ &&
54 url_ == other.url_ &&
55 title_ == other.title_;
56 }
57
58