Skip to content

Commit 058c30f

Browse files
WizardCMRytoEX
authored andcommitted
Temporarily recreate implied Localhost permissions
OnShowPermissionPrompt is only called *once* when a page requests permission. If it is denied, even automatically, this code path will never be triggered again.
1 parent 1e313ae commit 058c30f

4 files changed

Lines changed: 61 additions & 0 deletions

File tree

‎browser-client.cpp‎

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,13 @@ CefRefPtr<CefDisplayHandler> BrowserClient::GetDisplayHandler()
5656
return this;
5757
}
5858

59+
#if CHROME_VERSION_BUILD >= 6533
60+
CefRefPtr<CefPermissionHandler> BrowserClient::GetPermissionHandler()
61+
{
62+
return this;
63+
}
64+
#endif
65+
5966
CefRefPtr<CefLifeSpanHandler> BrowserClient::GetLifeSpanHandler()
6067
{
6168
return this;
@@ -306,6 +313,21 @@ bool BrowserClient::OnTooltip(CefRefPtr<CefBrowser>, CefString &text)
306313
return true;
307314
}
308315

316+
#if CHROME_VERSION_BUILD >= 6533
317+
/* CefPermissionHandler */
318+
bool BrowserClient::OnShowPermissionPrompt(CefRefPtr<CefBrowser>, uint64_t, const CefString &,
319+
uint32_t requested_permissions,
320+
CefRefPtr<CefPermissionPromptCallback> callback)
321+
{
322+
// Implicitly allow Localhost access to retain previous behavior for now
323+
if ((requested_permissions & CEF_PERMISSION_TYPE_LOOPBACK_NETWORK) != 0) {
324+
callback->Continue(CEF_PERMISSION_RESULT_ACCEPT);
325+
return true;
326+
}
327+
return false;
328+
}
329+
#endif
330+
309331
void BrowserClient::OnPaint(CefRefPtr<CefBrowser>, PaintElementType type, const RectList &, const void *buffer,
310332
int width, int height)
311333
{

‎browser-client.hpp‎

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,9 @@ struct BrowserSource;
2727

2828
class BrowserClient : public CefClient,
2929
public CefDisplayHandler,
30+
#if CHROME_VERSION_BUILD >= 6533
31+
public CefPermissionHandler,
32+
#endif
3033
public CefLifeSpanHandler,
3134
public CefRequestHandler,
3235
public CefResourceRequestHandler,
@@ -66,6 +69,9 @@ class BrowserClient : public CefClient,
6669
virtual CefRefPtr<CefLoadHandler> GetLoadHandler() override;
6770
virtual CefRefPtr<CefRenderHandler> GetRenderHandler() override;
6871
virtual CefRefPtr<CefDisplayHandler> GetDisplayHandler() override;
72+
#if CHROME_VERSION_BUILD >= 6533
73+
virtual CefRefPtr<CefPermissionHandler> GetPermissionHandler() override;
74+
#endif
6975
virtual CefRefPtr<CefLifeSpanHandler> GetLifeSpanHandler() override;
7076
virtual CefRefPtr<CefRequestHandler> GetRequestHandler() override;
7177
virtual CefRefPtr<CefContextMenuHandler> GetContextMenuHandler() override;
@@ -80,6 +86,13 @@ class BrowserClient : public CefClient,
8086
const CefString &source, int line) override;
8187
virtual bool OnTooltip(CefRefPtr<CefBrowser> browser, CefString &text) override;
8288

89+
/* CefPermissionHandler */
90+
#if CHROME_VERSION_BUILD >= 6533
91+
virtual bool OnShowPermissionPrompt(CefRefPtr<CefBrowser> browser, uint64_t prompt_id,
92+
const CefString &requesting_origin, uint32_t requested_permissions,
93+
CefRefPtr<CefPermissionPromptCallback> callback) override;
94+
#endif
95+
8396
/* CefLifeSpanHandler */
8497
virtual bool OnBeforePopup(CefRefPtr<CefBrowser> browser, CefRefPtr<CefFrame> frame,
8598
#if CHROME_VERSION_BUILD >= 6834

‎panel/browser-panel-client.cpp‎

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,11 @@ CefRefPtr<CefCommandHandler> QCefBrowserClient::GetCommandHandler()
4343
{
4444
return this;
4545
}
46+
47+
CefRefPtr<CefPermissionHandler> QCefBrowserClient::GetPermissionHandler()
48+
{
49+
return this;
50+
}
4651
#endif
4752

4853
CefRefPtr<CefRequestHandler> QCefBrowserClient::GetRequestHandler()
@@ -81,6 +86,19 @@ bool QCefBrowserClient::OnChromeCommand(CefRefPtr<CefBrowser>, int, cef_window_o
8186
{
8287
return true;
8388
}
89+
90+
/* CefPermissionHandler */
91+
bool QCefBrowserClient::OnShowPermissionPrompt(CefRefPtr<CefBrowser> browser, uint64_t, const CefString &,
92+
uint32_t requested_permissions,
93+
CefRefPtr<CefPermissionPromptCallback> callback)
94+
{
95+
// Implicitly allow Localhost access to retain previous behavior for now
96+
if ((requested_permissions & CEF_PERMISSION_TYPE_LOOPBACK_NETWORK) != 0) {
97+
callback->Continue(CEF_PERMISSION_RESULT_ACCEPT);
98+
return true;
99+
}
100+
return false;
101+
}
84102
#endif
85103

86104
/* CefDisplayHandler */

‎panel/browser-panel-client.hpp‎

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ class QCefBrowserClient : public CefClient,
99
public CefDisplayHandler,
1010
#if CHROME_VERSION_BUILD >= 6533
1111
public CefCommandHandler,
12+
public CefPermissionHandler,
1213
#endif
1314
public CefRequestHandler,
1415
public CefLifeSpanHandler,
@@ -31,6 +32,7 @@ class QCefBrowserClient : public CefClient,
3132
virtual CefRefPtr<CefDisplayHandler> GetDisplayHandler() override;
3233
#if CHROME_VERSION_BUILD >= 6533
3334
virtual CefRefPtr<CefCommandHandler> GetCommandHandler() override;
35+
virtual CefRefPtr<CefPermissionHandler> GetPermissionHandler() override;
3436
#endif
3537
virtual CefRefPtr<CefRequestHandler> GetRequestHandler() override;
3638
virtual CefRefPtr<CefLifeSpanHandler> GetLifeSpanHandler() override;
@@ -43,6 +45,12 @@ class QCefBrowserClient : public CefClient,
4345
#if CHROME_VERSION_BUILD >= 6533
4446
virtual bool OnChromeCommand(CefRefPtr<CefBrowser> browser, int command_id,
4547
cef_window_open_disposition_t disposition) override;
48+
49+
/* CefPermissionHandler */
50+
virtual bool OnShowPermissionPrompt(CefRefPtr<CefBrowser> browser, uint64_t prompt_id,
51+
const CefString &requesting_origin, uint32_t requested_permissions,
52+
CefRefPtr<CefPermissionPromptCallback> callback) override;
53+
4654
#endif
4755

4856
/* CefDisplayHandler */

0 commit comments

Comments
 (0)