[Win] Implement Authentication dialog in MiniBrowser
[WebKit-https.git] / Tools / MiniBrowser / win / Common.cpp
index e6f1413e0019ee74705e6e307ff8a64de4d848dd..1b71a76b28fe43d0ea474c44eee48466d5595757 100644 (file)
@@ -102,6 +102,7 @@ LRESULT CALLBACK BackButtonProc(HWND, UINT, WPARAM, LPARAM);
 LRESULT CALLBACK ForwardButtonProc(HWND, UINT, WPARAM, LPARAM);
 LRESULT CALLBACK ReloadButtonProc(HWND, UINT, WPARAM, LPARAM);
 INT_PTR CALLBACK Caches(HWND, UINT, WPARAM, LPARAM);
 LRESULT CALLBACK ForwardButtonProc(HWND, UINT, WPARAM, LPARAM);
 LRESULT CALLBACK ReloadButtonProc(HWND, UINT, WPARAM, LPARAM);
 INT_PTR CALLBACK Caches(HWND, UINT, WPARAM, LPARAM);
+INT_PTR CALLBACK AuthDialogProc(HWND, UINT, WPARAM, LPARAM);
 
 static void loadURL(BSTR urlBStr);
 static void updateStatistics(HWND hDlg);
 
 static void loadURL(BSTR urlBStr);
 static void updateStatistics(HWND hDlg);
@@ -664,6 +665,56 @@ INT_PTR CALLBACK CustomUserAgent(HWND hDlg, UINT message, WPARAM wParam, LPARAM
     return (INT_PTR)FALSE;
 }
 
     return (INT_PTR)FALSE;
 }
 
+HRESULT DisplayAuthDialog(std::wstring& username, std::wstring& password)
+{
+    auto result = DialogBox(hInst, MAKEINTRESOURCE(IDD_AUTH), hMainWnd, AuthDialogProc);
+    if (!result)
+        return E_FAIL;
+
+    auto pair = reinterpret_cast<std::pair<std::wstring, std::wstring>*>(result);
+    username = pair->first;
+    password = pair->second;
+    delete pair;
+
+    return S_OK;
+}
+
+INT_PTR CALLBACK AuthDialogProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
+{
+    switch (message) {
+    case WM_INITDIALOG: {
+        HWND edit = ::GetDlgItem(hDlg, IDC_AUTH_USER);
+        ::SetWindowText(edit, static_cast<LPCTSTR>(L""));
+        
+        edit = ::GetDlgItem(hDlg, IDC_AUTH_PASSWORD);
+        ::SetWindowText(edit, static_cast<LPCTSTR>(L""));
+        return (INT_PTR)TRUE;
+    }
+
+    case WM_COMMAND:
+        if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL) {
+            INT_PTR result { };
+
+            if (LOWORD(wParam) == IDOK) {
+                TCHAR user[256];
+                int strLen = ::GetWindowText(::GetDlgItem(hDlg, IDC_AUTH_USER), user, 256);
+                user[strLen] = 0;
+
+                TCHAR pass[256];
+                strLen = ::GetWindowText(::GetDlgItem(hDlg, IDC_AUTH_PASSWORD), pass, 256);
+                pass[strLen] = 0;
+
+                result = reinterpret_cast<INT_PTR>(new std::pair<std::wstring, std::wstring>(user, pass));
+            }
+
+            ::EndDialog(hDlg, result);
+            return (INT_PTR)TRUE;
+        }
+        break;
+    }
+    return (INT_PTR)FALSE;
+}
+
 static void loadURL(BSTR passedURL)
 {
     if (FAILED(gMiniBrowser->loadURL(passedURL)))
 static void loadURL(BSTR passedURL)
 {
     if (FAILED(gMiniBrowser->loadURL(passedURL)))