From ea18caaebf2790fbcac152277f234354f53240a4 Mon Sep 17 00:00:00 2001 From: "ap@apple.com" Date: Fri, 6 Jan 2012 22:01:00 +0000 Subject: [PATCH] [Mac] Thread verifier assertions when printing https://bugs.webkit.org/show_bug.cgi?id=75738 Reviewed by Sam Weinig. * UIProcess/API/mac/WKPrintingView.mm: (-[WKPrintingView dealloc]): Dealloc in main thread, so that WebFrameProxy doesn't get deref'ed from a secondary one. (-[WKPrintingView _adjustPrintingMarginsForHeaderAndFooter]): This method calls out to client, which only expects that on main thread. (-[WKPrintingView knowsPageRange:]): Call _adjustPrintingMarginsForHeaderAndFooter on main thread. git-svn-id: http://svn.webkit.org/repository/webkit/trunk@104334 268f45cc-cd09-0410-ab3c-d52691b4dbfc --- Source/WebKit2/ChangeLog | 15 +++++++++++++++ .../WebKit2/UIProcess/API/mac/WKPrintingView.mm | 13 ++++++++++++- 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/Source/WebKit2/ChangeLog b/Source/WebKit2/ChangeLog index a87639fe245..7af40045490 100644 --- a/Source/WebKit2/ChangeLog +++ b/Source/WebKit2/ChangeLog @@ -1,3 +1,18 @@ +2012-01-06 Alexey Proskuryakov + + [Mac] Thread verifier assertions when printing + https://bugs.webkit.org/show_bug.cgi?id=75738 + + Reviewed by Sam Weinig. + + * UIProcess/API/mac/WKPrintingView.mm: + (-[WKPrintingView dealloc]): Dealloc in main thread, so that WebFrameProxy doesn't get + deref'ed from a secondary one. + (-[WKPrintingView _adjustPrintingMarginsForHeaderAndFooter]): This method calls out to client, + which only expects that on main thread. + (-[WKPrintingView knowsPageRange:]): Call _adjustPrintingMarginsForHeaderAndFooter on main + thread. + 2012-01-06 Alexey Proskuryakov Need to allow SCNetworkReachability service in sandbox profile diff --git a/Source/WebKit2/UIProcess/API/mac/WKPrintingView.mm b/Source/WebKit2/UIProcess/API/mac/WKPrintingView.mm index 14fe79add21..5ab899f5f31 100644 --- a/Source/WebKit2/UIProcess/API/mac/WKPrintingView.mm +++ b/Source/WebKit2/UIProcess/API/mac/WKPrintingView.mm @@ -30,6 +30,7 @@ #import "PrintInfo.h" #import "WebData.h" #import "WebPageProxy.h" +#import #import using namespace WebKit; @@ -56,6 +57,14 @@ static BOOL isForcingPreviewUpdate; return self; } +- (void)dealloc +{ + if (WebCoreObjCScheduleDeallocateOnMainThread([WKPrintingView class], self)) + return; + + [super dealloc]; +} + - (BOOL)isFlipped { return YES; @@ -110,6 +119,8 @@ static BOOL isForcingPreviewUpdate; - (void)_adjustPrintingMarginsForHeaderAndFooter { + ASSERT(isMainThread()); // This funciton calls the client, which should only be done on main thread. + NSPrintInfo *info = [_printOperation printInfo]; NSMutableDictionary *infoDictionary = [info dictionary]; @@ -364,7 +375,7 @@ static void prepareDataForPrintingOnSecondaryThread(void* untypedContext) [self _suspendAutodisplay]; - [self _adjustPrintingMarginsForHeaderAndFooter]; + [self performSelectorOnMainThread:@selector(_adjustPrintingMarginsForHeaderAndFooter) withObject:nil waitUntilDone:YES]; if ([self _hasPageRects]) *range = NSMakeRange(1, _printingPageRects.size()); -- GitLab