Title: [220033] trunk
Revision
220033
Author
beid...@apple.com
Date
2017-07-28 16:19:50 -0700 (Fri, 28 Jul 2017)

Log Message

API tests that use URLSchemeHandler are failing.
https://bugs.webkit.org/show_bug.cgi?id=174950

Reviewed by Alex Christensen.

Source/WebKit:

Make sure that in all cases where we remove the last task from the page->task map...
...We also remove the map itself.

* UIProcess/WebURLSchemeHandler.cpp:
(WebKit::WebURLSchemeHandler::stopTask):
(WebKit::WebURLSchemeHandler::taskCompleted):
(WebKit::WebURLSchemeHandler::removeTaskFromPageMap):
* UIProcess/WebURLSchemeHandler.h:

Tools:

Fix the NoMIMEType test to be correct.

* TestWebKitAPI/Tests/WebKit2Cocoa/WKURLSchemeHandler-1.mm:
(-[SchemeHandler initWithData:mimeType:]):
(-[SchemeHandler webView:startURLSchemeTask:]):
(TEST):

Modified Paths

Diff

Modified: trunk/Source/WebKit/ChangeLog (220032 => 220033)


--- trunk/Source/WebKit/ChangeLog	2017-07-28 22:31:37 UTC (rev 220032)
+++ trunk/Source/WebKit/ChangeLog	2017-07-28 23:19:50 UTC (rev 220033)
@@ -1,5 +1,21 @@
 2017-07-28  Brady Eidson  <beid...@apple.com>
 
+        API tests that use URLSchemeHandler are failing.
+        https://bugs.webkit.org/show_bug.cgi?id=174950
+
+        Reviewed by Alex Christensen.
+
+        Make sure that in all cases where we remove the last task from the page->task map...
+        ...We also remove the map itself.
+
+        * UIProcess/WebURLSchemeHandler.cpp:
+        (WebKit::WebURLSchemeHandler::stopTask):
+        (WebKit::WebURLSchemeHandler::taskCompleted):
+        (WebKit::WebURLSchemeHandler::removeTaskFromPageMap):
+        * UIProcess/WebURLSchemeHandler.h:
+
+2017-07-28  Brady Eidson  <beid...@apple.com>
+
         WKURLSchemeTaskImpl instances are being abandoned (except if the task is stopped).
         <rdar://problem/33568276> and https://bugs.webkit.org/show_bug.cgi?id=174895
 

Modified: trunk/Source/WebKit/UIProcess/WebURLSchemeHandler.cpp (220032 => 220033)


--- trunk/Source/WebKit/UIProcess/WebURLSchemeHandler.cpp	2017-07-28 22:31:37 UTC (rev 220032)
+++ trunk/Source/WebKit/UIProcess/WebURLSchemeHandler.cpp	2017-07-28 23:19:50 UTC (rev 220033)
@@ -80,17 +80,11 @@
     if (iterator == m_tasks.end())
         return;
 
-    auto pageIterator = m_tasksByPageIdentifier.find(page.pageID());
-    ASSERT(pageIterator != m_tasksByPageIdentifier.end());
-    ASSERT(pageIterator->value.contains(taskIdentifier));
-    pageIterator->value.remove(taskIdentifier);
-
     iterator->value->stop();
     platformStopTask(page, iterator->value);
 
+    removeTaskFromPageMap(page.pageID(), taskIdentifier);
     m_tasks.remove(iterator);
-    if (pageIterator->value.isEmpty())
-        m_tasksByPageIdentifier.remove(pageIterator);
 }
 
 void WebURLSchemeHandler::taskCompleted(WebURLSchemeTask& task)
@@ -97,11 +91,19 @@
 {
     auto takenTask = m_tasks.take(task.identifier());
     ASSERT_UNUSED(takenTask, takenTask->ptr() == &task);
+    removeTaskFromPageMap(task.pageID(), task.identifier());
 
-    ASSERT(m_tasksByPageIdentifier.get(task.pageID()).contains(task.identifier()));
-    m_tasksByPageIdentifier.get(task.pageID()).remove(task.identifier());
-
     platformTaskCompleted(task);
 }
 
+void WebURLSchemeHandler::removeTaskFromPageMap(uint64_t pageID, uint64_t taskID)
+{
+    auto iterator = m_tasksByPageIdentifier.find(pageID);
+    ASSERT(iterator != m_tasksByPageIdentifier.end());
+    ASSERT(iterator->value.contains(taskID));
+    iterator->value.remove(taskID);
+    if (iterator->value.isEmpty())
+        m_tasksByPageIdentifier.remove(iterator);
+}
+
 } // namespace WebKit

Modified: trunk/Source/WebKit/UIProcess/WebURLSchemeHandler.h (220032 => 220033)


--- trunk/Source/WebKit/UIProcess/WebURLSchemeHandler.h	2017-07-28 22:31:37 UTC (rev 220032)
+++ trunk/Source/WebKit/UIProcess/WebURLSchemeHandler.h	2017-07-28 23:19:50 UTC (rev 220033)
@@ -59,6 +59,8 @@
     virtual void platformStopTask(WebPageProxy&, WebURLSchemeTask&) = 0;
     virtual void platformTaskCompleted(WebURLSchemeTask&) = 0;
 
+    void removeTaskFromPageMap(uint64_t pageID, uint64_t taskID);
+
     uint64_t m_identifier;
 
     HashMap<uint64_t, Ref<WebURLSchemeTask>> m_tasks;

Modified: trunk/Tools/ChangeLog (220032 => 220033)


--- trunk/Tools/ChangeLog	2017-07-28 22:31:37 UTC (rev 220032)
+++ trunk/Tools/ChangeLog	2017-07-28 23:19:50 UTC (rev 220033)
@@ -1,3 +1,17 @@
+2017-07-28  Brady Eidson  <beid...@apple.com>
+
+        API tests that use URLSchemeHandler are failing.
+        https://bugs.webkit.org/show_bug.cgi?id=174950
+
+        Reviewed by Alex Christensen.
+
+        Fix the NoMIMEType test to be correct.
+
+        * TestWebKitAPI/Tests/WebKit2Cocoa/WKURLSchemeHandler-1.mm:
+        (-[SchemeHandler initWithData:mimeType:]):
+        (-[SchemeHandler webView:startURLSchemeTask:]):
+        (TEST):
+
 2017-07-28  Daniel Bates  <daba...@apple.com>
 
         prepare-ChangeLog should not list added layout tests in PAL ChangeLog

Modified: trunk/Tools/TestWebKitAPI/Tests/WebKit2Cocoa/WKURLSchemeHandler-1.mm (220032 => 220033)


--- trunk/Tools/TestWebKitAPI/Tests/WebKit2Cocoa/WKURLSchemeHandler-1.mm	2017-07-28 22:31:37 UTC (rev 220032)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKit2Cocoa/WKURLSchemeHandler-1.mm	2017-07-28 23:19:50 UTC (rev 220033)
@@ -41,6 +41,7 @@
 @interface SchemeHandler : NSObject <WKURLSchemeHandler>
 @property (readonly) NSMutableArray<NSURL *> *startedURLs;
 @property (readonly) NSMutableArray<NSURL *> *stoppedURLs;
+@property (assign) BOOL shouldFinish;
 - (instancetype)initWithData:(NSData *)data mimeType:(NSString *)inMIMEType;
 @end
 
@@ -59,6 +60,7 @@
     mimeType = inMIMEType;
     _startedURLs = [[NSMutableArray alloc] init];
     _stoppedURLs = [[NSMutableArray alloc] init];
+    _shouldFinish = YES;
 
     return self;
 }
@@ -84,7 +86,8 @@
     RetainPtr<NSURLResponse> response = adoptNS([[NSURLResponse alloc] initWithURL:task.request.URL MIMEType:mimeType.get() expectedContentLength:1 textEncodingName:nil]);
     [task didReceiveResponse:response.get()];
     [task didReceiveData:resourceData.get()];
-    [task didFinish];
+    if (_shouldFinish)
+        [task didFinish];
 }
 
 - (void)webView:(WKWebView *)webView stopURLSchemeTask:(id <WKURLSchemeTask>)task
@@ -133,6 +136,7 @@
     RetainPtr<WKWebViewConfiguration> configuration = adoptNS([[WKWebViewConfiguration alloc] init]);
 
     RetainPtr<SchemeHandler> handler = adoptNS([[SchemeHandler alloc] initWithData:[NSData dataWithBytesNoCopy:(void*)mainBytes length:sizeof(mainBytes) freeWhenDone:NO] mimeType:nil]);
+    handler.get().shouldFinish = NO;
     [configuration setURLSchemeHandler:handler.get() forURLScheme:@"testing"];
 
     RetainPtr<WKWebView> webView = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get()]);
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to