diff options
Diffstat (limited to 'chromium/content/common/site_isolation_policy.cc')
-rw-r--r-- | chromium/content/common/site_isolation_policy.cc | 46 |
1 files changed, 41 insertions, 5 deletions
diff --git a/chromium/content/common/site_isolation_policy.cc b/chromium/content/common/site_isolation_policy.cc index 8ee09a9c4f8..0d277b01a89 100644 --- a/chromium/content/common/site_isolation_policy.cc +++ b/chromium/content/common/site_isolation_policy.cc @@ -4,10 +4,15 @@ #include "content/common/site_isolation_policy.h" +#include <string> + #include "base/command_line.h" #include "base/feature_list.h" +#include "base/metrics/field_trial_params.h" +#include "base/strings/string_split.h" #include "content/public/common/content_features.h" #include "content/public/common/content_switches.h" +#include "url/gurl.h" namespace content { @@ -29,12 +34,43 @@ bool SiteIsolationPolicy::IsTopDocumentIsolationEnabled() { // static bool SiteIsolationPolicy::AreIsolatedOriginsEnabled() { - // TODO(alexmos): This currently assumes that isolated origins are only added - // via the command-line switch, which may not be true in the future. Remove - // this function when AreCrossProcessFramesPossible becomes true on Android - // above. return base::CommandLine::ForCurrentProcess()->HasSwitch( - switches::kIsolateOrigins); + switches::kIsolateOrigins) || + base::FeatureList::IsEnabled(features::kIsolateOrigins); +} + +// static +std::vector<url::Origin> SiteIsolationPolicy::GetIsolatedOrigins() { + std::string cmdline_arg = + base::CommandLine::ForCurrentProcess()->GetSwitchValueASCII( + switches::kIsolateOrigins); + if (!cmdline_arg.empty()) + return ParseIsolatedOrigins(cmdline_arg); + + if (base::FeatureList::IsEnabled(features::kIsolateOrigins)) { + std::string field_trial_arg = base::GetFieldTrialParamValueByFeature( + features::kIsolateOrigins, + features::kIsolateOriginsFieldTrialParamName); + return ParseIsolatedOrigins(field_trial_arg); + } + + return std::vector<url::Origin>(); +} + +// static +std::vector<url::Origin> SiteIsolationPolicy::ParseIsolatedOrigins( + base::StringPiece arg) { + std::vector<base::StringPiece> origin_strings = base::SplitStringPiece( + arg, ",", base::TRIM_WHITESPACE, base::SPLIT_WANT_NONEMPTY); + + std::vector<url::Origin> origins; + origins.reserve(origin_strings.size()); + for (const base::StringPiece& origin_string : origin_strings) { + url::Origin origin = url::Origin::Create(GURL(origin_string)); + if (!origin.unique()) + origins.push_back(origin); + } + return origins; } } // namespace content |