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

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

Issue 2337193004: Setting the link title may change the preferred set. (Closed)
Patch Set: Rebased Created 4 years, 3 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 | « third_party/WebKit/Source/core/html/HTMLLinkElement.h ('k') | no next file » | 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 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
112 } else if (name == scopeAttr) { 112 } else if (name == scopeAttr) {
113 m_scope = value; 113 m_scope = value;
114 process(); 114 process();
115 } else if (name == disabledAttr) { 115 } else if (name == disabledAttr) {
116 UseCounter::count(document(), UseCounter::HTMLLinkElementDisabled); 116 UseCounter::count(document(), UseCounter::HTMLLinkElementDisabled);
117 if (LinkStyle* link = linkStyle()) 117 if (LinkStyle* link = linkStyle())
118 link->setDisabledState(!value.isNull()); 118 link->setDisabledState(!value.isNull());
119 } else { 119 } else {
120 if (name == titleAttr) { 120 if (name == titleAttr) {
121 if (LinkStyle* link = linkStyle()) 121 if (LinkStyle* link = linkStyle())
122 link->setSheetTitle(value); 122 link->setSheetTitle(value, StyleEngine::UpdateActiveSheets);
123 } 123 }
124 124
125 HTMLElement::parseAttribute(name, oldValue, value); 125 HTMLElement::parseAttribute(name, oldValue, value);
126 } 126 }
127 } 127 }
128 128
129 bool HTMLLinkElement::shouldLoadLink() 129 bool HTMLLinkElement::shouldLoadLink()
130 { 130 {
131 return isInDocumentTree() || (isConnected() && m_relAttribute.isStyleSheet() ); 131 return isInDocumentTree() || (isConnected() && m_relAttribute.isStyleSheet() );
132 } 132 }
(...skipping 322 matching lines...) Expand 10 before | Expand all | Expand 10 after
455 455
456 if (StyleSheetContents* restoredSheet = const_cast<CSSStyleSheetResource*>(c achedStyleSheet)->restoreParsedStyleSheet(parserContext)) { 456 if (StyleSheetContents* restoredSheet = const_cast<CSSStyleSheetResource*>(c achedStyleSheet)->restoreParsedStyleSheet(parserContext)) {
457 DCHECK(restoredSheet->isCacheableForResource()); 457 DCHECK(restoredSheet->isCacheableForResource());
458 DCHECK(!restoredSheet->isLoading()); 458 DCHECK(!restoredSheet->isLoading());
459 459
460 if (m_sheet) 460 if (m_sheet)
461 clearSheet(); 461 clearSheet();
462 m_sheet = CSSStyleSheet::create(restoredSheet, m_owner); 462 m_sheet = CSSStyleSheet::create(restoredSheet, m_owner);
463 m_sheet->setMediaQueries(MediaQuerySet::create(m_owner->media())); 463 m_sheet->setMediaQueries(MediaQuerySet::create(m_owner->media()));
464 if (m_owner->isInDocumentTree()) 464 if (m_owner->isInDocumentTree())
465 m_sheet->setTitle(m_owner->title()); 465 setSheetTitle(m_owner->title());
466 setCrossOriginStylesheetStatus(m_sheet.get()); 466 setCrossOriginStylesheetStatus(m_sheet.get());
467 467
468 m_loading = false; 468 m_loading = false;
469 restoredSheet->checkLoaded(); 469 restoredSheet->checkLoaded();
470 470
471 restoredCachedStyleSheetHistogram.count(true); 471 restoredCachedStyleSheetHistogram.count(true);
472 restoredCachedStyleSheet2Histogram.count(StyleSheetInMemoryCache); 472 restoredCachedStyleSheet2Histogram.count(StyleSheetInMemoryCache);
473 return; 473 return;
474 } 474 }
475 restoredCachedStyleSheetHistogram.count(false); 475 restoredCachedStyleSheetHistogram.count(false);
476 StyleSheetCacheStatus cacheStatus = cachedStyleSheet->response().wasCached() ? StyleSheetInDiskCache : StyleSheetNewEntry; 476 StyleSheetCacheStatus cacheStatus = cachedStyleSheet->response().wasCached() ? StyleSheetInDiskCache : StyleSheetNewEntry;
477 restoredCachedStyleSheet2Histogram.count(cacheStatus); 477 restoredCachedStyleSheet2Histogram.count(cacheStatus);
478 478
479 StyleSheetContents* styleSheet = StyleSheetContents::create(href, parserCont ext); 479 StyleSheetContents* styleSheet = StyleSheetContents::create(href, parserCont ext);
480 480
481 if (m_sheet) 481 if (m_sheet)
482 clearSheet(); 482 clearSheet();
483 483
484 m_sheet = CSSStyleSheet::create(styleSheet, m_owner); 484 m_sheet = CSSStyleSheet::create(styleSheet, m_owner);
485 m_sheet->setMediaQueries(MediaQuerySet::create(m_owner->media())); 485 m_sheet->setMediaQueries(MediaQuerySet::create(m_owner->media()));
486 if (m_owner->isInDocumentTree()) 486 if (m_owner->isInDocumentTree())
487 m_sheet->setTitle(m_owner->title()); 487 setSheetTitle(m_owner->title());
488 setCrossOriginStylesheetStatus(m_sheet.get()); 488 setCrossOriginStylesheetStatus(m_sheet.get());
489 489
490 styleSheet->parseAuthorStyleSheet(cachedStyleSheet, m_owner->document().getS ecurityOrigin()); 490 styleSheet->parseAuthorStyleSheet(cachedStyleSheet, m_owner->document().getS ecurityOrigin());
491 491
492 m_loading = false; 492 m_loading = false;
493 styleSheet->notifyLoadedSheet(cachedStyleSheet); 493 styleSheet->notifyLoadedSheet(cachedStyleSheet);
494 styleSheet->checkLoaded(); 494 styleSheet->checkLoaded();
495 495
496 if (styleSheet->isCacheableForResource()) 496 if (styleSheet->isCacheableForResource())
497 const_cast<CSSStyleSheetResource*>(cachedStyleSheet)->saveParsedStyleShe et(styleSheet); 497 const_cast<CSSStyleSheetResource*>(cachedStyleSheet)->saveParsedStyleShe et(styleSheet);
(...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after
643 clearFetchFollowingCORS(); 643 clearFetchFollowingCORS();
644 } 644 }
645 645
646 if (!m_owner->shouldLoadLink()) 646 if (!m_owner->shouldLoadLink())
647 return; 647 return;
648 648
649 m_loading = true; 649 m_loading = true;
650 650
651 String title = m_owner->title(); 651 String title = m_owner->title();
652 if (!title.isEmpty() && !m_owner->isAlternate() && m_disabledState != En abledViaScript && m_owner->isInDocumentTree()) 652 if (!title.isEmpty() && !m_owner->isAlternate() && m_disabledState != En abledViaScript && m_owner->isInDocumentTree())
653 document().styleEngine().setPreferredStylesheetSetNameIfNotSet(title ); 653 document().styleEngine().setPreferredStylesheetSetNameIfNotSet(title , StyleEngine::DontUpdateActiveSheets);
654 654
655 bool mediaQueryMatches = true; 655 bool mediaQueryMatches = true;
656 LocalFrame* frame = loadingFrame(); 656 LocalFrame* frame = loadingFrame();
657 if (!m_owner->media().isEmpty() && frame) { 657 if (!m_owner->media().isEmpty() && frame) {
658 MediaQuerySet* media = MediaQuerySet::create(m_owner->media()); 658 MediaQuerySet* media = MediaQuerySet::create(m_owner->media());
659 MediaQueryEvaluator evaluator(frame); 659 MediaQueryEvaluator evaluator(frame);
660 mediaQueryMatches = evaluator.eval(media); 660 mediaQueryMatches = evaluator.eval(media);
661 } 661 }
662 662
663 // Don't hold up layout tree construction and script execution on styles heets 663 // Don't hold up layout tree construction and script execution on styles heets
(...skipping 27 matching lines...) Expand all
691 notifyLoadedSheetAndAllCriticalSubresources(Node::ErrorOccurredLoadi ngSubresource); 691 notifyLoadedSheetAndAllCriticalSubresources(Node::ErrorOccurredLoadi ngSubresource);
692 } 692 }
693 } else if (m_sheet) { 693 } else if (m_sheet) {
694 // we no longer contain a stylesheet, e.g. perhaps rel or type was chang ed 694 // we no longer contain a stylesheet, e.g. perhaps rel or type was chang ed
695 StyleSheet* removedSheet = m_sheet.get(); 695 StyleSheet* removedSheet = m_sheet.get();
696 clearSheet(); 696 clearSheet();
697 document().styleEngine().setNeedsActiveStyleUpdate(removedSheet, FullSty leUpdate); 697 document().styleEngine().setNeedsActiveStyleUpdate(removedSheet, FullSty leUpdate);
698 } 698 }
699 } 699 }
700 700
701 void LinkStyle::setSheetTitle(const String& title) 701 void LinkStyle::setSheetTitle(const String& title, StyleEngine::ActiveSheetsUpda te updateActiveSheets)
702 { 702 {
703 if (m_sheet && m_owner->isInDocumentTree()) 703 if (!m_owner->isInDocumentTree() || !m_owner->relAttribute().isStyleSheet())
704 return;
705
706 if (m_sheet)
704 m_sheet->setTitle(title); 707 m_sheet->setTitle(title);
708
709 if (title.isEmpty() || !isUnset() || m_owner->isAlternate())
710 return;
711
712 KURL href = m_owner->getNonEmptyURLAttribute(hrefAttr);
713 if (href.isValid() && !href.isEmpty())
714 document().styleEngine().setPreferredStylesheetSetNameIfNotSet(title, up dateActiveSheets);
705 } 715 }
706 716
707 void LinkStyle::ownerRemoved() 717 void LinkStyle::ownerRemoved()
708 { 718 {
709 if (m_sheet) 719 if (m_sheet)
710 clearSheet(); 720 clearSheet();
711 721
712 if (styleSheetIsLoading()) 722 if (styleSheetIsLoading())
713 removePendingSheet(); 723 removePendingSheet();
714 } 724 }
715 725
716 DEFINE_TRACE(LinkStyle) 726 DEFINE_TRACE(LinkStyle)
717 { 727 {
718 visitor->trace(m_sheet); 728 visitor->trace(m_sheet);
719 LinkResource::trace(visitor); 729 LinkResource::trace(visitor);
720 ResourceOwner<StyleSheetResource>::trace(visitor); 730 ResourceOwner<StyleSheetResource>::trace(visitor);
721 } 731 }
722 732
723 } // namespace blink 733 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/html/HTMLLinkElement.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698