OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "net/http/url_security_manager.h" | 5 #include "net/http/url_security_manager.h" |
6 | 6 |
7 #include <urlmon.h> | 7 #include <urlmon.h> |
8 #pragma comment(lib, "urlmon.lib") | 8 #pragma comment(lib, "urlmon.lib") |
9 | 9 |
10 #include "base/strings/string_util.h" | 10 #include "base/strings/string_util.h" |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
52 const GURL& auth_origin) const { | 52 const GURL& auth_origin) const { |
53 if (!const_cast<URLSecurityManagerWin*>(this)->EnsureSystemSecurityManager()) | 53 if (!const_cast<URLSecurityManagerWin*>(this)->EnsureSystemSecurityManager()) |
54 return false; | 54 return false; |
55 | 55 |
56 std::wstring url_w = base::ASCIIToWide(auth_origin.spec()); | 56 std::wstring url_w = base::ASCIIToWide(auth_origin.spec()); |
57 DWORD policy = 0; | 57 DWORD policy = 0; |
58 HRESULT hr; | 58 HRESULT hr; |
59 hr = security_manager_->ProcessUrlAction(url_w.c_str(), | 59 hr = security_manager_->ProcessUrlAction(url_w.c_str(), |
60 URLACTION_CREDENTIALS_USE, | 60 URLACTION_CREDENTIALS_USE, |
61 reinterpret_cast<BYTE*>(&policy), | 61 reinterpret_cast<BYTE*>(&policy), |
62 sizeof(policy), NULL, 0, | 62 sizeof(policy), |
63 PUAF_NOUI, 0); | 63 NULL, |
| 64 0, |
| 65 PUAF_NOUI, |
| 66 0); |
64 if (FAILED(hr)) { | 67 if (FAILED(hr)) { |
65 LOG(ERROR) << "IInternetSecurityManager::ProcessUrlAction failed: " << hr; | 68 LOG(ERROR) << "IInternetSecurityManager::ProcessUrlAction failed: " << hr; |
66 return false; | 69 return false; |
67 } | 70 } |
68 | 71 |
69 // Four possible policies for URLACTION_CREDENTIALS_USE. See the MSDN page | 72 // Four possible policies for URLACTION_CREDENTIALS_USE. See the MSDN page |
70 // "About URL Security Zones" at | 73 // "About URL Security Zones" at |
71 // http://msdn.microsoft.com/en-us/library/ms537183(VS.85).aspx | 74 // http://msdn.microsoft.com/en-us/library/ms537183(VS.85).aspx |
72 switch (policy) { | 75 switch (policy) { |
73 case URLPOLICY_CREDENTIALS_SILENT_LOGON_OK: | 76 case URLPOLICY_CREDENTIALS_SILENT_LOGON_OK: |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
105 bool URLSecurityManagerWin::CanDelegate(const GURL& auth_origin) const { | 108 bool URLSecurityManagerWin::CanDelegate(const GURL& auth_origin) const { |
106 // TODO(cbentzel): Could this just use the security zone as well? Apparently | 109 // TODO(cbentzel): Could this just use the security zone as well? Apparently |
107 // this is what IE does as well. | 110 // this is what IE does as well. |
108 if (whitelist_delegate_.get()) | 111 if (whitelist_delegate_.get()) |
109 return whitelist_delegate_->IsValid(auth_origin, HttpAuth::AUTH_SERVER); | 112 return whitelist_delegate_->IsValid(auth_origin, HttpAuth::AUTH_SERVER); |
110 return false; | 113 return false; |
111 } | 114 } |
112 | 115 |
113 bool URLSecurityManagerWin::EnsureSystemSecurityManager() { | 116 bool URLSecurityManagerWin::EnsureSystemSecurityManager() { |
114 if (!security_manager_) { | 117 if (!security_manager_) { |
115 HRESULT hr = CoInternetCreateSecurityManager(NULL, | 118 HRESULT hr = CoInternetCreateSecurityManager( |
116 security_manager_.Receive(), | 119 NULL, security_manager_.Receive(), NULL); |
117 NULL); | |
118 if (FAILED(hr) || !security_manager_) { | 120 if (FAILED(hr) || !security_manager_) { |
119 LOG(ERROR) << "Unable to create the Windows Security Manager instance"; | 121 LOG(ERROR) << "Unable to create the Windows Security Manager instance"; |
120 return false; | 122 return false; |
121 } | 123 } |
122 } | 124 } |
123 return true; | 125 return true; |
124 } | 126 } |
125 | 127 |
126 // static | 128 // static |
127 URLSecurityManager* URLSecurityManager::Create( | 129 URLSecurityManager* URLSecurityManager::Create( |
128 const HttpAuthFilter* whitelist_default, | 130 const HttpAuthFilter* whitelist_default, |
129 const HttpAuthFilter* whitelist_delegate) { | 131 const HttpAuthFilter* whitelist_delegate) { |
130 // If we have a whitelist, just use that. | 132 // If we have a whitelist, just use that. |
131 if (whitelist_default) | 133 if (whitelist_default) |
132 return new URLSecurityManagerWhitelist(whitelist_default, | 134 return new URLSecurityManagerWhitelist(whitelist_default, |
133 whitelist_delegate); | 135 whitelist_delegate); |
134 return new URLSecurityManagerWin(whitelist_delegate); | 136 return new URLSecurityManagerWin(whitelist_delegate); |
135 } | 137 } |
136 | 138 |
137 } // namespace net | 139 } // namespace net |
OLD | NEW |