Title: [174831] trunk/Tools
Revision
174831
Author
[email protected]
Date
2014-10-17 13:02:17 -0700 (Fri, 17 Oct 2014)

Log Message

[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:

Modified Paths

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
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to