- add sources.
[platform/framework/web/crosswalk.git] / src / net / base / auth.h
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 #ifndef NET_BASE_AUTH_H__
6 #define NET_BASE_AUTH_H__
7
8 #include <string>
9
10 #include "base/memory/ref_counted.h"
11 #include "base/strings/string16.h"
12 #include "net/base/host_port_pair.h"
13 #include "net/base/net_export.h"
14
15 namespace net {
16
17 // Holds info about an authentication challenge that we may want to display
18 // to the user.
19 class NET_EXPORT AuthChallengeInfo :
20     public base::RefCountedThreadSafe<AuthChallengeInfo> {
21  public:
22   AuthChallengeInfo();
23
24   // Determines whether two AuthChallengeInfo's are equivalent.
25   bool Equals(const AuthChallengeInfo& other) const;
26
27   // Whether this came from a server or a proxy.
28   bool is_proxy;
29
30   // The service issuing the challenge.
31   HostPortPair challenger;
32
33   // The authentication scheme used, such as "basic" or "digest". If the
34   // |source| is FTP_SERVER, this is an empty string. The encoding is ASCII.
35   std::string scheme;
36
37   // The realm of the challenge. May be empty. The encoding is UTF-8.
38   std::string realm;
39
40  private:
41   friend class base::RefCountedThreadSafe<AuthChallengeInfo>;
42   ~AuthChallengeInfo();
43 };
44
45 // Authentication Credentials for an authentication credentials.
46 class NET_EXPORT AuthCredentials {
47  public:
48   AuthCredentials();
49   AuthCredentials(const base::string16& username,
50                   const base::string16& password);
51   ~AuthCredentials();
52
53   // Set the |username| and |password|.
54   void Set(const base::string16& username, const base::string16& password);
55
56   // Determines if |this| is equivalent to |other|.
57   bool Equals(const AuthCredentials& other) const;
58
59   // Returns true if all credentials are empty.
60   bool Empty() const;
61
62   // Overwrites the password memory to prevent it from being read if
63   // it's paged out to disk.
64   void Zap();
65
66   const base::string16& username() const { return username_; }
67   const base::string16& password() const { return password_; }
68
69  private:
70   // The username to provide, possibly empty. This should be ASCII only to
71   // minimize compatibility problems, but arbitrary UTF-16 strings are allowed
72   // and will be attempted.
73   base::string16 username_;
74
75   // The password to provide, possibly empty. This should be ASCII only to
76   // minimize compatibility problems, but arbitrary UTF-16 strings are allowed
77   // and will be attempted.
78   base::string16 password_;
79
80   // Intentionally allowing the implicit copy constructor and assignment
81   // operators.
82 };
83
84 // Authentication structures
85 enum AuthState {
86   AUTH_STATE_DONT_NEED_AUTH,
87   AUTH_STATE_NEED_AUTH,
88   AUTH_STATE_HAVE_AUTH,
89   AUTH_STATE_CANCELED
90 };
91
92 class AuthData : public base::RefCountedThreadSafe<AuthData> {
93  public:
94   AuthState state;  // whether we need, have, or gave up on authentication.
95   AuthCredentials credentials; // The credentials to use for auth.
96
97   // We wouldn't instantiate this class if we didn't need authentication.
98   AuthData();
99
100  private:
101   friend class base::RefCountedThreadSafe<AuthData>;
102   ~AuthData();
103 };
104
105 }  // namespace net
106
107 #endif  // NET_BASE_AUTH_H__