Bug 36159

Summary: Move code related with printing defined in WebFrame.mm to WebCore::PrintContext
Product: WebKit Reporter: Hayato Ito <hayato>
Component: PrintingAssignee: Nobody <webkit-unassigned>
Status: RESOLVED FIXED    
Severity: Normal CC: commit-queue, dglazkov, eric, hamaji, webkit.review.bot, yuzo
Priority: P2    
Version: 528+ (Nightly build)   
Hardware: Mac   
OS: OS X 10.5   
Attachments:
Description Flags
refactor-computePageRects
none
refactor-computePageRects-fix-chromium-build
none
refactor-computePageRects none

Hayato Ito
Reported 2010-03-16 01:01:50 PDT
There are similar code between _computePageRectsWithPrintWidthScaleFactor in WebFrame.mm and WebCore::PrintContext. It might be better that sharing similar code between them before starting to implement new features related with CSS3's PagedMedia. Maybe some code related with printing defined in WebFrame.mm should move to WebCore::PrintContext, and use WebCore::PrintContext from WebKit even in Mac.
Attachments
refactor-computePageRects (9.91 KB, patch)
2010-03-16 23:02 PDT, Hayato Ito
no flags
refactor-computePageRects-fix-chromium-build (9.84 KB, patch)
2010-03-17 01:03 PDT, Hayato Ito
no flags
refactor-computePageRects (9.72 KB, patch)
2010-03-17 02:46 PDT, Hayato Ito
no flags
Hayato Ito
Comment 1 2010-03-16 23:02:15 PDT
Created attachment 50876 [details] refactor-computePageRects
WebKit Review Bot
Comment 2 2010-03-16 23:06:30 PDT
Hayato Ito
Comment 3 2010-03-16 23:15:07 PDT
I've cleared the review flag because the patch needs to be compiled at chromium.
Hayato Ito
Comment 4 2010-03-17 01:03:56 PDT
Created attachment 50880 [details] refactor-computePageRects-fix-chromium-build
Shinichiro Hamaji
Comment 5 2010-03-17 01:32:23 PDT
Comment on attachment 50880 [details] refactor-computePageRects-fix-chromium-build Basically, looks good. r- for a few style nitpicks. > - RenderView* root = toRenderView(m_frame->document()->renderer()); > - > - if (!root) { > - LOG_ERROR("document to be printed has no renderer"); > + if (userScaleFactor <= 0) { > + LOG_ERROR("userScaleFactor has bad value %.2f", userScaleFactor); > return; > } > > + RenderView* root = toRenderView(m_frame->document()->renderer()); > + It seems like NULL check for root was gone. Is this OK? > + const Vector<IntRect>& pageRects = printContext.pageRects(); > + const size_t pageCount = pageRects.size(); > + for (size_t pageNumber = 0; pageNumber < pageCount; ++pageNumber) { > + const IntRect& pageRect = pageRects[pageNumber]; > + NSValue* val = [NSValue valueWithRect: NSMakeRect(pageRect.x(), pageRect.y(), pageRect.width(), pageRect.height())]; > + [pages addObject: val]; - Two more spaces for indent here. - Cannot we use IntRect::operator NSRect() to create NSRect? (maybe it's not in WebCore.base.exp?)
Hayato Ito
Comment 6 2010-03-17 02:46:28 PDT
Created attachment 50883 [details] refactor-computePageRects
Hayato Ito
Comment 7 2010-03-17 02:58:44 PDT
Thank you for the review. (In reply to comment #5) > (From update of attachment 50880 [details]) > Basically, looks good. r- for a few style nitpicks. > > > - RenderView* root = toRenderView(m_frame->document()->renderer()); > > - > > - if (!root) { > > - LOG_ERROR("document to be printed has no renderer"); > > + if (userScaleFactor <= 0) { > > + LOG_ERROR("userScaleFactor has bad value %.2f", userScaleFactor); > > return; > > } > > > > + RenderView* root = toRenderView(m_frame->document()->renderer()); > > + > > It seems like NULL check for root was gone. Is this OK? The reason I've omitted NULL check for |root| here is that it never happens, I guess. NULL check for m_frame->document()->renderer() is already done in the two callers, computePageRectsWithPageSize and computePageRects. It never happens that |root| becomes NULL in the following code, doesn't it? if (!m_frame->document() || !m_frame->view() || !m_frame->document()->renderer()) return; RenderView* root = toRenderView(m_frame->document()->renderer()); if (!root) { LOG_ERROR("document to be printed has no renderer"); Anyway, for the maximum safety, I've decided to insert NULL check at the head of PrintContext::computePageRectsWithPageSizeInternal in the new patch in case that it is called from other functions in the future. > > > + const Vector<IntRect>& pageRects = printContext.pageRects(); > > + const size_t pageCount = pageRects.size(); > > + for (size_t pageNumber = 0; pageNumber < pageCount; ++pageNumber) { > > + const IntRect& pageRect = pageRects[pageNumber]; > > + NSValue* val = [NSValue valueWithRect: NSMakeRect(pageRect.x(), pageRect.y(), pageRect.width(), pageRect.height())]; > > + [pages addObject: val]; > > - Two more spaces for indent here. > - Cannot we use IntRect::operator NSRect() to create NSRect? (maybe it's not in > WebCore.base.exp?) Done. Thank you! It's already in WebCore.base.exp.
Shinichiro Hamaji
Comment 8 2010-03-17 21:55:55 PDT
Comment on attachment 50883 [details] refactor-computePageRects This looks sane. I'll land this patch unless anyone object tomorrow. I want to wait a moment in case someone have ideas about this. I asked him to test this manually on Mac by setting scale in the dialog box for printing and looking the print preview. He said it seems working.
WebKit Commit Bot
Comment 9 2010-03-24 13:38:12 PDT
Comment on attachment 50883 [details] refactor-computePageRects Clearing flags on attachment: 50883 Committed r56454: <http://trac.webkit.org/changeset/56454>
WebKit Commit Bot
Comment 10 2010-03-24 13:38:18 PDT
All reviewed patches have been landed. Closing bug.
Eric Seidel (no email)
Comment 11 2010-03-24 18:11:09 PDT
Note You need to log in before you can comment on or make changes to this bug.