Skip to content

Commit a6975a6

Browse files
Merge pull request #1 from babyRess/fix/macos-wkwebview-page-agent
fix(webview): improve macOS page-agent compatibility
2 parents 98e023a + ec6263c commit a6975a6

1 file changed

Lines changed: 12 additions & 6 deletions

File tree

src/widgets/WebViewWidget_mac.mm

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -33,14 +33,18 @@ @interface CopilotMessageHandler : NSObject <WKScriptMessageHandler>
3333
Q_OBJECT
3434

3535
public:
36-
WebViewWidgetMac(const QString &appId, const QUrl &url, QWidget *parent)
36+
WebViewWidgetMac(const QString &appId, const QUrl &url, QWidget *parent, const QString &userDataFolder)
3737
: WebViewWidget(appId, url, parent)
3838
{
3939
@autoreleasepool {
4040
WKWebViewConfiguration *config = [[WKWebViewConfiguration alloc] init];
4141

42-
// Tiered data persistence: macOS 14+ uses per-app isolated store.
43-
if (@available(macOS 14.0, *)) {
42+
// Quick Browser passes a userDataFolder. WKWebView cannot choose an
43+
// arbitrary profile directory, so use the app's persistent default
44+
// store there instead of a fresh UUID-backed store per tab.
45+
if (!userDataFolder.isEmpty()) {
46+
config.websiteDataStore = [WKWebsiteDataStore defaultDataStore];
47+
} else if (@available(macOS 14.0, *)) {
4448
QUuid ns = QUuid::fromString(QStringLiteral("{6ba7b810-9dad-11d1-80b4-00c04fd430c8}"));
4549
QUuid storeId = QUuid::createUuidV5(ns, appId);
4650
NSUUID *nsUuid = [[NSUUID alloc] initWithUUIDString:storeId.toString(QUuid::WithoutBraces).toNSString()];
@@ -64,6 +68,8 @@ @interface CopilotMessageHandler : NSObject <WKScriptMessageHandler>
6468

6569
NSRect frame = NSMakeRect(0, 0, 400, 300);
6670
m_webView = [[WKWebView alloc] initWithFrame:frame configuration:config];
71+
m_webView.customUserAgent = @"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) "
72+
"AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.4 Safari/605.1.15";
6773

6874
m_navDelegate = [[MiniAppNavDelegate alloc] init];
6975
m_navDelegate.owner = this;
@@ -123,7 +129,7 @@ void executeScript(const QString &js, std::function<void(const QString &)> callb
123129

124130
QString nativePostMessage() const override
125131
{
126-
return QStringLiteral("window.webkit.messageHandlers.pageAgent.postMessage");
132+
return QStringLiteral("(function(msg){ window.webkit.messageHandlers.pageAgent.postMessage(msg); })");
127133
}
128134

129135
void destroy() override
@@ -212,12 +218,12 @@ - (void)userContentController:(WKUserContentController *)userContentController
212218

213219
// Factory: macOS implementation
214220
WebViewWidget *WebViewWidget::create(const QString &appId, const QUrl &url, int /*debugPort*/,
215-
QWidget *parent, const QString &/*userDataFolder*/,
221+
QWidget *parent, const QString &userDataFolder,
216222
int /*proxyType*/, const QString &/*proxyHost*/,
217223
int /*proxyPort*/, const QString &/*proxyBypassList*/,
218224
bool /*allowCrossOrigin*/)
219225
{
220-
return new WebViewWidgetMac(appId, url, parent);
226+
return new WebViewWidgetMac(appId, url, parent, userDataFolder);
221227
}
222228

223229
#include "WebViewWidget_mac.moc"

0 commit comments

Comments
 (0)