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#ifndef CHROME_BROWSER_CUSTOM_HANDLERS_PROTOCOL_HANDLER_H_
6dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#define CHROME_BROWSER_CUSTOM_HANDLERS_PROTOCOL_HANDLER_H_
7dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#pragma once
8dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
9dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include <string>
10dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
11dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "base/values.h"
12dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "googleurl/src/gurl.h"
13dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
14dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// A single tuple of (protocol, url, title) that indicates how URLs of the
15dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// given protocol should be rewritten to be handled.
16dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
17dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenclass ProtocolHandler {
18dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen public:
19dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  static ProtocolHandler* CreateProtocolHandler(const std::string& protocol,
20dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen                                                const GURL& url,
21dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen                                                const string16& title);
22dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  static ProtocolHandler* CreateProtocolHandler(const DictionaryValue* value);
23dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
24dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  // Interpolates the given URL into the URL template of this handler.
25dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  GURL TranslateUrl(const GURL& url);
26dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
27dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  // Encodes this protocol handler as a Value. The caller is responsible for
28dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  // deleting the returned value.
29dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  Value* Encode();
30dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
31dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  std::string protocol() const { return protocol_; }
32dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  GURL url() const { return url_;}
33dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  string16 title() const { return title_; }
34dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
35dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  bool operator==(const ProtocolHandler &other) const;
36dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
37dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen private:
38dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  ProtocolHandler(const std::string& protocol,
39dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen                  const GURL& url,
40dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen                  const string16& title);
41dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  const std::string protocol_;
42dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  const GURL url_;
43dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  const string16 title_;
44dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen};
45dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
46dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#endif  // CHROME_BROWSER_CUSTOM_HANDLERS_PROTOCOL_HANDLER_H_
47dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
48