Roll src/third_party/WebKit d9c6159:8139f33 (svn 201974:201975)
[chromium-blink-merge.git] / net / base / auth.h
blob62a59c8f9fdad03a834a37ef4027313b43492f90
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.
5 #ifndef NET_BASE_AUTH_H__
6 #define NET_BASE_AUTH_H__
8 #include <string>
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"
15 namespace net {
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();
24 // Determines whether two AuthChallengeInfo's are equivalent.
25 bool Equals(const AuthChallengeInfo& other) const;
27 // Whether this came from a server or a proxy.
28 bool is_proxy;
30 // The service issuing the challenge.
31 HostPortPair challenger;
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;
37 // The realm of the challenge. May be empty. The encoding is UTF-8.
38 std::string realm;
40 private:
41 friend class base::RefCountedThreadSafe<AuthChallengeInfo>;
42 ~AuthChallengeInfo();
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();
53 // Set the |username| and |password|.
54 void Set(const base::string16& username, const base::string16& password);
56 // Determines if |this| is equivalent to |other|.
57 bool Equals(const AuthCredentials& other) const;
59 // Returns true if all credentials are empty.
60 bool Empty() const;
62 // Overwrites the password memory to prevent it from being read if
63 // it's paged out to disk.
64 void Zap();
66 const base::string16& username() const { return username_; }
67 const base::string16& password() const { return password_; }
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_;
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_;
80 // Intentionally allowing the implicit copy constructor and assignment
81 // operators.
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
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.
97 // We wouldn't instantiate this class if we didn't need authentication.
98 AuthData();
100 private:
101 friend class base::RefCountedThreadSafe<AuthData>;
102 ~AuthData();
105 } // namespace net
107 #endif // NET_BASE_AUTH_H__