Changeset 268239 in webkit


Ignore:
Timestamp:
Oct 8, 2020 5:48:35 PM (3 years ago)
Author:
rniwa@webkit.org
Message:

Make it possible to send an arbitrary IPC message from JavaScript
https://bugs.webkit.org/show_bug.cgi?id=217423
<rdar://problem/69969351>

Reviewed by Geoffrey Garen.

Source/JavaScriptCore:

Added a helper function to get uint64_t out of BigInt.

  • runtime/JSBigInt.cpp:

(JSC::JSBigInt::toUint64Heap): Added.

  • runtime/JSBigInt.h:

(JSC::JSBigInt::toUint64): Added.

Source/WebKit:

This patch introduces the JavaScript API (window.IPC) to send IPC out of WebContent process.
The feature is compiled in under ASAN and Debug builds and can be enabled at runtime.

window.IPC has two methods: sendMessage and sendSyncMessage which sends an async and sync IPC respectively.
It takes the destination process name (UI, GPU, or Networking), the destination ID (e.g. WebPageProxy ID),
message ID, timeout for sendSyncMessage, and optionally IPC message arguments. The message arguments can be
passed in as a TypedArray or ArrayBuffer, or a JavaScript array that recursively describes encoded objects.

Each object can be either a TypedArray or ArrayBuffer, which will be treated as encoded message, an array
which will be encoded as a Vector with each item within the array encoded recursively, or a dictionary which
describes a specific type.

When a specific type is described via a dictionary, "value" is encoed based on "type" as follows:

  • When "type" is "String", "value" is encoded as a WTF::String, treating null or undefined as a null string.
  • When "type" is "bool", "int8_t", "int16_t", "int32_t", "int64_t", "uint8_t", "uint16_t", "uint32_t", or "uint64_t", "value" (which can be BigInt or a number) is encoded as the respective C++ type.
  • When "type" is "RGBA", "value" is used as PackedColor::RGBA to construct WebCore::Color to be encoded.
  • When "type" is "IntRect" or "FloatRect", "x", "y", "width", and "height" are treated as respective values of IntRect or FloatRect C++ objects, and the constructed *Rect is encoded.
  • When "type" is "FrameInfoData", the context object's WebFrame's FrameInfoData is encoded.

The list of IPC messages are exposed on window.IPC.messages, and VisitedLinkStore ID, WebPageProxy ID,
and frame identifiers are also exposed as static variables on window.IPC.

  • Sources.txt:
  • WebKit.xcodeproj/project.pbxproj:
  • WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:

(WebKit::WebFrameLoaderClient::dispatchDidClearWindowObjectInWorld): Inject the API if enabled.

  • WebProcess/WebPage/IPCTestingAPI.cpp: Added.

(WebKit::IPCTestingAPI::JSIPC::create): Added.
(WebKit::IPCTestingAPI::JSIPC::webFrame): Added.
(WebKit::IPCTestingAPI::JSIPC::JSIPC): Added.
(WebKit::IPCTestingAPI::JSIPC::wrapperClass): Added.
(WebKit::IPCTestingAPI::JSIPC::unwrap): Added.
(WebKit::IPCTestingAPI::JSIPC::toWrapped): Added.
(WebKit::IPCTestingAPI::JSIPC::initialize): Added.
(WebKit::IPCTestingAPI::JSIPC::finalize): Added.
(WebKit::IPCTestingAPI::JSIPC::staticFunctions): Added.
(WebKit::IPCTestingAPI::JSIPC::staticValues): Added.
(WebKit::IPCTestingAPI::convertToUint64): Added.
(WebKit::IPCTestingAPI::processTargetFromArgument): Added.
(WebKit::IPCTestingAPI::destinationIDFromArgument): Added.
(WebKit::IPCTestingAPI::messageIDFromArgument): Added.
(WebKit::IPCTestingAPI::encodeTypedArray): Added.
(WebKit::IPCTestingAPI::createTypeError): Added.
(WebKit::IPCTestingAPI::encodeRectType): Added.
(WebKit::IPCTestingAPI::encodeIntegralType): Added.
(WebKit::IPCTestingAPI::VectorEncodeHelper::encode const): Added.
(WebKit::IPCTestingAPI::encodeArgument): Added.
(WebKit::IPCTestingAPI::JSIPC::sendMessage): Added.
(WebKit::IPCTestingAPI::JSIPC::sendSyncMessage): Added.
(WebKit::IPCTestingAPI::JSIPC::visitedLinkStoreID): Added.
(WebKit::IPCTestingAPI::JSIPC::webPageProxyID): Added.
(WebKit::IPCTestingAPI::JSIPC::frameIdentifier): Added.
(WebKit::IPCTestingAPI::JSIPC::retrieveID): Added.
(WebKit::IPCTestingAPI::JSIPC::messages): Added.
(WebKit::IPCTestingAPI::inject):

  • WebProcess/WebPage/IPCTestingAPI.h: Added.
  • WebProcess/WebPage/WebFrame.h:
  • WebProcess/WebPage/WebPage.cpp:

(WebKit::m_limitsNavigationsToAppBoundDomains):
(WebKit::WebPage::updatePreferences):

  • WebProcess/WebPage/WebPage.h:

(WebKit::WebPage::ipcTestingAPIEnabled const):
(WebKit::WebPage::webPageProxyID const):
(WebKit::WebPage::visitedLinkTableID const):

Source/WTF:

Added a compile time flag (ENABLE_IPC_TESTING_API) and a runtime flag (IPCTestingAPIEnabled)
for the JavaScript API to test IPC.

  • Scripts/GeneratePreferences.rb:

(Preference::nameLower): Keep IPC uppercase.

  • Scripts/Preferences/WebPreferencesInternal.yaml: Added IPCTestingAPIEnabled.
  • wtf/PlatformEnable.h: Added ENABLE_IPC_TESTING_API.

Tools:

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

(-[IPCTestingAPIDelegate webView:runJavaScriptAlertPanelWithMessage:initiatedByFrame:completionHandler:]):
(TEST):

Location:
trunk
Files:
3 added
16 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/ChangeLog

    r268170 r268239  
     12020-10-08  Ryosuke Niwa  <rniwa@webkit.org>
     2
     3        Make it possible to send an arbitrary IPC message from JavaScript
     4        https://bugs.webkit.org/show_bug.cgi?id=217423
     5        <rdar://problem/69969351>
     6
     7        Reviewed by Geoffrey Garen.
     8
     9        Added a helper function to get uint64_t out of BigInt.
     10
     11        * runtime/JSBigInt.cpp:
     12        (JSC::JSBigInt::toUint64Heap): Added.
     13        * runtime/JSBigInt.h:
     14        (JSC::JSBigInt::toUint64): Added.
     15
    1162020-10-07  Yusuke Suzuki  <ysuzuki@apple.com>
    217
  • trunk/Source/JavaScriptCore/runtime/JSBigInt.cpp

    r267373 r268239  
    30503050#endif
    30513051
     3052Optional<uint64_t> JSBigInt::toUint64Heap(JSBigInt* bigInt)
     3053{
     3054    auto length = bigInt->length();
     3055    if (!length)
     3056        return 0;
     3057    if (bigInt->sign())
     3058        return WTF::nullopt;
     3059
     3060    static_assert(sizeof(uint64_t) == sizeof(Digit) || sizeof(uint64_t) == sizeof(Digit) * 2, "Digit must be either 32-bit or 64-bit");
     3061    if (sizeof(uint64_t) == sizeof(Digit)) {
     3062        if (length > 1)
     3063            return WTF::nullopt;
     3064        return bigInt->digit(0);
     3065    }
     3066
     3067    if (length > 2)
     3068        return WTF::nullopt;
     3069    uint64_t result = bigInt->digit(0);
     3070    if (length == 1)
     3071        result += static_cast<uint64_t>(bigInt->digit(0)) << 32;
     3072    return result;
     3073}
     3074
    30523075static ALWAYS_INLINE unsigned computeHash(JSBigInt::Digit* digits, unsigned length, bool sign)
    30533076{
  • trunk/Source/JavaScriptCore/runtime/JSBigInt.h

    r267373 r268239  
    7474    static JSBigInt* createFrom(JSGlobalObject*, uint32_t value);
    7575    static JSBigInt* createFrom(JSGlobalObject*, int64_t value);
    76     static JSBigInt* createFrom(JSGlobalObject*, uint64_t value);
     76    JS_EXPORT_PRIVATE static JSBigInt* createFrom(JSGlobalObject*, uint64_t value);
    7777    static JSBigInt* createFrom(JSGlobalObject*, bool value);
    7878    static JSBigInt* createFrom(JSGlobalObject*, double value);
     
    422422    static JSValue asUintN(JSGlobalObject*, uint64_t numberOfBits, int32_t bigIntAsInt32);
    423423#endif
     424
     425    static Optional<uint64_t> toUint64(JSValue bigInt)
     426    {
     427        ASSERT(bigInt.isBigInt());
     428#if USE(BIGINT32)
     429        if (bigInt.isBigInt32()) {
     430            auto value = bigInt.bigInt32AsInt32();
     431            if (value < 0)
     432                return WTF::nullopt;
     433            return value;
     434        }
     435#endif
     436        return toUint64Heap(jsCast<JSBigInt*>(bigInt));
     437    }
    424438
    425439    Digit digit(unsigned);
     
    577591    static ImplResult truncateAndSubFromPowerOfTwo(JSGlobalObject*, int32_t, BigIntImpl, bool resultSign);
    578592
     593    JS_EXPORT_PRIVATE static Optional<uint64_t> toUint64Heap(JSBigInt*);
     594
    579595    inline static size_t offsetOfData()
    580596    {
  • trunk/Source/WTF/ChangeLog

    r268214 r268239  
     12020-10-08  Ryosuke Niwa  <rniwa@webkit.org>
     2
     3        Make it possible to send an arbitrary IPC message from JavaScript
     4        https://bugs.webkit.org/show_bug.cgi?id=217423
     5        <rdar://problem/69969351>
     6
     7        Reviewed by Geoffrey Garen.
     8
     9        Added a compile time flag (ENABLE_IPC_TESTING_API) and a runtime flag (IPCTestingAPIEnabled)
     10        for the JavaScript API to test IPC.
     11
     12        * Scripts/GeneratePreferences.rb:
     13        (Preference::nameLower): Keep IPC uppercase.
     14        * Scripts/Preferences/WebPreferencesInternal.yaml: Added IPCTestingAPIEnabled.
     15        * wtf/PlatformEnable.h: Added ENABLE_IPC_TESTING_API.
     16
    1172020-10-08  Alex Christensen  <achristensen@webkit.org>
    218
  • trunk/Source/WTF/Scripts/GeneratePreferences.rb

    r268163 r268239  
    121121    elsif @name.start_with?("VP")
    122122      @name[0..1].downcase + @name[2..@name.length]
    123     elsif @name.start_with?("CSS", "XSS", "FTP", "DOM", "DNS", "PDF", "ICE")
     123    elsif @name.start_with?("CSS", "DOM", "DNS", "FTP", "ICE", "IPC", "PDF", "XSS")
    124124      @name[0..2].downcase + @name[3..@name.length]
    125125    elsif @name.start_with?("HTTP")
  • trunk/Source/WTF/Scripts/Preferences/WebPreferencesInternal.yaml

    r268123 r268239  
    280280      default: true
    281281
     282IPCTestingAPIEnabled:
     283  type: bool
     284  humanReadableName: "IPC Testing API"
     285  humanReadableDescription: "Enable IPC Testing API for JavaScript"
     286  webcoreBinding: none
     287  condition: ENABLE(IPC_TESTING_API)
     288  exposed: [ WebKit ]
     289  defaultValue:
     290    WebKit:
     291      default: false
     292
    282293InputTypeColorEnabled:
    283294  type: bool
  • trunk/Source/WTF/wtf/PlatformEnable.h

    r267938 r268239  
    316316#endif
    317317
     318#if !defined(ENABLE_IPC_TESTING_API)
     319/* Enable IPC testing on all ASAN builds and debug builds. */
     320#if ASAN_ENABLED || !defined(NDEBUG)
     321#define ENABLE_IPC_TESTING_API 1
     322#endif
     323#endif
     324
    318325#if ENABLE(INPUT_TYPE_DATE) || ENABLE(INPUT_TYPE_DATETIMELOCAL) || ENABLE(INPUT_TYPE_MONTH) || ENABLE(INPUT_TYPE_TIME) || ENABLE(INPUT_TYPE_WEEK)
    319326#if !defined(ENABLE_DATE_AND_TIME_INPUT_TYPES)
  • trunk/Source/WebKit/ChangeLog

    r268231 r268239  
     12020-10-08  Ryosuke Niwa  <rniwa@webkit.org>
     2
     3        Make it possible to send an arbitrary IPC message from JavaScript
     4        https://bugs.webkit.org/show_bug.cgi?id=217423
     5        <rdar://problem/69969351>
     6
     7        Reviewed by Geoffrey Garen.
     8
     9        This patch introduces the JavaScript API (window.IPC) to send IPC out of WebContent process.
     10        The feature is compiled in under ASAN and Debug builds and can be enabled at runtime.
     11
     12        window.IPC has two methods: sendMessage and sendSyncMessage which sends an async and sync IPC respectively.
     13        It takes the destination process name (UI, GPU, or Networking), the destination ID (e.g. WebPageProxy ID),
     14        message ID, timeout for sendSyncMessage, and optionally IPC message arguments. The message arguments can be
     15        passed in as a TypedArray or ArrayBuffer, or a JavaScript array that recursively describes encoded objects.
     16
     17        Each object can be either a TypedArray or ArrayBuffer, which will be treated as encoded message, an array
     18        which will be encoded as a Vector with each item within the array encoded recursively, or a dictionary which
     19        describes a specific type.
     20
     21        When a specific type is described via a dictionary, "value" is encoed based on "type" as follows:
     22         - When "type" is "String", "value" is encoded as a WTF::String, treating null or undefined as a null string.
     23         - When "type" is "bool", "int8_t", "int16_t", "int32_t", "int64_t", "uint8_t", "uint16_t", "uint32_t",
     24           or "uint64_t", "value" (which can be BigInt or a number) is encoded as the respective C++ type.
     25         - When "type" is "RGBA", "value" is used as PackedColor::RGBA to construct WebCore::Color to be encoded.
     26         - When "type" is "IntRect" or "FloatRect", "x", "y", "width", and "height" are treated as respective values
     27           of IntRect or FloatRect C++ objects, and the constructed *Rect is encoded.
     28         - When "type" is "FrameInfoData", the context object's WebFrame's FrameInfoData is encoded.
     29
     30        The list of IPC messages are exposed on window.IPC.messages, and VisitedLinkStore ID, WebPageProxy ID,
     31        and frame identifiers are also exposed as static variables on window.IPC.
     32
     33        * Sources.txt:
     34        * WebKit.xcodeproj/project.pbxproj:
     35        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
     36        (WebKit::WebFrameLoaderClient::dispatchDidClearWindowObjectInWorld): Inject the API if enabled.
     37        * WebProcess/WebPage/IPCTestingAPI.cpp: Added.
     38        (WebKit::IPCTestingAPI::JSIPC::create): Added.
     39        (WebKit::IPCTestingAPI::JSIPC::webFrame): Added.
     40        (WebKit::IPCTestingAPI::JSIPC::JSIPC): Added.
     41        (WebKit::IPCTestingAPI::JSIPC::wrapperClass): Added.
     42        (WebKit::IPCTestingAPI::JSIPC::unwrap): Added.
     43        (WebKit::IPCTestingAPI::JSIPC::toWrapped): Added.
     44        (WebKit::IPCTestingAPI::JSIPC::initialize): Added.
     45        (WebKit::IPCTestingAPI::JSIPC::finalize): Added.
     46        (WebKit::IPCTestingAPI::JSIPC::staticFunctions): Added.
     47        (WebKit::IPCTestingAPI::JSIPC::staticValues): Added.
     48        (WebKit::IPCTestingAPI::convertToUint64): Added.
     49        (WebKit::IPCTestingAPI::processTargetFromArgument): Added.
     50        (WebKit::IPCTestingAPI::destinationIDFromArgument): Added.
     51        (WebKit::IPCTestingAPI::messageIDFromArgument): Added.
     52        (WebKit::IPCTestingAPI::encodeTypedArray): Added.
     53        (WebKit::IPCTestingAPI::createTypeError): Added.
     54        (WebKit::IPCTestingAPI::encodeRectType): Added.
     55        (WebKit::IPCTestingAPI::encodeIntegralType): Added.
     56        (WebKit::IPCTestingAPI::VectorEncodeHelper::encode const): Added.
     57        (WebKit::IPCTestingAPI::encodeArgument): Added.
     58        (WebKit::IPCTestingAPI::JSIPC::sendMessage): Added.
     59        (WebKit::IPCTestingAPI::JSIPC::sendSyncMessage): Added.
     60        (WebKit::IPCTestingAPI::JSIPC::visitedLinkStoreID): Added.
     61        (WebKit::IPCTestingAPI::JSIPC::webPageProxyID): Added.
     62        (WebKit::IPCTestingAPI::JSIPC::frameIdentifier): Added.
     63        (WebKit::IPCTestingAPI::JSIPC::retrieveID): Added.
     64        (WebKit::IPCTestingAPI::JSIPC::messages): Added.
     65        (WebKit::IPCTestingAPI::inject):
     66        * WebProcess/WebPage/IPCTestingAPI.h: Added.
     67        * WebProcess/WebPage/WebFrame.h:
     68        * WebProcess/WebPage/WebPage.cpp:
     69        (WebKit::m_limitsNavigationsToAppBoundDomains):
     70        (WebKit::WebPage::updatePreferences):
     71        * WebProcess/WebPage/WebPage.h:
     72        (WebKit::WebPage::ipcTestingAPIEnabled const):
     73        (WebKit::WebPage::webPageProxyID const):
     74        (WebKit::WebPage::visitedLinkTableID const):
     75
    1762020-10-08  Peng Liu  <peng.liu6@apple.com>
    277
  • trunk/Source/WebKit/Sources.txt

    r267938 r268239  
    653653WebProcess/WebPage/EventDispatcher.cpp
    654654WebProcess/WebPage/FindController.cpp
     655WebProcess/WebPage/IPCTestingAPI.cpp
    655656WebProcess/WebPage/PageBanner.cpp
    656657WebProcess/WebPage/VisitedLinkTableController.cpp
  • trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj

    r268217 r268239  
    44884488                9B02E0CE235EBB14004044B2 /* _WKTextManipulationToken.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = _WKTextManipulationToken.mm; sourceTree = "<group>"; };
    44894489                9B02E0D0235EBCCA004044B2 /* _WKTextManipulationItem.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = _WKTextManipulationItem.mm; sourceTree = "<group>"; };
     4490                9B033E71252580F300501071 /* IPCTestingAPI.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = IPCTestingAPI.h; sourceTree = "<group>"; };
     4491                9B033E72252580F300501071 /* IPCTestingAPI.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = IPCTestingAPI.cpp; sourceTree = "<group>"; };
    44904492                9B1229CB23FF25F2008CA751 /* RemoteAudioDestinationManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RemoteAudioDestinationManager.h; sourceTree = "<group>"; };
    44914493                9B1229CC23FF25F2008CA751 /* RemoteAudioDestinationManager.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = RemoteAudioDestinationManager.cpp; sourceTree = "<group>"; };
     
    88678869                                1A90C1F31264FD71003E44D4 /* FindController.cpp */,
    88688870                                1A90C1F21264FD71003E44D4 /* FindController.h */,
     8871                                9B033E72252580F300501071 /* IPCTestingAPI.cpp */,
     8872                                9B033E71252580F300501071 /* IPCTestingAPI.h */,
    88698873                                7C387433172F5615001BD88A /* PageBanner.cpp */,
    88708874                                7CF47FF917275C57008ACB91 /* PageBanner.h */,
  • trunk/Source/WebKit/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp

    r266829 r268239  
    3333#include "FormDataReference.h"
    3434#include "FrameInfoData.h"
     35#include "IPCTestingAPI.h"
    3536#include "InjectedBundle.h"
    3637#include "InjectedBundleDOMWindowExtension.h"
     
    17441745        return;
    17451746
     1747#if ENABLE(IPC_TESTING_API)
     1748    if (world.isNormal() && webPage->ipcTestingAPIEnabled())
     1749        IPCTestingAPI::inject(*webPage, m_frame.get(), world);
     1750#endif
     1751
    17461752    webPage->injectedBundleLoaderClient().didClearWindowObjectForFrame(*webPage, m_frame, world);
    17471753
  • trunk/Source/WebKit/WebProcess/WebPage/WebFrame.h

    r268017 r268239  
    6464struct WebsitePoliciesData;
    6565
    66 class WebFrame : public API::ObjectImpl<API::Object::Type::BundleFrame> {
     66class WebFrame : public API::ObjectImpl<API::Object::Type::BundleFrame>, public CanMakeWeakPtr<WebFrame> {
    6767public:
    6868    static Ref<WebFrame> create() { return adoptRef(*new WebFrame); }
  • trunk/Source/WebKit/WebProcess/WebPage/WebPage.cpp

    r268074 r268239  
    790790#endif
    791791
     792#if ENABLE(IPC_TESTING_API)
     793    m_visitedLinkTableID = parameters.visitedLinkTableID;
     794#endif
     795
    792796#if ENABLE(VP9)
    793797    if (parameters.shouldEnableVP9Decoder)
     
    37853789    WebProcess::singleton().setUseGPUProcessForMedia(settings.useGPUProcessForMediaEnabled());
    37863790#endif
     3791
     3792#if ENABLE(IPC_TESTING_API)
     3793    m_ipcTestingAPIEnabled = store.getBoolValueForKey(WebPreferencesKey::ipcTestingAPIEnabledKey());
     3794#endif
    37873795}
    37883796
  • trunk/Source/WebKit/WebProcess/WebPage/WebPage.h

    r268116 r268239  
    13401340    void updateCORSDisablingPatterns(Vector<String>&&);
    13411341
     1342#if ENABLE(IPC_TESTING_API)
     1343    bool ipcTestingAPIEnabled() const { return m_ipcTestingAPIEnabled; }
     1344    uint64_t webPageProxyID() const { return messageSenderDestinationID(); }
     1345    uint64_t visitedLinkTableID() const { return m_visitedLinkTableID; }
     1346#endif
     1347
    13421348    void getProcessDisplayName(CompletionHandler<void(String&&)>&&);
    13431349
     
    21722178
    21732179    Vector<String> m_corsDisablingPatterns;
     2180
     2181#if ENABLE(IPC_TESTING_API)
     2182    bool m_ipcTestingAPIEnabled { false };
     2183    uint64_t m_visitedLinkTableID;
     2184#endif
    21742185};
    21752186
  • trunk/Tools/ChangeLog

    r268238 r268239  
     12020-10-08  Ryosuke Niwa  <rniwa@webkit.org>
     2
     3        Make it possible to send an arbitrary IPC message from JavaScript
     4        https://bugs.webkit.org/show_bug.cgi?id=217423
     5        <rdar://problem/69969351>
     6
     7        Reviewed by Geoffrey Garen.
     8
     9        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
     10        * TestWebKitAPI/Tests/WebKitCocoa/IPCTestingAPI.mm: Added.
     11        (-[IPCTestingAPIDelegate webView:runJavaScriptAlertPanelWithMessage:initiatedByFrame:completionHandler:]):
     12        (TEST):
     13
    1142020-10-08  Sam Weinig  <weinig@apple.com>
    215
  • trunk/Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj

    r268192 r268239  
    848848                9B59F12A2034086F009E63D5 /* mso-list-compat-mode.html in Copy Resources */ = {isa = PBXBuildFile; fileRef = 9B59F12920340854009E63D5 /* mso-list-compat-mode.html */; };
    849849                9B62630C1F8C25C8007EE29B /* copy-url.html in Copy Resources */ = {isa = PBXBuildFile; fileRef = 9B62630B1F8C2510007EE29B /* copy-url.html */; };
     850                9B6D9FF9252EFDE500A51640 /* IPCTestingAPI.mm in Sources */ = {isa = PBXBuildFile; fileRef = 9B6D9FF8252EFDE500A51640 /* IPCTestingAPI.mm */; };
    850851                9B7A37C41F8AEBA5004AA228 /* CopyURL.mm in Sources */ = {isa = PBXBuildFile; fileRef = 9B7A37C21F8AEBA5004AA228 /* CopyURL.mm */; };
    851852                9B7D740F1F8378770006C432 /* paste-rtfd.html in Copy Resources */ = {isa = PBXBuildFile; fileRef = 9B7D740E1F8377E60006C432 /* paste-rtfd.html */; };
     
    24602461                9B59F12920340854009E63D5 /* mso-list-compat-mode.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = "mso-list-compat-mode.html"; sourceTree = "<group>"; };
    24612462                9B62630B1F8C2510007EE29B /* copy-url.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = "copy-url.html"; sourceTree = "<group>"; };
     2463                9B6D9FF8252EFDE500A51640 /* IPCTestingAPI.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = IPCTestingAPI.mm; sourceTree = "<group>"; };
    24622464                9B79164F1BD89D0D00D50B8F /* FirstResponderScrollingPosition.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = FirstResponderScrollingPosition.mm; sourceTree = "<group>"; };
    24632465                9B7A37C21F8AEBA5004AA228 /* CopyURL.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = CopyURL.mm; sourceTree = "<group>"; };
     
    32713273                                2DB0232E1E4E871800707123 /* InteractionDeadlockAfterCrash.mm */,
    32723274                                2D116E1223E0CB3900208900 /* iOSMouseSupport.mm */,
     3275                                9B6D9FF8252EFDE500A51640 /* IPCTestingAPI.mm */,
    32733276                                5C69BDD41F82A7EB000F4F4B /* JavaScriptDuringNavigation.mm */,
    32743277                                5C0160C021A132320077FA32 /* JITEnabled.mm */,
     
    52275230                                7A909A831D877480007E10F8 /* IntSizeTests.cpp in Sources */,
    52285231                                2D116E1323E0CB3A00208900 /* iOSMouseSupport.mm in Sources */,
     5232                                9B6D9FF9252EFDE500A51640 /* IPCTestingAPI.mm in Sources */,
    52295233                                5C0BF8931DD599BD00B00328 /* IsNavigationActionTrusted.mm in Sources */,
    52305234                                CD5FF49F2162E943004BD86F /* ISOBox.cpp in Sources */,
Note: See TracChangeset for help on using the changeset viewer.