Changeset 65183 in webkit


Ignore:
Timestamp:
Aug 11, 2010 1:38:00 PM (14 years ago)
Author:
aa@chromium.org
Message:

2010-08-10 Aaron Boodman <aa@chromium.org>

Reviewed by David Hyatt.

Make the cascade level of "user" styles configurable
https://bugs.webkit.org/show_bug.cgi?id=43457

  • css/CSSStyleSelector.cpp: (WebCore::CSSStyleSelector::CSSStyleSelector): Handle the case where user styles might have author level. Minor refactor.
  • dom/Document.cpp: (WebCore::Document::pageGroupUserSheets): Set isUserStyle on created stylesheet objects appropriately.
  • page/PageGroup.cpp: (WebCore::PageGroup::addUserStyleSheetToWorld): Add new optional "level" argument.
  • page/PageGroup.h: Ditto.
  • page/UserStyleSheet.h: Add level property. (WebCore::UserStyleSheet::): (WebCore::UserStyleSheet::UserStyleSheet): (WebCore::UserStyleSheet::setLevel): (WebCore::UserStyleSheet::level):

2010-08-10 Aaron Boodman <aa@chromium.org>

Reviewed by David Hyatt.

Make the cascade level of "user" styles configurable
https://bugs.webkit.org/show_bug.cgi?id=43457

  • src/WebViewImpl.cpp: (WebKit::WebView::addUserStyleSheet): Send "author" for the css level of user styles.
Location:
trunk
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • trunk/WebCore/ChangeLog

    r65182 r65183  
     12010-08-10  Aaron Boodman  <aa@chromium.org>
     2
     3        Reviewed by David Hyatt.
     4
     5        Make the cascade level of "user" styles configurable
     6        https://bugs.webkit.org/show_bug.cgi?id=43457
     7
     8        * css/CSSStyleSelector.cpp:
     9        (WebCore::CSSStyleSelector::CSSStyleSelector): Handle the case where user styles might have author level. Minor refactor.
     10        * dom/Document.cpp:
     11        (WebCore::Document::pageGroupUserSheets): Set isUserStyle on created stylesheet objects appropriately.
     12        * page/PageGroup.cpp:
     13        (WebCore::PageGroup::addUserStyleSheetToWorld): Add new optional "level" argument.
     14        * page/PageGroup.h: Ditto.
     15        * page/UserStyleSheet.h: Add level property.
     16        (WebCore::UserStyleSheet::):
     17        (WebCore::UserStyleSheet::UserStyleSheet):
     18        (WebCore::UserStyleSheet::setLevel):
     19        (WebCore::UserStyleSheet::level):
     20
    1212010-08-11  Rob Buis  <rwlbuis@gmail.com>
    222
  • trunk/WebCore/WebCore.exp.in

    r65021 r65183  
    821821__ZN7WebCore9PageGroup20removeAllUserContentEv
    822822__ZN7WebCore9PageGroup21removeAllVisitedLinksEv
    823 __ZN7WebCore9PageGroup24addUserStyleSheetToWorldEPNS_15DOMWrapperWorldERKN3WTF6StringERKNS_4KURLENS3_10PassOwnPtrINS3_6VectorIS4_Lm0EEEEESD_NS_25UserContentInjectedFramesE
     823__ZN7WebCore9PageGroup24addUserStyleSheetToWorldEPNS_15DOMWrapperWorldERKN3WTF6StringERKNS_4KURLENS3_10PassOwnPtrINS3_6VectorIS4_Lm0EEEEESD_NS_25UserContentInjectedFramesENS_14UserStyleSheet5LevelE
    824824__ZN7WebCore9PageGroup25removeUserScriptFromWorldEPNS_15DOMWrapperWorldERKNS_4KURLE
    825825__ZN7WebCore9PageGroup26removeUserScriptsFromWorldEPNS_15DOMWrapperWorldE
  • trunk/WebCore/css/CSSStyleSelector.cpp

    r65182 r65183  
    461461    }
    462462
     463    m_authorStyle = new CSSRuleSet();
     464
    463465    // FIXME: This sucks! The user sheet is reparsed every time!
    464     if (pageUserSheet || pageGroupUserSheets) {
    465         m_userStyle = new CSSRuleSet();
    466         if (pageUserSheet)
    467             m_userStyle->addRulesFromSheet(pageUserSheet, *m_medium, this);
    468         if (pageGroupUserSheets) {
    469             unsigned length = pageGroupUserSheets->size();
    470             for (unsigned i = 0; i < length; i++)
    471                 m_userStyle->addRulesFromSheet(pageGroupUserSheets->at(i).get(), *m_medium, this);
    472         }
    473     }
    474 
    475     // add stylesheets from document
    476     m_authorStyle = new CSSRuleSet();
    477    
     466    OwnPtr<CSSRuleSet> tempUserStyle(new CSSRuleSet);
     467    if (pageUserSheet)
     468        tempUserStyle->addRulesFromSheet(pageUserSheet, *m_medium, this);
     469    if (pageGroupUserSheets) {
     470        unsigned length = pageGroupUserSheets->size();
     471        for (unsigned i = 0; i < length; i++) {
     472            if (pageGroupUserSheets->at(i)->isUserStyleSheet())
     473                tempUserStyle->addRulesFromSheet(pageGroupUserSheets->at(i).get(), *m_medium, this);
     474            else
     475                m_authorStyle->addRulesFromSheet(pageGroupUserSheets->at(i).get(), *m_medium, this);
     476        }
     477    }
     478
     479    if (tempUserStyle->m_ruleCount > 0)
     480        m_userStyle = tempUserStyle.leakPtr();
     481
    478482    // Add rules from elements like SVG's <font-face>
    479483    if (mappedElementSheet)
    480484        m_authorStyle->addRulesFromSheet(mappedElementSheet, *m_medium, this);
    481485
     486    // add stylesheets from document
    482487    unsigned length = styleSheets->length();
    483488    for (unsigned i = 0; i < length; i++) {
     
    486491            m_authorStyle->addRulesFromSheet(static_cast<CSSStyleSheet*>(sheet), *m_medium, this);
    487492    }
    488    
     493
    489494    if (doc->renderer() && doc->renderer()->style())
    490495        doc->renderer()->style()->font().update(fontSelector());
  • trunk/WebCore/dom/Document.cpp

    r65175 r65183  
    22262226                continue;
    22272227            RefPtr<CSSStyleSheet> parsedSheet = CSSStyleSheet::createInline(const_cast<Document*>(this), sheet->url());
    2228             parsedSheet->setIsUserStyleSheet(true);
     2228            parsedSheet->setIsUserStyleSheet(sheet->level() == UserStyleSheet::UserLevel);
    22292229            parsedSheet->parseString(sheet->source(), !inCompatMode());
    22302230            if (!m_pageGroupUserSheets)
  • trunk/WebCore/page/PageGroup.cpp

    r64535 r65183  
    237237void PageGroup::addUserStyleSheetToWorld(DOMWrapperWorld* world, const String& source, const KURL& url,
    238238                                         PassOwnPtr<Vector<String> > whitelist, PassOwnPtr<Vector<String> > blacklist,
    239                                          UserContentInjectedFrames injectedFrames)
    240 {
    241     ASSERT_ARG(world, world);
    242 
    243     OwnPtr<UserStyleSheet> userStyleSheet(new UserStyleSheet(source, url, whitelist, blacklist, injectedFrames));
     239                                         UserContentInjectedFrames injectedFrames,
     240                                         UserStyleSheet::Level level)
     241{
     242    ASSERT_ARG(world, world);
     243
     244    OwnPtr<UserStyleSheet> userStyleSheet(new UserStyleSheet(source, url, whitelist, blacklist, injectedFrames, level));
    244245    if (!m_userStyleSheets)
    245246        m_userStyleSheets.set(new UserStyleSheetMap);
  • trunk/WebCore/page/PageGroup.h

    r65077 r65183  
    8181        void addUserStyleSheetToWorld(DOMWrapperWorld*, const String& source, const KURL&,
    8282                                      PassOwnPtr<Vector<String> > whitelist, PassOwnPtr<Vector<String> > blacklist,
    83                                       UserContentInjectedFrames);
     83                                      UserContentInjectedFrames,
     84                                      UserStyleSheet::Level level = UserStyleSheet::UserLevel);
    8485
    8586        void removeUserScriptFromWorld(DOMWrapperWorld*, const KURL&);
  • trunk/WebCore/page/UserStyleSheet.h

    r62876 r65183  
    3838class UserStyleSheet : public Noncopyable {
    3939public:
     40    enum Level {
     41        UserLevel,
     42        AuthorLevel
     43    };
     44
    4045    UserStyleSheet(const String& source, const KURL& url,
    4146                   PassOwnPtr<Vector<String> > whitelist, PassOwnPtr<Vector<String> > blacklist,
    42                    UserContentInjectedFrames injectedFrames)
     47                   UserContentInjectedFrames injectedFrames, Level level)
    4348        : m_source(source)
    4449        , m_url(url)
     
    4651        , m_blacklist(blacklist)
    4752        , m_injectedFrames(injectedFrames)
     53        , m_level(level)
    4854    {
    4955    }
     
    5460    const Vector<String>* blacklist() const { return m_blacklist.get(); }
    5561    UserContentInjectedFrames injectedFrames() const { return m_injectedFrames; }
     62    Level level() const { return m_level; }
    5663
    5764private:
     
    6168    OwnPtr<Vector<String> > m_blacklist;
    6269    UserContentInjectedFrames m_injectedFrames;
     70    Level m_level;
    6371};
    6472
  • trunk/WebKit/chromium/ChangeLog

    r65181 r65183  
     12010-08-10  Aaron Boodman  <aa@chromium.org>
     2
     3        Reviewed by David Hyatt.
     4
     5        Make the cascade level of "user" styles configurable
     6        https://bugs.webkit.org/show_bug.cgi?id=43457
     7
     8        * src/WebViewImpl.cpp:
     9        (WebKit::WebView::addUserStyleSheet): Send "author" for the css level of user styles.
     10
    1112010-08-11  James Hawkins  <jhawkins@chromium.org>
    212
  • trunk/WebKit/chromium/src/WebViewImpl.cpp

    r65063 r65183  
    19501950    PageGroup* pageGroup = PageGroup::pageGroup(pageGroupName);
    19511951    RefPtr<DOMWrapperWorld> world(DOMWrapperWorld::create());
     1952
     1953    // FIXME: Current callers always want the level to be "author". It probably makes sense to let
     1954    // callers specify this though, since in other cases the caller will probably want "user" level.
     1955    //
     1956    // FIXME: It would be nice to populate the URL correctly, instead of passing an empty URL.
    19521957    pageGroup->addUserStyleSheetToWorld(world.get(), sourceCode, WebURL(), patterns.release(), 0,
    1953                                         static_cast<UserContentInjectedFrames>(injectIn));
     1958                                        static_cast<UserContentInjectedFrames>(injectIn),
     1959                                        UserStyleSheet::AuthorLevel);
    19541960}
    19551961
Note: See TracChangeset for help on using the changeset viewer.