blob: e8a348c0bedd4f630e3d395793f5c363a288260c [file] [log] [blame]
kinuko8cbea052015-04-25 13:35:431// Copyright 2015 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "content/public/common/origin_util.h"
6
7#include "base/lazy_instance.h"
avia9aa7a82015-12-25 03:06:318#include "base/macros.h"
kinuko8cbea052015-04-25 13:35:439#include "base/stl_util.h"
jame0dcd982017-01-11 03:13:4510#include "content/common/url_schemes.h"
tfarina7ba5a622016-02-23 23:21:4411#include "net/base/url_util.h"
kinuko8cbea052015-04-25 13:35:4312#include "url/gurl.h"
13
14namespace content {
15
kinuko8cbea052015-04-25 13:35:4316bool IsOriginSecure(const GURL& url) {
17 if (url.SchemeIsCryptographic() || url.SchemeIsFile())
18 return true;
19
20 if (url.SchemeIsFileSystem() && url.inner_url() &&
21 IsOriginSecure(*url.inner_url())) {
22 return true;
23 }
24
25 std::string hostname = url.HostNoBrackets();
26 if (net::IsLocalhost(hostname))
27 return true;
28
jame0dcd982017-01-11 03:13:4529 if (base::ContainsValue(GetSecureSchemes(), url.scheme()))
kinuko8cbea052015-04-25 13:35:4330 return true;
31
jame0dcd982017-01-11 03:13:4532 if (base::ContainsValue(GetSecureOrigins(), url.GetOrigin())) {
kinuko8cbea052015-04-25 13:35:4333 return true;
annekao1db36fd2015-07-29 17:09:1634 }
kinuko8cbea052015-04-25 13:35:4335
36 return false;
37}
38
annekao1db36fd2015-07-29 17:09:1639bool OriginCanAccessServiceWorkers(const GURL& url) {
40 if (url.SchemeIsHTTPOrHTTPS() && IsOriginSecure(url))
41 return true;
42
jame0dcd982017-01-11 03:13:4543 if (base::ContainsValue(GetServiceWorkerSchemes(), url.scheme())) {
annekao1db36fd2015-07-29 17:09:1644 return true;
45 }
46
47 return false;
48}
49
50void ResetSchemesAndOriginsWhitelistForTesting() {
jame0dcd982017-01-11 03:13:4551 RefreshSecuritySchemesForTesting();
kinukoaaff1f6f2015-05-01 04:04:1352}
53
kinuko8cbea052015-04-25 13:35:4354} // namespace content