diff options
Diffstat (limited to 'src/core')
-rw-r--r-- | src/core/web_contents_adapter.cpp | 26 | ||||
-rw-r--r-- | src/core/web_contents_adapter.h | 9 | ||||
-rw-r--r-- | src/core/web_contents_adapter_client.h | 3 |
3 files changed, 21 insertions, 17 deletions
diff --git a/src/core/web_contents_adapter.cpp b/src/core/web_contents_adapter.cpp index 108506b06..56b56ce33 100644 --- a/src/core/web_contents_adapter.cpp +++ b/src/core/web_contents_adapter.cpp @@ -143,10 +143,9 @@ static QVariant fromJSValue(const base::Value *result) return ret; } -static void callbackOnEvaluateJS(JSCallbackBase *callback, const base::Value *result) +static void callbackOnEvaluateJS(WebContentsAdapterClient *adapterClient, quint64 requestId, const base::Value *result) { - callback->call(fromJSValue(result)); - delete callback; + adapterClient->didRunJavaScript(fromJSValue(result), requestId); } static QStringList listRecursively(const QDir& dir) { @@ -169,11 +168,13 @@ public: scoped_ptr<content::WebContents> webContents; scoped_ptr<WebContentsDelegateQt> webContentsDelegate; WebContentsAdapterClient *adapterClient; + quint64 lastRequestId; }; WebContentsAdapterPrivate::WebContentsAdapterPrivate(WebContentsAdapterClient::RenderingMode renderingMode) // This has to be the first thing we create, and the last we destroy. : engineContext(WebEngineContext::currentOrCreate(renderingMode)) + , lastRequestId(0) { } @@ -372,17 +373,22 @@ void WebContentsAdapter::enableInspector(bool enable) ContentBrowserClientQt::Get()->enableInspector(enable); } -void WebContentsAdapter::runJavaScript(const QString &javaScript, const QString &xPath, JSCallbackBase *func) +void WebContentsAdapter::runJavaScript(const QString &javaScript, const QString &xPath) { Q_D(WebContentsAdapter); content::RenderViewHost *rvh = d->webContents->GetRenderViewHost(); Q_ASSERT(rvh); - if (!func) - rvh->ExecuteJavascriptInWebFrame(toString16(xPath), toString16(javaScript)); - else { - content::RenderViewHost::JavascriptResultCallback callback = base::Bind(&callbackOnEvaluateJS, func); - rvh->ExecuteJavascriptInWebFrameCallbackResult(toString16(xPath), toString16(javaScript), callback); - } + rvh->ExecuteJavascriptInWebFrame(toString16(xPath), toString16(javaScript)); +} + +quint64 WebContentsAdapter::runJavaScriptCallbackResult(const QString &javaScript, const QString &xPath) +{ + Q_D(WebContentsAdapter); + content::RenderViewHost *rvh = d->webContents->GetRenderViewHost(); + Q_ASSERT(rvh); + content::RenderViewHost::JavascriptResultCallback callback = base::Bind(&callbackOnEvaluateJS, d->adapterClient, ++d->lastRequestId); + rvh->ExecuteJavascriptInWebFrameCallbackResult(toString16(xPath), toString16(javaScript), callback); + return d->lastRequestId; } void WebContentsAdapter::dpiScaleChanged() diff --git a/src/core/web_contents_adapter.h b/src/core/web_contents_adapter.h index c4c25c8a5..49c1de4c0 100644 --- a/src/core/web_contents_adapter.h +++ b/src/core/web_contents_adapter.h @@ -49,17 +49,11 @@ #include <QString> #include <QUrl> -QT_FORWARD_DECLARE_CLASS(QVariant) namespace content { class WebContents; } class WebContentsAdapterPrivate; -struct JSCallbackBase { - virtual ~JSCallbackBase() {} - virtual void call(const QVariant&) = 0; -}; - class QWEBENGINE_EXPORT WebContentsAdapter : public QSharedData { public: // Takes ownership of the WebContents. @@ -89,8 +83,9 @@ public: void setZoomFactor(qreal); qreal currentZoomFactor() const; void enableInspector(bool); - void runJavaScript(const QString &javaScript, const QString &xPath = QString(), JSCallbackBase * = 0); void filesSelectedInChooser(const QStringList &fileList, WebContentsAdapterClient::FileChooserMode); + void runJavaScript(const QString &javaScript, const QString &xPath); + quint64 runJavaScriptCallbackResult(const QString &javaScript, const QString &xPath); void dpiScaleChanged(); diff --git a/src/core/web_contents_adapter_client.h b/src/core/web_contents_adapter_client.h index 28cd3c4d8..e3e88e110 100644 --- a/src/core/web_contents_adapter_client.h +++ b/src/core/web_contents_adapter_client.h @@ -49,6 +49,8 @@ #include <QStringList> #include <QUrl> +QT_FORWARD_DECLARE_CLASS(QVariant) + class JavaScriptDialogController; class RenderWidgetHostViewQt; class RenderWidgetHostViewQtDelegate; @@ -127,6 +129,7 @@ public: virtual bool contextMenuRequested(const WebEngineContextMenuData&) = 0; virtual void javascriptDialog(QSharedPointer<JavaScriptDialogController>) = 0; virtual void runFileChooser(FileChooserMode, const QString &defaultFileName, const QStringList &acceptedMimeTypes) = 0; + virtual void didRunJavaScript(const QVariant& result, quint64 requestId) = 0; }; #endif // WEB_CONTENTS_ADAPTER_CLIENT_H |