Index: chrome_frame/utils.cc |
=================================================================== |
--- chrome_frame/utils.cc (revision 68895) |
+++ chrome_frame/utils.cc (working copy) |
@@ -31,6 +31,7 @@ |
#include "chrome/installer/util/chrome_frame_distribution.h" |
#include "chrome_frame/extra_system_apis.h" |
#include "chrome_frame/html_utils.h" |
+#include "chrome_frame/navigation_constraints.h" |
#include "chrome_frame/policy_settings.h" |
#include "chrome_frame/simple_resource_loader.h" |
#include "googleurl/src/gurl.h" |
@@ -1423,44 +1424,32 @@ |
profile_name_.clear(); |
} |
-bool CanNavigate(const GURL& url, IInternetSecurityManager* security_manager, |
- bool is_privileged) { |
+bool CanNavigate(const GURL& url, |
+ NavigationConstraints* navigation_constraints) { |
if (!url.is_valid()) { |
DLOG(ERROR) << "Invalid URL passed to InitiateNavigation: " << url; |
return false; |
} |
+ if (!navigation_constraints) { |
+ NOTREACHED() << "Invalid NavigationConstraints passed in"; |
+ return false; |
+ } |
+ |
// No sanity checks if unsafe URLs are allowed |
- if (GetConfigBool(false, kAllowUnsafeURLs)) |
+ if (navigation_constraints->AllowUnsafeUrls()) |
return true; |
- if (!IsValidUrlScheme(url, is_privileged)) { |
+ if (!navigation_constraints->IsSchemeAllowed(url)) { |
DLOG(WARNING) << __FUNCTION__ << " Disallowing navigation to url: " << url; |
return false; |
} |
- // Allow only about:blank or about:version |
- if (url.SchemeIs(chrome::kAboutScheme)) { |
- if (!LowerCaseEqualsASCII(url.spec(), chrome::kAboutBlankURL) && |
- !LowerCaseEqualsASCII(url.spec(), chrome::kAboutVersionURL)) { |
- DLOG(WARNING) << __FUNCTION__ |
- << " Disallowing navigation to about url: " << url; |
- return false; |
- } |
+ if (!navigation_constraints->IsZoneAllowed(url)) { |
+ DLOG(WARNING) << __FUNCTION__ |
+ << " Disallowing navigation to restricted url: " << url; |
+ return false; |
} |
- |
- // Prevent navigations to URLs in untrusted zone, even in Firefox. |
- if (security_manager) { |
- 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; |
} |