| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2006, 2007, 2008 Apple Inc. All rights reserved. | 2 * Copyright (C) 2006, 2007, 2008 Apple Inc. All rights reserved. |
| 3 * Copyright (C) 2011 Google Inc. All rights reserved. | 3 * Copyright (C) 2011 Google Inc. All rights reserved. |
| 4 * | 4 * |
| 5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
| 6 * modification, are permitted provided that the following conditions | 6 * modification, are permitted provided that the following conditions |
| 7 * are met: | 7 * are met: |
| 8 * | 8 * |
| 9 * 1. Redistributions of source code must retain the above copyright | 9 * 1. Redistributions of source code must retain the above copyright |
| 10 * notice, this list of conditions and the following disclaimer. | 10 * notice, this list of conditions and the following disclaimer. |
| (...skipping 977 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 988 // Links with media values need more information (like viewport information). | 988 // Links with media values need more information (like viewport information). |
| 989 // This happens after the first chunk is parsed in HTMLDocumentParser. | 989 // This happens after the first chunk is parsed in HTMLDocumentParser. |
| 990 DispatchLinkHeaderPreloads(nullptr, LinkLoader::kOnlyLoadNonMedia); | 990 DispatchLinkHeaderPreloads(nullptr, LinkLoader::kOnlyLoadNonMedia); |
| 991 | 991 |
| 992 TRACE_EVENT1("devtools.timeline", "CommitLoad", "data", | 992 TRACE_EVENT1("devtools.timeline", "CommitLoad", "data", |
| 993 InspectorCommitLoadEvent::Data(frame_)); | 993 InspectorCommitLoadEvent::Data(frame_)); |
| 994 probe::didCommitLoad(frame_, this); | 994 probe::didCommitLoad(frame_, this); |
| 995 frame_->GetPage()->DidCommitLoad(frame_); | 995 frame_->GetPage()->DidCommitLoad(frame_); |
| 996 } | 996 } |
| 997 | 997 |
| 998 void SetFeaturePolicy(Document* document, const String& feature_policy_header) { | |
| 999 if (!RuntimeEnabledFeatures::featurePolicyEnabled()) | |
| 1000 return; | |
| 1001 LocalFrame* frame = document->GetFrame(); | |
| 1002 WebFeaturePolicy* parent_feature_policy = | |
| 1003 frame->IsMainFrame() | |
| 1004 ? nullptr | |
| 1005 : frame->Tree().Parent()->GetSecurityContext()->GetFeaturePolicy(); | |
| 1006 Vector<String> messages; | |
| 1007 const WebParsedFeaturePolicy& parsed_header = ParseFeaturePolicy( | |
| 1008 feature_policy_header, frame->GetSecurityContext()->GetSecurityOrigin(), | |
| 1009 &messages); | |
| 1010 WebParsedFeaturePolicy container_policy; | |
| 1011 if (frame->Owner()) | |
| 1012 container_policy = frame->Owner()->ContainerPolicy(); | |
| 1013 // Check that if there is a parent frame, that its feature policy is | |
| 1014 // correctly initialized. Crash if that is not the case. (Temporary crash for | |
| 1015 // isolating the cause of https://crbug.com/722333) | |
| 1016 // Note that even with this check removed, the process will stil crash in | |
| 1017 // feature_policy.cc when it attempts to dereference parent_feature_policy. | |
| 1018 // This check is to distinguish between two possible causes. | |
| 1019 if (!container_policy.empty()) | |
| 1020 CHECK(frame->IsMainFrame() || parent_feature_policy); | |
| 1021 frame->GetSecurityContext()->InitializeFeaturePolicy( | |
| 1022 parsed_header, container_policy, parent_feature_policy); | |
| 1023 | |
| 1024 for (auto& message : messages) { | |
| 1025 document->AddConsoleMessage( | |
| 1026 ConsoleMessage::Create(kOtherMessageSource, kErrorMessageLevel, | |
| 1027 "Error with Feature-Policy header: " + message)); | |
| 1028 } | |
| 1029 if (!parsed_header.empty()) | |
| 1030 frame->Client()->DidSetFeaturePolicyHeader(parsed_header); | |
| 1031 } | |
| 1032 | |
| 1033 // static | 998 // static |
| 1034 bool DocumentLoader::ShouldClearWindowName( | 999 bool DocumentLoader::ShouldClearWindowName( |
| 1035 const LocalFrame& frame, | 1000 const LocalFrame& frame, |
| 1036 SecurityOrigin* previous_security_origin, | 1001 SecurityOrigin* previous_security_origin, |
| 1037 const Document& new_document) { | 1002 const Document& new_document) { |
| 1038 if (!previous_security_origin) | 1003 if (!previous_security_origin) |
| 1039 return false; | 1004 return false; |
| 1040 if (!frame.IsMainFrame()) | 1005 if (!frame.IsMainFrame()) |
| 1041 return false; | 1006 return false; |
| 1042 if (frame.Loader().Opener()) | 1007 if (frame.Loader().Opener()) |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1089 // will use stale values from HTMLParserOption. | 1054 // will use stale values from HTMLParserOption. |
| 1090 if (reason == InstallNewDocumentReason::kNavigation) | 1055 if (reason == InstallNewDocumentReason::kNavigation) |
| 1091 DidCommitNavigation(); | 1056 DidCommitNavigation(); |
| 1092 | 1057 |
| 1093 writer_ = | 1058 writer_ = |
| 1094 DocumentWriter::Create(document, parsing_policy, mime_type, encoding); | 1059 DocumentWriter::Create(document, parsing_policy, mime_type, encoding); |
| 1095 | 1060 |
| 1096 // FeaturePolicy is reset in the browser process on commit, so this needs to | 1061 // FeaturePolicy is reset in the browser process on commit, so this needs to |
| 1097 // be initialized and replicated to the browser process after commit messages | 1062 // be initialized and replicated to the browser process after commit messages |
| 1098 // are sent in didCommitNavigation(). | 1063 // are sent in didCommitNavigation(). |
| 1099 SetFeaturePolicy(document, | 1064 document->SetFeaturePolicy( |
| 1100 response_.HttpHeaderField(HTTPNames::Feature_Policy)); | 1065 response_.HttpHeaderField(HTTPNames::Feature_Policy)); |
| 1101 | 1066 |
| 1102 GetFrameLoader().DispatchDidClearDocumentOfWindowObject(); | 1067 GetFrameLoader().DispatchDidClearDocumentOfWindowObject(); |
| 1103 } | 1068 } |
| 1104 | 1069 |
| 1105 const AtomicString& DocumentLoader::MimeType() const { | 1070 const AtomicString& DocumentLoader::MimeType() const { |
| 1106 if (writer_) | 1071 if (writer_) |
| 1107 return writer_->MimeType(); | 1072 return writer_->MimeType(); |
| 1108 return response_.MimeType(); | 1073 return response_.MimeType(); |
| 1109 } | 1074 } |
| 1110 | 1075 |
| 1111 // This is only called by | 1076 // This is only called by |
| 1112 // FrameLoader::replaceDocumentWhileExecutingJavaScriptURL() | 1077 // FrameLoader::replaceDocumentWhileExecutingJavaScriptURL() |
| 1113 void DocumentLoader::ReplaceDocumentWhileExecutingJavaScriptURL( | 1078 void DocumentLoader::ReplaceDocumentWhileExecutingJavaScriptURL( |
| 1114 const DocumentInit& init, | 1079 const DocumentInit& init, |
| 1115 const String& source) { | 1080 const String& source) { |
| 1116 InstallNewDocument(init, MimeType(), | 1081 InstallNewDocument(init, MimeType(), |
| 1117 writer_ ? writer_->Encoding() : g_empty_atom, | 1082 writer_ ? writer_->Encoding() : g_empty_atom, |
| 1118 InstallNewDocumentReason::kJavascriptURL, | 1083 InstallNewDocumentReason::kJavascriptURL, |
| 1119 kForceSynchronousParsing, KURL()); | 1084 kForceSynchronousParsing, KURL()); |
| 1120 if (!source.IsNull()) | 1085 if (!source.IsNull()) |
| 1121 writer_->AppendReplacingData(source); | 1086 writer_->AppendReplacingData(source); |
| 1122 EndWriting(); | 1087 EndWriting(); |
| 1123 } | 1088 } |
| 1124 | 1089 |
| 1125 DEFINE_WEAK_IDENTIFIER_MAP(DocumentLoader); | 1090 DEFINE_WEAK_IDENTIFIER_MAP(DocumentLoader); |
| 1126 | 1091 |
| 1127 } // namespace blink | 1092 } // namespace blink |
| OLD | NEW |