Bug 35347

Summary: Convert the zoom mode into a proper enum
Product: WebKit Reporter: Jakob Petsovits <jpetsovits>
Component: FramesAssignee: Nobody <webkit-unassigned>
Status: RESOLVED FIXED    
Severity: Normal CC: abarth, commit-queue, darin, dbates, eric, gustavo, levin, mitz, webkit.review.bot, xan.lopez
Priority: P2    
Version: 528+ (Nightly build)   
Hardware: All   
OS: All   
Attachments:
Description Flags
Convert the zoom mode into a proper enum
manyoso: review-
Convert the zoom mode into a proper enum (try 2)
none
Convert the zoom mode into a proper enum (try 3)
none
Convert the zoom mode into a proper enum (try 4)
none
Convert the zoom mode into a proper enum (try 5)
none
Patch
abarth: review-, commit-queue: commit-queue-
Patch none

Jakob Petsovits
Reported 2010-02-24 08:50:25 PST
"setZoomFactor(0.8, false)" has annoyed me since I first saw it. Unless you're really familiar with the code or able to deduct it from the bug title, you have little chance of knowing what the "false" argument means. The Qt "how to design good APIs" guide specifically mentions vague boolean arguments like this one as example of not to design APIs. Unfortunately, most ports have already adopted this argument style. That doesn't mean, though, that we shouldn't fix it in the internal WebCore API, as it still makes for vastly better readability. So, the patch below replaces the boolean argument by an enum called ZoomMode, and adapts all ports without changing their public APIs (I'll leave that decision to the respective port maintainers and their ABI policies). Hopefully I didn't miss any occurrence, let's see what the bots say. Please review, thanks!
Attachments
Convert the zoom mode into a proper enum (18.43 KB, patch)
2010-02-24 08:56 PST, Jakob Petsovits
manyoso: review-
Convert the zoom mode into a proper enum (try 2) (18.71 KB, patch)
2010-02-24 09:16 PST, Jakob Petsovits
no flags
Convert the zoom mode into a proper enum (try 3) (21.21 KB, patch)
2010-02-24 10:42 PST, Jakob Petsovits
no flags
Convert the zoom mode into a proper enum (try 4) (21.26 KB, patch)
2010-02-24 10:59 PST, Jakob Petsovits
no flags
Convert the zoom mode into a proper enum (try 5) (22.34 KB, patch)
2010-02-24 15:02 PST, Jakob Petsovits
no flags
Patch (26.28 KB, patch)
2010-02-25 09:36 PST, Daniel Bates
abarth: review-
commit-queue: commit-queue-
Patch (27.93 KB, patch)
2010-03-01 13:07 PST, Daniel Bates
no flags
Jakob Petsovits
Comment 1 2010-02-24 08:56:33 PST
Created attachment 49401 [details] Convert the zoom mode into a proper enum
Adam Treat
Comment 2 2010-02-24 09:12:40 PST
Comment on attachment 49401 [details] Convert the zoom mode into a proper enum > +2010-02-24 Jakob Petsovits <jakob.petsovits@torchmobile.com> Please change to correct email address. > diff --git a/WebCore/page/Settings.cpp b/WebCore/page/Settings.cpp > index cc8f7af..a9f6c5c 100644 > --- a/WebCore/page/Settings.cpp > +++ b/WebCore/page/Settings.cpp > @@ -102,7 +102,7 @@ Settings::Settings(Page* page) > , m_inApplicationChromeMode(false) > , m_offlineWebApplicationCacheEnabled(false) > , m_shouldPaintCustomScrollbars(false) > - , m_zoomsTextOnly(false) > + , m_zoomMode(ZoomPage) ... > @@ -309,6 +314,7 @@ namespace WebCore { > size_t m_maximumDecodedImageSize; > unsigned m_localStorageQuota; > unsigned m_pluginAllowedRunTime; > + ZoomMode m_zoomMode; > bool m_isJavaEnabled : 1; > bool m_loadsImagesAutomatically : 1; > bool m_privateBrowsingEnabled : 1; > @@ -347,7 +353,6 @@ namespace WebCore { > bool m_inApplicationChromeMode : 1; > bool m_offlineWebApplicationCacheEnabled : 1; > bool m_shouldPaintCustomScrollbars : 1; > - bool m_zoomsTextOnly : 1; > bool m_enforceCSSMIMETypeInStrictMode : 1; > bool m_usesEncodingDetector : 1; > bool m_allowScriptsToCloseWindows : 1; Incorrect initialization order... Please update and fix above to produce a new patch. Since this touches most ports it'd be nice if the bots were working to check the build with this patch.
Jakob Petsovits
Comment 3 2010-02-24 09:16:24 PST
Created attachment 49402 [details] Convert the zoom mode into a proper enum (try 2) Fixes email address and initialization order. Hope the bots will work.
mitz
Comment 4 2010-02-24 09:22:18 PST
> +++ b/WebCore/page/Frame.h > @@ -37,6 +37,7 @@ > #include "ScriptController.h" > #include "ScrollBehavior.h" > #include "SelectionController.h" > +#include "Settings.h" This is unfortunate. Have you considered putting the enum in a separate header file?
Jakob Petsovits
Comment 5 2010-02-24 10:11:51 PST
I have, and it seemed kind of overkill to me so I thought I'd wait whether it's an issue for the reviewers. Seems it is, so let's make it a separate header... or maybe there's a better place to add it to? Maybe not. Anyways, I'll have a look and change the patch accordingly.
Jakob Petsovits
Comment 6 2010-02-24 10:42:47 PST
Created attachment 49410 [details] Convert the zoom mode into a proper enum (try 3) Adding WebCore/page/ZoomMode.h and including that instead of the whole Settings.h.
David Levin
Comment 7 2010-02-24 10:52:32 PST
(In reply to comment #6) > Created an attachment (id=49410) [details] > Convert the zoom mode into a proper enum (try 3) > > Adding WebCore/page/ZoomMode.h and including that instead of the whole > Settings.h. A few notes/nits that you may want to fix: 1. Your copyright says 2009. It should be 2010. 2. The newly added file doesn't have header guards. (ifndef/define/endif). 3. The header file wasn't added to xcode project file WebCore.xcodeproj/project.pbxproj
Jakob Petsovits
Comment 8 2010-02-24 10:56:18 PST
1. and 2. blargh, let me fix that right away. 3. There's no way I can add that without having a Mac with XCode. You can't seriously expect me to generate hashs manually?
Jakob Petsovits
Comment 9 2010-02-24 10:59:30 PST
Created attachment 49413 [details] Convert the zoom mode into a proper enum (try 4) Updated patch with David Levin's points 1. and 2., XCode project file still untouched.
WebKit Review Bot
Comment 10 2010-02-24 12:55:43 PST
WebKit Review Bot
Comment 11 2010-02-24 13:02:54 PST
Jakob Petsovits
Comment 12 2010-02-24 15:02:12 PST
Created attachment 49446 [details] Convert the zoom mode into a proper enum (try 5) Yay for bots! This one should fix GTK, Qt, and even Wx.
Jakob Petsovits
Comment 13 2010-02-25 08:23:21 PST
Bots are all green, except for mac which hasn't run yet. Hope that doesn't take too long.
Darin Adler
Comment 14 2010-02-25 08:28:11 PST
(In reply to comment #13) > Bots are all green, except for mac which hasn't run yet. Hope that doesn't take > too long. Mac EWS is different and won't run unless the patch is put up for review by a certain set of people. Adam Barth set it up and knows the details.
Darin Adler
Comment 15 2010-02-25 08:30:00 PST
Comment on attachment 49446 [details] Convert the zoom mode into a proper enum (try 5) > - return _private->page->settings()->zoomsTextOnly(); > + return _private->page->settings()->zoomMode() == ZoomTextOnly ? YES : NO; The "? YES : NO" here is not needed or helpful. Someone will have to make the Xcode project changes. The patch seems fine. r=me if it builds on Mac.
Adam Barth
Comment 16 2010-02-25 09:15:15 PST
The mac-ews is stuck unable to build. Eric, can you kick it?
Daniel Bates
Comment 17 2010-02-25 09:36:56 PST
Created attachment 49498 [details] Patch Added ZoomMode.h to Xcode project and made change as per Darin's comment.
Adam Barth
Comment 18 2010-02-25 09:38:40 PST
Comment on attachment 49498 [details] Patch Forwarding Darin's review. The commit-queue will ensure that this builds on Mac before landing, completing the last of Darin's requests.
Eric Seidel (no email)
Comment 19 2010-02-25 14:10:01 PST
The mac-ews bot has been kicked, but it has some back-log.
WebKit Commit Bot
Comment 20 2010-02-26 06:52:18 PST
Comment on attachment 49498 [details] Patch Rejecting patch 49498 from commit-queue. Unexpected failure when landing patch! Please file a bug against webkit-patch. Failed to run "['WebKitTools/Scripts/webkit-patch', '--status-host=webkit-commit-queue.appspot.com', 'land-attachment', '--force-clean', '--non-interactive', '--no-update', '--parent-command=commit-queue', '--build-style=both', '--quiet', '49498']" exit_code: 1 Last 500 characters of output: ebkitpy/statusserver.py", line 87, in update_status return NetworkTransaction().run(lambda: self._post_to_server(queue_name, status, patch, results_file)) File "/Users/eseidel/Projects/CommitQueue/WebKitTools/Scripts/webkitpy/networktransaction.py", line 52, in run self._check_for_timeout() File "/Users/eseidel/Projects/CommitQueue/WebKitTools/Scripts/webkitpy/networktransaction.py", line 58, in _check_for_timeout raise NetworkTimeout() webkitpy.networktransaction.NetworkTimeout
Eric Seidel (no email)
Comment 21 2010-02-26 07:11:20 PST
Sorry for the commit-queue spew. Normally that means that this patch fails to build on Mac in such a way that the build log is so huge the commit-queue is having trouble uploading it. :(
Jakob Petsovits
Comment 22 2010-02-26 07:20:53 PST
So... where do we go from here?
Eric Seidel (no email)
Comment 23 2010-02-26 07:27:08 PST
Comment on attachment 49498 [details] Patch We mark it for review again and see if the mac EWS barfs similarly. Or someone with a mac box tries to manually download the patch and builds it and reports back the error. Eventually we'll fix the commit-queue. :) http://trac.webkit.org/browser/trunk/WebKitTools/Scripts/webkitpy/statusserver.py#L67 is the code that's failing. It probably just needs to be smart enough to only upload the last 500k of the file or similar. Or more likely that method should warn for large files and the callsites should be restricting the upload size.
Adam Barth
Comment 24 2010-02-27 02:09:13 PST
Comment on attachment 49498 [details] Patch This patch doesn't build on Mac: Undefined symbols: "__ZN7WebCore5Frame13setZoomFactorEfb", referenced from: -exported_symbols_list command line option "__ZN7WebCore8Settings16setZoomsTextOnlyEb", referenced from: -exported_symbols_list command line option ld: symbol(s) not found collect2: ld returned 1 exit status ** BUILD FAILED **
Jakob Petsovits
Comment 25 2010-02-27 11:07:17 PST
Thanks everyone. I'll investigate what I might have forgotten to change, but chances are I'll need help from someone with a Mac build to get this working. Let's see.
Jakob Petsovits
Comment 26 2010-03-01 09:04:36 PST
It seems to me like the only occurrences of these functions are in WebCore/WebCore.base.exp and WebCore/WebCore.order. Those files probably only need to be regenerated, any idea on how to do that? (Given that I'm not a mangling expert, I think I shouldn't try to do it without the proper script.)
Darin Adler
Comment 27 2010-03-01 09:38:26 PST
(In reply to comment #26) > It seems to me like the only occurrences of these functions are in > WebCore/WebCore.base.exp and WebCore/WebCore.order. Those files probably only > need to be regenerated, any idea on how to do that? (Given that I'm not a > mangling expert, I think I shouldn't try to do it without the proper script.) WebCore.order should be left alone. WebCore.base.exp can be updated based on build failure messages by someone with a Mac. First remove the old symbols so WebCore builds, then build again and add the new symbols based on the failure in the WebKit build.
Daniel Bates
Comment 28 2010-03-01 13:07:28 PST
Created attachment 49746 [details] Patch Substituted symbols __ZN7WebCore5Frame13setZoomFactorEfNS_8ZoomModeE and __ZN7WebCore8Settings11setZoomModeENS_8ZoomModeE for __ZN7WebCore5Frame13setZoomFactorEfb and __ZN7WebCore8Settings16setZoomsTextOnlyEb, respectively. Set role of ZoomMode.h to private in Xcode project. Resolved compiler error in [-WebView _setZoomMultiplier:isTextOnly] caused by using the old prototype for Frame::setZoomFactor (which took a boolean type for the second argument). Instead, the second argument is now an enum value.
Jakob Petsovits
Comment 29 2010-03-01 14:00:21 PST
Thanks Dan, I really appreciate it :)
WebKit Commit Bot
Comment 30 2010-03-01 16:56:11 PST
Comment on attachment 49746 [details] Patch Clearing flags on attachment: 49746 Committed r55387: <http://trac.webkit.org/changeset/55387>
WebKit Commit Bot
Comment 31 2010-03-01 16:56:18 PST
All reviewed patches have been landed. Closing bug.
Note You need to log in before you can comment on or make changes to this bug.