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

Side by Side Diff: Source/core/html/HTMLLinkElement.cpp

Issue 1032033002: Fire error events for a variety of script and style failures. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Fixed test failures Created 5 years, 9 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
« no previous file with comments | « Source/core/html/HTMLLinkElement.h ('k') | Source/core/html/HTMLStyleElement.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org)
3 * (C) 1999 Antti Koivisto (koivisto@kde.org) 3 * (C) 1999 Antti Koivisto (koivisto@kde.org)
4 * (C) 2001 Dirk Mueller (mueller@kde.org) 4 * (C) 2001 Dirk Mueller (mueller@kde.org)
5 * Copyright (C) 2003, 2006, 2007, 2008, 2009, 2010 Apple Inc. All rights reserv ed. 5 * Copyright (C) 2003, 2006, 2007, 2008, 2009, 2010 Apple Inc. All rights reserv ed.
6 * Copyright (C) 2009 Rob Buis (rwlbuis@gmail.com) 6 * Copyright (C) 2009 Rob Buis (rwlbuis@gmail.com)
7 * Copyright (C) 2011 Google Inc. All rights reserved. 7 * Copyright (C) 2011 Google Inc. All rights reserved.
8 * 8 *
9 * This library is free software; you can redistribute it and/or 9 * This library is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU Library General Public 10 * modify it under the terms of the GNU Library General Public
(...skipping 347 matching lines...) Expand 10 before | Expand all | Expand 10 after
358 { 358 {
359 dispatchEvent(Event::create(EventTypeNames::webkitprerenderdomcontentloaded) ); 359 dispatchEvent(Event::create(EventTypeNames::webkitprerenderdomcontentloaded) );
360 } 360 }
361 361
362 bool HTMLLinkElement::sheetLoaded() 362 bool HTMLLinkElement::sheetLoaded()
363 { 363 {
364 ASSERT(linkStyle()); 364 ASSERT(linkStyle());
365 return linkStyle()->sheetLoaded(); 365 return linkStyle()->sheetLoaded();
366 } 366 }
367 367
368 void HTMLLinkElement::notifyLoadedSheetAndAllCriticalSubresources(bool errorOccu rred) 368 void HTMLLinkElement::notifyLoadedSheetAndAllCriticalSubresources(LoadedSheetErr orStatus errorStatus)
369 { 369 {
370 ASSERT(linkStyle()); 370 ASSERT(linkStyle());
371 linkStyle()->notifyLoadedSheetAndAllCriticalSubresources(errorOccurred); 371 linkStyle()->notifyLoadedSheetAndAllCriticalSubresources(errorStatus);
372 } 372 }
373 373
374 void HTMLLinkElement::dispatchPendingLoadEvents() 374 void HTMLLinkElement::dispatchPendingLoadEvents()
375 { 375 {
376 linkLoadEventSender().dispatchPendingEvents(); 376 linkLoadEventSender().dispatchPendingEvents();
377 } 377 }
378 378
379 void HTMLLinkElement::dispatchPendingEvent(LinkEventSender* eventSender) 379 void HTMLLinkElement::dispatchPendingEvent(LinkEventSender* eventSender)
380 { 380 {
381 ASSERT_UNUSED(eventSender, eventSender == &linkLoadEventSender()); 381 ASSERT_UNUSED(eventSender, eventSender == &linkLoadEventSender());
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after
509 void LinkStyle::setCSSStyleSheet(const String& href, const KURL& baseURL, const String& charset, const CSSStyleSheetResource* cachedStyleSheet) 509 void LinkStyle::setCSSStyleSheet(const String& href, const KURL& baseURL, const String& charset, const CSSStyleSheetResource* cachedStyleSheet)
510 { 510 {
511 if (!m_owner->inDocument()) { 511 if (!m_owner->inDocument()) {
512 ASSERT(!m_sheet); 512 ASSERT(!m_sheet);
513 return; 513 return;
514 } 514 }
515 515
516 if (!cachedStyleSheet->errorOccurred() && !SubresourceIntegrity::CheckSubres ourceIntegrity(*m_owner, cachedStyleSheet->sheetText(), KURL(baseURL, href), cac hedStyleSheet->mimeType(), *cachedStyleSheet)) { 516 if (!cachedStyleSheet->errorOccurred() && !SubresourceIntegrity::CheckSubres ourceIntegrity(*m_owner, cachedStyleSheet->sheetText(), KURL(baseURL, href), cac hedStyleSheet->mimeType(), *cachedStyleSheet)) {
517 m_loading = false; 517 m_loading = false;
518 removePendingSheet(); 518 removePendingSheet();
519 notifyLoadedSheetAndAllCriticalSubresources(true); 519 notifyLoadedSheetAndAllCriticalSubresources(Node::ErrorOccurredLoadingSu bresource);
520 return; 520 return;
521 } 521 }
522 522
523 // Completing the sheet load may cause scripts to execute. 523 // Completing the sheet load may cause scripts to execute.
524 RefPtrWillBeRawPtr<Node> protector(m_owner.get()); 524 RefPtrWillBeRawPtr<Node> protector(m_owner.get());
525 525
526 CSSParserContext parserContext(m_owner->document(), 0, baseURL, charset); 526 CSSParserContext parserContext(m_owner->document(), 0, baseURL, charset);
527 527
528 if (RefPtrWillBeRawPtr<StyleSheetContents> restoredSheet = const_cast<CSSSty leSheetResource*>(cachedStyleSheet)->restoreParsedStyleSheet(parserContext)) { 528 if (RefPtrWillBeRawPtr<StyleSheetContents> restoredSheet = const_cast<CSSSty leSheetResource*>(cachedStyleSheet)->restoreParsedStyleSheet(parserContext)) {
529 ASSERT(restoredSheet->isCacheable()); 529 ASSERT(restoredSheet->isCacheable());
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
563 563
564 bool LinkStyle::sheetLoaded() 564 bool LinkStyle::sheetLoaded()
565 { 565 {
566 if (!styleSheetIsLoading()) { 566 if (!styleSheetIsLoading()) {
567 removePendingSheet(); 567 removePendingSheet();
568 return true; 568 return true;
569 } 569 }
570 return false; 570 return false;
571 } 571 }
572 572
573 void LinkStyle::notifyLoadedSheetAndAllCriticalSubresources(bool errorOccurred) 573 void LinkStyle::notifyLoadedSheetAndAllCriticalSubresources(Node::LoadedSheetErr orStatus errorStatus)
574 { 574 {
575 if (m_firedLoad) 575 if (m_firedLoad)
576 return; 576 return;
577 m_loadedSheet = !errorOccurred; 577 m_loadedSheet = (errorStatus == Node::NoErrorLoadingSubresource);
578 if (m_owner) 578 if (m_owner)
579 m_owner->scheduleEvent(); 579 m_owner->scheduleEvent();
580 m_firedLoad = true; 580 m_firedLoad = true;
581 } 581 }
582 582
583 void LinkStyle::startLoadingDynamicSheet() 583 void LinkStyle::startLoadingDynamicSheet()
584 { 584 {
585 ASSERT(m_pendingSheetType < Blocking); 585 ASSERT(m_pendingSheetType < Blocking);
586 addPendingSheet(Blocking); 586 addPendingSheet(Blocking);
587 } 587 }
(...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after
736 // Load stylesheets that are not needed for the rendering immediately wi th low priority. 736 // Load stylesheets that are not needed for the rendering immediately wi th low priority.
737 FetchRequest request = builder.build(blocking); 737 FetchRequest request = builder.build(blocking);
738 AtomicString crossOriginMode = m_owner->fastGetAttribute(HTMLNames::cros soriginAttr); 738 AtomicString crossOriginMode = m_owner->fastGetAttribute(HTMLNames::cros soriginAttr);
739 if (!crossOriginMode.isNull()) { 739 if (!crossOriginMode.isNull()) {
740 request.setCrossOriginAccessControl(document().securityOrigin(), cro ssOriginMode); 740 request.setCrossOriginAccessControl(document().securityOrigin(), cro ssOriginMode);
741 setFetchFollowingCORS(); 741 setFetchFollowingCORS();
742 } 742 }
743 setResource(document().fetcher()->fetchCSSStyleSheet(request)); 743 setResource(document().fetcher()->fetchCSSStyleSheet(request));
744 744
745 if (!resource()) { 745 if (!resource()) {
746 // The request may have been denied if (for example) the stylesheet is local and the document is remote. 746 // The request may have been denied if (for example) the stylesheet is local and the document is remote, or if there was a Content Security Policy F ailure.
747 m_loading = false; 747 m_loading = false;
748 removePendingSheet(); 748 removePendingSheet();
749 notifyLoadedSheetAndAllCriticalSubresources(Node::ErrorOccurredLoadi ngSubresource);
749 } 750 }
750 } else if (m_sheet) { 751 } else if (m_sheet) {
751 // we no longer contain a stylesheet, e.g. perhaps rel or type was chang ed 752 // we no longer contain a stylesheet, e.g. perhaps rel or type was chang ed
752 RefPtrWillBeRawPtr<StyleSheet> removedSheet = m_sheet.get(); 753 RefPtrWillBeRawPtr<StyleSheet> removedSheet = m_sheet.get();
753 clearSheet(); 754 clearSheet();
754 document().removedStyleSheet(removedSheet.get()); 755 document().removedStyleSheet(removedSheet.get());
755 } 756 }
756 } 757 }
757 758
758 void LinkStyle::setSheetTitle(const String& title) 759 void LinkStyle::setSheetTitle(const String& title)
(...skipping 11 matching lines...) Expand all
770 removePendingSheet(); 771 removePendingSheet();
771 } 772 }
772 773
773 DEFINE_TRACE(LinkStyle) 774 DEFINE_TRACE(LinkStyle)
774 { 775 {
775 visitor->trace(m_sheet); 776 visitor->trace(m_sheet);
776 LinkResource::trace(visitor); 777 LinkResource::trace(visitor);
777 } 778 }
778 779
779 } // namespace blink 780 } // namespace blink
OLDNEW
« no previous file with comments | « Source/core/html/HTMLLinkElement.h ('k') | Source/core/html/HTMLStyleElement.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698