Search does not cancel after number of matching terms exceed set max limit
authorcommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 3 Oct 2018 23:34:25 +0000 (23:34 +0000)
committercommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 3 Oct 2018 23:34:25 +0000 (23:34 +0000)
https://bugs.webkit.org/show_bug.cgi?id=190020
<rdar://problem/39585214>

Patch by Zamiul Haque <zhaque@apple.com> on 2018-10-03
Reviewed by Andy Estes.

When searching a PDF document on MobileSafari, the maximum number of matching
terms are limited to a set constant. Beyond this limit, a PDF document should not
be searched, since the UI will not be updated correspondingly. To this effect,
a new SPI was made to cancel a search when the maximum limit of matching terms
is reached. This is done without clearing the highlighting for the all the terms
that were found under the limit. This bug was a result of not having implemented
the new SPI in WKPDFView.

This will be tested in a follow-up patch, after re-enabling WKPDFView tests
on iOS 12.

* UIProcess/ios/WKPDFView.mm:
(-[WKPDFView pdfHostViewController:findStringUpdate:done:]):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@236815 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WebKit/ChangeLog
Source/WebKit/Platform/spi/ios/PDFKitSPI.h
Source/WebKit/UIProcess/ios/WKPDFView.mm

index f7e27ae..1ad3992 100644 (file)
@@ -1,3 +1,25 @@
+2018-10-03  Zamiul Haque  <zhaque@apple.com>
+
+        Search does not cancel after number of matching terms exceed set max limit
+        https://bugs.webkit.org/show_bug.cgi?id=190020
+        <rdar://problem/39585214>
+
+        Reviewed by Andy Estes.
+
+        When searching a PDF document on MobileSafari, the maximum number of matching
+        terms are limited to a set constant. Beyond this limit, a PDF document should not
+        be searched, since the UI will not be updated correspondingly. To this effect,
+        a new SPI was made to cancel a search when the maximum limit of matching terms
+        is reached. This is done without clearing the highlighting for the all the terms
+        that were found under the limit. This bug was a result of not having implemented 
+        the new SPI in WKPDFView.
+
+        This will be tested in a follow-up patch, after re-enabling WKPDFView tests
+        on iOS 12.
+
+        * UIProcess/ios/WKPDFView.mm:
+        (-[WKPDFView pdfHostViewController:findStringUpdate:done:]):
+
 2018-10-03  Brian Burg  <bburg@apple.com>
 
         [Cocoa] REGRESSION: web content process paused in debugger is considered to be unresponsive if WebKit client is sandboxed
index 5837333..93b0105 100644 (file)
@@ -45,6 +45,7 @@
 
 - (void) findString:(NSString*) string withOptions:(NSStringCompareOptions) options;
 - (void) cancelFindString;
+- (void) cancelFindStringWithHighlightsCleared:(BOOL)cleared;
 - (void) focusOnSearchResultAtIndex:(NSUInteger) searchIndex;
 
 - (NSInteger) currentPageIndex;
index dff4c6c..6ddd635 100644 (file)
@@ -392,14 +392,18 @@ static NSStringCompareOptions stringCompareOptions(_WKFindOptions findOptions)
 
 - (void)pdfHostViewController:(PDFHostViewController *)controller findStringUpdate:(NSUInteger)numFound done:(BOOL)done
 {
-    // FIXME: We should stop searching once numFound exceeds _findStringMaxCount, but PDFKit doesn't
-    // allow us to stop the search without also clearing the search highlights. See <rdar://problem/39546973>.
+    if (numFound > _findStringMaxCount && !done) {
+        [controller cancelFindStringWithHighlightsCleared:NO];
+        done = YES;
+    }
+    
     if (!done)
         return;
-
-    _findStringCount = numFound;
-    if (auto findCompletion = std::exchange(_findCompletion, nil))
+    
+    if (auto findCompletion = std::exchange(_findCompletion, nil)) {
+        _findStringCount = numFound;
         findCompletion();
+    }
 }
 
 - (NSURL *)_URLWithPageIndex:(NSInteger)pageIndex