Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(43)

Side by Side Diff: third_party/WebKit/Source/core/html/parser/HTMLPreloadScanner.cpp

Issue 2826213003: Don't lower priority for scripts inserted by doc.write (Closed)
Patch Set: Fixed duplicate URLs in Layout test Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2008 Apple Inc. All Rights Reserved. 2 * Copyright (C) 2008 Apple Inc. All Rights Reserved.
3 * Copyright (C) 2009 Torch Mobile, Inc. http://www.torchmobile.com/ 3 * Copyright (C) 2009 Torch Mobile, Inc. http://www.torchmobile.com/
4 * Copyright (C) 2010 Google Inc. All Rights Reserved. 4 * Copyright (C) 2010 Google Inc. All Rights Reserved.
5 * 5 *
6 * Redistribution and use in source and binary forms, with or without 6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions 7 * modification, are permitted provided that the following conditions
8 * are met: 8 * are met:
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 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
129 const String& attribute_value) { 129 const String& attribute_value) {
130 MediaQuerySet* media_queries = MediaQuerySet::Create(attribute_value); 130 MediaQuerySet* media_queries = MediaQuerySet::Create(attribute_value);
131 MediaQueryEvaluator media_query_evaluator(media_values); 131 MediaQueryEvaluator media_query_evaluator(media_values);
132 return media_query_evaluator.Eval(media_queries); 132 return media_query_evaluator.Eval(media_queries);
133 } 133 }
134 134
135 class TokenPreloadScanner::StartTagScanner { 135 class TokenPreloadScanner::StartTagScanner {
136 STACK_ALLOCATED(); 136 STACK_ALLOCATED();
137 137
138 public: 138 public:
139 StartTagScanner(const StringImpl* tag_impl, MediaValuesCached* media_values) 139 StartTagScanner(const StringImpl* tag_impl,
140 MediaValuesCached* media_values,
141 TokenPreloadScanner::ScannerType scanner_type)
140 : tag_impl_(tag_impl), 142 : tag_impl_(tag_impl),
141 link_is_style_sheet_(false), 143 link_is_style_sheet_(false),
142 link_is_preconnect_(false), 144 link_is_preconnect_(false),
143 link_is_preload_(false), 145 link_is_preload_(false),
144 link_is_import_(false), 146 link_is_import_(false),
145 matched_(true), 147 matched_(true),
146 input_is_image_(false), 148 input_is_image_(false),
147 nomodule_attribute_value_(false), 149 nomodule_attribute_value_(false),
148 source_size_(0), 150 source_size_(0),
149 source_size_set_(false), 151 source_size_set_(false),
150 defer_(FetchParameters::kNoDefer), 152 defer_(FetchParameters::kNoDefer),
151 cross_origin_(kCrossOriginAttributeNotSet), 153 cross_origin_(kCrossOriginAttributeNotSet),
152 media_values_(media_values), 154 media_values_(media_values),
153 referrer_policy_set_(false), 155 referrer_policy_set_(false),
154 referrer_policy_(kReferrerPolicyDefault) { 156 referrer_policy_(kReferrerPolicyDefault),
157 scanner_type_(scanner_type) {
155 if (Match(tag_impl_, imgTag) || Match(tag_impl_, sourceTag)) { 158 if (Match(tag_impl_, imgTag) || Match(tag_impl_, sourceTag)) {
156 source_size_ = SizesAttributeParser(media_values_, String()).length(); 159 source_size_ = SizesAttributeParser(media_values_, String()).length();
157 return; 160 return;
158 } 161 }
159 if (!Match(tag_impl_, inputTag) && !Match(tag_impl_, linkTag) && 162 if (!Match(tag_impl_, inputTag) && !Match(tag_impl_, linkTag) &&
160 !Match(tag_impl_, scriptTag) && !Match(tag_impl_, videoTag)) 163 !Match(tag_impl_, scriptTag) && !Match(tag_impl_, videoTag))
161 tag_impl_ = 0; 164 tag_impl_ = 0;
162 } 165 }
163 166
164 enum URLReplacement { kAllowURLReplacement, kDisallowURLReplacement }; 167 enum URLReplacement { kAllowURLReplacement, kDisallowURLReplacement };
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
251 type.value(), referrer_policy, PreloadRequest::kDocumentIsReferrer, 254 type.value(), referrer_policy, PreloadRequest::kDocumentIsReferrer,
252 resource_width, client_hints_preferences, request_type); 255 resource_width, client_hints_preferences, request_type);
253 if (!request) 256 if (!request)
254 return nullptr; 257 return nullptr;
255 258
256 request->SetCrossOrigin(cross_origin_); 259 request->SetCrossOrigin(cross_origin_);
257 request->SetNonce(nonce_); 260 request->SetNonce(nonce_);
258 request->SetCharset(Charset()); 261 request->SetCharset(Charset());
259 request->SetDefer(defer_); 262 request->SetDefer(defer_);
260 request->SetIntegrityMetadata(integrity_metadata_); 263 request->SetIntegrityMetadata(integrity_metadata_);
264 if (scanner_type_ == ScannerType::kInsertion)
265 request->SetFromInsertionScanner(true);
261 266
262 return request; 267 return request;
263 } 268 }
264 269
265 private: 270 private:
266 template <typename NameType> 271 template <typename NameType>
267 void ProcessScriptAttribute(const NameType& attribute_name, 272 void ProcessScriptAttribute(const NameType& attribute_name,
268 const String& attribute_value) { 273 const String& attribute_value) {
269 // FIXME - Don't set crossorigin multiple times. 274 // FIXME - Don't set crossorigin multiple times.
270 if (Match(attribute_name, srcAttr)) 275 if (Match(attribute_name, srcAttr))
(...skipping 296 matching lines...) Expand 10 before | Expand all | Expand 10 after
567 bool nomodule_attribute_value_; 572 bool nomodule_attribute_value_;
568 float source_size_; 573 float source_size_;
569 bool source_size_set_; 574 bool source_size_set_;
570 FetchParameters::DeferOption defer_; 575 FetchParameters::DeferOption defer_;
571 CrossOriginAttributeValue cross_origin_; 576 CrossOriginAttributeValue cross_origin_;
572 String nonce_; 577 String nonce_;
573 Member<MediaValuesCached> media_values_; 578 Member<MediaValuesCached> media_values_;
574 bool referrer_policy_set_; 579 bool referrer_policy_set_;
575 ReferrerPolicy referrer_policy_; 580 ReferrerPolicy referrer_policy_;
576 IntegrityMetadataSet integrity_metadata_; 581 IntegrityMetadataSet integrity_metadata_;
582 TokenPreloadScanner::ScannerType scanner_type_;
577 }; 583 };
578 584
579 TokenPreloadScanner::TokenPreloadScanner( 585 TokenPreloadScanner::TokenPreloadScanner(
580 const KURL& document_url, 586 const KURL& document_url,
581 std::unique_ptr<CachedDocumentParameters> document_parameters, 587 std::unique_ptr<CachedDocumentParameters> document_parameters,
582 const MediaValuesCached::MediaValuesCachedData& media_values_cached_data) 588 const MediaValuesCached::MediaValuesCachedData& media_values_cached_data,
589 const ScannerType scanner_type)
583 : document_url_(document_url), 590 : document_url_(document_url),
584 in_style_(false), 591 in_style_(false),
585 in_picture_(false), 592 in_picture_(false),
586 in_script_(false), 593 in_script_(false),
587 template_count_(0), 594 template_count_(0),
588 document_parameters_(std::move(document_parameters)), 595 document_parameters_(std::move(document_parameters)),
589 media_values_(MediaValuesCached::Create(media_values_cached_data)), 596 media_values_(MediaValuesCached::Create(media_values_cached_data)),
597 scanner_type_(scanner_type),
590 did_rewind_(false) { 598 did_rewind_(false) {
591 DCHECK(document_parameters_.get()); 599 DCHECK(document_parameters_.get());
592 DCHECK(media_values_.Get()); 600 DCHECK(media_values_.Get());
593 DCHECK(document_url.IsValid()); 601 DCHECK(document_url.IsValid());
594 css_scanner_.SetReferrerPolicy(document_parameters_->referrer_policy); 602 css_scanner_.SetReferrerPolicy(document_parameters_->referrer_policy);
595 } 603 }
596 604
597 TokenPreloadScanner::~TokenPreloadScanner() {} 605 TokenPreloadScanner::~TokenPreloadScanner() {}
598 606
599 TokenPreloadScannerCheckpoint TokenPreloadScanner::CreateCheckpoint() { 607 TokenPreloadScannerCheckpoint TokenPreloadScanner::CreateCheckpoint() {
(...skipping 247 matching lines...) Expand 10 before | Expand all | Expand 10 after
847 HandleMetaNameAttribute(token, document_parameters_.get(), 855 HandleMetaNameAttribute(token, document_parameters_.get(),
848 media_values_.Get(), &css_scanner_, viewport); 856 media_values_.Get(), &css_scanner_, viewport);
849 } 857 }
850 858
851 if (Match(tag_impl, pictureTag)) { 859 if (Match(tag_impl, pictureTag)) {
852 in_picture_ = true; 860 in_picture_ = true;
853 picture_data_ = PictureData(); 861 picture_data_ = PictureData();
854 return; 862 return;
855 } 863 }
856 864
857 StartTagScanner scanner(tag_impl, media_values_); 865 StartTagScanner scanner(tag_impl, media_values_, scanner_type_);
858 scanner.ProcessAttributes(token.Attributes()); 866 scanner.ProcessAttributes(token.Attributes());
859 // TODO(yoav): ViewportWidth is currently racy and might be zero in some 867 // TODO(yoav): ViewportWidth is currently racy and might be zero in some
860 // cases, at least in tests. That problem will go away once 868 // cases, at least in tests. That problem will go away once
861 // ParseHTMLOnMainThread lands and MediaValuesCached is eliminated. 869 // ParseHTMLOnMainThread lands and MediaValuesCached is eliminated.
862 if (in_picture_ && media_values_->ViewportWidth()) 870 if (in_picture_ && media_values_->ViewportWidth())
863 scanner.HandlePictureSourceURL(picture_data_); 871 scanner.HandlePictureSourceURL(picture_data_);
864 std::unique_ptr<PreloadRequest> request = scanner.CreatePreloadRequest( 872 std::unique_ptr<PreloadRequest> request = scanner.CreatePreloadRequest(
865 predicted_base_element_url_, source, client_hints_preferences_, 873 predicted_base_element_url_, source, client_hints_preferences_,
866 picture_data_, document_parameters_->referrer_policy); 874 picture_data_, document_parameters_->referrer_policy);
867 if (request) 875 if (request)
(...skipping 13 matching lines...) Expand all
881 href_attribute->Value8BitIfNecessary())); 889 href_attribute->Value8BitIfNecessary()));
882 predicted_base_element_url_ = 890 predicted_base_element_url_ =
883 url.IsValid() && !url.ProtocolIsData() ? url.Copy() : KURL(); 891 url.IsValid() && !url.ProtocolIsData() ? url.Copy() : KURL();
884 } 892 }
885 } 893 }
886 894
887 HTMLPreloadScanner::HTMLPreloadScanner( 895 HTMLPreloadScanner::HTMLPreloadScanner(
888 const HTMLParserOptions& options, 896 const HTMLParserOptions& options,
889 const KURL& document_url, 897 const KURL& document_url,
890 std::unique_ptr<CachedDocumentParameters> document_parameters, 898 std::unique_ptr<CachedDocumentParameters> document_parameters,
891 const MediaValuesCached::MediaValuesCachedData& media_values_cached_data) 899 const MediaValuesCached::MediaValuesCachedData& media_values_cached_data,
900 const TokenPreloadScanner::ScannerType scanner_type)
892 : scanner_(document_url, 901 : scanner_(document_url,
893 std::move(document_parameters), 902 std::move(document_parameters),
894 media_values_cached_data), 903 media_values_cached_data,
904 scanner_type),
895 tokenizer_(HTMLTokenizer::Create(options)) {} 905 tokenizer_(HTMLTokenizer::Create(options)) {}
896 906
897 HTMLPreloadScanner::~HTMLPreloadScanner() {} 907 HTMLPreloadScanner::~HTMLPreloadScanner() {}
898 908
899 void HTMLPreloadScanner::AppendToEnd(const SegmentedString& source) { 909 void HTMLPreloadScanner::AppendToEnd(const SegmentedString& source) {
900 source_.Append(source); 910 source_.Append(source);
901 } 911 }
902 912
903 PreloadRequestStream HTMLPreloadScanner::Scan( 913 PreloadRequestStream HTMLPreloadScanner::Scan(
904 const KURL& starting_base_element_url, 914 const KURL& starting_base_element_url,
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
945 default_viewport_min_width = document->ViewportDefaultMinWidth(); 955 default_viewport_min_width = document->ViewportDefaultMinWidth();
946 viewport_meta_zero_values_quirk = 956 viewport_meta_zero_values_quirk =
947 document->GetSettings() && 957 document->GetSettings() &&
948 document->GetSettings()->GetViewportMetaZeroValuesQuirk(); 958 document->GetSettings()->GetViewportMetaZeroValuesQuirk();
949 viewport_meta_enabled = document->GetSettings() && 959 viewport_meta_enabled = document->GetSettings() &&
950 document->GetSettings()->GetViewportMetaEnabled(); 960 document->GetSettings()->GetViewportMetaEnabled();
951 referrer_policy = document->GetReferrerPolicy(); 961 referrer_policy = document->GetReferrerPolicy();
952 } 962 }
953 963
954 } // namespace blink 964 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698