Changeset 236865 in webkit


Ignore:
Timestamp:
Oct 4, 2018 5:47:05 PM (6 years ago)
Author:
Wenson Hsieh
Message:

[Cocoa] Add SPI to expose typing attributes at the current selection on WKWebView
https://bugs.webkit.org/show_bug.cgi?id=190119
<rdar://problem/44767062>

Reviewed by Tim Horton.

Source/WebKit:

Add support for new WebKit2 SPI to notify the UI delegate about font attributes when the editor state changes
(e.g. due to selection changes, or executing an edit command). See below for more detail.

Test: FontAttributes.FontAttributesAfterChangingSelection

  • Shared/EditorState.cpp:

(WebKit::EditorState::PostLayoutData::encode const):
(WebKit::EditorState::PostLayoutData::decode):

  • Shared/EditorState.h:

Add a new optional FontAttributes member to EditorState's post-layout data. FontAttributes are computed and
sent over IPC only if the UI delegate implements the new delegate hook which requires information about font
attributes.

  • Shared/WebPageCreationParameters.cpp:

(WebKit::WebPageCreationParameters::encode const):
(WebKit::WebPageCreationParameters::decode):

  • Shared/WebPageCreationParameters.h:

Add a new flag for the UI process to let a new web page know whether it should additionally compute font
attributes when computing editor state.

  • UIProcess/API/APIUIClient.h:

(API::UIClient::needsFontAttributes const):
(API::UIClient::didChangeFontAttributes):

  • UIProcess/API/Cocoa/WKUIDelegatePrivate.h:
  • UIProcess/API/Cocoa/WKWebView.mm:

(-[WKWebView _didChangeEditorState]):

  • UIProcess/Cocoa/UIDelegate.h:
  • UIProcess/Cocoa/UIDelegate.mm:

(WebKit::UIDelegate::setDelegate):
(WebKit::UIDelegate::UIClient::didChangeFontAttributes):

Call out to the UI delegate with a font attribute dictionary, created via FontAttributes on EditorState's
post-layout data.

  • UIProcess/WebPageProxy.cpp:

(WebKit::WebPageProxy::setUIClient):

Update whether or not the UI process needs to know about font attributes. The UI process only requires font
attribute information if the UI delegate implements -_webView:didChangeFontAttributes:.

(WebKit::WebPageProxy::setNeedsFontAttributes):
(WebKit::WebPageProxy::creationParameters):

  • UIProcess/WebPageProxy.h:
  • UIProcess/ios/WebPageProxyIOS.mm:

(WebKit::WebPageProxy::editorStateChanged):

  • UIProcess/mac/WebPageProxyMac.mm:

(WebKit::WebPageProxy::editorStateChanged):

Update the cached font attributes in the UI process when receiving a new editor state update.

  • WebProcess/WebPage/WebPage.cpp:

(WebKit::m_cpuLimit):
(WebKit::WebPage::editorState const):
(WebKit::WebPage::setNeedsFontAttributes):

Add a new IPC hook to update whether or not the page should additionally compute font attributes. In the case
where the UI delegate changes from something that does not require font attributes to one that does, we
additionally schedule an editor state update.

(WebKit::WebPage::updateFontAttributesAfterEditorStateChange):

Private helper function to plumb FontAttributes to the UI client after an editor state change.

  • WebProcess/WebPage/WebPage.h:
  • WebProcess/WebPage/WebPage.messages.in:

Tools:

Add a new API test that loads a document containing various rich text styles. This test moves the selection
around the document and checks the last set of font attributes received via the new UI delegate hook.

  • TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
  • TestWebKitAPI/Tests/WebKitCocoa/FontAttributes.mm: Added.

(-[FontAttributesListener _webView:didChangeFontAttributes:]):
(-[FontAttributesListener lastFontAttributes]):
(-[TestWKWebView selectElementWithIdentifier:]):
(-[TestWKWebView fontAttributesAfterNextPresentationUpdate]):
(ColorExpectation::ColorExpectation):
(ShadowExpectation::ShadowExpectation):
(checkColor):
(checkShadow):
(checkFont):
(webViewForTestingFontAttributes):

  • TestWebKitAPI/Tests/WebKitCocoa/rich-text-attributes.html: Added.
Location:
trunk
Files:
2 added
19 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit/ChangeLog

    r236860 r236865  
     12018-10-04  Wenson Hsieh  <wenson_hsieh@apple.com>
     2
     3        [Cocoa] Add SPI to expose typing attributes at the current selection on WKWebView
     4        https://bugs.webkit.org/show_bug.cgi?id=190119
     5        <rdar://problem/44767062>
     6
     7        Reviewed by Tim Horton.
     8
     9        Add support for new WebKit2 SPI to notify the UI delegate about font attributes when the editor state changes
     10        (e.g. due to selection changes, or executing an edit command). See below for more detail.
     11
     12        Test: FontAttributes.FontAttributesAfterChangingSelection
     13
     14        * Shared/EditorState.cpp:
     15        (WebKit::EditorState::PostLayoutData::encode const):
     16        (WebKit::EditorState::PostLayoutData::decode):
     17        * Shared/EditorState.h:
     18
     19        Add a new optional `FontAttributes` member to EditorState's post-layout data. FontAttributes are computed and
     20        sent over IPC only if the UI delegate implements the new delegate hook which requires information about font
     21        attributes.
     22
     23        * Shared/WebPageCreationParameters.cpp:
     24        (WebKit::WebPageCreationParameters::encode const):
     25        (WebKit::WebPageCreationParameters::decode):
     26        * Shared/WebPageCreationParameters.h:
     27
     28        Add a new flag for the UI process to let a new web page know whether it should additionally compute font
     29        attributes when computing editor state.
     30
     31        * UIProcess/API/APIUIClient.h:
     32        (API::UIClient::needsFontAttributes const):
     33        (API::UIClient::didChangeFontAttributes):
     34        * UIProcess/API/Cocoa/WKUIDelegatePrivate.h:
     35        * UIProcess/API/Cocoa/WKWebView.mm:
     36        (-[WKWebView _didChangeEditorState]):
     37        * UIProcess/Cocoa/UIDelegate.h:
     38        * UIProcess/Cocoa/UIDelegate.mm:
     39        (WebKit::UIDelegate::setDelegate):
     40        (WebKit::UIDelegate::UIClient::didChangeFontAttributes):
     41
     42        Call out to the UI delegate with a font attribute dictionary, created via FontAttributes on EditorState's
     43        post-layout data.
     44
     45        * UIProcess/WebPageProxy.cpp:
     46        (WebKit::WebPageProxy::setUIClient):
     47
     48        Update whether or not the UI process needs to know about font attributes. The UI process only requires font
     49        attribute information if the UI delegate implements `-_webView:didChangeFontAttributes:`.
     50
     51        (WebKit::WebPageProxy::setNeedsFontAttributes):
     52        (WebKit::WebPageProxy::creationParameters):
     53        * UIProcess/WebPageProxy.h:
     54        * UIProcess/ios/WebPageProxyIOS.mm:
     55        (WebKit::WebPageProxy::editorStateChanged):
     56        * UIProcess/mac/WebPageProxyMac.mm:
     57        (WebKit::WebPageProxy::editorStateChanged):
     58
     59        Update the cached font attributes in the UI process when receiving a new editor state update.
     60
     61        * WebProcess/WebPage/WebPage.cpp:
     62        (WebKit::m_cpuLimit):
     63        (WebKit::WebPage::editorState const):
     64        (WebKit::WebPage::setNeedsFontAttributes):
     65
     66        Add a new IPC hook to update whether or not the page should additionally compute font attributes. In the case
     67        where the UI delegate changes from something that does not require font attributes to one that does, we
     68        additionally schedule an editor state update.
     69
     70        (WebKit::WebPage::updateFontAttributesAfterEditorStateChange):
     71
     72        Private helper function to plumb FontAttributes to the UI client after an editor state change.
     73
     74        * WebProcess/WebPage/WebPage.h:
     75        * WebProcess/WebPage/WebPage.messages.in:
     76
    1772018-10-04  Jeremy Jones  <jeremyj@apple.com>
    278
  • trunk/Source/WebKit/Shared/EditorState.cpp

    r235011 r236865  
    139139    encoder << stringForCandidateRequest;
    140140#endif
     141    encoder << fontAttributes;
    141142    encoder << canCut;
    142143    encoder << canCopy;
     
    200201        return false;
    201202#endif
     203
     204    std::optional<std::optional<FontAttributes>> optionalFontAttributes;
     205    decoder >> optionalFontAttributes;
     206    if (!optionalFontAttributes)
     207        return false;
     208
     209    result.fontAttributes = optionalFontAttributes.value();
    202210
    203211    if (!decoder.decode(result.canCut))
  • trunk/Source/WebKit/Shared/EditorState.h

    r235011 r236865  
    2828#include "ArgumentCoders.h"
    2929#include <WebCore/Color.h>
     30#include <WebCore/FontAttributes.h>
    3031#include <WebCore/IntRect.h>
    3132#include <wtf/text/WTFString.h>
     
    115116#endif
    116117
     118        std::optional<WebCore::FontAttributes> fontAttributes;
     119
    117120        bool canCut { false };
    118121        bool canCopy { false };
  • trunk/Source/WebKit/Shared/WebPageCreationParameters.cpp

    r233552 r236865  
    111111    encoder << hasRegisteredServiceWorkers;
    112112#endif
     113    encoder << needsFontAttributes;
    113114    encoder << iceCandidateFilteringEnabled;
    114115    encoder << enumeratingAllNetworkInterfacesEnabled;
     
    306307#endif
    307308
     309    if (!decoder.decode(parameters.needsFontAttributes))
     310        return std::nullopt;
     311
    308312    if (!decoder.decode(parameters.iceCandidateFilteringEnabled))
    309313        return std::nullopt;
  • trunk/Source/WebKit/Shared/WebPageCreationParameters.h

    r234920 r236865  
    174174#endif
    175175
     176    bool needsFontAttributes { false };
     177
    176178    // WebRTC members.
    177179    bool iceCandidateFilteringEnabled { true };
  • trunk/Source/WebKit/UIProcess/API/APIUIClient.h

    r231457 r236865  
    4141namespace WebCore {
    4242class ResourceRequest;
     43struct FontAttributes;
    4344struct SecurityOriginData;
    4445struct WindowFeatures;
     
    124125    }
    125126
     127    virtual bool needsFontAttributes() const { return false; }
     128    virtual void didChangeFontAttributes(const WebCore::FontAttributes&) { }
     129
    126130    virtual bool runOpenPanel(WebKit::WebPageProxy*, WebKit::WebFrameProxy*, const WebCore::SecurityOriginData&, OpenPanelParameters*, WebKit::WebOpenPanelResultListenerProxy*) { return false; }
    127131    virtual void decidePolicyForGeolocationPermissionRequest(WebKit::WebPageProxy&, WebKit::WebFrameProxy&, SecurityOrigin&, Function<void(bool)>&) { }
  • trunk/Source/WebKit/UIProcess/API/Cocoa/WKUIDelegatePrivate.h

    r235961 r236865  
    121121
    122122- (void)_webView:(WKWebView *)webView requestStorageAccessPanelForDomain:(NSString *)requestingDomain underCurrentDomain:(NSString *)currentDomain completionHandler:(void (^)(BOOL result))completionHandler WK_API_AVAILABLE(macosx(10.14), ios(12.0));
     123
     124- (void)_webView:(WKWebView *)webView didChangeFontAttributes:(NSDictionary<NSString *, id> *)fontAttributes WK_API_AVAILABLE(macosx(WK_MAC_TBA), ios(WK_IOS_TBA));
    123125
    124126#if TARGET_OS_IPHONE
  • trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm

    r236724 r236865  
    12511251{
    12521252    id <WKUIDelegatePrivate> uiDelegate = (id <WKUIDelegatePrivate>)self.UIDelegate;
     1253
     1254    // FIXME: We should either rename -_webView:editorStateDidChange: to clarify that it's only intended for use when testing,
     1255    // or remove it entirely and use -_webView:didChangeFontAttributes: instead once text alignment is supported in the set of
     1256    // font attributes.
    12531257    if ([uiDelegate respondsToSelector:@selector(_webView:editorStateDidChange:)])
    12541258        [uiDelegate _webView:self editorStateDidChange:dictionaryRepresentationForEditorState(_page->editorState())];
  • trunk/Source/WebKit/UIProcess/Cocoa/UIDelegate.h

    r235259 r236865  
    122122        void saveDataToFileInDownloadsFolder(WebPageProxy*, const WTF::String&, const WTF::String&, const WebCore::URL&, API::Data&) final;
    123123#endif
     124        bool needsFontAttributes() const final { return m_uiDelegate.m_delegateMethods.webViewDidChangeFontAttributes; }
     125        void didChangeFontAttributes(const WebCore::FontAttributes&) final;
    124126        bool decidePolicyForUserMediaPermissionRequest(WebPageProxy&, WebFrameProxy&, API::SecurityOrigin&, API::SecurityOrigin&, UserMediaPermissionRequestProxy&) final;
    125127        bool checkUserMediaPermissionForOrigin(WebPageProxy&, WebFrameProxy&, API::SecurityOrigin&, API::SecurityOrigin&, UserMediaPermissionCheckProxy&) final;
     
    199201        bool webViewCheckUserMediaPermissionForURLMainFrameURLFrameIdentifierDecisionHandler : 1;
    200202        bool webViewMediaCaptureStateDidChange : 1;
     203        bool webViewDidChangeFontAttributes : 1;
    201204#if PLATFORM(IOS)
    202205#if HAVE(APP_LINKS)
  • trunk/Source/WebKit/UIProcess/Cocoa/UIDelegate.mm

    r235935 r236865  
    5151#import "_WKFrameHandleInternal.h"
    5252#import "_WKHitTestResultInternal.h"
     53#import <WebCore/FontAttributes.h>
    5354#import <WebCore/SecurityOriginData.h>
    5455#import <WebCore/URL.h>
     
    153154    m_delegateMethods.webViewCheckUserMediaPermissionForURLMainFrameURLFrameIdentifierDecisionHandler = [delegate respondsToSelector:@selector(_webView:checkUserMediaPermissionForURL:mainFrameURL:frameIdentifier:decisionHandler:)];
    154155    m_delegateMethods.webViewMediaCaptureStateDidChange = [delegate respondsToSelector:@selector(_webView:mediaCaptureStateDidChange:)];
     156    m_delegateMethods.webViewDidChangeFontAttributes = [delegate respondsToSelector:@selector(_webView:didChangeFontAttributes:)];
    155157    m_delegateMethods.dataDetectionContextForWebView = [delegate respondsToSelector:@selector(_dataDetectionContextForWebView:)];
    156158    m_delegateMethods.webViewImageOrMediaDocumentSizeChanged = [delegate respondsToSelector:@selector(_webView:imageOrMediaDocumentSizeChanged:)];
     
    883885}
    884886#endif
     887
     888void UIDelegate::UIClient::didChangeFontAttributes(const WebCore::FontAttributes& fontAttributes)
     889{
     890    if (!needsFontAttributes())
     891        return;
     892
     893    auto privateUIDelegate = (id <WKUIDelegatePrivate>)m_uiDelegate.m_delegate.get();
     894    [privateUIDelegate _webView:m_uiDelegate.m_webView didChangeFontAttributes:fontAttributes.createDictionary().get()];
     895}
    885896
    886897bool UIDelegate::UIClient::decidePolicyForUserMediaPermissionRequest(WebPageProxy& page, WebFrameProxy& frame, API::SecurityOrigin& userMediaOrigin, API::SecurityOrigin& topLevelOrigin, UserMediaPermissionRequestProxy& request)
  • trunk/Source/WebKit/UIProcess/WebPageProxy.cpp

    r236762 r236865  
    607607    m_process->send(Messages::WebPage::SetCanRunBeforeUnloadConfirmPanel(m_uiClient->canRunBeforeUnloadConfirmPanel()), m_pageID);
    608608    setCanRunModal(m_uiClient->canRunModal());
     609    setNeedsFontAttributes(m_uiClient->needsFontAttributes());
    609610}
    610611
     
    17321733    auto callbackID = m_callbacks.put(WTFMove(callbackFunction), m_process->throttler().backgroundActivityToken());
    17331734    m_process->send(Messages::WebPage::ValidateCommand(commandName, callbackID), m_pageID);
     1735}
     1736
     1737void WebPageProxy::updateFontAttributesAfterEditorStateChange()
     1738{
     1739    m_cachedFontAttributesAtSelectionStart.reset();
     1740
     1741    if (m_editorState.isMissingPostLayoutData)
     1742        return;
     1743
     1744    if (auto fontAttributes = m_editorState.postLayoutData().fontAttributes) {
     1745        m_uiClient->didChangeFontAttributes(*fontAttributes);
     1746        m_cachedFontAttributesAtSelectionStart = WTFMove(fontAttributes);
     1747    }
     1748}
     1749
     1750void WebPageProxy::setNeedsFontAttributes(bool needsFontAttributes)
     1751{
     1752    if (m_needsFontAttributes == needsFontAttributes)
     1753        return;
     1754
     1755    m_needsFontAttributes = needsFontAttributes;
     1756
     1757    if (isValid())
     1758        m_process->send(Messages::WebPage::SetNeedsFontAttributes(needsFontAttributes), m_pageID);
    17341759}
    17351760
     
    63556380#endif
    63566381
     6382    parameters.needsFontAttributes = m_needsFontAttributes;
     6383
    63576384    m_process->addWebUserContentControllerProxy(m_userContentController, parameters);
    63586385
  • trunk/Source/WebKit/UIProcess/WebPageProxy.h

    r236746 r236865  
    18481848    void continueNavigationInNewProcess(API::Navigation&, Ref<WebProcessProxy>&&);
    18491849
     1850    void setNeedsFontAttributes(bool);
     1851    void updateFontAttributesAfterEditorStateChange();
     1852
    18501853    WeakPtr<PageClient> m_pageClient;
    18511854    Ref<API::PageConfiguration> m_configuration;
     
    22602263    RunLoop::Timer<WebPageProxy> m_resetRecentCrashCountTimer;
    22612264    unsigned m_recentCrashCount { 0 };
     2265
     2266    bool m_needsFontAttributes { false };
    22622267};
    22632268
  • trunk/Source/WebKit/UIProcess/ios/WebPageProxyIOS.mm

    r236724 r236865  
    10541054   
    10551055    m_editorState = editorState;
    1056     m_cachedFontAttributesAtSelectionStart.reset();
    10571056   
    10581057    // Selection being none is a temporary state when editing. Flipping secure input state too quickly was causing trouble (not fully understood).
     
    10661065    // even during composition to support phrase boundary gesture.
    10671066    pageClient().selectionDidChange();
     1067    updateFontAttributesAfterEditorStateChange();
    10681068}
    10691069
  • trunk/Source/WebKit/UIProcess/mac/WebPageProxyMac.mm

    r236724 r236865  
    651651   
    652652    m_editorState = editorState;
    653     m_cachedFontAttributesAtSelectionStart.reset();
    654653   
    655654    // Selection being none is a temporary state when editing. Flipping secure input state too quickly was causing trouble (not fully understood).
     
    661660   
    662661    pageClient().selectionDidChange();
     662    updateFontAttributesAfterEditorStateChange();
    663663}
    664664
  • trunk/Source/WebKit/WebProcess/WebPage/WebPage.cpp

    r236724 r236865  
    600600#endif
    601601
     602    m_needsFontAttributes = parameters.needsFontAttributes;
     603
    602604#if ENABLE(WEB_RTC)
    603605    if (!parameters.iceCandidateFilteringEnabled)
     
    935937        postLayoutData.canCopy = editor.canCopy();
    936938        postLayoutData.canPaste = editor.canPaste();
     939
     940        if (m_needsFontAttributes)
     941            postLayoutData.fontAttributes = editor.fontAttributesAtSelectionStart();
    937942
    938943#if PLATFORM(COCOA)
     
    24922497}
    24932498
     2499void WebPage::setNeedsFontAttributes(bool needsFontAttributes)
     2500{
     2501    if (m_needsFontAttributes == needsFontAttributes)
     2502        return;
     2503
     2504    m_needsFontAttributes = needsFontAttributes;
     2505
     2506    if (m_needsFontAttributes)
     2507        sendPartialEditorStateAndSchedulePostLayoutUpdate();
     2508}
     2509
    24942510void WebPage::restoreSessionInternal(const Vector<BackForwardListItemState>& itemStates, WasRestoredByAPIRequest restoredByAPIRequest, WebBackForwardListProxy::OverwriteExistingItem overwrite)
    24952511{
  • trunk/Source/WebKit/WebProcess/WebPage/WebPage.h

    r236724 r236865  
    11801180    void setEditable(bool);
    11811181
     1182    void setNeedsFontAttributes(bool);
     1183
    11821184    void mouseEvent(const WebMouseEvent&);
    11831185    void keyEvent(const WebKeyboardEvent&);
     
    17411743
    17421744    bool m_isSuspended { false };
     1745    bool m_needsFontAttributes { false };
    17431746};
    17441747
  • trunk/Source/WebKit/WebProcess/WebPage/WebPage.messages.in

    r236724 r236865  
    210210    ExecuteEditCommand(String name, String argument)
    211211
     212    SetNeedsFontAttributes(bool needsFontAttributes)
     213
    212214    RequestFontAttributesAtSelectionStart(WebKit::CallbackID callbackID)
    213215
  • trunk/Tools/ChangeLog

    r236858 r236865  
     12018-10-04  Wenson Hsieh  <wenson_hsieh@apple.com>
     2
     3        [Cocoa] Add SPI to expose typing attributes at the current selection on WKWebView
     4        https://bugs.webkit.org/show_bug.cgi?id=190119
     5        <rdar://problem/44767062>
     6
     7        Reviewed by Tim Horton.
     8
     9        Add a new API test that loads a document containing various rich text styles. This test moves the selection
     10        around the document and checks the last set of font attributes received via the new UI delegate hook.
     11
     12        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
     13        * TestWebKitAPI/Tests/WebKitCocoa/FontAttributes.mm: Added.
     14        (-[FontAttributesListener _webView:didChangeFontAttributes:]):
     15        (-[FontAttributesListener lastFontAttributes]):
     16        (-[TestWKWebView selectElementWithIdentifier:]):
     17        (-[TestWKWebView fontAttributesAfterNextPresentationUpdate]):
     18        (ColorExpectation::ColorExpectation):
     19        (ShadowExpectation::ShadowExpectation):
     20        (checkColor):
     21        (checkShadow):
     22        (checkFont):
     23        (webViewForTestingFontAttributes):
     24        * TestWebKitAPI/Tests/WebKitCocoa/rich-text-attributes.html: Added.
     25
    1262018-10-04  Alan Coon  <alancoon@apple.com>
    227
  • trunk/Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj

    r236854 r236865  
    109109                2E7765CD16C4D80A00BA2BB1 /* mainIOS.mm in Sources */ = {isa = PBXBuildFile; fileRef = 2E7765CC16C4D80A00BA2BB1 /* mainIOS.mm */; };
    110110                2E7765CF16C4D81100BA2BB1 /* mainMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = 2E7765CE16C4D81100BA2BB1 /* mainMac.mm */; };
     111                2E92B8F7216490D4005B64F0 /* rich-text-attributes.html in Copy Resources */ = {isa = PBXBuildFile; fileRef = 2E92B8F6216490C3005B64F0 /* rich-text-attributes.html */; };
     112                2E92B8FA2164A0C1005B64F0 /* FontAttributes.mm in Sources */ = {isa = PBXBuildFile; fileRef = 2E92B8F8216490EA005B64F0 /* FontAttributes.mm */; };
    111113                2E9896151D8F093800739892 /* text-and-password-inputs.html in Copy Resources */ = {isa = PBXBuildFile; fileRef = 2E9896141D8F092B00739892 /* text-and-password-inputs.html */; };
    112114                2EB29D5E1F762DB90023A5F1 /* dump-datatransfer-types.html in Copy Resources */ = {isa = PBXBuildFile; fileRef = 2EB29D5D1F762DA50023A5F1 /* dump-datatransfer-types.html */; };
     
    11551157                                A12DDC001E8373E700CF6CAE /* rendered-image-excluding-overflow.html in Copy Resources */,
    11561158                                F46849C01EEF5EF300B937FE /* rich-and-plain-text.html in Copy Resources */,
     1159                                2E92B8F7216490D4005B64F0 /* rich-text-attributes.html in Copy Resources */,
    11571160                                0F5651F91FCE513500310FBC /* scroll-to-anchor.html in Copy Resources */,
    11581161                                F4E0A296211FC5FB00AF7C7F /* selected-text-and-textarea.html in Copy Resources */,
     
    13571360                2E7765CE16C4D81100BA2BB1 /* mainMac.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = mainMac.mm; sourceTree = "<group>"; };
    13581361                2E7EF7AC1F266A8100DFB67C /* AppKitSPI.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppKitSPI.h; sourceTree = "<group>"; };
     1362                2E92B8F6216490C3005B64F0 /* rich-text-attributes.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = "rich-text-attributes.html"; sourceTree = "<group>"; };
     1363                2E92B8F8216490EA005B64F0 /* FontAttributes.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = FontAttributes.mm; sourceTree = "<group>"; };
    13591364                2E9896141D8F092B00739892 /* text-and-password-inputs.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = "text-and-password-inputs.html"; sourceTree = "<group>"; };
    13601365                2EB29D5D1F762DA50023A5F1 /* dump-datatransfer-types.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = "dump-datatransfer-types.html"; sourceTree = "<group>"; };
     
    23412346                                2D8104CB1BEC13E70020DA46 /* FindInPage.mm */,
    23422347                                2D1FE0AF1AD465C1006CD9E6 /* FixedLayoutSize.mm */,
     2348                                2E92B8F8216490EA005B64F0 /* FontAttributes.mm */,
    23432349                                5CB5B3BD1FFC517E00C27BB0 /* FrameHandleSerialization.mm */,
    23442350                                CD78E11A1DB7EA360014A2DE /* FullscreenDelegate.mm */,
     
    27612767                                A12DDBFF1E8373C100CF6CAE /* rendered-image-excluding-overflow.html */,
    27622768                                F46849BF1EEF5EDC00B937FE /* rich-and-plain-text.html */,
     2769                                2E92B8F6216490C3005B64F0 /* rich-text-attributes.html */,
    27632770                                F4E0A295211FC5A300AF7C7F /* selected-text-and-textarea.html */,
    27642771                                F4D65DA71F5E46C0009D8C27 /* selected-text-image-link-and-editable.html */,
     
    38013808                                7A909A801D877480007E10F8 /* FloatSize.cpp in Sources */,
    38023809                                F4BC0B142146C849002A0478 /* FocusPreservationTests.mm in Sources */,
     3810                                2E92B8FA2164A0C1005B64F0 /* FontAttributes.mm in Sources */,
    38033811                                1CAD1F861E5CE7DA00AF2C2C /* FontCache.cpp in Sources */,
    38043812                                F456AB1C213EDBA300CB2CEF /* FontManagerTests.mm in Sources */,
Note: See TracChangeset for help on using the changeset viewer.