Changeset 48181 in webkit
- Timestamp:
- Sep 8, 2009 1:26:14 PM (15 years ago)
- Location:
- trunk/WebCore
- Files:
-
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/WebCore/ChangeLog
r48180 r48181 1 2009-09-04 Dave Hyatt <hyatt@apple.com> 2 3 Reviewed by Eric Seidel. 4 5 https://bugs.webkit.org/show_bug.cgi?id=28987, make the Document cache the page's user stylesheet in 6 parsed form. Allows the sheet to survive across destruction/re-creation of the CSSStyleSelector. 7 8 * css/CSSStyleSelector.cpp: 9 (WebCore::CSSStyleSelector::CSSStyleSelector): 10 * css/CSSStyleSelector.h: 11 * dom/Document.cpp: 12 (WebCore::Document::attach): 13 (WebCore::Document::pageUserSheet): 14 (WebCore::Document::clearPageUserSheet): 15 (WebCore::Document::recalcStyleSelector): 16 * dom/Document.h: 17 * loader/PlaceholderDocument.cpp: 18 (WebCore::PlaceholderDocument::attach): 19 * page/Page.cpp: 20 (WebCore::Page::userStyleSheetLocationChanged): 21 * page/Settings.cpp: 22 (WebCore::Settings::setUserStyleSheetLocation): 23 1 24 2009-09-08 Kenneth Rohde Christiansen <kenneth@webkit.org> 2 25 -
trunk/WebCore/WebCore.xcodeproj/project.pbxproj
r48167 r48181 1183 1183 65FEA86909833ADE00BED4AB /* Page.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 65FEA86809833ADE00BED4AB /* Page.cpp */; }; 1184 1184 72626E020EF022FE00A07E20 /* FontFastPath.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 72626E010EF022FE00A07E20 /* FontFastPath.cpp */; }; 1185 7284ADDD0E6FEB31002EEFBD /* UserStyleSheetLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7284ADDB0E6FEB31002EEFBD /* UserStyleSheetLoader.cpp */; };1186 7284ADDE0E6FEB31002EEFBD /* UserStyleSheetLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 7284ADDC0E6FEB31002EEFBD /* UserStyleSheetLoader.h */; };1187 1185 75092BFE104B80F9003DD168 /* DOMDispatchTimelineItem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 75092BFC104B80F9003DD168 /* DOMDispatchTimelineItem.cpp */; }; 1188 1186 75092BFF104B80F9003DD168 /* DOMDispatchTimelineItem.h in Headers */ = {isa = PBXBuildFile; fileRef = 75092BFD104B80F9003DD168 /* DOMDispatchTimelineItem.h */; }; … … 6411 6409 65FEA86809833ADE00BED4AB /* Page.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = Page.cpp; sourceTree = "<group>"; }; 6412 6410 72626E010EF022FE00A07E20 /* FontFastPath.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FontFastPath.cpp; sourceTree = "<group>"; }; 6413 7284ADDB0E6FEB31002EEFBD /* UserStyleSheetLoader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = UserStyleSheetLoader.cpp; sourceTree = "<group>"; };6414 7284ADDC0E6FEB31002EEFBD /* UserStyleSheetLoader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UserStyleSheetLoader.h; sourceTree = "<group>"; };6415 6411 75092BFC104B80F9003DD168 /* DOMDispatchTimelineItem.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DOMDispatchTimelineItem.cpp; sourceTree = "<group>"; }; 6416 6412 75092BFD104B80F9003DD168 /* DOMDispatchTimelineItem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DOMDispatchTimelineItem.h; sourceTree = "<group>"; }; -
trunk/WebCore/css/CSSStyleSelector.cpp
r47906 r48181 409 409 } 410 410 411 CSSStyleSelector::CSSStyleSelector(Document* doc, const String& userStyleSheet, StyleSheetList* styleSheets, CSSStyleSheet* mappedElementSheet, bool strictParsing, bool matchAuthorAndUserStyles)411 CSSStyleSelector::CSSStyleSelector(Document* doc, CSSStyleSheet* userSheet, StyleSheetList* styleSheets, CSSStyleSheet* mappedElementSheet, bool strictParsing, bool matchAuthorAndUserStyles) 412 412 : m_backgroundData(BackgroundFillLayer) 413 413 , m_checker(doc, strictParsing) … … 450 450 451 451 // FIXME: This sucks! The user sheet is reparsed every time! 452 if (!userStyleSheet.isEmpty()) { 453 m_userSheet = CSSStyleSheet::create(doc); 454 m_userSheet->parseString(userStyleSheet, strictParsing); 455 452 if (userSheet) { 456 453 m_userStyle = new CSSRuleSet(); 457 m_userStyle->addRulesFromSheet( m_userSheet.get(), *m_medium, this);454 m_userStyle->addRulesFromSheet(userSheet, *m_medium, this); 458 455 } 459 456 -
trunk/WebCore/css/CSSStyleSelector.h
r47906 r48181 81 81 class CSSStyleSelector : public Noncopyable { 82 82 public: 83 CSSStyleSelector(Document*, const String& userStyleSheet, StyleSheetList*, CSSStyleSheet*, bool strictParsing, bool matchAuthorAndUserStyles); 83 CSSStyleSelector(Document*, CSSStyleSheet* userStyleSheet, StyleSheetList* authorSheets, CSSStyleSheet* mappedElementSheet, 84 bool strictParsing, bool matchAuthorAndUserStyles); 84 85 ~CSSStyleSelector(); 85 86 … … 176 177 CSSRuleSet* m_authorStyle; 177 178 CSSRuleSet* m_userStyle; 178 RefPtr<CSSStyleSheet> m_userSheet;179 179 180 180 bool m_hasUAAppearance; -
trunk/WebCore/dom/Document.cpp
r48167 r48181 1334 1334 if (Settings* docSettings = settings()) 1335 1335 matchAuthorAndUserStyles = docSettings->authorAndUserStylesEnabled(); 1336 m_styleSelector = new CSSStyleSelector(this, userStyleSheet(), m_styleSheets.get(), m_mappedElementSheet.get(), !inCompatMode(), matchAuthorAndUserStyles);1336 m_styleSelector = new CSSStyleSelector(this, pageUserSheet(), m_styleSheets.get(), m_mappedElementSheet.get(), !inCompatMode(), matchAuthorAndUserStyles); 1337 1337 } 1338 1338 … … 1874 1874 } 1875 1875 1876 String Document::userStyleSheet() const 1877 { 1878 Page* page = this->page(); 1879 if (!page) 1880 return String(); 1881 return page->userStyleSheet(); 1876 CSSStyleSheet* Document::pageUserSheet() 1877 { 1878 if (m_pageUserSheet) 1879 return m_pageUserSheet.get(); 1880 1881 Page* owningPage = page(); 1882 if (!owningPage) 1883 return 0; 1884 1885 String userSheetText = owningPage->userStyleSheet(); 1886 if (userSheetText.isEmpty()) 1887 return 0; 1888 1889 // Parse the sheet and cache it. 1890 m_pageUserSheet = CSSStyleSheet::create(this); 1891 m_pageUserSheet->parseString(userSheetText, !inCompatMode()); 1892 return m_pageUserSheet.get(); 1893 } 1894 1895 void Document::clearPageUserSheet() 1896 { 1897 m_pageUserSheet = 0; 1898 updateStyleSelector(); 1882 1899 } 1883 1900 … … 2443 2460 // Create a new style selector 2444 2461 delete m_styleSelector; 2445 m_styleSelector = new CSSStyleSelector(this, userStyleSheet(), m_styleSheets.get(), m_mappedElementSheet.get(), !inCompatMode(), matchAuthorAndUserStyles);2462 m_styleSelector = new CSSStyleSelector(this, pageUserSheet(), m_styleSheets.get(), m_mappedElementSheet.get(), !inCompatMode(), matchAuthorAndUserStyles); 2446 2463 m_didCalculateStyleSelector = true; 2447 2464 } -
trunk/WebCore/dom/Document.h
r48167 r48181 440 440 virtual String userAgent(const KURL&) const; 441 441 442 String userStyleSheet() const; 442 CSSStyleSheet* pageUserSheet(); 443 void clearPageUserSheet(); 443 444 444 445 CSSStyleSheet* elementSheet(); 445 446 CSSStyleSheet* mappedElementSheet(); 447 446 448 virtual Tokenizer* createTokenizer(); 447 449 Tokenizer* tokenizer() { return m_tokenizer; } … … 930 932 RefPtr<CSSStyleSheet> m_elemSheet; 931 933 RefPtr<CSSStyleSheet> m_mappedElementSheet; 932 934 RefPtr<CSSStyleSheet> m_pageUserSheet; 935 933 936 bool m_printing; 934 937 -
trunk/WebCore/loader/PlaceholderDocument.cpp
r46136 r48181 38 38 if (!styleSelector()) { 39 39 RefPtr<StyleSheetList> styleSheetList = StyleSheetList::create(this); 40 setStyleSelector(new CSSStyleSelector(this, userStyleSheet(), styleSheetList.get(), 0, true, false));40 setStyleSelector(new CSSStyleSelector(this, pageUserSheet(), styleSheetList.get(), 0, true, false)); 41 41 } 42 42 -
trunk/WebCore/page/Page.cpp
r48167 r48181 470 470 } 471 471 } 472 473 for (Frame* frame = mainFrame(); frame; frame = frame->tree()->traverseNext()) { 474 if (frame->document()) 475 frame->document()->clearPageUserSheet(); 476 } 472 477 } 473 478 -
trunk/WebCore/page/Settings.cpp
r46001 r48181 274 274 275 275 m_page->userStyleSheetLocationChanged(); 276 setNeedsReapplyStylesInAllFrames(m_page);277 276 } 278 277
Note: See TracChangeset
for help on using the changeset viewer.