Diff
Modified: trunk/Tools/ChangeLog (174830 => 174831)
--- trunk/Tools/ChangeLog 2014-10-17 19:50:09 UTC (rev 174830)
+++ trunk/Tools/ChangeLog 2014-10-17 20:02:17 UTC (rev 174831)
@@ -1,3 +1,18 @@
+2014-10-17 Brent Fulgham <[email protected]>
+
+ [Win] Allow WinLauncher to specify Custom User Agent strings
+ https://bugs.webkit.org/show_bug.cgi?id=137828
+
+ Reviewed by Dean Jackson.
+
+ * WinLauncher/Common.cpp: Add support for custom user agent strings.
+ * WinLauncher/WinLauncher.cpp: Add some convenience methods to get
+ and set the user agent strings.
+ * WinLauncher/WinLauncher.h:
+ * WinLauncher/WinLauncher.vcxproj/WinLauncherLib.rc: Add new menu
+ resources and dialog for setting custom User Agent strings.
+ * WinLauncher/WinLauncher.vcxproj/WinLauncherLibResource.h:
+
2014-10-16 Simon Fraser <[email protected]>
[iOS] Turn off font autosizing for iOS WebKitTestRunner
Modified: trunk/Tools/WinLauncher/Common.cpp (174830 => 174831)
--- trunk/Tools/WinLauncher/Common.cpp 2014-10-17 19:50:09 UTC (rev 174830)
+++ trunk/Tools/WinLauncher/Common.cpp 2014-10-17 20:02:17 UTC (rev 174831)
@@ -90,6 +90,7 @@
ATOM MyRegisterClass(HINSTANCE hInstance);
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
INT_PTR CALLBACK About(HWND, UINT, WPARAM, LPARAM);
+INT_PTR CALLBACK CustomUserAgent(HWND, UINT, WPARAM, LPARAM);
LRESULT CALLBACK EditProc(HWND, UINT, WPARAM, LPARAM);
LRESULT CALLBACK BackButtonProc(HWND, UINT, WPARAM, LPARAM);
LRESULT CALLBACK ForwardButtonProc(HWND, UINT, WPARAM, LPARAM);
@@ -287,7 +288,7 @@
::DeleteDC(printDC);
}
-static void ToggleMenuItem(HWND hWnd, UINT menuID)
+static void ToggleMenuFlag(HWND hWnd, UINT menuID)
{
HMENU menu = ::GetMenu(hWnd);
@@ -300,7 +301,49 @@
return;
BOOL newState = !(info.fState & MFS_CHECKED);
+ info.fState = (newState) ? MFS_CHECKED : MFS_UNCHECKED;
+ ::SetMenuItemInfo(menu, menuID, FALSE, &info);
+}
+
+static bool menuItemIsChecked(const MENUITEMINFO& info)
+{
+ return info.fState & MFS_CHECKED;
+}
+
+static void turnOffOtherUserAgents(HMENU menu)
+{
+ MENUITEMINFO info;
+ ::memset(&info, 0x00, sizeof(info));
+ info.cbSize = sizeof(info);
+ info.fMask = MIIM_STATE;
+
+ // Must unset the other menu items:
+ for (UINT menuToClear = IDM_UA_DEFAULT; menuToClear <= IDM_UA_OTHER; ++menuToClear) {
+ if (!::GetMenuItemInfo(menu, menuToClear, FALSE, &info))
+ continue;
+ if (!menuItemIsChecked(info))
+ continue;
+
+ info.fState = MFS_UNCHECKED;
+ ::SetMenuItemInfo(menu, menuToClear, FALSE, &info);
+ }
+}
+
+static void ToggleMenuItem(HWND hWnd, UINT menuID)
+{
+ HMENU menu = ::GetMenu(hWnd);
+
+ MENUITEMINFO info;
+ ::memset(&info, 0x00, sizeof(info));
+ info.cbSize = sizeof(info);
+ info.fMask = MIIM_STATE;
+
+ if (!::GetMenuItemInfo(menu, menuID, FALSE, &info))
+ return;
+
+ BOOL newState = !menuItemIsChecked(info);
+
if (!gWinLauncher->standardPreferences() || !gWinLauncher->privatePreferences())
return;
@@ -331,6 +374,22 @@
gWinLauncher->privatePreferences()->setAllowUniversalAccessFromFileURLs(newState);
gWinLauncher->privatePreferences()->setAllowFileAccessFromFileURLs(newState);
break;
+ case IDM_UA_DEFAULT:
+ case IDM_UA_SAFARI_8_0:
+ case IDM_UA_SAFARI_IOS_8_IPHONE:
+ case IDM_UA_SAFARI_IOS_8_IPAD:
+ case IDM_UA_IE_11:
+ case IDM_UA_CHROME_MAC:
+ case IDM_UA_CHROME_WIN:
+ case IDM_UA_FIREFOX_MAC:
+ case IDM_UA_FIREFOX_WIN:
+ gWinLauncher->setUserAgent(menuID);
+ turnOffOtherUserAgents(menu);
+ break;
+ case IDM_UA_OTHER:
+ // The actual user agent string will be set by the custom user agent dialog
+ turnOffOtherUserAgents(menu);
+ break;
}
info.fState = (newState) ? MFS_CHECKED : MFS_UNCHECKED;
@@ -404,8 +463,23 @@
case IDM_DISABLE_STYLES:
case IDM_DISABLE_JAVASCRIPT:
case IDM_DISABLE_LOCAL_FILE_RESTRICTIONS:
+ case IDM_UA_DEFAULT:
+ case IDM_UA_SAFARI_8_0:
+ case IDM_UA_SAFARI_IOS_8_IPHONE:
+ case IDM_UA_SAFARI_IOS_8_IPAD:
+ case IDM_UA_IE_11:
+ case IDM_UA_CHROME_MAC:
+ case IDM_UA_CHROME_WIN:
+ case IDM_UA_FIREFOX_MAC:
+ case IDM_UA_FIREFOX_WIN:
ToggleMenuItem(hWnd, wmId);
break;
+ case IDM_UA_OTHER:
+ if (wmEvent)
+ ToggleMenuItem(hWnd, wmId);
+ else
+ DialogBox(hInst, MAKEINTRESOURCE(IDD_USER_AGENT), hWnd, CustomUserAgent);
+ break;
default:
return CallWindowProc(parentProc, hWnd, message, wParam, lParam);
}
@@ -517,6 +591,44 @@
return (INT_PTR)FALSE;
}
+INT_PTR CALLBACK CustomUserAgent(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
+{
+ UNREFERENCED_PARAMETER(lParam);
+ switch (message) {
+ case WM_INITDIALOG: {
+ HWND edit = ::GetDlgItem(hDlg, IDC_USER_AGENT_INPUT);
+ _bstr_t userAgent;
+ if (gWinLauncher)
+ userAgent = gWinLauncher->userAgent();
+
+ ::SetWindowText(edit, static_cast<LPCTSTR>(userAgent));
+ return (INT_PTR)TRUE;
+ }
+
+ case WM_COMMAND:
+ if (LOWORD(wParam) == IDOK) {
+ HWND edit = ::GetDlgItem(hDlg, IDC_USER_AGENT_INPUT);
+
+ TCHAR buffer[1024];
+ int strLen = ::GetWindowText(edit, buffer, 1024);
+ buffer[strLen] = 0;
+
+ _bstr_t bstr(buffer);
+ if (bstr.length()) {
+ gWinLauncher->setUserAgent(bstr);
+ ::PostMessage(hMainWnd, static_cast<UINT>(WM_COMMAND), MAKELPARAM(IDM_UA_OTHER, 1), 0);
+ }
+ }
+
+ if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL) {
+ ::EndDialog(hDlg, LOWORD(wParam));
+ return (INT_PTR)TRUE;
+ }
+ break;
+ }
+ return (INT_PTR)FALSE;
+}
+
static void loadURL(BSTR passedURL)
{
if (FAILED(gWinLauncher->loadURL(passedURL)))
Modified: trunk/Tools/WinLauncher/WinLauncher.cpp (174830 => 174831)
--- trunk/Tools/WinLauncher/WinLauncher.cpp 2014-10-17 19:50:09 UTC (rev 174830)
+++ trunk/Tools/WinLauncher/WinLauncher.cpp 2014-10-17 20:02:17 UTC (rev 174831)
@@ -387,3 +387,60 @@
{
::PostMessage(m_hMainWnd, static_cast<UINT>(WM_COMMAND), MAKELPARAM(IDM_EXIT, 0), 0);
}
+
+void WinLauncher::setUserAgent(UINT menuID)
+{
+ if (!webView())
+ return;
+
+ _bstr_t customUserAgent;
+ switch (menuID) {
+ case IDM_UA_DEFAULT:
+ // Set to null user agent
+ break;
+ case IDM_UA_SAFARI_8_0:
+ customUserAgent = L"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10) AppleWebKit/600.1.25 (KHTML, like Gecko) Version/8.0 Safari/600.1.25";
+ break;
+ case IDM_UA_SAFARI_IOS_8_IPHONE:
+ customUserAgent = L"Mozilla/5.0 (iPhone; CPU OS 8_1 like Mac OS X) AppleWebKit/601.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12B403 Safari/600.1.4";
+ break;
+ case IDM_UA_SAFARI_IOS_8_IPAD:
+ customUserAgent = L"Mozilla/5.0 (iPad; CPU OS 8_1 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12B403 Safari/600.1.4";
+ break;
+ case IDM_UA_IE_11:
+ customUserAgent = L"Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko";
+ break;
+ case IDM_UA_CHROME_MAC:
+ customUserAgent = L"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_3) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.65 Safari/537.31";
+ break;
+ case IDM_UA_CHROME_WIN:
+ customUserAgent = L"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.64 Safari/537.31";
+ break;
+ case IDM_UA_FIREFOX_MAC:
+ customUserAgent = L"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:20.0) Gecko/20100101 Firefox/20.0";
+ break;
+ case IDM_UA_FIREFOX_WIN:
+ customUserAgent = L"Mozilla/5.0 (Windows NT 6.2; WOW64; rv:20.0) Gecko/20100101 Firefox/20.0";
+ break;
+ case IDM_UA_OTHER:
+ default:
+ ASSERT(0); // We should never hit this case
+ return;
+ }
+
+ setUserAgent(customUserAgent);
+}
+
+void WinLauncher::setUserAgent(_bstr_t& customUserAgent)
+{
+ webView()->setCustomUserAgent(customUserAgent.GetBSTR());
+}
+
+_bstr_t WinLauncher::userAgent()
+{
+ _bstr_t userAgent;
+ if (FAILED(webView()->customUserAgent(&userAgent.GetBSTR())))
+ return _bstr_t(L"- Unknown -: Call failed.");
+
+ return userAgent;
+}
Modified: trunk/Tools/WinLauncher/WinLauncher.h (174830 => 174831)
--- trunk/Tools/WinLauncher/WinLauncher.h 2014-10-17 19:50:09 UTC (rev 174830)
+++ trunk/Tools/WinLauncher/WinLauncher.h 2014-10-17 20:02:17 UTC (rev 174831)
@@ -78,6 +78,10 @@
bool goBack();
bool goForward();
+ void setUserAgent(UINT menuID);
+ void setUserAgent(_bstr_t& customUAString);
+ _bstr_t userAgent();
+
PageLoadTestClient& pageLoadTestClient() { return *m_pageLoadTestClient; }
private:
Modified: trunk/Tools/WinLauncher/WinLauncher.vcxproj/WinLauncherLib.rc (174830 => 174831)
--- trunk/Tools/WinLauncher/WinLauncher.vcxproj/WinLauncherLib.rc 2014-10-17 19:50:09 UTC (rev 174830)
+++ trunk/Tools/WinLauncher/WinLauncher.vcxproj/WinLauncherLib.rc 2014-10-17 20:02:17 UTC (rev 174831)
@@ -62,6 +62,25 @@
POPUP "D&evelop"
BEGIN
MENUITEM "Show Web Inspector", IDM_WEB_INSPECTOR
+ POPUP "User Agent"
+ BEGIN
+ MENUITEM "Default (Automatically Chosen)", IDM_UA_DEFAULT
+ MENUITEM SEPARATOR
+ MENUITEM "Safari 8.0", IDM_UA_SAFARI_8_0
+ MENUITEM SEPARATOR
+ MENUITEM "Safari iOS 8 - iPhone", IDM_UA_SAFARI_IOS_8_IPHONE
+ MENUITEM "Safari iOS 8 - iPad", IDM_UA_SAFARI_IOS_8_IPAD
+ MENUITEM SEPARATOR
+ MENUITEM "Internet Explorer 11.0", IDM_UA_IE_11
+ MENUITEM SEPARATOR
+ MENUITEM "Google Chrome - Mac", IDM_UA_CHROME_MAC
+ MENUITEM "Google Chrome - Windows", IDM_UA_CHROME_WIN
+ MENUITEM SEPARATOR
+ MENUITEM "Firefox - Mac", IDM_UA_FIREFOX_MAC
+ MENUITEM "Firefox - Windows", IDM_UA_FIREFOX_WIN
+ MENUITEM SEPARATOR
+ MENUITEM "Other", IDM_UA_OTHER
+ END
MENUITEM SEPARATOR
MENUITEM "Disable Images", IDM_DISABLE_IMAGES
MENUITEM "Disable Styles", IDM_DISABLE_STYLES
@@ -199,7 +218,18 @@
RTEXT "0",IDC_SITE_ICONS_WITH_DATA,101,410,52,8
END
+IDD_USER_AGENT DIALOGEX 0, 0, 309, 176
+STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
+CAPTION "Dialog"
+FONT 8, "MS Shell Dlg", 400, 0, 0x1
+BEGIN
+ LTEXT "Type a custom user agent string for this page.",IDC_Message,7,7,295,19
+ EDITTEXT IDC_USER_AGENT_INPUT,7,34,295,117,ES_AUTOHSCROLL
+ DEFPUSHBUTTON "OK",IDOK,198,155,50,14
+ PUSHBUTTON "Cancel",IDCANCEL,252,155,50,14
+END
+
#ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
@@ -247,6 +277,14 @@
TOPMARGIN, 7
BOTTOMMARGIN, 449
END
+
+ IDD_USER_AGENT, DIALOG
+ BEGIN
+ LEFTMARGIN, 7
+ RIGHTMARGIN, 302
+ TOPMARGIN, 7
+ BOTTOMMARGIN, 169
+ END
END
#endif // APSTUDIO_INVOKED
Modified: trunk/Tools/WinLauncher/WinLauncher.vcxproj/WinLauncherLibResource.h (174830 => 174831)
--- trunk/Tools/WinLauncher/WinLauncher.vcxproj/WinLauncherLibResource.h 2014-10-17 19:50:09 UTC (rev 174830)
+++ trunk/Tools/WinLauncher/WinLauncher.vcxproj/WinLauncherLibResource.h 2014-10-17 20:02:17 UTC (rev 174831)
@@ -25,6 +25,7 @@
#define IDR_MAINFRAME 128
#define IDD_CACHES 129
#define IDM_HISTORY_BACKWARD 130
+#define IDD_USER_AGENT 130
#define IDM_HISTORY_FORWARD 131
#define IDM_HISTORY_LINK0 150
#define IDM_HISTORY_LINK1 151
@@ -37,6 +38,16 @@
#define IDM_HISTORY_LINK8 158
#define IDM_HISTORY_LINK9 159
#define IDT_UPDATE_STATS 160
+#define IDM_UA_DEFAULT 161
+#define IDM_UA_SAFARI_8_0 162
+#define IDM_UA_SAFARI_IOS_8_IPHONE 163
+#define IDM_UA_SAFARI_IOS_8_IPAD 164
+#define IDM_UA_IE_11 165
+#define IDM_UA_CHROME_MAC 166
+#define IDM_UA_CHROME_WIN 167
+#define IDM_UA_FIREFOX_MAC 168
+#define IDM_UA_FIREFOX_WIN 169
+#define IDM_UA_OTHER 170
#define IDC_EMPTY_URL_CACHE 1000
#define IDC_RETURN_FREE_MEMORY 1001
#define IDC_EMPTY_WEBCORE_CACHE 1002
@@ -80,13 +91,15 @@
#define IDC_JSC_HEAP_FREE 1042
#define IDC_BUTTON5 1043
#define IDC_TOTAL_FONT_OBJECTS 1044
+#define IDC_Message 1044
#define IDC_INACTIVE_FONT_OBJECTS 1045
#define IDC_GLYPH_PAGES 1046
#define IDC_PAGE_URL_MAPPINGS 1047
#define IDC_RETAINED_PAGE_URLS 1048
#define IDC_SITE_ICON_RECORDS 1049
#define IDC_TOTAL_FONT_OBJECTS5 1050
-#define IDC_SITE_ICONS_WITH_DATA 1050
+#define IDC_SITE_ICONS_WITH_DATA 1051
+#define IDC_USER_AGENT_INPUT 1052
#define IDC_STATIC -1
// Next default values for new objects
@@ -94,9 +107,9 @@
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NO_MFC 1
-#define _APS_NEXT_RESOURCE_VALUE 130
+#define _APS_NEXT_RESOURCE_VALUE 171
#define _APS_NEXT_COMMAND_VALUE 32771
-#define _APS_NEXT_CONTROL_VALUE 1044
+#define _APS_NEXT_CONTROL_VALUE 1053
#define _APS_NEXT_SYMED_VALUE 110
#endif
#endif