Skip to content

Commit

Permalink
Generate IPC serialization for WebCore::UserStyleLevel enumeration
Browse files Browse the repository at this point in the history
https://bugs.webkit.org/show_bug.cgi?id=264403

Reviewed by Chris Dumez and Michael Catanzaro.

Turn the WebCore::UserStyleLevel enumeration into a scoped one, adjusting uses
of values accordingly. This enables removing the EnumTraits specialization in
favor of better-handled IPC serialization specification.

* Source/WebCore/dom/ExtensionStyleSheets.cpp:
(WebCore::createExtensionsStyleSheet):
(WebCore::ExtensionStyleSheets::pageUserSheet):
* Source/WebCore/page/UserStyleSheet.h:
(WebCore::UserStyleSheet::UserStyleSheet):
* Source/WebCore/page/UserStyleSheetTypes.h:
* Source/WebKit/Shared/WebCoreArgumentCoders.serialization.in:
* Source/WebKit/UIProcess/API/Cocoa/_WKUserStyleSheet.mm:
(-[_WKUserStyleSheet initWithSource:forMainFrameOnly:]):
* Source/WebKit/UIProcess/API/Cocoa/_WKUserStyleSheetInternal.h:
(API::toWebCoreUserStyleLevel):
* Source/WebKit/UIProcess/API/glib/WebKitUserContent.cpp:
(toUserStyleLevel):
* Source/WebKit/UIProcess/Extensions/Cocoa/WebExtensionContextCocoa.mm:
(WebKit::WebExtensionContext::addInjectedContent):
* Source/WebKit/UIProcess/Extensions/Cocoa/WebExtensionDynamicScriptsCocoa.mm:
(WebKit::WebExtensionDynamicScripts::injectStyleSheets):
* Source/WebKit/WebProcess/WebPage/WebPage.cpp:
(WebKit::WebPage::addUserStyleSheet):
* Source/WebKitLegacy/mac/WebView/WebView.mm:
(+[WebView _addUserStyleSheetToGroup:world:source:url:includeMatchPatternStrings:excludeMatchPatternStrings:injectedFrames:]):

Canonical link: https://commits.webkit.org/270452@main
  • Loading branch information
zdobersek committed Nov 9, 2023
1 parent 5a9734b commit ead871f
Show file tree
Hide file tree
Showing 11 changed files with 17 additions and 28 deletions.
4 changes: 2 additions & 2 deletions Source/WebCore/dom/ExtensionStyleSheets.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ static Ref<CSSStyleSheet> createExtensionsStyleSheet(Document& document, URL url
auto contents = StyleSheetContents::create(url.string(), CSSParserContext(document, url));
auto styleSheet = CSSStyleSheet::create(contents.get(), document, true);

contents->setIsUserStyleSheet(level == UserStyleUserLevel);
contents->setIsUserStyleSheet(level == UserStyleLevel::User);
contents->parseString(text);

return styleSheet;
Expand All @@ -81,7 +81,7 @@ CSSStyleSheet* ExtensionStyleSheets::pageUserSheet()
if (userSheetText.isEmpty())
return 0;

m_pageUserSheet = createExtensionsStyleSheet(m_document, m_document.settings().userStyleSheetLocation(), userSheetText, UserStyleUserLevel);
m_pageUserSheet = createExtensionsStyleSheet(m_document, m_document.settings().userStyleSheetLocation(), userSheetText, UserStyleLevel::User);

return m_pageUserSheet.get();
}
Expand Down
2 changes: 1 addition & 1 deletion Source/WebCore/page/UserStyleSheet.h
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ class UserStyleSheet {
public:
UserStyleSheet()
: m_injectedFrames(UserContentInjectedFrames::InjectInAllFrames)
, m_level(UserStyleUserLevel)
, m_level(UserStyleLevel::User)
{
}

Expand Down
15 changes: 1 addition & 14 deletions Source/WebCore/page/UserStyleSheetTypes.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,14 +25,13 @@

#pragma once

#include <wtf/EnumTraits.h>
#include <wtf/HashMap.h>
#include <wtf/Vector.h>

namespace WebCore {

enum UserStyleInjectionTime { InjectInExistingDocuments, InjectInSubsequentDocuments };
enum UserStyleLevel { UserStyleUserLevel, UserStyleAuthorLevel };
enum class UserStyleLevel : bool { User, Author };

class DOMWrapperWorld;
class UserStyleSheet;
Expand All @@ -41,15 +40,3 @@ typedef Vector<std::unique_ptr<UserStyleSheet>> UserStyleSheetVector;
typedef HashMap<RefPtr<DOMWrapperWorld>, std::unique_ptr<UserStyleSheetVector>> UserStyleSheetMap;

} // namespace WebCore

namespace WTF {

template<> struct EnumTraits<WebCore::UserStyleLevel> {
using values = EnumValues<
WebCore::UserStyleLevel,
WebCore::UserStyleLevel::UserStyleUserLevel,
WebCore::UserStyleLevel::UserStyleAuthorLevel
>;
};

} // namespace WTF
2 changes: 2 additions & 0 deletions Source/WebKit/Shared/WebCoreArgumentCoders.serialization.in
Original file line number Diff line number Diff line change
Expand Up @@ -6660,3 +6660,5 @@ struct WebCore::KeypressCommand {
String text;
}
#endif

[Nested] enum class WebCore::UserStyleLevel : bool;
2 changes: 1 addition & 1 deletion Source/WebKit/UIProcess/API/Cocoa/_WKUserStyleSheet.mm
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ - (instancetype)initWithSource:(NSString *)source forMainFrameOnly:(BOOL)forMain
// FIXME: In the API test, we can use generateUniqueURL below before the API::Object constructor has done this... where should this really be?
WebKit::InitializeWebKit2();

API::Object::constructInWrapper<API::UserStyleSheet>(self, WebCore::UserStyleSheet { source, API::UserStyleSheet::generateUniqueURL(), { }, { }, forMainFrameOnly ? WebCore::UserContentInjectedFrames::InjectInTopFrameOnly : WebCore::UserContentInjectedFrames::InjectInAllFrames, WebCore::UserStyleUserLevel }, API::ContentWorld::pageContentWorld());
API::Object::constructInWrapper<API::UserStyleSheet>(self, WebCore::UserStyleSheet { source, API::UserStyleSheet::generateUniqueURL(), { }, { }, forMainFrameOnly ? WebCore::UserContentInjectedFrames::InjectInTopFrameOnly : WebCore::UserContentInjectedFrames::InjectInAllFrames, WebCore::UserStyleLevel::User }, API::ContentWorld::pageContentWorld());

return self;
}
Expand Down
6 changes: 3 additions & 3 deletions Source/WebKit/UIProcess/API/Cocoa/_WKUserStyleSheetInternal.h
Original file line number Diff line number Diff line change
Expand Up @@ -41,13 +41,13 @@ inline WebCore::UserStyleLevel toWebCoreUserStyleLevel(_WKUserStyleLevel level)
{
switch (level) {
case _WKUserStyleUserLevel:
return WebCore::UserStyleUserLevel;
return WebCore::UserStyleLevel::User;
case _WKUserStyleAuthorLevel:
return WebCore::UserStyleAuthorLevel;
return WebCore::UserStyleLevel::Author;
}

ASSERT_NOT_REACHED();
return WebCore::UserStyleUserLevel;
return WebCore::UserStyleLevel::User;
}

}
Expand Down
6 changes: 3 additions & 3 deletions Source/WebKit/UIProcess/API/glib/WebKitUserContent.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -52,12 +52,12 @@ static inline UserStyleLevel toUserStyleLevel(WebKitUserStyleLevel styleLevel)
{
switch (styleLevel) {
case WEBKIT_USER_STYLE_LEVEL_USER:
return UserStyleUserLevel;
return UserStyleLevel::User;
case WEBKIT_USER_STYLE_LEVEL_AUTHOR:
return UserStyleAuthorLevel;
return UserStyleLevel::Author;
default:
ASSERT_NOT_REACHED();
return UserStyleAuthorLevel;
return UserStyleLevel::Author;
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2357,7 +2357,7 @@ static _WKWebExtensionContextError toAPI(WebExtensionContext::Error error)
if (!styleSheetString)
continue;

auto userStyleSheet = API::UserStyleSheet::create(WebCore::UserStyleSheet { styleSheetString, URL { m_baseURL, styleSheetPath }, makeVector<String>(includeMatchPatterns), makeVector<String>(excludeMatchPatterns), injectedFrames, WebCore::UserStyleUserLevel, std::nullopt }, executionWorld);
auto userStyleSheet = API::UserStyleSheet::create(WebCore::UserStyleSheet { styleSheetString, URL { m_baseURL, styleSheetPath }, makeVector<String>(includeMatchPatterns), makeVector<String>(excludeMatchPatterns), injectedFrames, WebCore::UserStyleLevel::User, std::nullopt }, executionWorld);
originInjectedStyleSheets.append(userStyleSheet);

for (auto& userContentController : userContentControllers)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,7 @@ void injectStyleSheets(SourcePairs styleSheetPairs, WKWebView *webView, API::Con
if (!styleSheet)
continue;

auto userStyleSheet = API::UserStyleSheet::create(WebCore::UserStyleSheet { styleSheet.value().first, styleSheet.value().second.value_or(URL { }), Vector<String> { }, Vector<String> { }, injectedFrames, WebCore::UserStyleUserLevel, pageID }, executionWorld);
auto userStyleSheet = API::UserStyleSheet::create(WebCore::UserStyleSheet { styleSheet.value().first, styleSheet.value().second.value_or(URL { }), Vector<String> { }, Vector<String> { }, injectedFrames, WebCore::UserStyleLevel::User, pageID }, executionWorld);

for (auto& controller : context.extensionController()->allUserContentControllers())
controller.addUserStyleSheet(userStyleSheet);
Expand Down
2 changes: 1 addition & 1 deletion Source/WebKit/WebProcess/WebPage/WebPage.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -7607,7 +7607,7 @@ void WebPage::addUserScript(String&& source, InjectedBundleScriptWorld& world, W

void WebPage::addUserStyleSheet(const String& source, WebCore::UserContentInjectedFrames injectedFrames)
{
WebCore::UserStyleSheet userStyleSheet {source, aboutBlankURL(), Vector<String>(), Vector<String>(), injectedFrames, UserStyleUserLevel };
WebCore::UserStyleSheet userStyleSheet { source, aboutBlankURL(), Vector<String>(), Vector<String>(), injectedFrames, UserStyleLevel::User };

Ref { m_userContentController }->addUserStyleSheet(InjectedBundleScriptWorld::normalWorld(), WTFMove(userStyleSheet));
}
Expand Down
2 changes: 1 addition & 1 deletion Source/WebKitLegacy/mac/WebView/WebView.mm
Original file line number Diff line number Diff line change
Expand Up @@ -4274,7 +4274,7 @@ + (void)_addUserStyleSheetToGroup:(NSString *)groupName world:(WebScriptWorld *)
if (!world)
return;

auto styleSheet = makeUnique<WebCore::UserStyleSheet>(source, url, makeVector<String>(includeMatchPatternStrings), makeVector<String>(excludeMatchPatternStrings), injectedFrames == WebInjectInAllFrames ? WebCore::UserContentInjectedFrames::InjectInAllFrames : WebCore::UserContentInjectedFrames::InjectInTopFrameOnly, WebCore::UserStyleUserLevel);
auto styleSheet = makeUnique<WebCore::UserStyleSheet>(source, url, makeVector<String>(includeMatchPatternStrings), makeVector<String>(excludeMatchPatternStrings), injectedFrames == WebInjectInAllFrames ? WebCore::UserContentInjectedFrames::InjectInAllFrames : WebCore::UserContentInjectedFrames::InjectInTopFrameOnly, WebCore::UserStyleLevel::User);
viewGroup->userContentController().addUserStyleSheet(*core(world), WTFMove(styleSheet), WebCore::InjectInExistingDocuments);
}

Expand Down

0 comments on commit ead871f

Please sign in to comment.