Changeset 125805 in webkit
- Timestamp:
- Aug 16, 2012 1:30:13 PM (12 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 10 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r125804 r125805 1 2012-08-15 Antti Koivisto <antti@apple.com> 2 3 Remove StyleSheetContents::m_finalURL 4 https://bugs.webkit.org/show_bug.cgi?id=94140 5 6 Reviewed by Andreas Kling. 7 8 It is equal (or empty in case of inline stylesheets) to the baseURL passed in CSSParserContext. 9 Removing it simplifies the constructors and the related code. 10 11 * css/CSSStyleSheet.cpp: 12 (WebCore::CSSStyleSheet::createInline): 13 (WebCore::CSSStyleSheet::canAccessRules): 14 (WebCore::CSSStyleSheet::rules): 15 (WebCore::CSSStyleSheet::cssRules): 16 17 - factor access check to a function 18 - allow document always access rules of its inline stylesheets 19 20 * css/StyleRuleImport.cpp: 21 (WebCore::StyleRuleImport::setCSSStyleSheet): 22 (WebCore::StyleRuleImport::requestStyleSheet): 23 * css/StyleSheetContents.cpp: 24 (WebCore::StyleSheetContents::StyleSheetContents): 25 (WebCore::StyleSheetContents::parseAuthorStyleSheet): 26 * css/StyleSheetContents.h: 27 (WebCore::StyleSheetContents::create): 28 (WebCore::StyleSheetContents::originalURL): 29 (StyleSheetContents): 30 * dom/ProcessingInstruction.cpp: 31 (WebCore::ProcessingInstruction::setCSSStyleSheet): 32 * html/HTMLLinkElement.cpp: 33 (WebCore::HTMLLinkElement::setCSSStyleSheet): 34 * inspector/InspectorStyleSheet.cpp: 35 (WebCore::fillMediaListChain): 36 (WebCore::InspectorStyleSheet::styleSheetURL): 37 * xml/XSLImportRule.cpp: 38 (WebCore::XSLImportRule::loadSheet): 39 1 40 2012-08-16 Justin Novosad <junov@chromium.org> 2 41 -
trunk/Source/WebCore/css/CSSStyleSheet.cpp
r124884 r125805 86 86 PassRefPtr<CSSStyleSheet> CSSStyleSheet::create(PassRefPtr<StyleSheetContents> sheet, Node* ownerNode) 87 87 { 88 return adoptRef(new CSSStyleSheet(sheet, ownerNode ));88 return adoptRef(new CSSStyleSheet(sheet, ownerNode, false)); 89 89 } 90 90 … … 92 92 { 93 93 CSSParserContext parserContext(ownerNode->document(), baseURL, encoding); 94 RefPtr<StyleSheetContents> sheet = StyleSheetContents::create(baseURL.string(), baseURL,parserContext);95 return adoptRef(new CSSStyleSheet(sheet.release(), ownerNode ));94 RefPtr<StyleSheetContents> sheet = StyleSheetContents::create(baseURL.string(), parserContext); 95 return adoptRef(new CSSStyleSheet(sheet.release(), ownerNode, true)); 96 96 } 97 97 98 98 CSSStyleSheet::CSSStyleSheet(PassRefPtr<StyleSheetContents> contents, CSSImportRule* ownerRule) 99 99 : m_contents(contents) 100 , m_isInlineStylesheet(false) 100 101 , m_isDisabled(false) 101 102 , m_ownerNode(0) … … 105 106 } 106 107 107 CSSStyleSheet::CSSStyleSheet(PassRefPtr<StyleSheetContents> contents, Node* ownerNode )108 CSSStyleSheet::CSSStyleSheet(PassRefPtr<StyleSheetContents> contents, Node* ownerNode, bool isInlineStylesheet) 108 109 : m_contents(contents) 110 , m_isInlineStylesheet(isInlineStylesheet) 109 111 , m_isDisabled(false) 110 112 , m_ownerNode(ownerNode) … … 228 230 } 229 231 232 bool CSSStyleSheet::canAccessRules() const 233 { 234 if (m_isInlineStylesheet) 235 return true; 236 KURL baseURL = m_contents->baseURL(); 237 if (baseURL.isEmpty()) 238 return true; 239 Document* document = ownerDocument(); 240 if (!document) 241 return true; 242 if (document->securityOrigin()->canRequest(baseURL)) 243 return true; 244 return false; 245 } 246 230 247 PassRefPtr<CSSRuleList> CSSStyleSheet::rules() 231 248 { 232 KURL url = m_contents->finalURL(); 233 Document* document = ownerDocument(); 234 if (!url.isEmpty() && document && !document->securityOrigin()->canRequest(url)) 249 if (!canAccessRules()) 235 250 return 0; 236 251 // IE behavior. … … 311 326 PassRefPtr<CSSRuleList> CSSStyleSheet::cssRules() 312 327 { 313 KURL url = m_contents->finalURL(); 314 Document* document = ownerDocument(); 315 if (!url.isEmpty() && document && !document->securityOrigin()->canRequest(url)) 328 if (!canAccessRules()) 316 329 return 0; 317 330 if (!m_ruleListCSSOMWrapper) -
trunk/Source/WebCore/css/CSSStyleSheet.h
r124330 r125805 111 111 private: 112 112 CSSStyleSheet(PassRefPtr<StyleSheetContents>, CSSImportRule* ownerRule); 113 CSSStyleSheet(PassRefPtr<StyleSheetContents>, Node* ownerNode );113 CSSStyleSheet(PassRefPtr<StyleSheetContents>, Node* ownerNode, bool isInlineStylesheet); 114 114 115 115 virtual bool isCSSStyleSheet() const { return true; } 116 116 virtual String type() const { return "text/css"; } 117 118 bool canAccessRules() const; 117 119 118 120 RefPtr<StyleSheetContents> m_contents; 121 bool m_isInlineStylesheet; 119 122 bool m_isDisabled; 120 123 String m_title; -
trunk/Source/WebCore/css/StyleRuleImport.cpp
r124884 r125805 69 69 context.baseURL = baseURL; 70 70 71 m_styleSheet = StyleSheetContents::create(this, href, baseURL,context);71 m_styleSheet = StyleSheetContents::create(this, href, context); 72 72 73 73 Document* document = m_parentStyleSheet ? m_parentStyleSheet->singleOwnerDocument() : 0; … … 100 100 101 101 String absHref = m_strHref; 102 if (!m_parentStyleSheet-> finalURL().isNull())102 if (!m_parentStyleSheet->baseURL().isNull()) 103 103 // use parent styleheet's URL as the base URL 104 absHref = KURL(m_parentStyleSheet-> finalURL(), m_strHref).string();104 absHref = KURL(m_parentStyleSheet->baseURL(), m_strHref).string(); 105 105 106 106 // Check for a cycle in our import chain. If we encounter a stylesheet … … 108 108 StyleSheetContents* rootSheet = m_parentStyleSheet; 109 109 for (StyleSheetContents* sheet = m_parentStyleSheet; sheet; sheet = sheet->parentStyleSheet()) { 110 if (absHref == sheet-> finalURL().string() || absHref == sheet->originalURL())110 if (absHref == sheet->baseURL().string() || absHref == sheet->originalURL()) 111 111 return; 112 112 rootSheet = sheet; -
trunk/Source/WebCore/css/StyleSheetContents.cpp
r125371 r125805 55 55 } 56 56 57 StyleSheetContents::StyleSheetContents(StyleRuleImport* ownerRule, const String& originalURL, const KURL& finalURL, constCSSParserContext& context)57 StyleSheetContents::StyleSheetContents(StyleRuleImport* ownerRule, const String& originalURL, const CSSParserContext& context) 58 58 : m_ownerRule(ownerRule) 59 59 , m_originalURL(originalURL) 60 , m_finalURL(finalURL)61 60 , m_loadCompleted(false) 62 61 , m_isUserStyleSheet(ownerRule && ownerRule->parentStyleSheet() && ownerRule->parentStyleSheet()->isUserStyleSheet()) … … 74 73 , m_ownerRule(0) 75 74 , m_originalURL(o.m_originalURL) 76 , m_finalURL(o.m_finalURL)77 75 , m_encodingFromCharsetRule(o.m_encodingFromCharsetRule) 78 76 , m_importRules(o.m_importRules.size()) … … 284 282 // This prevents an attacker playing games by injecting CSS strings into HTML, XML, JSON, etc. etc. 285 283 if (!hasValidMIMEType && !hasSyntacticallyValidCSSHeader()) { 286 bool isCrossOriginCSS = !securityOrigin || !securityOrigin->canRequest( finalURL());284 bool isCrossOriginCSS = !securityOrigin || !securityOrigin->canRequest(baseURL()); 287 285 if (isCrossOriginCSS) { 288 286 clearRules(); … … 296 294 // There are two variants of KHTMLFixes.css. One is equal to mediaWikiKHTMLFixesStyleSheet, 297 295 // while the other lacks the second trailing newline. 298 if ( finalURL().string().endsWith(slashKHTMLFixesDotCss) && !sheetText.isNull() && mediaWikiKHTMLFixesStyleSheet.startsWith(sheetText)296 if (baseURL().string().endsWith(slashKHTMLFixesDotCss) && !sheetText.isNull() && mediaWikiKHTMLFixesStyleSheet.startsWith(sheetText) 299 297 && sheetText.length() >= mediaWikiKHTMLFixesStyleSheet.length() - 1) 300 298 clearRules(); … … 490 488 MemoryClassInfo info(memoryObjectInfo, this, MemoryInstrumentation::CSS); 491 489 info.addMember(m_originalURL); 492 info.addMember(m_finalURL);493 490 info.addMember(m_encodingFromCharsetRule); 494 491 info.addVector(m_importRules); -
trunk/Source/WebCore/css/StyleSheetContents.h
r124720 r125805 45 45 static PassRefPtr<StyleSheetContents> create(const CSSParserContext& context = CSSParserContext(CSSStrictMode)) 46 46 { 47 return adoptRef(new StyleSheetContents(0, String(), KURL(),context));47 return adoptRef(new StyleSheetContents(0, String(), context)); 48 48 } 49 static PassRefPtr<StyleSheetContents> create(const String& originalURL, const KURL& finalURL, constCSSParserContext& context)49 static PassRefPtr<StyleSheetContents> create(const String& originalURL, const CSSParserContext& context) 50 50 { 51 return adoptRef(new StyleSheetContents(0, originalURL, finalURL,context));51 return adoptRef(new StyleSheetContents(0, originalURL, context)); 52 52 } 53 static PassRefPtr<StyleSheetContents> create(StyleRuleImport* ownerRule, const String& originalURL, const KURL& finalURL, constCSSParserContext& context)53 static PassRefPtr<StyleSheetContents> create(StyleRuleImport* ownerRule, const String& originalURL, const CSSParserContext& context) 54 54 { 55 return adoptRef(new StyleSheetContents(ownerRule, originalURL, finalURL,context));55 return adoptRef(new StyleSheetContents(ownerRule, originalURL, context)); 56 56 } 57 57 … … 113 113 // the JavaScript binding (which needs to use this value for security). 114 114 String originalURL() const { return m_originalURL; } 115 116 const KURL& finalURL() const { return m_finalURL; }117 115 const KURL& baseURL() const { return m_parserContext.baseURL; } 118 116 … … 143 141 144 142 private: 145 StyleSheetContents(StyleRuleImport* ownerRule, const String& originalURL, const KURL& baseURL, constCSSParserContext&);143 StyleSheetContents(StyleRuleImport* ownerRule, const String& originalURL, const CSSParserContext&); 146 144 StyleSheetContents(const StyleSheetContents&); 147 145 … … 151 149 152 150 String m_originalURL; 153 KURL m_finalURL;154 151 155 152 String m_encodingFromCharsetRule; -
trunk/Source/WebCore/dom/ProcessingInstruction.cpp
r123128 r125805 215 215 CSSParserContext parserContext(document(), baseURL, charset); 216 216 217 RefPtr<StyleSheetContents> newSheet = StyleSheetContents::create(href, baseURL,parserContext);217 RefPtr<StyleSheetContents> newSheet = StyleSheetContents::create(href, parserContext); 218 218 219 219 RefPtr<CSSStyleSheet> cssSheet = CSSStyleSheet::create(newSheet, this); -
trunk/Source/WebCore/html/HTMLLinkElement.cpp
r122806 r125805 318 318 #endif 319 319 320 RefPtr<StyleSheetContents> styleSheet = StyleSheetContents::create(href, baseURL,parserContext);320 RefPtr<StyleSheetContents> styleSheet = StyleSheetContents::create(href, parserContext); 321 321 322 322 m_sheet = CSSStyleSheet::create(styleSheet, this); -
trunk/Source/WebCore/inspector/InspectorStyleSheet.cpp
r123612 r125805 232 232 233 233 if (parentStyleSheet) { 234 sourceURL = parentStyleSheet->contents()-> finalURL();234 sourceURL = parentStyleSheet->contents()->baseURL(); 235 235 if (sourceURL.isEmpty()) 236 236 sourceURL = InspectorDOMAgent::documentURLString(parentStyleSheet->ownerDocument()); … … 251 251 if (doc) 252 252 sourceURL = doc->url(); 253 else if (!styleSheet->contents()-> finalURL().isEmpty())254 sourceURL = styleSheet->contents()-> finalURL();253 else if (!styleSheet->contents()->baseURL().isEmpty()) 254 sourceURL = styleSheet->contents()->baseURL(); 255 255 else 256 256 sourceURL = ""; … … 708 708 String InspectorStyleSheet::styleSheetURL(CSSStyleSheet* pageStyleSheet) 709 709 { 710 if (pageStyleSheet && !pageStyleSheet->contents()-> finalURL().isEmpty())711 return pageStyleSheet->contents()-> finalURL().string();710 if (pageStyleSheet && !pageStyleSheet->contents()->baseURL().isEmpty()) 711 return pageStyleSheet->contents()->baseURL().string(); 712 712 return emptyString(); 713 713 } -
trunk/Source/WebCore/xml/XSLImportRule.cpp
r98933 r125805 88 88 String absHref = m_strHref; 89 89 XSLStyleSheet* parentSheet = parentStyleSheet(); 90 if (!parentSheet-> finalURL().isNull())90 if (!parentSheet->baseURL().isNull()) 91 91 // use parent styleheet's URL as the base URL 92 absHref = KURL(parentSheet-> finalURL(), m_strHref).string();92 absHref = KURL(parentSheet->baseURL(), m_strHref).string(); 93 93 94 94 // Check for a cycle in our import chain. If we encounter a stylesheet 95 95 // in our parent chain with the same URL, then just bail. 96 96 for (XSLStyleSheet* parentSheet = parentStyleSheet(); parentSheet; parentSheet = parentSheet->parentStyleSheet()) { 97 if (absHref == parentSheet-> finalURL().string())97 if (absHref == parentSheet->baseURL().string()) 98 98 return; 99 99 }
Note: See TracChangeset
for help on using the changeset viewer.