Author: stippi Date: Sat Feb 27 13:31:29 2010 New Revision: 237 URL: http://mmlr.dyndns.org/changeset/237 Log: Actually, the authentication challenge needs to know for which page it is, otherwise we may display the login panel above an unrelated page. Tested by clicking Login on dev.haiku-os.org and Cmd-T to open a new tab before the login panel shows. Works. Modified: webkit/trunk/WebKit/haiku/API/WebWindow.cpp webkit/trunk/WebKit/haiku/API/WebWindow.h webkit/trunk/WebKit/haiku/HaikuLauncher/LauncherWindow.cpp webkit/trunk/WebKit/haiku/HaikuLauncher/LauncherWindow.h webkit/trunk/WebKit/haiku/HaikuLauncher/WebTabView.cpp webkit/trunk/WebKit/haiku/HaikuLauncher/WebTabView.h webkit/trunk/WebKit/haiku/WebCoreSupport/FrameLoaderClientHaiku.cpp Modified: webkit/trunk/WebKit/haiku/API/WebWindow.cpp ============================================================================== --- webkit/trunk/WebKit/haiku/API/WebWindow.cpp Sat Feb 27 13:20:50 2010 (r236) +++ webkit/trunk/WebKit/haiku/API/WebWindow.cpp Sat Feb 27 13:31:29 2010 (r237) @@ -182,7 +182,7 @@ message->FindUInt32("failureCount", &failureCount); if (!AuthenticationChallenge(text, user, password, rememberCredentials, - failureCount)) { + failureCount, _WebViewForMessage(message))) { message->SendReply((uint32)0); break; } @@ -336,7 +336,8 @@ } bool BWebWindow::AuthenticationChallenge(BString message, BString& inOutUser, - BString& inOutPassword, bool& inOutRememberCredentials, uint32 failureCount) + BString& inOutPassword, bool& inOutRememberCredentials, uint32 failureCount, + BWebView* view) { return false; } Modified: webkit/trunk/WebKit/haiku/API/WebWindow.h ============================================================================== --- webkit/trunk/WebKit/haiku/API/WebWindow.h Sat Feb 27 13:20:50 2010 (r236) +++ webkit/trunk/WebKit/haiku/API/WebWindow.h Sat Feb 27 13:31:29 2010 (r237) @@ -83,7 +83,7 @@ virtual bool AuthenticationChallenge(BString message, BString& inOutUser, BString& inOutPassword, bool& inOutRememberCredentials, - uint32 failureCount); + uint32 failureCount, BWebView* view); private: BWebView* _WebViewForMessage( Modified: webkit/trunk/WebKit/haiku/HaikuLauncher/LauncherWindow.cpp ============================================================================== --- webkit/trunk/WebKit/haiku/HaikuLauncher/LauncherWindow.cpp Sat Feb 27 13:20:50 2010 (r236) +++ webkit/trunk/WebKit/haiku/HaikuLauncher/LauncherWindow.cpp Sat Feb 27 13:31:29 2010 (r237) @@ -654,8 +654,14 @@ } bool LauncherWindow::AuthenticationChallenge(BString message, BString& inOutUser, - BString& inOutPassword, bool& inOutRememberCredentials, uint32 failureCount) + BString& inOutPassword, bool& inOutRememberCredentials, uint32 failureCount, + BWebView* view) { + // Switch to the page for which this authentication is required. + if (view != CurrentWebView()) { + m_tabManager->SelectTab(view); + UpdateIfNeeded(); + } AuthenticationPanel* panel = new AuthenticationPanel(Frame()); // Panel auto-destructs. return panel->getAuthentication(message, inOutUser, inOutPassword, Modified: webkit/trunk/WebKit/haiku/HaikuLauncher/LauncherWindow.h ============================================================================== --- webkit/trunk/WebKit/haiku/HaikuLauncher/LauncherWindow.h Sat Feb 27 13:20:50 2010 (r236) +++ webkit/trunk/WebKit/haiku/HaikuLauncher/LauncherWindow.h Sat Feb 27 13:31:29 2010 (r237) @@ -93,7 +93,7 @@ virtual void UpdateGlobalHistory(const BString& url); virtual bool AuthenticationChallenge(BString message, BString& inOutUser, BString& inOutPassword, bool& inOutRememberCredentials, - uint32 failureCount); + uint32 failureCount, BWebView* view); void updateTitle(const BString &title); void updateTabGroupVisibility(); Modified: webkit/trunk/WebKit/haiku/HaikuLauncher/WebTabView.cpp ============================================================================== --- webkit/trunk/WebKit/haiku/HaikuLauncher/WebTabView.cpp Sat Feb 27 13:20:50 2010 (r236) +++ webkit/trunk/WebKit/haiku/HaikuLauncher/WebTabView.cpp Sat Feb 27 13:31:29 2010 (r237) @@ -1137,6 +1137,20 @@ } +void +TabManager::SelectTab(BView* containedView) +{ + int32 count = fCardLayout->CountItems(); + for (int32 i = 0; i < count; i++) { + BLayoutItem* item = fCardLayout->ItemAt(i); + if (item->View() == containedView) { + SelectTab(i); + break; + } + } +} + + int32 TabManager::SelectedTabIndex() const { Modified: webkit/trunk/WebKit/haiku/HaikuLauncher/WebTabView.h ============================================================================== --- webkit/trunk/WebKit/haiku/HaikuLauncher/WebTabView.h Sat Feb 27 13:20:50 2010 (r236) +++ webkit/trunk/WebKit/haiku/HaikuLauncher/WebTabView.h Sat Feb 27 13:31:29 2010 (r237) @@ -56,6 +56,7 @@ BView* ViewForTab(int32 tabIndex) const; void SelectTab(int32 tabIndex); + void SelectTab(BView* containedView); int32 SelectedTabIndex() const; void CloseTab(int32 tabIndex); Modified: webkit/trunk/WebKit/haiku/WebCoreSupport/FrameLoaderClientHaiku.cpp ============================================================================== --- webkit/trunk/WebKit/haiku/WebCoreSupport/FrameLoaderClientHaiku.cpp Sat Feb 27 13:20:50 2010 (r236) +++ webkit/trunk/WebKit/haiku/WebCoreSupport/FrameLoaderClientHaiku.cpp Sat Feb 27 13:31:29 2010 (r237) @@ -184,6 +184,7 @@ challengeMessage.AddString("user", challenge.proposedCredential().user()); challengeMessage.AddString("password", challenge.proposedCredential().password()); challengeMessage.AddUInt32("failureCount", challenge.previousFailureCount()); + challengeMessage.AddPointer("view", m_webPage->WebView()); BMessage authenticationReply; m_messenger.SendMessage(&challengeMessage, &authenticationReply);