Skip to content

Commit 2646504

Browse files
committed
Fix CEF AJAX after 4761859 (and migrate from SString to std::string)
1 parent 1660597 commit 2646504

File tree

8 files changed

+32
-30
lines changed

8 files changed

+32
-30
lines changed

Client/cefweb/CAjaxResourceHandler.cpp

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
#include "CAjaxResourceHandler.h"
1414
#undef min
1515

16-
CAjaxResourceHandler::CAjaxResourceHandler(std::vector<SString>& vecGet, std::vector<SString>& vecPost, const CefString& strMime)
16+
CAjaxResourceHandler::CAjaxResourceHandler(std::vector<std::string> vecGet, std::vector<std::string> vecPost, const CefString& strMime)
1717
: m_vecGetData(std::move(vecGet)), m_vecPostData(std::move(vecPost)), m_strMime(strMime)
1818
{
1919
}
@@ -27,7 +27,7 @@ CAjaxResourceHandler::~CAjaxResourceHandler()
2727
m_callback = nullptr;
2828
}
2929

30-
void CAjaxResourceHandler::SetResponse(const SString& data)
30+
void CAjaxResourceHandler::SetResponse(const std::string& data)
3131
{
3232
// Prevent response corruption: ignore subsequent calls after data is set
3333
if (m_bHasData) [[unlikely]]
@@ -72,8 +72,10 @@ void CAjaxResourceHandler::GetResponseHeaders(CefRefPtr<CefResponse> response, i
7272

7373
bool CAjaxResourceHandler::ProcessRequest([[maybe_unused]] CefRefPtr<CefRequest> request, CefRefPtr<CefCallback> callback)
7474
{
75-
// Don't call Continue() here - let ReadResponse handle async flow
76-
// Calling Continue() immediately would use the callback before data is ready
75+
// Store callback so SetResponse can resume once data is ready
76+
m_callback = callback;
77+
78+
// Do not call Continue() yet; SetResponse triggers it after data is prepared
7779
return true;
7880
}
7981

@@ -86,13 +88,10 @@ bool CAjaxResourceHandler::ReadResponse(void* data_out, int bytes_to_read, int&
8688
return false;
8789
}
8890

89-
// If we have no data yet, wait
91+
// If we have no data yet, wait until SetResponse provides it
9092
if (!m_bHasData)
9193
{
9294
bytes_read = 0;
93-
// Store callback only if we don't already have one (prevent overwrite/leak)
94-
if (callback && !m_callback)
95-
m_callback = callback;
9695
return true;
9796
}
9897

Client/cefweb/CAjaxResourceHandler.h

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,12 @@ class CWebView;
1919
class CAjaxResourceHandler : public CefResourceHandler, public CAjaxResourceHandlerInterface
2020
{
2121
public:
22-
CAjaxResourceHandler(std::vector<SString>& vecGet, std::vector<SString>& vecPost, const CefString& mimeType);
22+
CAjaxResourceHandler(std::vector<std::string> vecGet, std::vector<std::string> vecPost, const CefString& mimeType);
2323
~CAjaxResourceHandler();
2424

25-
std::vector<SString>& GetGetData() override { return m_vecGetData; }
26-
std::vector<SString>& GetPostData() override { return m_vecPostData; }
27-
void SetResponse(const SString& data) override;
25+
std::vector<std::string>& GetGetData() override { return m_vecGetData; }
26+
std::vector<std::string>& GetPostData() override { return m_vecPostData; }
27+
void SetResponse(const std::string& data) override;
2828

2929
// CefResourceHandler
3030
virtual void Cancel() override;
@@ -37,10 +37,10 @@ class CAjaxResourceHandler : public CefResourceHandler, public CAjaxResourceHand
3737

3838
private:
3939
CefRefPtr<CefCallback> m_callback;
40-
std::vector<SString> m_vecGetData;
41-
std::vector<SString> m_vecPostData;
42-
SString m_strResponse;
43-
CefString m_strMime;
44-
bool m_bHasData = false;
45-
size_t m_DataOffset = 0;
40+
std::vector<std::string> m_vecGetData;
41+
std::vector<std::string> m_vecPostData;
42+
std::string m_strResponse;
43+
CefString m_strMime;
44+
bool m_bHasData = false;
45+
size_t m_DataOffset = 0;
4646
};

Client/cefweb/CWebApp.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -191,8 +191,8 @@ CefRefPtr<CefResourceHandler> CWebApp::Create(CefRefPtr<CefBrowser> browser, Cef
191191

192192
if (pWebView->HasAjaxHandler(resourcePath))
193193
{
194-
std::vector<SString> vecGet;
195-
std::vector<SString> vecPost;
194+
std::vector<std::string> vecGet;
195+
std::vector<std::string> vecPost;
196196

197197
if (urlParts.query.str)
198198
{
@@ -248,7 +248,7 @@ CefRefPtr<CefResourceHandler> CWebApp::Create(CefRefPtr<CefBrowser> browser, Cef
248248
}
249249
}
250250

251-
CefRefPtr<CAjaxResourceHandler> handler(new CAjaxResourceHandler(vecGet, vecPost, mimeType));
251+
CefRefPtr<CAjaxResourceHandler> handler(new CAjaxResourceHandler(std::move(vecGet), std::move(vecPost), mimeType));
252252
pWebView->HandleAjaxRequest(resourcePath, handler.get());
253253
return handler;
254254
}

Client/mods/deathmatch/logic/CClientWebBrowser.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -328,8 +328,8 @@ void CClientWebBrowser::Events_OnAjaxRequest(CAjaxResourceHandlerInterface* pHan
328328
return;
329329
}
330330

331-
auto callback = callbackMapEntry->second;
332-
SString result = callback(pHandler->GetGetData(), pHandler->GetPostData());
331+
auto callback = callbackMapEntry->second;
332+
std::string result = callback(pHandler->GetGetData(), pHandler->GetPostData());
333333
pHandler->SetResponse(result);
334334
}
335335

Client/mods/deathmatch/logic/CClientWebBrowser.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ class CClientWebBrowser : public CClientTexture, public CWebBrowserEventsInterfa
5656

5757
void Resize(const CVector2D& size);
5858

59-
using ajax_callback_t = const std::function<const SString(std::vector<SString>& vecGet, std::vector<SString>& vecPost)>;
59+
using ajax_callback_t = const std::function<const std::string(std::vector<std::string>& vecGet, std::vector<std::string>& vecPost)>;
6060

6161
bool AddAjaxHandler(const SString& strURL, ajax_callback_t& handler);
6262
bool RemoveAjaxHandler(const SString& strURL);

Client/mods/deathmatch/logic/luadefs/CLuaBrowserDefs.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1041,7 +1041,7 @@ int CLuaBrowserDefs::SetBrowserAjaxHandler(lua_State* luaVM)
10411041
CResourceManager* pResourceManager = m_pResourceManager;
10421042
auto netId = pResource->GetNetID();
10431043

1044-
bool bResult = pWebBrowser->AddAjaxHandler(strURL, [=](std::vector<SString>& vecGet, std::vector<SString>& vecPost) -> const SString {
1044+
bool bResult = pWebBrowser->AddAjaxHandler(strURL, [=](std::vector<std::string>& vecGet, std::vector<std::string>& vecPost) -> const std::string {
10451045
// Make sure the resource is still running
10461046
if (!pResourceManager->Exists(pResource) || pResource->GetNetID() != netId)
10471047
{
@@ -1073,7 +1073,7 @@ int CLuaBrowserDefs::SetBrowserAjaxHandler(lua_State* luaVM)
10731073

10741074
CLuaArgument* returnedValue = *result.begin();
10751075
if (returnedValue->GetType() == LUA_TSTRING)
1076-
return returnedValue->GetString();
1076+
return std::string(returnedValue->GetString());
10771077
else
10781078
return "";
10791079
}

Client/sdk/core/CAjaxResourceHandlerInterface.h

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,13 @@
1010
*****************************************************************************/
1111
#pragma once
1212

13+
#include <string>
14+
#include <vector>
15+
1316
class CAjaxResourceHandlerInterface
1417
{
1518
public:
16-
virtual std::vector<SString>& GetGetData() = 0;
17-
virtual std::vector<SString>& GetPostData() = 0;
18-
virtual void SetResponse(const SString& data) = 0;
19+
virtual std::vector<std::string>& GetGetData() = 0;
20+
virtual std::vector<std::string>& GetPostData() = 0;
21+
virtual void SetResponse(const std::string& data) = 0;
1922
};

Client/sdk/core/CWebViewInterface.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ class CWebViewInterface
5151
virtual CVector2D GetSize() = 0;
5252

5353
// Ajax Handlers
54-
using ajax_callback_t = const std::function<const SString(std::vector<SString>& vecGet, std::vector<SString>& vecPost)>;
54+
using ajax_callback_t = const std::function<const std::string(std::vector<std::string>& vecGet, std::vector<std::string>& vecPost)>;
5555

5656
virtual bool RegisterAjaxHandler(const SString& strURL) = 0;
5757
virtual bool UnregisterAjaxHandler(const SString& strURL) = 0;

0 commit comments

Comments
 (0)