Changeset 261726 in webkit


Ignore:
Timestamp:
May 14, 2020 5:33:37 PM (4 years ago)
Author:
timothy@apple.com
Message:

Add baseURL version of _WKUserStyleSheet forWKWebView.
https://bugs.webkit.org/show_bug.cgi?id=211926
rdar://problem/62074675

Reviewed by Devin Rousso.

Source/WebCore:

Consolidate the paths taken for adding a UserStyleSheet. The m_injectedStyleSheetToSource
was missing for page specific style sheets since it was another loop.

  • dom/ExtensionStyleSheets.cpp:

(WebCore::ExtensionStyleSheets::updateInjectedStyleSheetCache const):
(WebCore::ExtensionStyleSheets::injectPageSpecificUserStyleSheet):
(WebCore::ExtensionStyleSheets::removePageSpecificUserStyleSheet):
(WebCore::ExtensionStyleSheets::detachFromDocument):

  • dom/ExtensionStyleSheets.h:

Source/WebKit:

  • UIProcess/API/Cocoa/_WKUserStyleSheet.h:
  • UIProcess/API/Cocoa/_WKUserStyleSheet.mm:

(-[_WKUserStyleSheet initWithSource:forWKWebView:forMainFrameOnly:baseURL:level:userContentWorld:]): Added.
(-[_WKUserStyleSheet initWithSource:forWKWebView:forMainFrameOnly:level:userContentWorld:]): Clean up WebCore::UserStyleSheet initializer.
(-[_WKUserStyleSheet initWithSource:forMainFrameOnly:]): Ditto.
(-[_WKUserStyleSheet initWithSource:forMainFrameOnly:legacyWhitelist:legacyBlacklist:userContentWorld:]): Ditto.
(-[_WKUserStyleSheet initWithSource:forMainFrameOnly:legacyWhitelist:legacyBlacklist:baseURL:userContentWorld:]): Ditto.
(-[_WKUserStyleSheet initWithSource:forMainFrameOnly:legacyWhitelist:legacyBlacklist:baseURL:level:userContentWorld:]): Ditto.

Location:
trunk/Source
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r261723 r261726  
     12020-05-14  Timothy Hatcher  <timothy@apple.com>
     2
     3        Add baseURL version of _WKUserStyleSheet forWKWebView.
     4        https://bugs.webkit.org/show_bug.cgi?id=211926
     5        rdar://problem/62074675
     6
     7        Reviewed by Devin Rousso.
     8
     9        Consolidate the paths taken for adding a UserStyleSheet. The m_injectedStyleSheetToSource
     10        was missing for page specific style sheets since it was another loop.
     11
     12        * dom/ExtensionStyleSheets.cpp:
     13        (WebCore::ExtensionStyleSheets::updateInjectedStyleSheetCache const):
     14        (WebCore::ExtensionStyleSheets::injectPageSpecificUserStyleSheet):
     15        (WebCore::ExtensionStyleSheets::removePageSpecificUserStyleSheet):
     16        (WebCore::ExtensionStyleSheets::detachFromDocument):
     17        * dom/ExtensionStyleSheets.h:
     18
    1192020-05-14  Jiewen Tan  <jiewen_tan@apple.com>
    220
  • trunk/Source/WebCore/dom/ExtensionStyleSheets.cpp

    r260709 r261726  
    128128        return;
    129129
    130     for (const auto& pageSpecificStyleSheet : m_pageSpecificStyleSheets) {
    131         if (pageSpecificStyleSheet->contents().isUserStyleSheet())
    132             m_injectedUserStyleSheets.append(pageSpecificStyleSheet);
     130    auto addStyleSheet = [&](const UserStyleSheet& userStyleSheet) {
     131        auto sheet = createExtensionsStyleSheet(const_cast<Document&>(m_document), userStyleSheet.url(), userStyleSheet.source(), userStyleSheet.level());
     132
     133        m_injectedStyleSheetToSource.set(sheet.copyRef(), userStyleSheet.source());
     134
     135        if (sheet->contents().isUserStyleSheet())
     136            m_injectedUserStyleSheets.append(WTFMove(sheet));
    133137        else
    134             m_injectedAuthorStyleSheets.append(pageSpecificStyleSheet);
    135     }
     138            m_injectedAuthorStyleSheets.append(WTFMove(sheet));
     139    };
     140
     141    for (const auto& userStyleSheet : m_pageSpecificStyleSheets)
     142        addStyleSheet(userStyleSheet);
    136143
    137144    owningPage->userContentProvider().forEachUserStyleSheet([&](const UserStyleSheet& userStyleSheet) {
     
    145152            return;
    146153
    147         auto sheet = createExtensionsStyleSheet(const_cast<Document&>(m_document), userStyleSheet.url(), userStyleSheet.source(), userStyleSheet.level());
    148 
    149         m_injectedStyleSheetToSource.set(sheet.copyRef(), userStyleSheet.source());
    150 
    151         if (userStyleSheet.level() == UserStyleUserLevel)
    152             m_injectedUserStyleSheets.append(WTFMove(sheet));
    153         else
    154             m_injectedAuthorStyleSheets.append(WTFMove(sheet));
     154        addStyleSheet(userStyleSheet);
    155155    });
    156156}
     
    158158void ExtensionStyleSheets::injectPageSpecificUserStyleSheet(const UserStyleSheet& userStyleSheet)
    159159{
    160     auto sheet = createExtensionsStyleSheet(const_cast<Document&>(m_document), userStyleSheet.url(), userStyleSheet.source(), userStyleSheet.level());
    161     m_pageSpecificStyleSheets.append(WTFMove(sheet));
     160    m_pageSpecificStyleSheets.append(userStyleSheet);
    162161    invalidateInjectedStyleSheetCache();
    163162}
     
    165164void ExtensionStyleSheets::removePageSpecificUserStyleSheet(const UserStyleSheet& userStyleSheet)
    166165{
    167     bool removedStyleSheet = m_pageSpecificStyleSheets.removeFirstMatching([userStyleSheet](auto& cssStyleSheet) {
    168         return cssStyleSheet->contents().originalURL() == userStyleSheet.url();
     166    bool removedStyleSheet = m_pageSpecificStyleSheets.removeFirstMatching([&](const auto& styleSheet) {
     167        return styleSheet.url() == userStyleSheet.url();
    169168    });
    170169
     
    238237    for (auto& sheet : m_authorStyleSheetsForTesting)
    239238        sheet->detachFromDocument();
    240     for (auto& sheet : m_pageSpecificStyleSheets)
    241         sheet->detachFromDocument();
    242 }
    243 
    244 }
     239}
     240
     241}
  • trunk/Source/WebCore/dom/ExtensionStyleSheets.h

    r257939 r261726  
    2828#pragma once
    2929
     30#include "UserStyleSheet.h"
    3031#include <memory>
    3132#include <wtf/FastMalloc.h>
     
    4748class StyleSheetContents;
    4849class StyleSheetList;
    49 class UserStyleSheet;
    5050
    5151class ExtensionStyleSheets {
     
    9393    Vector<RefPtr<CSSStyleSheet>> m_userStyleSheets;
    9494    Vector<RefPtr<CSSStyleSheet>> m_authorStyleSheetsForTesting;
    95     Vector<RefPtr<CSSStyleSheet>> m_pageSpecificStyleSheets;
     95    Vector<UserStyleSheet> m_pageSpecificStyleSheets;
    9696
    9797#if ENABLE(CONTENT_EXTENSIONS)
  • trunk/Source/WebKit/ChangeLog

    r261724 r261726  
     12020-05-14  Timothy Hatcher  <timothy@apple.com>
     2
     3        Add baseURL version of _WKUserStyleSheet forWKWebView.
     4        https://bugs.webkit.org/show_bug.cgi?id=211926
     5        rdar://problem/62074675
     6
     7        Reviewed by Devin Rousso.
     8
     9        * UIProcess/API/Cocoa/_WKUserStyleSheet.h:
     10        * UIProcess/API/Cocoa/_WKUserStyleSheet.mm:
     11        (-[_WKUserStyleSheet initWithSource:forWKWebView:forMainFrameOnly:baseURL:level:userContentWorld:]): Added.
     12        (-[_WKUserStyleSheet initWithSource:forWKWebView:forMainFrameOnly:level:userContentWorld:]): Clean up WebCore::UserStyleSheet initializer.
     13        (-[_WKUserStyleSheet initWithSource:forMainFrameOnly:]): Ditto.
     14        (-[_WKUserStyleSheet initWithSource:forMainFrameOnly:legacyWhitelist:legacyBlacklist:userContentWorld:]): Ditto.
     15        (-[_WKUserStyleSheet initWithSource:forMainFrameOnly:legacyWhitelist:legacyBlacklist:baseURL:userContentWorld:]): Ditto.
     16        (-[_WKUserStyleSheet initWithSource:forMainFrameOnly:legacyWhitelist:legacyBlacklist:baseURL:level:userContentWorld:]): Ditto.
     17
    1182020-05-14  John Wilander  <wilander@apple.com>
    219
  • trunk/Source/WebKit/UIProcess/API/Cocoa/_WKUserStyleSheet.h

    r260334 r261726  
    5050#pragma clang diagnostic ignored "-Wdeprecated-declarations"
    5151- (instancetype)initWithSource:(NSString *)source forWKWebView:(WKWebView *)webView forMainFrameOnly:(BOOL)forMainFrameOnly level:(_WKUserStyleLevel)level userContentWorld:(_WKUserContentWorld *)userContentWorld WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA));
     52- (instancetype)initWithSource:(NSString *)source forWKWebView:(WKWebView *)webView forMainFrameOnly:(BOOL)forMainFrameOnly baseURL:(NSURL *)baseURL level:(_WKUserStyleLevel)level userContentWorld:(_WKUserContentWorld *)userContentWorld WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA));
    5253- (instancetype)initWithSource:(NSString *)source forMainFrameOnly:(BOOL)forMainFrameOnly legacyWhitelist:(NSArray<NSString *> *)legacyWhitelist legacyBlacklist:(NSArray<NSString *> *)legacyBlacklist userContentWorld:(_WKUserContentWorld *)userContentWorld;
    5354- (instancetype)initWithSource:(NSString *)source forMainFrameOnly:(BOOL)forMainFrameOnly legacyWhitelist:(NSArray<NSString *> *)legacyWhitelist legacyBlacklist:(NSArray<NSString *> *)legacyBlacklist baseURL:(NSURL *)baseURL userContentWorld:(_WKUserContentWorld *)userContentWorld;
  • trunk/Source/WebKit/UIProcess/API/Cocoa/_WKUserStyleSheet.mm

    r260254 r261726  
    4646    WebKit::InitializeWebKit2();
    4747
    48     API::Object::constructInWrapper<API::UserStyleSheet>(self, WebCore::UserStyleSheet { WTF::String(source), API::UserStyleSheet::generateUniqueURL(), { }, { }, forMainFrameOnly ? WebCore::UserContentInjectedFrames::InjectInTopFrameOnly : WebCore::UserContentInjectedFrames::InjectInAllFrames, WebCore::UserStyleUserLevel }, API::ContentWorld::pageContentWorld());
     48    API::Object::constructInWrapper<API::UserStyleSheet>(self, WebCore::UserStyleSheet { source, API::UserStyleSheet::generateUniqueURL(), { }, { }, forMainFrameOnly ? WebCore::UserContentInjectedFrames::InjectInTopFrameOnly : WebCore::UserContentInjectedFrames::InjectInAllFrames, WebCore::UserStyleUserLevel }, API::ContentWorld::pageContentWorld());
    4949
    5050    return self;
     
    6060    WebKit::InitializeWebKit2();
    6161
    62     API::Object::constructInWrapper<API::UserStyleSheet>(self, WebCore::UserStyleSheet { WTF::String(source), API::UserStyleSheet::generateUniqueURL(), { },  { }, forMainFrameOnly ? WebCore::UserContentInjectedFrames::InjectInTopFrameOnly : WebCore::UserContentInjectedFrames::InjectInAllFrames, API::toWebCoreUserStyleLevel(level), [webView _page]->webPageID() }, *userContentWorld->_contentWorld->_contentWorld);
     62    API::Object::constructInWrapper<API::UserStyleSheet>(self, WebCore::UserStyleSheet { source, API::UserStyleSheet::generateUniqueURL(), { }, { }, forMainFrameOnly ? WebCore::UserContentInjectedFrames::InjectInTopFrameOnly : WebCore::UserContentInjectedFrames::InjectInAllFrames, API::toWebCoreUserStyleLevel(level), [webView _page]->webPageID() }, *userContentWorld->_contentWorld->_contentWorld);
     63
     64    return self;
     65}
     66
     67- (instancetype)initWithSource:(NSString *)source forWKWebView:(WKWebView *)webView forMainFrameOnly:(BOOL)forMainFrameOnly baseURL:(NSURL *)baseURL level:(_WKUserStyleLevel)level userContentWorld:(_WKUserContentWorld *)userContentWorld
     68{
     69    if (!(self = [super init]))
     70        return nil;
     71
     72    // FIXME: In the API test, we can use generateUniqueURL below before the API::Object constructor has done this... where should this really be?
     73    WebKit::InitializeWebKit2();
     74
     75    API::Object::constructInWrapper<API::UserStyleSheet>(self, WebCore::UserStyleSheet { source, baseURL, { }, { }, forMainFrameOnly ? WebCore::UserContentInjectedFrames::InjectInTopFrameOnly : WebCore::UserContentInjectedFrames::InjectInAllFrames, API::toWebCoreUserStyleLevel(level), [webView _page]->webPageID() }, *userContentWorld->_contentWorld->_contentWorld);
    6376
    6477    return self;
     
    7386    WebKit::InitializeWebKit2();
    7487
    75     API::Object::constructInWrapper<API::UserStyleSheet>(self, WebCore::UserStyleSheet { WTF::String(source), API::UserStyleSheet::generateUniqueURL(), makeVector<String>(legacyWhitelist), makeVector<String>(legacyBlacklist), forMainFrameOnly ? WebCore::UserContentInjectedFrames::InjectInTopFrameOnly : WebCore::UserContentInjectedFrames::InjectInAllFrames, WebCore::UserStyleUserLevel }, *userContentWorld->_contentWorld->_contentWorld);
     88    API::Object::constructInWrapper<API::UserStyleSheet>(self, WebCore::UserStyleSheet { source, API::UserStyleSheet::generateUniqueURL(), makeVector<String>(legacyWhitelist), makeVector<String>(legacyBlacklist), forMainFrameOnly ? WebCore::UserContentInjectedFrames::InjectInTopFrameOnly : WebCore::UserContentInjectedFrames::InjectInAllFrames, WebCore::UserStyleUserLevel }, *userContentWorld->_contentWorld->_contentWorld);
    7689
    7790    return self;
     
    8699    WebKit::InitializeWebKit2();
    87100
    88     API::Object::constructInWrapper<API::UserStyleSheet>(self, WebCore::UserStyleSheet { WTF::String(source), {  URL(), WTF::String([baseURL _web_originalDataAsWTFString]) }, makeVector<String>(legacyWhitelist), makeVector<String>(legacyBlacklist), forMainFrameOnly ? WebCore::UserContentInjectedFrames::InjectInTopFrameOnly : WebCore::UserContentInjectedFrames::InjectInAllFrames, WebCore::UserStyleUserLevel }, *userContentWorld->_contentWorld->_contentWorld);
     101    API::Object::constructInWrapper<API::UserStyleSheet>(self, WebCore::UserStyleSheet { source, baseURL, makeVector<String>(legacyWhitelist), makeVector<String>(legacyBlacklist), forMainFrameOnly ? WebCore::UserContentInjectedFrames::InjectInTopFrameOnly : WebCore::UserContentInjectedFrames::InjectInAllFrames, WebCore::UserStyleUserLevel }, *userContentWorld->_contentWorld->_contentWorld);
    89102
    90103    return self;
     
    99112    WebKit::InitializeWebKit2();
    100113
    101     API::Object::constructInWrapper<API::UserStyleSheet>(self, WebCore::UserStyleSheet { WTF::String(source), {  URL(), WTF::String([baseURL _web_originalDataAsWTFString]) }, makeVector<String>(legacyWhitelist), makeVector<String>(legacyBlacklist), forMainFrameOnly ? WebCore::UserContentInjectedFrames::InjectInTopFrameOnly : WebCore::UserContentInjectedFrames::InjectInAllFrames, API::toWebCoreUserStyleLevel(level) }, *userContentWorld->_contentWorld->_contentWorld);
     114    API::Object::constructInWrapper<API::UserStyleSheet>(self, WebCore::UserStyleSheet { source, baseURL, makeVector<String>(legacyWhitelist), makeVector<String>(legacyBlacklist), forMainFrameOnly ? WebCore::UserContentInjectedFrames::InjectInTopFrameOnly : WebCore::UserContentInjectedFrames::InjectInAllFrames, API::toWebCoreUserStyleLevel(level) }, *userContentWorld->_contentWorld->_contentWorld);
    102115
    103116    return self;
Note: See TracChangeset for help on using the changeset viewer.