Index: extensions/renderer/script_context.cc |
diff --git a/extensions/renderer/script_context.cc b/extensions/renderer/script_context.cc |
index 197e6c0c764c6ee96c514d876b832a2dea46894d..9a60177ad76ebe841bc8da9c7331b4081b9d14e4 100644 |
--- a/extensions/renderer/script_context.cc |
+++ b/extensions/renderer/script_context.cc |
@@ -300,7 +300,7 @@ GURL ScriptContext::GetAccessCheckedFrameURL( |
} |
// static |
-GURL ScriptContext::GetEffectiveDocumentURL(const blink::WebLocalFrame* frame, |
+GURL ScriptContext::GetEffectiveDocumentURL(blink::WebLocalFrame* frame, |
const GURL& document_url, |
bool match_about_blank) { |
// Common scenario. If |match_about_blank| is false (as is the case in most |
@@ -312,7 +312,8 @@ GURL ScriptContext::GetEffectiveDocumentURL(const blink::WebLocalFrame* frame, |
// Non-sandboxed about:blank and about:srcdoc pages inherit their security |
// origin from their parent frame/window. So, traverse the frame/window |
// hierarchy to find the closest non-about:-page and return its URL. |
- const blink::WebFrame* parent = frame; |
+ blink::WebFrame* parent = frame; |
+ blink::WebDocument parent_document; |
do { |
if (parent->Parent()) |
parent = parent->Parent(); |
@@ -320,12 +321,15 @@ GURL ScriptContext::GetEffectiveDocumentURL(const blink::WebLocalFrame* frame, |
parent = parent->Opener(); |
else |
parent = nullptr; |
- } while (parent && !parent->GetDocument().IsNull() && |
- GURL(parent->GetDocument().Url()).SchemeIs(url::kAboutScheme)); |
- if (parent && !parent->GetDocument().IsNull()) { |
+ parent_document = parent && parent->IsWebLocalFrame() |
+ ? parent->ToWebLocalFrame()->GetDocument() |
+ : blink::WebDocument(); |
+ } while (!parent_document.IsNull() && |
+ GURL(parent_document.Url()).SchemeIs(url::kAboutScheme)); |
+ |
+ if (!parent_document.IsNull()) { |
// Only return the parent URL if the frame can access it. |
- const blink::WebDocument& parent_document = parent->GetDocument(); |
if (frame->GetDocument().GetSecurityOrigin().CanAccess( |
parent_document.GetSecurityOrigin())) { |
return parent_document.Url(); |