| Index: content/common/content_security_policy/csp_source_list.cc | 
| diff --git a/content/common/content_security_policy/csp_source_list.cc b/content/common/content_security_policy/csp_source_list.cc | 
| index be6ba9c4b0697cb59cab814faddcf8bf542c7108..d48b7c77b332d7d13c3d9904aa38364148196af7 100644 | 
| --- a/content/common/content_security_policy/csp_source_list.cc | 
| +++ b/content/common/content_security_policy/csp_source_list.cc | 
| @@ -27,7 +27,10 @@ CSPSourceList::CSPSourceList() | 
| CSPSourceList::CSPSourceList(bool allow_self, | 
| bool allow_star, | 
| std::vector<CSPSource> sources) | 
| -    : allow_self(allow_self), allow_star(allow_star), sources(sources) {} | 
| +    : allow_self(allow_self), allow_star(allow_star), sources(sources) { | 
| +  // When the '*' source is used, it must be the only one. | 
| +  DCHECK(!allow_star || (!allow_self && sources.empty())); | 
| +} | 
|  | 
| CSPSourceList::CSPSourceList(const CSPSourceList&) = default; | 
| CSPSourceList::~CSPSourceList() = default; | 
| @@ -44,14 +47,18 @@ bool CSPSourceList::Allow(const CSPSourceList& source_list, | 
| // list. | 
| if (source_list.allow_star) { | 
| if (url.SchemeIsHTTPOrHTTPS() || url.SchemeIsSuborigin() || | 
| -        url.SchemeIsWSOrWSS() || url.SchemeIs("ftp") || | 
| -        context->ProtocolIsSelf(url)) | 
| +        url.SchemeIsWSOrWSS() || url.SchemeIs("ftp")) { | 
| +      return true; | 
| +    } | 
| +    if (context->self_source() && url.SchemeIs(context->self_source()->scheme)) | 
| return true; | 
| - | 
| -    return AllowFromSources(url, source_list.sources, context, is_redirect); | 
| } | 
|  | 
| -  if (source_list.allow_self && context->AllowSelf(url)) return true; | 
| +  if (source_list.allow_self && context->self_source() && | 
| +      CSPSource::Allow(context->self_source().value(), url, context, | 
| +                       is_redirect)) { | 
| +    return true; | 
| +  } | 
|  | 
| return AllowFromSources(url, source_list.sources, context, is_redirect); | 
| } | 
|  |