[iOS] Replace "node assistance" terminology in WebKit with "focused element"
[WebKit-https.git] / Source / WebKit / Shared / ios / InteractionInformationAtPosition.mm
index f515082..acda819 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2014 Apple Inc. All rights reserved.
+ * Copyright (C) 2014-2018 Apple Inc. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
 #import "config.h"
 #import "InteractionInformationAtPosition.h"
 
-#import "ArgumentCodersCF.h"
+#import "ArgumentCodersCocoa.h"
 #import "WebCoreArgumentCoders.h"
 #import <pal/spi/cocoa/DataDetectorsCoreSPI.h>
+#import <pal/spi/cocoa/NSKeyedArchiverSPI.h>
 #import <wtf/SoftLinking.h>
 
 SOFT_LINK_PRIVATE_FRAMEWORK(DataDetectorsCore)
@@ -36,13 +37,13 @@ SOFT_LINK_CLASS(DataDetectorsCore, DDScannerResult)
 
 namespace WebKit {
 
-#if PLATFORM(IOS)
+#if PLATFORM(IOS_FAMILY)
 
 void InteractionInformationAtPosition::encode(IPC::Encoder& encoder) const
 {
     encoder << request;
 
-    encoder << nodeAtPositionIsAssistedNode;
+    encoder << nodeAtPositionIsFocusedElement;
 #if ENABLE(DATA_INTERACTION)
     encoder << hasSelectionAtPosition;
 #endif
@@ -60,6 +61,9 @@ void InteractionInformationAtPosition::encode(IPC::Encoder& encoder) const
     encoder << title;
     encoder << idAttribute;
     encoder << bounds;
+#if PLATFORM(IOSMAC)
+    encoder << caretRect;
+#endif
     encoder << textBefore;
     encoder << textAfter;
     encoder << linkIndicator;
@@ -72,15 +76,12 @@ void InteractionInformationAtPosition::encode(IPC::Encoder& encoder) const
     encoder << isDataDetectorLink;
     if (isDataDetectorLink) {
         encoder << dataDetectorIdentifier;
-        RetainPtr<NSMutableData> data = adoptNS([[NSMutableData alloc] init]);
-        RetainPtr<NSKeyedArchiver> archiver = adoptNS([[NSKeyedArchiver alloc] initForWritingWithMutableData:data.get()]);
-        [archiver setRequiresSecureCoding:YES];
-        [archiver encodeObject:dataDetectorResults.get() forKey:@"dataDetectorResults"];
-        [archiver finishEncoding];
-        
-        IPC::encode(encoder, reinterpret_cast<CFDataRef>(data.get()));        
+        encoder << dataDetectorResults;
     }
 #endif
+#if ENABLE(DATALIST_ELEMENT)
+    encoder << preventTextInteraction;
+#endif
 }
 
 bool InteractionInformationAtPosition::decode(IPC::Decoder& decoder, InteractionInformationAtPosition& result)
@@ -88,7 +89,7 @@ bool InteractionInformationAtPosition::decode(IPC::Decoder& decoder, Interaction
     if (!decoder.decode(result.request))
         return false;
 
-    if (!decoder.decode(result.nodeAtPositionIsAssistedNode))
+    if (!decoder.decode(result.nodeAtPositionIsFocusedElement))
         return false;
 
 #if ENABLE(DATA_INTERACTION)
@@ -137,6 +138,11 @@ bool InteractionInformationAtPosition::decode(IPC::Decoder& decoder, Interaction
     
     if (!decoder.decode(result.bounds))
         return false;
+    
+#if PLATFORM(IOSMAC)
+    if (!decoder.decode(result.caretRect))
+        return false;
+#endif
 
     if (!decoder.decode(result.textBefore))
         return false;
@@ -144,7 +150,7 @@ bool InteractionInformationAtPosition::decode(IPC::Decoder& decoder, Interaction
     if (!decoder.decode(result.textAfter))
         return false;
     
-    std::optional<WebCore::TextIndicatorData> linkIndicator;
+    Optional<WebCore::TextIndicatorData> linkIndicator;
     decoder >> linkIndicator;
     if (!linkIndicator)
         return false;
@@ -164,23 +170,20 @@ bool InteractionInformationAtPosition::decode(IPC::Decoder& decoder, Interaction
     if (result.isDataDetectorLink) {
         if (!decoder.decode(result.dataDetectorIdentifier))
             return false;
-        RetainPtr<CFDataRef> data;
-        if (!IPC::decode(decoder, data))
-            return false;
-        
-        RetainPtr<NSKeyedUnarchiver> unarchiver = adoptNS([[NSKeyedUnarchiver alloc] initForReadingWithData:(NSData *)data.get()]);
-        [unarchiver setRequiresSecureCoding:YES];
-        @try {
-            result.dataDetectorResults = [unarchiver decodeObjectOfClasses:[NSSet setWithArray:@[ [NSArray class], getDDScannerResultClass()] ] forKey:@"dataDetectorResults"];
-        } @catch (NSException *exception) {
-            LOG_ERROR("Failed to decode NSArray of DDScanResult: %@", exception);
+
+        auto dataDetectorResults = IPC::decode<NSArray>(decoder, @[ [NSArray class], getDDScannerResultClass() ]);
+        if (!dataDetectorResults)
             return false;
-        }
-        
-        [unarchiver finishDecoding];
+
+        result.dataDetectorResults = WTFMove(*dataDetectorResults);
     }
 #endif
 
+#if ENABLE(DATALIST_ELEMENT)
+    if (!decoder.decode(result.preventTextInteraction))
+        return false;
+#endif
+
     return true;
 }
 
@@ -196,6 +199,6 @@ void InteractionInformationAtPosition::mergeCompatibleOptionalInformation(const
         linkIndicator = oldInformation.linkIndicator;
 }
 
-#endif // PLATFORM(IOS)
+#endif // PLATFORM(IOS_FAMILY)
 
 }