OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "core/html/LinkStyle.h" | 5 #include "core/html/LinkStyle.h" |
6 | 6 |
7 #include "core/css/StyleSheetContents.h" | 7 #include "core/css/StyleSheetContents.h" |
8 #include "core/fetch/CSSStyleSheetResource.h" | 8 #include "core/fetch/CSSStyleSheetResource.h" |
9 #include "core/frame/LocalFrame.h" | 9 #include "core/frame/LocalFrame.h" |
10 #include "core/frame/SubresourceIntegrity.h" | 10 #include "core/frame/SubresourceIntegrity.h" |
(...skipping 288 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
299 } | 299 } |
300 | 300 |
301 if (!m_owner->shouldLoadLink()) | 301 if (!m_owner->shouldLoadLink()) |
302 return Bail; | 302 return Bail; |
303 | 303 |
304 m_loading = true; | 304 m_loading = true; |
305 | 305 |
306 String title = m_owner->title(); | 306 String title = m_owner->title(); |
307 if (!title.isEmpty() && !m_owner->isAlternate() && | 307 if (!title.isEmpty() && !m_owner->isAlternate() && |
308 m_disabledState != EnabledViaScript && m_owner->isInDocumentTree()) { | 308 m_disabledState != EnabledViaScript && m_owner->isInDocumentTree()) { |
309 document().styleEngine().setPreferredStylesheetSetNameIfNotSet( | 309 document().styleEngine().setPreferredStylesheetSetNameIfNotSet(title); |
310 title, StyleEngine::DontUpdateActiveSheets); | |
311 } | 310 } |
312 | 311 |
313 bool mediaQueryMatches = true; | 312 bool mediaQueryMatches = true; |
314 LocalFrame* frame = loadingFrame(); | 313 LocalFrame* frame = loadingFrame(); |
315 if (!m_owner->media().isEmpty() && frame) { | 314 if (!m_owner->media().isEmpty() && frame) { |
316 MediaQuerySet* media = MediaQuerySet::create(m_owner->media()); | 315 MediaQuerySet* media = MediaQuerySet::create(m_owner->media()); |
317 MediaQueryEvaluator evaluator(frame); | 316 MediaQueryEvaluator evaluator(frame); |
318 mediaQueryMatches = evaluator.eval(media); | 317 mediaQueryMatches = evaluator.eval(media); |
319 } | 318 } |
320 | 319 |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
380 m_owner->relAttribute().getIconType()); | 379 m_owner->relAttribute().getIconType()); |
381 } | 380 } |
382 } | 381 } |
383 | 382 |
384 if (!m_owner->loadLink(type, as, media, m_owner->referrerPolicy(), | 383 if (!m_owner->loadLink(type, as, media, m_owner->referrerPolicy(), |
385 builder.url())) | 384 builder.url())) |
386 return; | 385 return; |
387 | 386 |
388 if (loadStylesheetIfNeeded(builder, type) == NotNeeded && m_sheet) { | 387 if (loadStylesheetIfNeeded(builder, type) == NotNeeded && m_sheet) { |
389 // we no longer contain a stylesheet, e.g. perhaps rel or type was changed | 388 // we no longer contain a stylesheet, e.g. perhaps rel or type was changed |
390 StyleSheet* removedSheet = m_sheet.get(); | |
391 clearSheet(); | 389 clearSheet(); |
392 document().styleEngine().setNeedsActiveStyleUpdate(removedSheet, | 390 if (m_owner->isConnected()) |
393 FullStyleUpdate); | 391 document().styleEngine().setNeedsActiveStyleUpdate(m_owner->treeScope()); |
394 } | 392 } |
395 } | 393 } |
396 | 394 |
397 void LinkStyle::setSheetTitle( | 395 void LinkStyle::setSheetTitle(const String& title) { |
398 const String& title, | |
399 StyleEngine::ActiveSheetsUpdate updateActiveSheets) { | |
400 if (!m_owner->isInDocumentTree() || !m_owner->relAttribute().isStyleSheet()) | 396 if (!m_owner->isInDocumentTree() || !m_owner->relAttribute().isStyleSheet()) |
401 return; | 397 return; |
402 | 398 |
403 if (m_sheet) | 399 if (m_sheet) |
404 m_sheet->setTitle(title); | 400 m_sheet->setTitle(title); |
405 | 401 |
406 if (title.isEmpty() || !isUnset() || m_owner->isAlternate()) | 402 if (title.isEmpty() || !isUnset() || m_owner->isAlternate()) |
407 return; | 403 return; |
408 | 404 |
409 KURL href = m_owner->getNonEmptyURLAttribute(hrefAttr); | 405 KURL href = m_owner->getNonEmptyURLAttribute(hrefAttr); |
410 if (href.isValid() && !href.isEmpty()) { | 406 if (href.isValid() && !href.isEmpty()) |
411 document().styleEngine().setPreferredStylesheetSetNameIfNotSet( | 407 document().styleEngine().setPreferredStylesheetSetNameIfNotSet(title); |
412 title, updateActiveSheets); | |
413 } | |
414 } | 408 } |
415 | 409 |
416 void LinkStyle::ownerRemoved() { | 410 void LinkStyle::ownerRemoved() { |
417 if (m_sheet) | 411 if (m_sheet) |
418 clearSheet(); | 412 clearSheet(); |
419 | 413 |
420 if (styleSheetIsLoading()) | 414 if (styleSheetIsLoading()) |
421 removePendingSheet(); | 415 removePendingSheet(); |
422 } | 416 } |
423 | 417 |
424 DEFINE_TRACE(LinkStyle) { | 418 DEFINE_TRACE(LinkStyle) { |
425 visitor->trace(m_sheet); | 419 visitor->trace(m_sheet); |
426 LinkResource::trace(visitor); | 420 LinkResource::trace(visitor); |
427 ResourceOwner<StyleSheetResource>::trace(visitor); | 421 ResourceOwner<StyleSheetResource>::trace(visitor); |
428 } | 422 } |
429 | 423 |
430 } // namespace blink | 424 } // namespace blink |
OLD | NEW |