Index: net/http/url_security_manager_win.cc |
diff --git a/net/http/url_security_manager_win.cc b/net/http/url_security_manager_win.cc |
deleted file mode 100644 |
index 557636642dcda686b21ab05a187a6b24f8ffaece..0000000000000000000000000000000000000000 |
--- a/net/http/url_security_manager_win.cc |
+++ /dev/null |
@@ -1,137 +0,0 @@ |
-// Copyright (c) 2011 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "net/http/url_security_manager.h" |
- |
-#include <urlmon.h> |
-#pragma comment(lib, "urlmon.lib") |
- |
-#include "base/strings/string_util.h" |
-#include "base/strings/utf_string_conversions.h" |
-#include "base/win/scoped_comptr.h" |
-#include "net/http/http_auth_filter.h" |
-#include "url/gurl.h" |
- |
-// The Windows implementation of URLSecurityManager uses WinINet/IE's |
-// URL security zone manager. See the MSDN page "URL Security Zones" at |
-// http://msdn.microsoft.com/en-us/library/ms537021(VS.85).aspx for more |
-// info on the Internet Security Manager and Internet Zone Manager objects. |
-// |
-// On Windows, we honor the WinINet/IE settings and group policy related to |
-// URL Security Zones. See the Microsoft Knowledge Base article 182569 |
-// "Internet Explorer security zones registry entries for advanced users" |
-// (http://support.microsoft.com/kb/182569) for more info on these registry |
-// keys. |
- |
-namespace net { |
- |
-class URLSecurityManagerWin : public URLSecurityManager { |
- public: |
- explicit URLSecurityManagerWin(const HttpAuthFilter* whitelist_delegate); |
- |
- // URLSecurityManager methods: |
- virtual bool CanUseDefaultCredentials(const GURL& auth_origin) const; |
- virtual bool CanDelegate(const GURL& auth_origin) const; |
- |
- private: |
- bool EnsureSystemSecurityManager(); |
- |
- base::win::ScopedComPtr<IInternetSecurityManager> security_manager_; |
- scoped_ptr<const HttpAuthFilter> whitelist_delegate_; |
- |
- DISALLOW_COPY_AND_ASSIGN(URLSecurityManagerWin); |
-}; |
- |
-URLSecurityManagerWin::URLSecurityManagerWin( |
- const HttpAuthFilter* whitelist_delegate) |
- : whitelist_delegate_(whitelist_delegate) { |
-} |
- |
-bool URLSecurityManagerWin::CanUseDefaultCredentials( |
- const GURL& auth_origin) const { |
- if (!const_cast<URLSecurityManagerWin*>(this)->EnsureSystemSecurityManager()) |
- return false; |
- |
- base::string16 url16 = base::ASCIIToUTF16(auth_origin.spec()); |
- DWORD policy = 0; |
- HRESULT hr; |
- hr = security_manager_->ProcessUrlAction(url16.c_str(), |
- URLACTION_CREDENTIALS_USE, |
- reinterpret_cast<BYTE*>(&policy), |
- sizeof(policy), NULL, 0, |
- PUAF_NOUI, 0); |
- if (FAILED(hr)) { |
- LOG(ERROR) << "IInternetSecurityManager::ProcessUrlAction failed: " << hr; |
- return false; |
- } |
- |
- // Four possible policies for URLACTION_CREDENTIALS_USE. See the MSDN page |
- // "About URL Security Zones" at |
- // http://msdn.microsoft.com/en-us/library/ms537183(VS.85).aspx |
- switch (policy) { |
- case URLPOLICY_CREDENTIALS_SILENT_LOGON_OK: |
- return true; |
- case URLPOLICY_CREDENTIALS_CONDITIONAL_PROMPT: { |
- // This policy means "prompt the user for permission if the resource is |
- // not located in the Intranet zone". TODO(wtc): Note that it's |
- // prompting for permission (to use the default credentials), as opposed |
- // to prompting the user to enter a user name and password. |
- |
- // URLZONE_LOCAL_MACHINE 0 |
- // URLZONE_INTRANET 1 |
- // URLZONE_TRUSTED 2 |
- // URLZONE_INTERNET 3 |
- // URLZONE_UNTRUSTED 4 |
- DWORD zone = 0; |
- hr = security_manager_->MapUrlToZone(url16.c_str(), &zone, 0); |
- if (FAILED(hr)) { |
- LOG(ERROR) << "IInternetSecurityManager::MapUrlToZone failed: " << hr; |
- return false; |
- } |
- return zone <= URLZONE_INTRANET; |
- } |
- case URLPOLICY_CREDENTIALS_MUST_PROMPT_USER: |
- return false; |
- case URLPOLICY_CREDENTIALS_ANONYMOUS_ONLY: |
- // TODO(wtc): we should fail the authentication. |
- return false; |
- default: |
- NOTREACHED(); |
- return false; |
- } |
-} |
- |
-bool URLSecurityManagerWin::CanDelegate(const GURL& auth_origin) const { |
- // TODO(cbentzel): Could this just use the security zone as well? Apparently |
- // this is what IE does as well. |
- if (whitelist_delegate_.get()) |
- return whitelist_delegate_->IsValid(auth_origin, HttpAuth::AUTH_SERVER); |
- return false; |
-} |
- |
-bool URLSecurityManagerWin::EnsureSystemSecurityManager() { |
- if (!security_manager_.get()) { |
- HRESULT hr = CoInternetCreateSecurityManager(NULL, |
- security_manager_.Receive(), |
- NULL); |
- if (FAILED(hr) || !security_manager_.get()) { |
- LOG(ERROR) << "Unable to create the Windows Security Manager instance"; |
- return false; |
- } |
- } |
- return true; |
-} |
- |
-// static |
-URLSecurityManager* URLSecurityManager::Create( |
- const HttpAuthFilter* whitelist_default, |
- const HttpAuthFilter* whitelist_delegate) { |
- // If we have a whitelist, just use that. |
- if (whitelist_default) |
- return new URLSecurityManagerWhitelist(whitelist_default, |
- whitelist_delegate); |
- return new URLSecurityManagerWin(whitelist_delegate); |
-} |
- |
-} // namespace net |