From 76a990cfa3409214530e77d132cdefd9e96685f9 Mon Sep 17 00:00:00 2001 From: Szabolcs David Date: Mon, 30 Mar 2015 05:58:20 -0700 Subject: Quick: Share profiles between application windows The applications should not create new WebEngineProfiles for each window, because the WebEngineView can not adopt content from a different profile when the target of the NewViewRequest is a new window (SHIFT+click) or a dialog. This also adds a notifier signal to the profile property in order to avoid "non-NOTIFYable" warnings. Change-Id: I235789f9bfa1a216f99592204e50266242d0ef1c Reviewed-by: Andras Becsi Reviewed-by: Allan Sandfeld Jensen --- .../webengine/quicknanobrowser/ApplicationRoot.qml | 25 ++++++++++-- .../webengine/quicknanobrowser/BrowserDialog.qml | 2 +- .../webengine/quicknanobrowser/BrowserWindow.qml | 47 +++++++++------------- 3 files changed, 43 insertions(+), 31 deletions(-) (limited to 'examples') diff --git a/examples/webengine/quicknanobrowser/ApplicationRoot.qml b/examples/webengine/quicknanobrowser/ApplicationRoot.qml index b16ee0078..b409696be 100644 --- a/examples/webengine/quicknanobrowser/ApplicationRoot.qml +++ b/examples/webengine/quicknanobrowser/ApplicationRoot.qml @@ -39,9 +39,19 @@ ****************************************************************************/ import QtQuick 2.1 +import QtWebEngine 1.1 QtObject { id: root + + property QtObject defaultProfile: WebEngineProfile { + storageName: "Default" + } + + property QtObject otrProfile: WebEngineProfile { + offTheRecord: true + } + property Component browserWindowComponent: BrowserWindow { applicationRoot: root onClosing: destroy() @@ -49,10 +59,19 @@ QtObject { property Component browserDialogComponent: BrowserDialog { onClosing: destroy() } - function createWindow() { return browserWindowComponent.createObject(root) } - function createDialog() { return browserDialogComponent.createObject(root) } + function createWindow(profile) { + var newWindow = browserWindowComponent.createObject(root) + newWindow.currentWebView.profile = profile + profile.downloadRequested.connect(newWindow.onDownloadRequested) + return newWindow + } + function createDialog(profile) { + var newDialog = browserDialogComponent.createObject(root) + newDialog.currentWebView.profile = profile + return newDialog + } function load(url) { - var browserWindow = createWindow() + var browserWindow = createWindow(defaultProfile) browserWindow.currentWebView.url = url } } diff --git a/examples/webengine/quicknanobrowser/BrowserDialog.qml b/examples/webengine/quicknanobrowser/BrowserDialog.qml index 302833083..6202d02f7 100644 --- a/examples/webengine/quicknanobrowser/BrowserDialog.qml +++ b/examples/webengine/quicknanobrowser/BrowserDialog.qml @@ -40,7 +40,7 @@ import QtQuick 2.1 import QtQuick.Window 2.2 -import QtWebEngine 1.0 +import QtWebEngine 1.1 Window { property alias currentWebView: webView diff --git a/examples/webengine/quicknanobrowser/BrowserWindow.qml b/examples/webengine/quicknanobrowser/BrowserWindow.qml index a047b2be5..c4c0270a4 100644 --- a/examples/webengine/quicknanobrowser/BrowserWindow.qml +++ b/examples/webengine/quicknanobrowser/BrowserWindow.qml @@ -84,22 +84,6 @@ ApplicationWindow { property alias errorPageEnabled: errorPageEnabled.checked; } - WebEngineProfile { - id: defaultProfile - storageName: "Default" - httpCacheType: httpDiskCacheEnabled.checked ? WebEngineProfile.DiskHttpCache : WebEngineProfile.MemoryHttpCache; - onDownloadRequested: { - downloadView.visible = true - downloadView.append(download) - download.accept() - } - } - - WebEngineProfile { - id: otrProfile - offTheRecord: true - } - Action { shortcut: "Ctrl+D" onTriggered: { @@ -124,7 +108,7 @@ ApplicationWindow { Action { shortcut: "Ctrl+T" onTriggered: { - tabs.createEmptyTab() + tabs.createEmptyTab(currentWebView.profile) tabs.currentIndex = tabs.count - 1 addressBar.forceActiveFocus(); addressBar.selectAll(); @@ -249,13 +233,15 @@ ApplicationWindow { id: offTheRecordEnabled text: "Off The Record" checkable: true - checked: false + checked: currentWebView.profile.offTheRecord + onToggled: currentWebView.profile = checked ? otrProfile : defaultProfile; } MenuItem { id: httpDiskCacheEnabled text: "HTTP Disk Cache" - checkable: true - checked: (defaultProfile.httpCacheType == WebEngineProfile.DiskHttpCache) + checkable: !currentWebView.profile.offTheRecord + checked: (currentWebView.profile.httpCacheType == WebEngineProfile.DiskHttpCache) + onToggled: currentWebView.profile.httpCacheType = checked ? WebEngineProfile.DiskHttpCache : WebEngineProfile.MemoryHttpCache } } } @@ -282,23 +268,23 @@ ApplicationWindow { TabView { id: tabs - function createEmptyTab() { + function createEmptyTab(profile) { var tab = addTab("", tabComponent) // We must do this first to make sure that tab.active gets set so that tab.item gets instantiated immediately. tab.active = true tab.title = Qt.binding(function() { return tab.item.title }) + tab.item.profile = profile return tab } anchors.fill: parent - Component.onCompleted: createEmptyTab() + Component.onCompleted: createEmptyTab(defaultProfile) Component { id: tabComponent WebEngineView { id: webEngineView focus: true - profile: offTheRecordEnabled.checked ? otrProfile : defaultProfile onLinkHovered: { if (hoveredUrl == "") @@ -336,17 +322,17 @@ ApplicationWindow { if (!request.userInitiated) print("Warning: Blocked a popup window.") else if (request.destination == WebEngineView.NewViewInTab) { - var tab = tabs.createEmptyTab() + var tab = tabs.createEmptyTab(currentWebView.profile) tabs.currentIndex = tabs.count - 1 request.openIn(tab.item) } else if (request.destination == WebEngineView.NewViewInBackgroundTab) { - var tab = tabs.createEmptyTab() + var tab = tabs.createEmptyTab(currentWebView.profile) request.openIn(tab.item) } else if (request.destination == WebEngineView.NewViewInDialog) { - var dialog = applicationRoot.createDialog() + var dialog = applicationRoot.createDialog(currentWebView.profile) request.openIn(dialog.currentWebView) } else { - var window = applicationRoot.createWindow() + var window = applicationRoot.createWindow(currentWebView.profile) request.openIn(window.currentWebView) } } @@ -401,6 +387,13 @@ ApplicationWindow { visible: false anchors.fill: parent } + + function onDownloadRequested(download) { + downloadView.visible = true + downloadView.append(download) + download.accept() + } + Rectangle { id: statusBubble color: "oldlace" -- cgit v1.2.3