Changeset 253530 in webkit
- Timestamp:
- Dec 14, 2019 3:37:15 PM (4 years ago)
- Location:
- trunk/Source
- Files:
-
- 1 added
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r253526 r253530 1 2019-12-14 Per Arne Vollan <pvollan@apple.com> 2 3 Map CSS value ID to system color in the UI process 4 https://bugs.webkit.org/show_bug.cgi?id=204314 5 <rdar://problem/57295392> 6 7 Reviewed by Brent Fulgham. 8 9 Currently, RenderThemeIOS is mapping CSS value IDs to system colors in the WebContent process. This mapping leads to 10 invoking selectors on UITraitCollection and UIColor, which will send messages to the runningboard daemon. Since we 11 will be blocking access to this daemon in the WebContent process, this mapping should be moved to the UI process. 12 The UI process will create a mapping between CSS value IDs and system colors, and pass it to the WebContent process. 13 14 No new tests, covered by existing tests. 15 16 * WebCore.xcodeproj/project.pbxproj: 17 * rendering/CSSValueKey.h: Added. 18 (WebCore::operator==): 19 (WebCore::CSSValueKey::encode const): 20 (WebCore::CSSValueKey::decode): 21 (WebCore::CSSValueKey::hash const): 22 (WTF::CSSValueKeyHash::hash): 23 (WTF::CSSValueKeyHash::equal): 24 (WTF::HashTraits<WebCore::CSSValueKey>::emptyValue): 25 (WTF::HashTraits<WebCore::CSSValueKey>::constructDeletedValue): 26 (WTF::HashTraits<WebCore::CSSValueKey>::isDeletedValue): 27 * rendering/RenderThemeIOS.h: 28 * rendering/RenderThemeIOS.mm: 29 (WebCore::cssValueIDSelectorList): 30 (WebCore::systemColorFromCSSValueID): 31 (WebCore::globalCSSValueToSystemColorMap): 32 (WebCore::RenderThemeIOS::createCSSValueToSystemColorMap): 33 (WebCore::RenderThemeIOS::setCSSValueToSystemColorMap): 34 (WebCore::RenderThemeIOS::systemColor const): 35 1 36 2019-12-14 Zalan Bujtas <zalan@apple.com> 2 37 -
trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj
r253497 r253530 4795 4795 E3B2F0EE1D7F4CA900B0C9D1 /* LoadableScriptClient.h in Headers */ = {isa = PBXBuildFile; fileRef = E3B2F0E81D7F35EC00B0C9D1 /* LoadableScriptClient.h */; settings = {ATTRIBUTES = (Private, ); }; }; 4796 4796 E3B2F0F01D7F4CB500B0C9D1 /* LoadableClassicScript.h in Headers */ = {isa = PBXBuildFile; fileRef = E3B2F0E41D7F35EC00B0C9D1 /* LoadableClassicScript.h */; settings = {ATTRIBUTES = (Private, ); }; }; 4797 E3BBC24723835526006EC39F /* CSSValueKey.h in Headers */ = {isa = PBXBuildFile; fileRef = E3BBC2452383551A006EC39F /* CSSValueKey.h */; settings = {ATTRIBUTES = (Private, ); }; }; 4797 4798 E3C99A091DC3D41C00794AD3 /* DOMJITCheckDOM.h in Headers */ = {isa = PBXBuildFile; fileRef = E3C99A081DC3D41700794AD3 /* DOMJITCheckDOM.h */; }; 4798 4799 E3C9AECB2113149900419B92 /* JSMicrotaskCallback.h in Headers */ = {isa = PBXBuildFile; fileRef = E3C9AEC92113147400419B92 /* JSMicrotaskCallback.h */; }; … … 15128 15129 E3B2F0E91D7F3D3C00B0C9D1 /* LoadableScript.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = LoadableScript.cpp; sourceTree = "<group>"; }; 15129 15130 E3B7C0621DC3415A001FB0B8 /* JSDocumentDOMJIT.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSDocumentDOMJIT.cpp; sourceTree = "<group>"; }; 15131 E3BBC2452383551A006EC39F /* CSSValueKey.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CSSValueKey.h; sourceTree = "<group>"; }; 15130 15132 E3BC827322530221005276DE /* NodeList.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = NodeList.cpp; sourceTree = "<group>"; }; 15131 15133 E3BF19E122AF2F55009C9926 /* XMLHttpRequestProgressEvent.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = XMLHttpRequestProgressEvent.cpp; sourceTree = "<group>"; }; … … 27649 27651 0F53FB81213B1BB800C40D34 /* CSSFilter.cpp */, 27650 27652 0F53FB83213B1BB800C40D34 /* CSSFilter.h */, 27653 E3BBC2452383551A006EC39F /* CSSValueKey.h */, 27651 27654 A8CFF6CA0A1561CD000A4234 /* EllipsisBox.cpp */, 27652 27655 A8CFF6BD0A156118000A4234 /* EllipsisBox.h */, … … 29529 29532 BC7D8FF01BD03B6400FFE540 /* CSSUnsetValue.h in Headers */, 29530 29533 A80E6CEE0A1989CA007FB8C5 /* CSSValue.h in Headers */, 29534 E3BBC24723835526006EC39F /* CSSValueKey.h in Headers */, 29531 29535 6565815109D13043000E61D7 /* CSSValueKeywords.h in Headers */, 29532 29536 A80E6CE90A1989CA007FB8C5 /* CSSValueList.h in Headers */, -
trunk/Source/WebCore/rendering/RenderThemeIOS.h
r252308 r253530 28 28 #if PLATFORM(IOS_FAMILY) 29 29 30 #include "CSSValueKey.h" 30 31 #include "RenderThemeCocoa.h" 31 32 … … 60 61 #endif 61 62 63 WEBCORE_EXPORT static const HashMap<CSSValueKey, Color>& getOrCreateCSSValueToSystemColorMap(); 64 WEBCORE_EXPORT static void setCSSValueToSystemColorMap(HashMap<CSSValueKey, Color>&&); 65 62 66 protected: 63 67 LengthBox popupInternalPaddingBox(const RenderStyle&) const override; -
trunk/Source/WebCore/rendering/RenderThemeIOS.mm
r252392 r253530 32 32 #import "CSSPrimitiveValue.h" 33 33 #import "CSSToLengthConversionData.h" 34 #import "CSSValueKey.h" 34 35 #import "CSSValueKeywords.h" 35 36 #import "ColorIOS.h" … … 1431 1432 #endif // ENABLE(VIDEO) 1432 1433 1434 struct CSSValueIDAndSelector { 1435 CSSValueID cssValueID; 1436 SEL selector; 1437 }; 1438 1439 static const Vector<CSSValueIDAndSelector>& cssValueIDSelectorList() 1440 { 1441 static NeverDestroyed<Vector<CSSValueIDAndSelector>> cssValueIDSelectorList; 1442 1443 static std::once_flag initializeOnce; 1444 std::call_once( 1445 initializeOnce, 1446 [] { 1447 cssValueIDSelectorList.get() = Vector(std::initializer_list<CSSValueIDAndSelector> { 1448 #if HAVE(OS_DARK_MODE_SUPPORT) 1449 { CSSValueText, @selector(labelColor) }, 1450 { CSSValueAppleSystemLabel, @selector(labelColor) }, 1451 { CSSValueAppleSystemHeaderText, @selector(labelColor) }, 1452 { CSSValueAppleSystemSecondaryLabel, @selector(secondaryLabelColor) }, 1453 { CSSValueAppleSystemTertiaryLabel, @selector(tertiaryLabelColor) }, 1454 { CSSValueAppleSystemQuaternaryLabel, @selector(quaternaryLabelColor) }, 1455 { CSSValueAppleSystemPlaceholderText, @selector(placeholderTextColor) }, 1456 { CSSValueWebkitControlBackground, @selector(systemBackgroundColor) }, 1457 { CSSValueAppleSystemControlBackground, @selector(systemBackgroundColor) }, 1458 { CSSValueAppleSystemTextBackground, @selector(systemBackgroundColor) }, 1459 { CSSValueAppleSystemBackground, @selector(systemBackgroundColor) }, 1460 { CSSValueAppleSystemSecondaryBackground, @selector(secondarySystemBackgroundColor) }, 1461 { CSSValueAppleSystemTertiaryBackground, @selector(tertiarySystemBackgroundColor) }, 1462 { CSSValueAppleSystemGroupedBackground, @selector(systemGroupedBackgroundColor) }, 1463 { CSSValueAppleSystemSecondaryGroupedBackground, @selector(secondarySystemGroupedBackgroundColor) }, 1464 { CSSValueAppleSystemTertiaryGroupedBackground, @selector(tertiarySystemGroupedBackgroundColor) }, 1465 { CSSValueAppleSystemGrid, @selector(separatorColor) }, 1466 { CSSValueAppleSystemSeparator, @selector(separatorColor) }, 1467 { CSSValueAppleSystemContainerBorder, @selector(separatorColor) }, 1468 { CSSValueAppleSystemSelectedContentBackground, @selector(tableCellDefaultSelectionTintColor) }, 1469 { CSSValueAppleSystemUnemphasizedSelectedContentBackground, @selector(tableCellDefaultSelectionTintColor) }, 1470 { CSSValueAppleSystemBrown, @selector(systemBrownColor) }, 1471 { CSSValueAppleSystemIndigo, @selector(systemIndigoColor) }, 1472 #endif 1473 { CSSValueAppleSystemTeal, @selector(systemTealColor) }, 1474 { CSSValueAppleWirelessPlaybackTargetActive, @selector(systemBlueColor) }, 1475 { CSSValueAppleSystemBlue, @selector(systemBlueColor) }, 1476 { CSSValueAppleSystemGray, @selector(systemGrayColor) }, 1477 { CSSValueAppleSystemGreen, @selector(systemGreenColor) }, 1478 { CSSValueAppleSystemOrange, @selector(systemOrangeColor) }, 1479 { CSSValueAppleSystemPink, @selector(systemPinkColor) }, 1480 { CSSValueAppleSystemPurple, @selector(systemPurpleColor) }, 1481 { CSSValueAppleSystemRed, @selector(systemRedColor) }, 1482 { CSSValueAppleSystemYellow, @selector(systemYellowColor) } 1483 }); 1484 }); 1485 1486 return cssValueIDSelectorList; 1487 } 1488 1489 static Optional<Color> systemColorFromCSSValueID(CSSValueID cssValueID, bool useDarkAppearance, bool useElevatedUserInterfaceLevel) 1490 { 1491 LocalCurrentTraitCollection localTraitCollection(useDarkAppearance, useElevatedUserInterfaceLevel); 1492 1493 auto cssColorToSelector = [cssValueID] () -> SEL { 1494 for (auto& cssValueIDSelector : cssValueIDSelectorList()) { 1495 if (cssValueIDSelector.cssValueID == cssValueID) 1496 return cssValueIDSelector.selector; 1497 } 1498 return nullptr; 1499 }; 1500 1501 if (auto selector = cssColorToSelector()) { 1502 if (auto color = wtfObjCMsgSend<UIColor *>(PAL::getUIColorClass(), selector)) 1503 return Color(color.CGColor, Color::Semantic); 1504 } 1505 return WTF::nullopt; 1506 } 1507 1508 1509 static HashMap<CSSValueKey, Color>& globalCSSValueToSystemColorMap() 1510 { 1511 static NeverDestroyed<HashMap<CSSValueKey, Color>> colorMap; 1512 return colorMap; 1513 } 1514 1515 const HashMap<CSSValueKey, Color>& RenderThemeIOS::getOrCreateCSSValueToSystemColorMap() 1516 { 1517 static NeverDestroyed<HashMap<CSSValueKey, Color>> map; 1518 1519 static std::once_flag onceFlag; 1520 std::call_once( 1521 onceFlag, 1522 [] { 1523 for (auto& cssValueIDSelector : cssValueIDSelectorList()) { 1524 for (bool useDarkAppearance : { false, true }) { 1525 for (bool useElevatedUserInterfaceLevel : { false, true }) { 1526 if (auto color = systemColorFromCSSValueID(cssValueIDSelector.cssValueID, useDarkAppearance, useElevatedUserInterfaceLevel)) 1527 map.get().add(CSSValueKey { cssValueIDSelector.cssValueID, useDarkAppearance, useElevatedUserInterfaceLevel }, *color); 1528 } 1529 } 1530 } 1531 }); 1532 1533 return map; 1534 } 1535 1536 void RenderThemeIOS::setCSSValueToSystemColorMap(HashMap<CSSValueKey, Color>&& colorMap) 1537 { 1538 globalCSSValueToSystemColorMap() = WTFMove(colorMap); 1539 } 1540 1433 1541 Color RenderThemeIOS::systemColor(CSSValueID cssValueID, OptionSet<StyleColor::Options> options) const 1434 1542 { … … 1447 1555 const bool useDarkAppearance = options.contains(StyleColor::Options::UseDarkAppearance); 1448 1556 const bool useElevatedUserInterfaceLevel = options.contains(StyleColor::Options::UseElevatedUserInterfaceLevel); 1449 LocalCurrentTraitCollection localTraitCollection(useDarkAppearance, useElevatedUserInterfaceLevel); 1450 1451 auto cssColorToSelector = [cssValueID] () -> SEL { 1452 switch (cssValueID) { 1453 #if HAVE(OS_DARK_MODE_SUPPORT) 1454 case CSSValueText: 1455 case CSSValueAppleSystemLabel: 1456 case CSSValueAppleSystemHeaderText: 1457 return @selector(labelColor); 1458 case CSSValueAppleSystemSecondaryLabel: 1459 return @selector(secondaryLabelColor); 1460 case CSSValueAppleSystemTertiaryLabel: 1461 return @selector(tertiaryLabelColor); 1462 case CSSValueAppleSystemQuaternaryLabel: 1463 return @selector(quaternaryLabelColor); 1464 case CSSValueAppleSystemPlaceholderText: 1465 return @selector(placeholderTextColor); 1466 case CSSValueWebkitControlBackground: 1467 case CSSValueAppleSystemControlBackground: 1468 case CSSValueAppleSystemTextBackground: 1469 case CSSValueAppleSystemBackground: 1470 return @selector(systemBackgroundColor); 1471 case CSSValueAppleSystemSecondaryBackground: 1472 return @selector(secondarySystemBackgroundColor); 1473 case CSSValueAppleSystemTertiaryBackground: 1474 return @selector(tertiarySystemBackgroundColor); 1475 case CSSValueAppleSystemGroupedBackground: 1476 return @selector(systemGroupedBackgroundColor); 1477 case CSSValueAppleSystemSecondaryGroupedBackground: 1478 return @selector(secondarySystemGroupedBackgroundColor); 1479 case CSSValueAppleSystemTertiaryGroupedBackground: 1480 return @selector(tertiarySystemGroupedBackgroundColor); 1481 case CSSValueAppleSystemGrid: 1482 case CSSValueAppleSystemSeparator: 1483 case CSSValueAppleSystemContainerBorder: 1484 return @selector(separatorColor); 1485 case CSSValueAppleSystemSelectedContentBackground: 1486 case CSSValueAppleSystemUnemphasizedSelectedContentBackground: 1487 return @selector(tableCellDefaultSelectionTintColor); 1488 case CSSValueAppleSystemBrown: 1489 return @selector(systemBrownColor); 1490 case CSSValueAppleSystemIndigo: 1491 return @selector(systemIndigoColor); 1492 #endif 1493 case CSSValueAppleSystemTeal: 1494 return @selector(systemTealColor); 1495 case CSSValueAppleWirelessPlaybackTargetActive: 1496 case CSSValueAppleSystemBlue: 1497 return @selector(systemBlueColor); 1498 case CSSValueAppleSystemGray: 1499 return @selector(systemGrayColor); 1500 case CSSValueAppleSystemGreen: 1501 return @selector(systemGreenColor); 1502 case CSSValueAppleSystemOrange: 1503 return @selector(systemOrangeColor); 1504 case CSSValueAppleSystemPink: 1505 return @selector(systemPinkColor); 1506 case CSSValueAppleSystemPurple: 1507 return @selector(systemPurpleColor); 1508 case CSSValueAppleSystemRed: 1509 return @selector(systemRedColor); 1510 case CSSValueAppleSystemYellow: 1511 return @selector(systemYellowColor); 1512 default: 1513 return nullptr; 1514 } 1515 }; 1516 1517 if (auto selector = cssColorToSelector()) { 1518 if (auto color = wtfObjCMsgSend<UIColor *>(PAL::getUIColorClass(), selector)) 1519 return Color(color.CGColor, Color::Semantic); 1557 if (!globalCSSValueToSystemColorMap().isEmpty()) { 1558 auto it = globalCSSValueToSystemColorMap().find(CSSValueKey { cssValueID, useDarkAppearance, useElevatedUserInterfaceLevel }); 1559 if (it == globalCSSValueToSystemColorMap().end()) 1560 return RenderTheme::systemColor(cssValueID, options); 1561 return it->value; 1520 1562 } 1521 1563 auto color = systemColorFromCSSValueID(cssValueID, useDarkAppearance, useElevatedUserInterfaceLevel); 1564 if (color) 1565 return *color; 1522 1566 return RenderTheme::systemColor(cssValueID, options); 1523 1567 }).iterator->value; -
trunk/Source/WebKit/ChangeLog
r253529 r253530 1 2019-12-14 Per Arne Vollan <pvollan@apple.com> 2 3 Map CSS value ID to system color in the UI process 4 https://bugs.webkit.org/show_bug.cgi?id=204314 5 <rdar://problem/57295392> 6 7 Reviewed by Brent Fulgham. 8 9 Create mapping between CSS value IDs and system colors in the UI process and send to the WebContent process 10 on process startup. 11 12 No new tests, covered by existing tests. 13 14 * Shared/WebProcessCreationParameters.cpp: 15 (WebKit::WebProcessCreationParameters::encode const): 16 (WebKit::WebProcessCreationParameters::decode): 17 * Shared/WebProcessCreationParameters.h: 18 * UIProcess/Cocoa/WebProcessPoolCocoa.mm: 19 (WebKit::WebProcessPool::platformInitializeWebProcess): 20 * WebProcess/cocoa/WebProcessCocoa.mm: 21 (WebKit::WebProcess::platformInitializeWebProcess): 22 1 23 2019-12-14 Per Arne Vollan <pvollan@apple.com> 2 24 -
trunk/Source/WebKit/Shared/WebProcessCreationParameters.cpp
r253440 r253530 170 170 encoder << neSessionManagerExtensionHandle; 171 171 #endif 172 173 #if PLATFORM(IOS) 174 encoder << cssValueToSystemColorMap; 175 #endif 172 176 } 173 177 … … 430 434 #endif 431 435 436 #if PLATFORM(IOS) 437 Optional<HashMap<WebCore::CSSValueKey, WebCore::Color>> cssValueToSystemColorMap; 438 decoder >> cssValueToSystemColorMap; 439 if (!cssValueToSystemColorMap) 440 return false; 441 parameters.cssValueToSystemColorMap = WTFMove(*cssValueToSystemColorMap); 442 #endif 443 432 444 return true; 433 445 } -
trunk/Source/WebKit/Shared/WebProcessCreationParameters.h
r253440 r253530 52 52 #endif 53 53 54 #if PLATFORM(IOS) 55 #include <WebCore/RenderThemeIOS.h> 56 #endif 57 54 58 namespace API { 55 59 class Data; … … 208 212 Optional<SandboxExtension::Handle> neSessionManagerExtensionHandle; 209 213 #endif 214 215 #if PLATFORM(IOS) 216 HashMap<WebCore::CSSValueKey, WebCore::Color> cssValueToSystemColorMap; 217 #endif 210 218 }; 211 219 -
trunk/Source/WebKit/UIProcess/Cocoa/WebProcessPoolCocoa.mm
r253440 r253530 325 325 } 326 326 #endif 327 328 #if PLATFORM(IOS) 329 parameters.cssValueToSystemColorMap = RenderThemeIOS::getOrCreateCSSValueToSystemColorMap(); 330 #endif 327 331 } 328 332 -
trunk/Source/WebKit/WebProcess/cocoa/WebProcessCocoa.mm
r253440 r253530 244 244 NetworkExtensionContentFilter::setHasConsumedSandboxExtensions(parameters.neHelperExtensionHandle.hasValue() && parameters.neSessionManagerExtensionHandle.hasValue()); 245 245 #endif 246 247 #if PLATFORM(IOS) 248 RenderThemeIOS::setCSSValueToSystemColorMap(WTFMove(parameters.cssValueToSystemColorMap)); 249 #endif 246 250 } 247 251
Note: See TracChangeset
for help on using the changeset viewer.