aboutsummaryrefslogtreecommitdiffstats
path: root/embed/mozilla/ExternalProtocolHandlers.h
blob: 95073f99fe9b57308c438c248dfbd24e3a426ca0 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
/*
 *  Copyright (C) 2001 Philip Langdale
 *
 *  This program is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation; either version 2, or (at your option)
 *  any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program; if not, write to the Free Software
 *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 *
 *  $Id$
 */

/* We are registering protocol handlers for news, mailto and irc
   because mozilla load all modules on startup, so if you have these
   components installed it will try to use them as protocol handlers.
   Our implementation just forward to external protocol service.
   Ftp is a special case, it can be handled by mozilla but we
   want to use an external client when one is configured in GNOME
   handlers.
   IMPORTANT: there is no need to register handlers for other protocols
   here. Once they are configured in GNOME, they will just work.
*/

#ifndef EXTERNAL_PROTOCOL_HANDLERS
#define EXTERNAL_PROTOCOL_HANDLERS

#include "nsError.h"
#include "nsIContentHandler.h"
#include "nsIProtocolHandler.h"
#include "nsCURILoader.h"
#include "nsString.h"

class GBaseProtocolHandler : public nsIProtocolHandler
{
  public:
    NS_DECL_ISUPPORTS
    NS_DECL_NSIPROTOCOLHANDLER

    GBaseProtocolHandler (const char *aScheme);
    virtual ~GBaseProtocolHandler();
  protected:
    nsCString mScheme;
};

class GBaseProtocolContentHandler : public GBaseProtocolHandler,
                    public nsIContentHandler
{
  public:
    NS_DECL_ISUPPORTS
    NS_DECL_NSICONTENTHANDLER

    NS_IMETHODIMP NewChannel(nsIURI *aURI, nsIChannel **_retval);

    GBaseProtocolContentHandler (const char *aScheme);
    virtual ~GBaseProtocolContentHandler();
  protected:
    nsCString mMimeType;
};

#define G_IRC_PROTOCOL_CID               \
{ /* aabe33d3-7455-4d8f-87e7-43e4541ace4e */         \
    0xaabe33d3,                                      \
    0x7455,                                          \
    0x4d8f,                                          \
    {0x87, 0xe7, 0x43, 0xe4, 0x54, 0x1a, 0xce, 0x4e} \
}
#define G_IRC_PROTOCOL_CONTRACTID NS_NETWORK_PROTOCOL_CONTRACTID_PREFIX "irc"
#define G_IRC_PROTOCOL_CLASSNAME "Epiphany's irc Protocol Handler"
#define G_IRC_CONTENT_CONTRACTID NS_CONTENT_HANDLER_CONTRACTID_PREFIX \
                 "application-x-gnome-irc"
#define G_IRC_CONTENT_CLASSNAME "Epiphany's irc Content Handler"

class GIRCProtocolHandler : public GBaseProtocolContentHandler
{
  public:
    NS_DECL_ISUPPORTS

    GIRCProtocolHandler() : GBaseProtocolContentHandler("irc") {};
    virtual ~GIRCProtocolHandler() {};
};

#define G_FTP_PROTOCOL_CID                           \
{ /* 5a48bdf4-a422-4eb4-b073-0fc3bee8e670 */         \
    0x5a48bdf4,                                      \
    0xa422,                                          \
    0x4eb4,                                          \
    {0xb0, 0x73, 0x0f, 0xc3, 0xbe, 0xe8, 0xe6, 0x70} \
}
#define G_FTP_PROTOCOL_CONTRACTID NS_NETWORK_PROTOCOL_CONTRACTID_PREFIX "ftp"
#define G_FTP_PROTOCOL_CLASSNAME "Epiphany's FTP Protocol Handler"
#define G_FTP_CONTENT_CONTRACTID NS_CONTENT_HANDLER_CONTRACTID_PREFIX \
                 "application-x-gnome-ftp"
#define G_FTP_CONTENT_CLASSNAME "Epiphany's FTP Content Handler"

class GFtpProtocolHandler : public GBaseProtocolContentHandler
{
  public:
    NS_DECL_ISUPPORTS
    GFtpProtocolHandler() : GBaseProtocolContentHandler("ftp") {};
    virtual ~GFtpProtocolHandler() {};
};

#define G_MAILTO_PROTOCOL_CID                        \
{ /* aabe33d3-7455-4d8f-87e7-43e4541ace4d */         \
    0xaabe33d3,                                      \
    0x7455,                                          \
    0x4d8f,                                          \
    {0x87, 0xe7, 0x43, 0xe4, 0x54, 0x1a, 0xce, 0x4d} \
}
#define G_MAILTO_PROTOCOL_CONTRACTID NS_NETWORK_PROTOCOL_CONTRACTID_PREFIX "mailto"
#define G_MAILTO_PROTOCOL_CLASSNAME "Epiphany's mailto Protocol Handler"
#define G_MAILTO_CONTENT_CONTRACTID NS_CONTENT_HANDLER_CONTRACTID_PREFIX \
                 "application-x-gnome-mailto"
#define G_MAILTO_CONTENT_CLASSNAME "Epiphany's mailto Content Handler"

class GMailtoProtocolHandler : public GBaseProtocolContentHandler
{
  public:
    NS_DECL_ISUPPORTS
    GMailtoProtocolHandler() : GBaseProtocolContentHandler("mailto") {};
    virtual ~GMailtoProtocolHandler() {};
  private:
};

#define G_NEWS_PROTOCOL_CID                        \
{ /* 3583f8f9-abc7-4ff0-84cb-0eefcaec99f8 */         \
    0x3583f8f9,                                      \
    0xabc7,                                          \
    0x4ff0,                                          \
    {0x84, 0xcb, 0x0e, 0xef, 0xca, 0xec, 0x99, 0xf8} \
}
#define G_NEWS_PROTOCOL_CONTRACTID NS_NETWORK_PROTOCOL_CONTRACTID_PREFIX "news"
#define G_NEWS_PROTOCOL_CLASSNAME "Epiphany's news Protocol Handler"
#define G_NEWS_CONTENT_CONTRACTID NS_CONTENT_HANDLER_CONTRACTID_PREFIX \
                 "application-x-gnome-news"
#define G_NEWS_CONTENT_CLASSNAME "Epiphany's news Content Handler"

class GNewsProtocolHandler : public GBaseProtocolContentHandler
{
  public:
    NS_DECL_ISUPPORTS

    GNewsProtocolHandler() : GBaseProtocolContentHandler("news") {};
    virtual ~GNewsProtocolHandler() {};
  private:
};

#endif /* EXTERNAL_PROTOCOL_HANDLERS */