Changeset 48222 in webkit


Ignore:
Timestamp:
Sep 9, 2009 2:12:10 PM (15 years ago)
Author:
hyatt@apple.com
Message:

WebCore: https://bugs.webkit.org/show_bug.cgi?id=29102, add support for user stylesheet injection. This is similar
to user script injection but allows for user stylesheets to be added. The stylesheets are applied immediately
to all Frames in the PageGroup.

Reviewed by Adam Roben.

Added userscripts/simple-stylesheet.html test case.

  • WebCore.base.exp:
  • WebCore.gypi:
  • WebCore.vcproj/WebCore.vcproj:
  • WebCore.xcodeproj/project.pbxproj:
  • css/CSSStyleSelector.cpp:

(WebCore::CSSStyleSelector::CSSStyleSelector):

  • css/CSSStyleSelector.h:
  • dom/Document.cpp:

(WebCore::Document::Document):
(WebCore::Document::attach):
(WebCore::Document::pageGroupUserSheets):
(WebCore::Document::clearPageGroupUserSheets):
(WebCore::Document::recalcStyleSelector):

  • dom/Document.h:
  • loader/PlaceholderDocument.cpp:

(WebCore::PlaceholderDocument::attach):

  • page/PageGroup.cpp:

(WebCore::PageGroup::addUserStyleSheet):
(WebCore::PageGroup::removeUserContentForWorld):
(WebCore::PageGroup::removeAllUserContent):

  • page/PageGroup.h:

(WebCore::PageGroup::userStyleSheets):

  • page/UserStyleSheet.h: Added.

(WebCore::UserStyleSheet::UserStyleSheet):
(WebCore::UserStyleSheet::source):
(WebCore::UserStyleSheet::url):
(WebCore::UserStyleSheet::patterns):
(WebCore::UserStyleSheet::worldID):

  • page/UserStyleSheetTypes.h: Added.

WebKit/mac: https://bugs.webkit.org/show_bug.cgi?id=29102, add support for user stylesheet injection. This is similar
to user script injection but allows for user stylesheets to be added. The stylesheets are applied immediately
to all Frames in the PageGroup.

Reviewed by Adam Roben.

Added userscripts/simple-stylesheet.html test case.

  • WebView/WebView.mm:

(+[WebView _addUserStyleSheetToGroup:source:url:worldID:patterns:]):

  • WebView/WebViewPrivate.h:

LayoutTests: https://bugs.webkit.org/show_bug.cgi?id=29102, add support for user stylesheet injection. This is similar
to user script injection but allows for user stylesheets to be added. The stylesheets are applied immediately
to all Frames in the PageGroup.

Reviewed by Adam Roben.

Added userscripts/simple-stylesheet.html test case.

  • platform/mac/userscripts/simple-stylesheet-expected.checksum: Added.
  • platform/mac/userscripts/simple-stylesheet-expected.png: Added.
  • platform/mac/userscripts/simple-stylesheet-expected.txt: Added.
  • userscripts/simple-stylesheet.html: Added.
Location:
trunk
Files:
4 added
23 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r48220 r48222  
     12009-09-09  Dave Hyatt  <hyatt@apple.com>
     2
     3        Reviewed by Adam Roben.
     4
     5        https://bugs.webkit.org/show_bug.cgi?id=29102, add support for user stylesheet injection.  This is similar
     6        to user script injection but allows for user stylesheets to be added.  The stylesheets are applied immediately
     7        to all Frames in the PageGroup.
     8
     9        Added userscripts/simple-stylesheet.html test case.
     10
     11        * platform/mac/userscripts/simple-stylesheet-expected.checksum: Added.
     12        * platform/mac/userscripts/simple-stylesheet-expected.png: Added.
     13        * platform/mac/userscripts/simple-stylesheet-expected.txt: Added.
     14        * userscripts/simple-stylesheet.html: Added.
     15
    1162009-09-09  Carol Szabo  <carol.szabo@nokia.com>
    217
  • trunk/WebCore/ChangeLog

    r48220 r48222  
     12009-09-09  Dave Hyatt  <hyatt@apple.com>
     2
     3        Reviewed by Adam Roben.
     4
     5        https://bugs.webkit.org/show_bug.cgi?id=29102, add support for user stylesheet injection.  This is similar
     6        to user script injection but allows for user stylesheets to be added.  The stylesheets are applied immediately
     7        to all Frames in the PageGroup.
     8
     9        Added userscripts/simple-stylesheet.html test case.
     10
     11        * WebCore.base.exp:
     12        * WebCore.gypi:
     13        * WebCore.vcproj/WebCore.vcproj:
     14        * WebCore.xcodeproj/project.pbxproj:
     15        * css/CSSStyleSelector.cpp:
     16        (WebCore::CSSStyleSelector::CSSStyleSelector):
     17        * css/CSSStyleSelector.h:
     18        * dom/Document.cpp:
     19        (WebCore::Document::Document):
     20        (WebCore::Document::attach):
     21        (WebCore::Document::pageGroupUserSheets):
     22        (WebCore::Document::clearPageGroupUserSheets):
     23        (WebCore::Document::recalcStyleSelector):
     24        * dom/Document.h:
     25        * loader/PlaceholderDocument.cpp:
     26        (WebCore::PlaceholderDocument::attach):
     27        * page/PageGroup.cpp:
     28        (WebCore::PageGroup::addUserStyleSheet):
     29        (WebCore::PageGroup::removeUserContentForWorld):
     30        (WebCore::PageGroup::removeAllUserContent):
     31        * page/PageGroup.h:
     32        (WebCore::PageGroup::userStyleSheets):
     33        * page/UserStyleSheet.h: Added.
     34        (WebCore::UserStyleSheet::UserStyleSheet):
     35        (WebCore::UserStyleSheet::source):
     36        (WebCore::UserStyleSheet::url):
     37        (WebCore::UserStyleSheet::patterns):
     38        (WebCore::UserStyleSheet::worldID):
     39        * page/UserStyleSheetTypes.h: Added.
     40
    1412009-09-09  Carol Szabo  <carol.szabo@nokia.com>
    242
  • trunk/WebCore/WebCore.base.exp

    r48144 r48222  
    745745__ZN7WebCore9PageCache27releaseAutoreleasedPagesNowEv
    746746__ZN7WebCore9PageGroup13addUserScriptERKNS_6StringERKNS_4KURLERKN3WTF6VectorIS1_Lm0EEEjNS_23UserScriptInjectionTimeE
     747__ZN7WebCore9PageGroup17addUserStyleSheetERKNS_6StringERKNS_4KURLERKN3WTF6VectorIS1_Lm0EEEj
    747748__ZN7WebCore9PageGroup14addVisitedLinkEPKtm
    748749__ZN7WebCore9PageGroup20removeAllUserContentEv
  • trunk/WebCore/WebCore.gypi

    r48167 r48222  
    17021702            'page/UserScript.h',
    17031703            'page/UserScriptTypes.h',
     1704            'page/UserStyleSheet.h',
     1705            'page/UserStyleSheetTypes.h',
    17041706            'page/WebKitPoint.h',
    17051707            'page/WindowFeatures.cpp',
  • trunk/WebCore/WebCore.vcproj/WebCore.vcproj

    r48171 r48222  
    1706917069                                >
    1707017070                        </File>
    17071       <File
     17071                        <File
    1707217072                                RelativePath="..\page\UserScript.h"
    1707317073                                >
    1707417074                        </File>
    17075       <File
     17075                        <File
    1707617076                                RelativePath="..\page\UserScriptTypes.h"
     17077                                >
     17078                        </File>
     17079                        <File
     17080                                RelativePath="..\page\UserStyleSheet.h"
     17081                                >
     17082                        </File>
     17083                        <File
     17084                                RelativePath="..\page\UserStyleSheetTypes.h"
    1707717085                                >
    1707817086                        </File>
  • trunk/WebCore/WebCore.xcodeproj/project.pbxproj

    r48181 r48222  
    42724272                BC8B853E0E7C7F1100AB6984 /* ScrollbarThemeMac.h in Headers */ = {isa = PBXBuildFile; fileRef = BC8B853C0E7C7F1100AB6984 /* ScrollbarThemeMac.h */; };
    42734273                BC8B854B0E7C7F5600AB6984 /* ScrollbarTheme.h in Headers */ = {isa = PBXBuildFile; fileRef = BC8B854A0E7C7F5600AB6984 /* ScrollbarTheme.h */; settings = {ATTRIBUTES = (Private, ); }; };
     4274                BC8BF151105813BF00A40A07 /* UserStyleSheet.h in Headers */ = {isa = PBXBuildFile; fileRef = BC8BF150105813BF00A40A07 /* UserStyleSheet.h */; settings = {ATTRIBUTES = (Private, ); }; };
     4275                BC8BF15A1058141800A40A07 /* UserStyleSheetTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = BC8BF1591058141800A40A07 /* UserStyleSheetTypes.h */; settings = {ATTRIBUTES = (Private, ); }; };
    42744276                BC8C8FAD0DDCD31B00B592F4 /* RenderStyle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC8C8FAB0DDCD31B00B592F4 /* RenderStyle.cpp */; };
    42754277                BC8C8FAE0DDCD31B00B592F4 /* RenderStyle.h in Headers */ = {isa = PBXBuildFile; fileRef = BC8C8FAC0DDCD31B00B592F4 /* RenderStyle.h */; settings = {ATTRIBUTES = (Private, ); }; };
     
    93379339                BC8B853C0E7C7F1100AB6984 /* ScrollbarThemeMac.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ScrollbarThemeMac.h; sourceTree = "<group>"; };
    93389340                BC8B854A0E7C7F5600AB6984 /* ScrollbarTheme.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ScrollbarTheme.h; sourceTree = "<group>"; };
     9341                BC8BF150105813BF00A40A07 /* UserStyleSheet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UserStyleSheet.h; sourceTree = "<group>"; };
     9342                BC8BF1591058141800A40A07 /* UserStyleSheetTypes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UserStyleSheetTypes.h; sourceTree = "<group>"; };
    93399343                BC8C8FAB0DDCD31B00B592F4 /* RenderStyle.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = RenderStyle.cpp; path = style/RenderStyle.cpp; sourceTree = "<group>"; };
    93409344                BC8C8FAC0DDCD31B00B592F4 /* RenderStyle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RenderStyle.h; path = style/RenderStyle.h; sourceTree = "<group>"; };
     
    1105011054                                BCA2B0601050475F0043BD1C /* UserScript.h */,
    1105111055                                BCA2B08A10505BCD0043BD1C /* UserScriptTypes.h */,
     11056                                BC8BF150105813BF00A40A07 /* UserStyleSheet.h */,
     11057                                BC8BF1591058141800A40A07 /* UserStyleSheetTypes.h */,
    1105211058                                494BD7930F55C8EE00747828 /* WebKitPoint.h */,
    1105311059                                494BD7940F55C8EE00747828 /* WebKitPoint.idl */,
     
    1778917795                                49EED1471051969400099FAB /* JSCanvasRenderingContext3D.h in Headers */,
    1779017796                                59C77F2B10545B3B00506104 /* GeolocationServiceMock.h in Headers */,
     17797                                BC8BF151105813BF00A40A07 /* UserStyleSheet.h in Headers */,
     17798                                BC8BF15A1058141800A40A07 /* UserStyleSheetTypes.h in Headers */,
    1779117799                        );
    1779217800                        runOnlyForDeploymentPostprocessing = 0;
  • trunk/WebCore/css/CSSStyleSelector.cpp

    r48181 r48222  
    409409}
    410410
    411 CSSStyleSelector::CSSStyleSelector(Document* doc, CSSStyleSheet* userSheet, StyleSheetList* styleSheets, CSSStyleSheet* mappedElementSheet, bool strictParsing, bool matchAuthorAndUserStyles)
     411CSSStyleSelector::CSSStyleSelector(Document* doc, StyleSheetList* styleSheets, CSSStyleSheet* mappedElementSheet,
     412                                   CSSStyleSheet* pageUserSheet, const Vector<RefPtr<CSSStyleSheet> >* pageGroupUserSheets,
     413                                   bool strictParsing, bool matchAuthorAndUserStyles)
    412414    : m_backgroundData(BackgroundFillLayer)
    413415    , m_checker(doc, strictParsing)
     
    450452
    451453    // FIXME: This sucks! The user sheet is reparsed every time!
    452     if (userSheet) {
     454    if (pageUserSheet || pageGroupUserSheets) {
    453455        m_userStyle = new CSSRuleSet();
    454         m_userStyle->addRulesFromSheet(userSheet, *m_medium, this);
     456        if (pageUserSheet)
     457            m_userStyle->addRulesFromSheet(pageUserSheet, *m_medium, this);
     458        if (pageGroupUserSheets) {
     459            unsigned length = pageGroupUserSheets->size();
     460            for (unsigned i = 0; i < length; i++)
     461                m_userStyle->addRulesFromSheet(pageGroupUserSheets->at(i).get(), *m_medium, this);
     462        }
    455463    }
    456464
  • trunk/WebCore/css/CSSStyleSelector.h

    r48181 r48222  
    8181    class CSSStyleSelector : public Noncopyable {
    8282    public:
    83         CSSStyleSelector(Document*, CSSStyleSheet* userStyleSheet, StyleSheetList* authorSheets, CSSStyleSheet* mappedElementSheet,
     83        CSSStyleSelector(Document*, StyleSheetList* authorSheets, CSSStyleSheet* mappedElementSheet,
     84                         CSSStyleSheet* pageUserSheet, const Vector<RefPtr<CSSStyleSheet> >* pageGroupUserSheets,
    8485                         bool strictParsing, bool matchAuthorAndUserStyles);
    8586        ~CSSStyleSelector();
  • trunk/WebCore/dom/Document.cpp

    r48188 r48222  
    9595#include "OverflowEvent.h"
    9696#include "Page.h"
     97#include "PageGroup.h"
    9798#include "PageTransitionEvent.h"
    9899#include "PlatformKeyboardEvent.h"
     
    350351    m_document = this;
    351352
     353    m_pageGroupUserSheetCacheValid = false;
     354
    352355    m_printing = false;
    353356   
     
    13771380        if (Settings* docSettings = settings())
    13781381            matchAuthorAndUserStyles = docSettings->authorAndUserStylesEnabled();
    1379         m_styleSelector = new CSSStyleSelector(this, pageUserSheet(), m_styleSheets.get(), m_mappedElementSheet.get(), !inCompatMode(), matchAuthorAndUserStyles);
     1382        m_styleSelector = new CSSStyleSelector(this, m_styleSheets.get(), m_mappedElementSheet.get(), pageUserSheet(), pageGroupUserSheets(),
     1383                                               !inCompatMode(), matchAuthorAndUserStyles);
    13801384    }
    13811385
     
    19391943{
    19401944    m_pageUserSheet = 0;
     1945    updateStyleSelector();
     1946}
     1947
     1948const Vector<RefPtr<CSSStyleSheet> >* Document::pageGroupUserSheets() const
     1949{
     1950    if (m_pageGroupUserSheetCacheValid)
     1951        return m_pageGroupUserSheets.get();
     1952   
     1953    m_pageGroupUserSheetCacheValid = true;
     1954   
     1955    Page* owningPage = page();
     1956    if (!owningPage)
     1957        return 0;
     1958       
     1959    const PageGroup& pageGroup = owningPage->group();
     1960    const UserStyleSheetMap* sheetsMap = pageGroup.userStyleSheets();
     1961    if (!sheetsMap)
     1962        return 0;
     1963
     1964    UserStyleSheetMap::const_iterator end = sheetsMap->end();
     1965    for (UserStyleSheetMap::const_iterator it = sheetsMap->begin(); it != end; ++it) {
     1966        const UserStyleSheetVector* sheets = it->second;
     1967        for (unsigned i = 0; i < sheets->size(); ++i) {
     1968            const UserStyleSheet* sheet = sheets->at(i).get();
     1969            RefPtr<CSSStyleSheet> parsedSheet = CSSStyleSheet::create(const_cast<Document*>(this));
     1970            parsedSheet->parseString(sheet->source(), !inCompatMode());
     1971            if (!m_pageGroupUserSheets)
     1972                m_pageGroupUserSheets.set(new Vector<RefPtr<CSSStyleSheet> >);
     1973            m_pageGroupUserSheets->append(parsedSheet.release());
     1974        }
     1975    }
     1976
     1977    return m_pageGroupUserSheets.get();
     1978}
     1979
     1980void Document::clearPageGroupUserSheets()
     1981{
     1982    m_pageGroupUserSheets.clear();
     1983    m_pageGroupUserSheetCacheValid = false;
    19411984    updateStyleSelector();
    19421985}
     
    25032546    // Create a new style selector
    25042547    delete m_styleSelector;
    2505     m_styleSelector = new CSSStyleSelector(this, pageUserSheet(), m_styleSheets.get(), m_mappedElementSheet.get(), !inCompatMode(), matchAuthorAndUserStyles);
     2548    m_styleSelector = new CSSStyleSelector(this, m_styleSheets.get(), m_mappedElementSheet.get(),
     2549                                           pageUserSheet(), pageGroupUserSheets(), !inCompatMode(), matchAuthorAndUserStyles);
    25062550    m_didCalculateStyleSelector = true;
    25072551}
  • trunk/WebCore/dom/Document.h

    r48188 r48222  
    445445    void clearPageUserSheet();
    446446
     447    const Vector<RefPtr<CSSStyleSheet> >* pageGroupUserSheets() const;
     448    void clearPageGroupUserSheets();
     449
    447450    CSSStyleSheet* elementSheet();
    448451    CSSStyleSheet* mappedElementSheet();
     
    935938    RefPtr<CSSStyleSheet> m_mappedElementSheet;
    936939    RefPtr<CSSStyleSheet> m_pageUserSheet;
    937    
     940    mutable OwnPtr<Vector<RefPtr<CSSStyleSheet> > > m_pageGroupUserSheets;
     941    mutable bool m_pageGroupUserSheetCacheValid;
     942
    938943    bool m_printing;
    939944   
  • trunk/WebCore/loader/PlaceholderDocument.cpp

    r48181 r48222  
    3838    if (!styleSelector()) {
    3939        RefPtr<StyleSheetList> styleSheetList = StyleSheetList::create(this);
    40         setStyleSelector(new CSSStyleSelector(this, pageUserSheet(), styleSheetList.get(), 0, true, false));
     40        setStyleSelector(new CSSStyleSelector(this, styleSheetList.get(), 0, pageUserSheet(), pageGroupUserSheets(), true, false));
    4141    }
    4242
  • trunk/WebCore/page/PageGroup.cpp

    r48057 r48222  
    2929#include "ChromeClient.h"
    3030#include "Document.h"
     31#include "Frame.h"
    3132#include "Page.h"
    3233#include "Settings.h"
     
    213214}
    214215
     216void PageGroup::addUserStyleSheet(const String& source, const KURL& url, const Vector<String>& patterns, unsigned worldID)
     217{
     218    if (worldID == UINT_MAX)
     219        return;
     220    OwnPtr<UserStyleSheet> userStyleSheet(new UserStyleSheet(source, url, patterns, worldID));
     221    if (!m_userStyleSheets)
     222        m_userStyleSheets.set(new UserStyleSheetMap);
     223    UserStyleSheetVector*& styleSheetsInWorld = m_userStyleSheets->add(worldID, 0).first->second;
     224    if (!styleSheetsInWorld)
     225        styleSheetsInWorld = new UserStyleSheetVector;
     226    styleSheetsInWorld->append(userStyleSheet.release());
     227   
     228    // Clear our cached sheets and have them just reparse.
     229    HashSet<Page*>::const_iterator end = m_pages.end();
     230    for (HashSet<Page*>::const_iterator it = m_pages.begin(); it != end; ++it) {
     231        for (Frame* frame = (*it)->mainFrame(); frame; frame = frame->tree()->traverseNext())
     232            frame->document()->clearPageGroupUserSheets();
     233    }
     234}
     235
    215236void PageGroup::removeUserContentForWorld(unsigned worldID)
    216237{
    217     if (!m_userScripts)
    218         return;
    219 
    220     UserScriptMap::iterator it = m_userScripts->find(worldID);
    221     if (it != m_userScripts->end()) {
    222         m_userScripts->remove(it);
    223         delete it->second;
     238    if (m_userScripts) {
     239        UserScriptMap::iterator it = m_userScripts->find(worldID);
     240        if (it != m_userScripts->end()) {
     241            m_userScripts->remove(it);
     242            delete it->second;
     243        }
     244    }
     245   
     246    if (m_userStyleSheets) {
     247        UserStyleSheetMap::iterator it = m_userStyleSheets->find(worldID);
     248        if (it != m_userStyleSheets->end()) {
     249            m_userStyleSheets->remove(it);
     250            delete it->second;
     251        }
    224252    }
    225253}
     
    231259        m_userScripts.clear();
    232260    }
     261   
     262   
     263    if (m_userStyleSheets) {
     264        deleteAllValues(*m_userStyleSheets);
     265        m_userStyleSheets.clear();
     266    }
    233267}
    234268
  • trunk/WebCore/page/PageGroup.h

    r48057 r48222  
    3232#include "StringHash.h"
    3333#include "UserScript.h"
     34#include "UserStyleSheet.h"
    3435
    3536namespace WebCore {
     
    7374                           unsigned worldID, UserScriptInjectionTime);
    7475        const UserScriptMap* userScripts() const { return m_userScripts.get(); }
    75 
     76       
     77        void addUserStyleSheet(const String& source, const KURL&, const Vector<String>& patterns, unsigned worldID);
     78        const UserStyleSheetMap* userStyleSheets() const { return m_userStyleSheets.get(); }
     79       
    7680        void removeUserContentForWorld(unsigned);
    7781        void removeAllUserContent();
     
    9397
    9498        OwnPtr<UserScriptMap> m_userScripts;
     99        OwnPtr<UserStyleSheetMap> m_userStyleSheets;
    95100    };
    96101
  • trunk/WebCore/page/UserScriptTypes.h

    r48057 r48222  
    3737
    3838typedef Vector<OwnPtr<UserScript> > UserScriptVector;
    39 typedef HashMap<int, UserScriptVector*> UserScriptMap;
     39typedef HashMap<unsigned, UserScriptVector*> UserScriptMap;
    4040
    4141} // namsepace WebCore
  • trunk/WebKit/mac/ChangeLog

    r48144 r48222  
     12009-09-09  Dave Hyatt  <hyatt@apple.com>
     2
     3        Reviewed by Adam Roben.
     4
     5        https://bugs.webkit.org/show_bug.cgi?id=29102, add support for user stylesheet injection.  This is similar
     6        to user script injection but allows for user stylesheets to be added.  The stylesheets are applied immediately
     7        to all Frames in the PageGroup.
     8
     9        Added userscripts/simple-stylesheet.html test case.
     10
     11        * WebView/WebView.mm:
     12        (+[WebView _addUserStyleSheetToGroup:source:url:worldID:patterns:]):
     13        * WebView/WebViewPrivate.h:
     14
    1152009-09-07  Steve Block  <steveblock@google.com>
    216
  • trunk/WebKit/mac/WebView/WebView.mm

    r48057 r48222  
    21342134}
    21352135
     2136+ (void)_addUserStyleSheetToGroup:(NSString *)groupName source:(NSString *)source url:(NSURL *)url worldID:(unsigned)worldID patterns:(NSArray *)patterns
     2137{
     2138    String group(groupName);
     2139    if (group.isEmpty() || worldID == UINT_MAX)
     2140        return;
     2141   
     2142    PageGroup* pageGroup = PageGroup::pageGroup(group);
     2143    if (!pageGroup)
     2144        return;
     2145   
     2146    // Convert the patterns into a Vector.
     2147    Vector<String> patternsVector;
     2148    NSUInteger count = [patterns count];
     2149    for (NSUInteger i = 0; i < count; ++i) {
     2150        id entry = [patterns objectAtIndex: i];
     2151        if ([entry isKindOfClass:[NSString class]])
     2152            patternsVector.append(String((NSString*)entry));
     2153    }
     2154   
     2155    pageGroup->addUserStyleSheet(source, url, patternsVector, worldID);
     2156}
     2157
    21362158+ (void)_removeUserContentFromGroup:(NSString *)groupName worldID:(unsigned)worldID
    21372159{
  • trunk/WebKit/mac/WebView/WebViewPrivate.h

    r48057 r48222  
    459459
    460460+ (void)_addUserScriptToGroup:(NSString *)groupName source:(NSString *)source url:(NSURL *)url worldID:(unsigned)worldID patterns:(NSArray *)patterns injectionTime:(WebUserScriptInjectionTime)injectionTime;
     461+ (void)_addUserStyleSheetToGroup:(NSString *)groupName source:(NSString *)source url:(NSURL *)url worldID:(unsigned)worldID patterns:(NSArray *)patterns;
    461462+ (void)_removeUserContentFromGroup:(NSString *)groupName worldID:(unsigned)worldID;
    462463+ (void)_removeAllUserContentFromGroup:(NSString *)groupName;
  • trunk/WebKitTools/DumpRenderTree/LayoutTestController.cpp

    r48156 r48222  
    969969}
    970970 
     971static JSValueRef addUserStyleSheetCallback(JSContextRef context, JSObjectRef, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
     972{
     973    if (argumentCount != 1)
     974        return JSValueMakeUndefined(context);
     975   
     976    JSRetainPtr<JSStringRef> source(Adopt, JSValueToStringCopy(context, arguments[0], exception));
     977    ASSERT(!*exception);
     978   
     979    LayoutTestController* controller = static_cast<LayoutTestController*>(JSObjectGetPrivate(thisObject));
     980    controller->addUserStyleSheet(source.get());
     981    return JSValueMakeUndefined(context);
     982}
     983
    971984// Static Values
    972985
     
    10461059        { "addDisallowedURL", addDisallowedURLCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
    10471060        { "addUserScript", addUserScriptCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
     1061        { "addUserStyleSheet", addUserStyleSheetCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
    10481062        { "clearAllDatabases", clearAllDatabasesCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
    10491063        { "clearBackForwardList", clearBackForwardListCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
  • trunk/WebKitTools/DumpRenderTree/LayoutTestController.h

    r48156 r48222  
    189189
    190190    void addUserScript(JSStringRef source, bool runAtStart);
     191    void addUserStyleSheet(JSStringRef source);
    191192
    192193    void setGeolocationPermission(bool allow);
  • trunk/WebKitTools/DumpRenderTree/gtk/LayoutTestControllerGtk.cpp

    r48144 r48222  
    467467    printf("LayoutTestController::addUserScript not implemented.\n");
    468468}
     469
     470void LayoutTestController::addUserStyleSheet(JSStringRef source)
     471{
     472    printf("LayoutTestController::addUserStyleSheet not implemented.\n");
     473}
  • trunk/WebKitTools/DumpRenderTree/mac/LayoutTestControllerMac.mm

    r48144 r48222  
    485485    [WebView _addUserScriptToGroup:@"org.webkit.DumpRenderTree" source:sourceNS url:nil worldID:1 patterns:nil injectionTime:(runAtStart ? WebInjectAtDocumentStart : WebInjectAtDocumentEnd)];
    486486}
     487
     488void LayoutTestController::addUserStyleSheet(JSStringRef source)
     489{
     490    RetainPtr<CFStringRef> sourceCF(AdoptCF, JSStringCopyCFString(kCFAllocatorDefault, source));
     491    NSString *sourceNS = (NSString *)sourceCF.get();
     492    [WebView _addUserStyleSheetToGroup:@"org.webkit.DumpRenderTree" source:sourceNS url:nil worldID:1 patterns:nil];
     493}
     494
  • trunk/WebKitTools/DumpRenderTree/win/LayoutTestControllerWin.cpp

    r48144 r48222  
    849849    printf("LayoutTestController::addUserScript not implemented.\n");
    850850}
     851
     852
     853void LayoutTestController::addUserStyleSheet(JSStringRef source)
     854{
     855    printf("LayoutTestController::addUserStyleSheet not implemented.\n");
     856}
  • trunk/WebKitTools/DumpRenderTree/wx/LayoutTestControllerWx.cpp

    r48144 r48222  
    294294    printf("LayoutTestController::addUserScript not implemented.\n");
    295295}
     296
     297void LayoutTestController::addUserStyleSheet(JSStringRef source)
     298{
     299    printf("LayoutTestController::addUserStyleSheet not implemented.\n");
     300}
Note: See TracChangeset for help on using the changeset viewer.