Assertion hit when saving to PDF from printing dialog
authorcdumez@apple.com <cdumez@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 30 Aug 2019 21:45:54 +0000 (21:45 +0000)
committercdumez@apple.com <cdumez@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 30 Aug 2019 21:45:54 +0000 (21:45 +0000)
https://bugs.webkit.org/show_bug.cgi?id=201351

Reviewed by Tim Horton.

[WKPrintingView knowsPageRange:] may get called from a background thread and ends up calling
WeakPtr::get() which asserts because it is generally unsafe to get the raw pointer from a
WeakPtr to an object owned by another thread. However, the methods here merely want to null
check it so add a thread-safe method (pageIsClosed()) to WebFrameProxy for it.

* UIProcess/WebFrameProxy.h:
(WebKit::WebFrameProxy::pageIsClosed const):
* UIProcess/mac/WKPrintingView.mm:
(-[WKPrintingView knowsPageRange:]):

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

Source/WebKit/ChangeLog
Source/WebKit/UIProcess/WebFrameProxy.h
Source/WebKit/UIProcess/mac/WKPrintingView.mm

index 2a92c82..afc33ac 100644 (file)
@@ -1,3 +1,20 @@
+2019-08-30  Chris Dumez  <cdumez@apple.com>
+
+        Assertion hit when saving to PDF from printing dialog
+        https://bugs.webkit.org/show_bug.cgi?id=201351
+
+        Reviewed by Tim Horton.
+
+        [WKPrintingView knowsPageRange:] may get called from a background thread and ends up calling
+        WeakPtr::get() which asserts because it is generally unsafe to get the raw pointer from a
+        WeakPtr to an object owned by another thread. However, the methods here merely want to null
+        check it so add a thread-safe method (pageIsClosed()) to WebFrameProxy for it.
+
+        * UIProcess/WebFrameProxy.h:
+        (WebKit::WebFrameProxy::pageIsClosed const):
+        * UIProcess/mac/WKPrintingView.mm:
+        (-[WKPrintingView knowsPageRange:]):
+
 2019-08-30  Alex Christensen  <achristensen@webkit.org>
 
         Remove HAVE_CFNETWORK_WITH_AUTO_ADDED_HTTP_HEADER_SUPPRESSION_SUPPORT conditional
index ccda637..094f9ff 100644 (file)
@@ -69,6 +69,8 @@ public:
     WebCore::FrameIdentifier frameID() const { return m_frameID; }
     WebPageProxy* page() const { return m_page.get(); }
 
+    bool pageIsClosed() const { return !m_page; } // Needs to be thread-safe.
+
     void webProcessWillShutDown();
 
     bool isMainFrame() const;
index a8cba89..e3436f3 100644 (file)
@@ -391,7 +391,7 @@ static void prepareDataForPrintingOnSecondaryThread(WKPrintingView *view)
     if (!RunLoop::isMain())
         _isPrintingFromSecondaryThread = YES;
 
-    if (!_webFrame->page()) {
+    if (_webFrame->pageIsClosed()) {
         *range = NSMakeRange(1, NSIntegerMax);
         return YES;
     }