Index: content/browser/loader/resource_hints_impl.cc |
diff --git a/content/browser/loader/resource_hints_impl.cc b/content/browser/loader/resource_hints_impl.cc |
index e6f18c00346c3c0139c406a7862fe7b0ea14131c..a8b9558698ee0fb8aa70e43084d99b1865c44e5b 100644 |
--- a/content/browser/loader/resource_hints_impl.cc |
+++ b/content/browser/loader/resource_hints_impl.cc |
@@ -29,7 +29,13 @@ void OnResolveComplete(net::SingleRequestHostResolver* request, |
int result) { |
// Plumb the resolution result into the callback if future consumers want |
// that information. |
- callback.Run(result); |
+ if (!callback.is_null()) |
+ callback.Run(result); |
+} |
+ |
+bool ValidUrl(const GURL& url) { |
+ return url.is_valid() && url.has_host() && url.has_scheme() && |
+ url.SchemeIsHTTPOrHTTPS(); |
} |
} // namespace |
@@ -43,6 +49,9 @@ void PreconnectUrl(content::ResourceContext* resource_context, |
DCHECK_CURRENTLY_ON(BrowserThread::IO); |
DCHECK(resource_context); |
+ if (!ValidUrl(url)) |
+ return; |
+ |
net::URLRequestContext* context = resource_context->GetRequestContext(); |
net::HttpTransactionFactory* factory = context->http_transaction_factory(); |
net::HttpNetworkSession* session = factory->GetSession(); |
@@ -81,6 +90,9 @@ int PreresolveUrl(content::ResourceContext* resource_context, |
DCHECK_CURRENTLY_ON(BrowserThread::IO); |
DCHECK(resource_context); |
+ if (!ValidUrl(url)) |
+ return net::ERR_INVALID_URL; |
+ |
net::AddressList* addresses = new net::AddressList; |
net::SingleRequestHostResolver* resolver = |
new net::SingleRequestHostResolver(resource_context->GetHostResolver()); |