OLD | NEW |
1 /* | 1 /* |
2 * (C) 1999-2003 Lars Knoll (knoll@kde.org) | 2 * (C) 1999-2003 Lars Knoll (knoll@kde.org) |
3 * Copyright (C) 2004, 2006, 2007, 2012 Apple Inc. All rights reserved. | 3 * Copyright (C) 2004, 2006, 2007, 2012 Apple Inc. All rights reserved. |
4 * | 4 * |
5 * This library is free software; you can redistribute it and/or | 5 * This library is free software; you can redistribute it and/or |
6 * modify it under the terms of the GNU Library General Public | 6 * modify it under the terms of the GNU Library General Public |
7 * License as published by the Free Software Foundation; either | 7 * License as published by the Free Software Foundation; either |
8 * version 2 of the License, or (at your option) any later version. | 8 * version 2 of the License, or (at your option) any later version. |
9 * | 9 * |
10 * This library is distributed in the hope that it will be useful, | 10 * This library is distributed in the hope that it will be useful, |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
52 | 52 |
53 for (unsigned i = 0; i < m_importRules.size(); ++i) { | 53 for (unsigned i = 0; i < m_importRules.size(); ++i) { |
54 if (StyleSheetContents* sheet = m_importRules[i]->styleSheet()) | 54 if (StyleSheetContents* sheet = m_importRules[i]->styleSheet()) |
55 size += sheet->estimatedSizeInBytes(); | 55 size += sheet->estimatedSizeInBytes(); |
56 } | 56 } |
57 return size; | 57 return size; |
58 } | 58 } |
59 | 59 |
60 StyleSheetContents::StyleSheetContents(StyleRuleImport* ownerRule, | 60 StyleSheetContents::StyleSheetContents(StyleRuleImport* ownerRule, |
61 const String& originalURL, | 61 const String& originalURL, |
62 const CSSParserContext& context) | 62 const CSSParserContext* context) |
63 : m_ownerRule(ownerRule), | 63 : m_ownerRule(ownerRule), |
64 m_originalURL(originalURL), | 64 m_originalURL(originalURL), |
65 m_defaultNamespace(starAtom), | 65 m_defaultNamespace(starAtom), |
66 m_hasSyntacticallyValidCSSHeader(true), | 66 m_hasSyntacticallyValidCSSHeader(true), |
67 m_didLoadErrorOccur(false), | 67 m_didLoadErrorOccur(false), |
68 m_isMutable(false), | 68 m_isMutable(false), |
69 m_hasFontFaceRule(false), | 69 m_hasFontFaceRule(false), |
70 m_hasViewportRule(false), | 70 m_hasViewportRule(false), |
71 m_hasMediaQueries(false), | 71 m_hasMediaQueries(false), |
72 m_hasSingleOwnerDocument(true), | 72 m_hasSingleOwnerDocument(true), |
(...skipping 266 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
339 // remove this check. crbug.com/553535 | 339 // remove this check. crbug.com/553535 |
340 if (cachedStyleSheet->response().wasFetchedViaServiceWorker()) { | 340 if (cachedStyleSheet->response().wasFetchedViaServiceWorker()) { |
341 const KURL originalURL( | 341 const KURL originalURL( |
342 cachedStyleSheet->response().originalURLViaServiceWorker()); | 342 cachedStyleSheet->response().originalURLViaServiceWorker()); |
343 // |originalURL| is empty when the response is created in the SW. | 343 // |originalURL| is empty when the response is created in the SW. |
344 if (!originalURL.isEmpty() && !securityOrigin->canRequest(originalURL)) | 344 if (!originalURL.isEmpty() && !securityOrigin->canRequest(originalURL)) |
345 isSameOriginRequest = false; | 345 isSameOriginRequest = false; |
346 } | 346 } |
347 | 347 |
348 CSSStyleSheetResource::MIMETypeCheck mimeTypeCheck = | 348 CSSStyleSheetResource::MIMETypeCheck mimeTypeCheck = |
349 isQuirksModeBehavior(m_parserContext.mode()) && isSameOriginRequest | 349 isQuirksModeBehavior(m_parserContext->mode()) && isSameOriginRequest |
350 ? CSSStyleSheetResource::MIMETypeCheck::Lax | 350 ? CSSStyleSheetResource::MIMETypeCheck::Lax |
351 : CSSStyleSheetResource::MIMETypeCheck::Strict; | 351 : CSSStyleSheetResource::MIMETypeCheck::Strict; |
352 String sheetText = cachedStyleSheet->sheetText(mimeTypeCheck); | 352 String sheetText = cachedStyleSheet->sheetText(mimeTypeCheck); |
353 | 353 |
354 const ResourceResponse& response = cachedStyleSheet->response(); | 354 const ResourceResponse& response = cachedStyleSheet->response(); |
355 m_sourceMapURL = response.httpHeaderField(HTTPNames::SourceMap); | 355 m_sourceMapURL = response.httpHeaderField(HTTPNames::SourceMap); |
356 if (m_sourceMapURL.isEmpty()) { | 356 if (m_sourceMapURL.isEmpty()) { |
357 // Try to get deprecated header. | 357 // Try to get deprecated header. |
358 m_sourceMapURL = response.httpHeaderField(HTTPNames::X_SourceMap); | 358 m_sourceMapURL = response.httpHeaderField(HTTPNames::X_SourceMap); |
359 } | 359 } |
360 | 360 |
361 CSSParserContext context(parserContext(), UseCounter::getFrom(this)); | 361 const CSSParserContext* context = |
| 362 CSSParserContext::create(parserContext(), this); |
362 CSSParser::parseSheet(context, this, sheetText, | 363 CSSParser::parseSheet(context, this, sheetText, |
363 RuntimeEnabledFeatures::lazyParseCSSEnabled()); | 364 RuntimeEnabledFeatures::lazyParseCSSEnabled()); |
364 | 365 |
365 DEFINE_STATIC_LOCAL(CustomCountHistogram, parseHistogram, | 366 DEFINE_STATIC_LOCAL(CustomCountHistogram, parseHistogram, |
366 ("Style.AuthorStyleSheet.ParseTime", 0, 10000000, 50)); | 367 ("Style.AuthorStyleSheet.ParseTime", 0, 10000000, 50)); |
367 double parseDurationSeconds = (monotonicallyIncreasingTime() - startTime); | 368 double parseDurationSeconds = (monotonicallyIncreasingTime() - startTime); |
368 parseHistogram.count(parseDurationSeconds * 1000 * 1000); | 369 parseHistogram.count(parseDurationSeconds * 1000 * 1000); |
369 if (Document* document = singleOwnerDocument()) { | 370 if (Document* document = singleOwnerDocument()) { |
370 CSSTiming::from(*document).recordAuthorStyleSheetParseTime( | 371 CSSTiming::from(*document).recordAuthorStyleSheetParseTime( |
371 parseDurationSeconds); | 372 parseDurationSeconds); |
372 } | 373 } |
373 } | 374 } |
374 | 375 |
375 void StyleSheetContents::parseString(const String& sheetText) { | 376 void StyleSheetContents::parseString(const String& sheetText) { |
376 parseStringAtPosition(sheetText, TextPosition::minimumPosition()); | 377 parseStringAtPosition(sheetText, TextPosition::minimumPosition()); |
377 } | 378 } |
378 | 379 |
379 void StyleSheetContents::parseStringAtPosition( | 380 void StyleSheetContents::parseStringAtPosition( |
380 const String& sheetText, | 381 const String& sheetText, |
381 const TextPosition& startPosition) { | 382 const TextPosition& startPosition) { |
382 CSSParserContext context(parserContext(), UseCounter::getFrom(this)); | 383 const CSSParserContext* context = |
| 384 CSSParserContext::create(parserContext(), this); |
383 CSSParser::parseSheet(context, this, sheetText); | 385 CSSParser::parseSheet(context, this, sheetText); |
384 } | 386 } |
385 | 387 |
386 bool StyleSheetContents::isLoading() const { | 388 bool StyleSheetContents::isLoading() const { |
387 for (unsigned i = 0; i < m_importRules.size(); ++i) { | 389 for (unsigned i = 0; i < m_importRules.size(); ++i) { |
388 if (m_importRules[i]->isLoading()) | 390 if (m_importRules[i]->isLoading()) |
389 return true; | 391 return true; |
390 } | 392 } |
391 return false; | 393 return false; |
392 } | 394 } |
(...skipping 293 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
686 | 688 |
687 DEFINE_TRACE(StyleSheetContents) { | 689 DEFINE_TRACE(StyleSheetContents) { |
688 visitor->trace(m_ownerRule); | 690 visitor->trace(m_ownerRule); |
689 visitor->trace(m_importRules); | 691 visitor->trace(m_importRules); |
690 visitor->trace(m_namespaceRules); | 692 visitor->trace(m_namespaceRules); |
691 visitor->trace(m_childRules); | 693 visitor->trace(m_childRules); |
692 visitor->trace(m_loadingClients); | 694 visitor->trace(m_loadingClients); |
693 visitor->trace(m_completedClients); | 695 visitor->trace(m_completedClients); |
694 visitor->trace(m_ruleSet); | 696 visitor->trace(m_ruleSet); |
695 visitor->trace(m_referencedFromResource); | 697 visitor->trace(m_referencedFromResource); |
| 698 visitor->trace(m_parserContext); |
696 } | 699 } |
697 | 700 |
698 } // namespace blink | 701 } // namespace blink |
OLD | NEW |