Index: chrome_frame/navigation_constraints.cc |
=================================================================== |
--- chrome_frame/navigation_constraints.cc (revision 0) |
+++ chrome_frame/navigation_constraints.cc (revision 0) |
@@ -0,0 +1,69 @@ |
+// Copyright (c) 2010 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 "chrome_frame/navigation_constraints.h" |
+ |
+#include "base/string_util.h" |
+#include "base/utf_string_conversions.h" |
+#include "chrome/common/url_constants.h" |
+#include "chrome_frame/utils.h" |
+ |
+// NavigationConstraintsImpl method definitions. |
+bool NavigationConstraintsImpl::AllowUnsafeUrls() { |
+ // No sanity checks if unsafe URLs are allowed |
+ return GetConfigBool(false, kAllowUnsafeURLs); |
+} |
+ |
+bool NavigationConstraintsImpl::IsSchemeAllowed(const GURL& url) { |
+ if (url.is_empty()) |
+ return false; |
+ |
+ if (!url.is_valid()) |
+ return false; |
+ |
+ if (url.SchemeIs(chrome::kHttpScheme) || |
+ url.SchemeIs(chrome::kHttpsScheme)) |
+ return true; |
+ |
+ // Additional checking for view-source. Allow only http and https |
+ // URLs in view source. |
+ if (url.SchemeIs(chrome::kViewSourceScheme)) { |
+ GURL sub_url(url.path()); |
+ if (sub_url.SchemeIs(chrome::kHttpScheme) || |
+ sub_url.SchemeIs(chrome::kHttpsScheme)) |
+ return true; |
+ } |
+ |
+ // Allow only about:blank or about:version |
+ if (url.SchemeIs(chrome::kAboutScheme)) { |
+ if (LowerCaseEqualsASCII(url.spec(), chrome::kAboutBlankURL) || |
+ LowerCaseEqualsASCII(url.spec(), chrome::kAboutVersionURL)) { |
+ return true; |
+ } |
+ } |
+ return false; |
+} |
+ |
+bool NavigationConstraintsImpl::IsZoneAllowed(const GURL& url) { |
+ if (!security_manager_) { |
+ HRESULT hr = security_manager_.CreateInstance( |
+ CLSID_InternetSecurityManager); |
+ if (FAILED(hr)) { |
+ NOTREACHED() << __FUNCTION__ |
+ << " Failed to create SecurityManager. Error: 0x%x" |
+ << hr; |
+ return true; |
+ } |
+ DWORD zone = URLZONE_INVALID; |
+ std::wstring unicode_url = UTF8ToWide(url.spec()); |
+ security_manager_->MapUrlToZone(unicode_url.c_str(), &zone, 0); |
+ if (zone == URLZONE_UNTRUSTED) { |
+ DLOG(WARNING) << __FUNCTION__ |
+ << " Disallowing navigation to restricted url: " << url; |
+ return false; |
+ } |
+ } |
+ return true; |
+} |
+ |
Property changes on: chrome_frame\navigation_constraints.cc |
___________________________________________________________________ |
Added: svn:eol-style |
+ LF |