[Webkit-unassigned] [Bug 157924] New: REGRESSION (r188642): All pages are blank when printing a webpage in iOS Safari

bugzilla-daemon at webkit.org bugzilla-daemon at webkit.org
Thu May 19 14:34:32 PDT 2016


https://bugs.webkit.org/show_bug.cgi?id=157924

            Bug ID: 157924
           Summary: REGRESSION (r188642): All pages are blank when
                    printing a webpage in iOS Safari
    Classification: Unclassified
           Product: WebKit
           Version: Other
          Hardware: iOS
                OS: All
            Status: NEW
          Severity: Blocker
          Priority: P2
         Component: Printing
          Assignee: webkit-unassigned at lists.webkit.org
          Reporter: aestes at apple.com

When UIPrintInteractionController asks WKWebView to print a webpage, it does so in several phases. First we're asked to compute the page count, then later we're asked to draw each page into a supplied CGContext in a series of messages.

When WKWebView is asked for the page count, we send a message to the Web process asking it to compute and return the page count synchronously and then immediately start drawing the page for printing. If the drawing has finished by the time we're asked to print the first page, then we can do so without waiting. But if it hasn't then we block by calling Connection::waitForMessage(), passing std::chromo::milliseconds::max() as the relative timeout.

Prior to r188642, Connection::waitForMessage() called std::condition_variable::wait_for(), which takes a relative timeout value. r188642 replaced this with WTF::Condition::waitUntil(), which takes an absolute timeout instead. To convert from relative to absolute, this line was added to Connection::waitForMessage():

    Condition::Clock::time_point absoluteTimeout = Condition::Clock::now() + timeout;

Condition::Clock::now() has a duration in nanoseconds, which causes signed overflow when converted to milliseconds and added to milliseconds::max(). This makes absoluteTimeout end up being less than Condition::Clock::now(), and so instead of waiting indefinitely for the printed data, we timeout immediately and print nothing.

-- 
You are receiving this mail because:
You are the assignee for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.webkit.org/pipermail/webkit-unassigned/attachments/20160519/b1472797/attachment-0001.html>


More information about the webkit-unassigned mailing list