diff options
author | Jocelyn Turcotte <jocelyn.turcotte@digia.com> | 2014-01-15 19:10:22 +0100 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2014-01-22 08:45:25 +0100 |
commit | 1fcd7970e07a0ecab206224824d1c71488fc19e9 (patch) | |
tree | 7bc6ba73623a69aa303f1f4d5c075e8ef37ca45e /src/core | |
parent | 3fcd31f5bd86cb568b1ca4f4f5c7c12c6675dceb (diff) |
Implement QWebEnginePage::toHtml and toPlainText
Those methods are now made asynchronous and need to be given a
callback to handle the result.
Update the code in the browser and fancybrowser examples using
std::bind when using C++11 or tr1::bind with C++03 (which should be
available with compilers on platforms that we support).
Add a (currently failing) earlyToHtml test to make sure that an empty
page doesn't crash because of a possibly incomplete attachment of
the QtRenderViewObserver.
Change-Id: I3ab7cb6f25b91b584dd80df5e4e9ad1e3214348e
Reviewed-by: Pierre Rossi <pierre.rossi@gmail.com>
Diffstat (limited to 'src/core')
-rw-r--r-- | src/core/common/qt_messages.h | 22 | ||||
-rw-r--r-- | src/core/qt_render_view_observer_host.cpp | 14 | ||||
-rw-r--r-- | src/core/qt_render_view_observer_host.h | 4 | ||||
-rw-r--r-- | src/core/renderer/qt_render_view_observer.cpp | 18 | ||||
-rw-r--r-- | src/core/renderer/qt_render_view_observer.h | 3 | ||||
-rw-r--r-- | src/core/web_contents_adapter.cpp | 14 | ||||
-rw-r--r-- | src/core/web_contents_adapter.h | 2 | ||||
-rw-r--r-- | src/core/web_contents_adapter_client.h | 2 |
8 files changed, 79 insertions, 0 deletions
diff --git a/src/core/common/qt_messages.h b/src/core/common/qt_messages.h index 77be79360..47303d38d 100644 --- a/src/core/common/qt_messages.h +++ b/src/core/common/qt_messages.h @@ -18,3 +18,25 @@ namespace IPC { #endif // RENDER_VIEW_MESSAGES_H #define IPC_MESSAGE_START QtMsgStart + +//----------------------------------------------------------------------------- +// RenderView messages +// These are messages sent from the browser to the renderer process. + +IPC_MESSAGE_ROUTED1(QtRenderViewObserver_FetchDocumentMarkup, + uint64 /* requestId */) + +IPC_MESSAGE_ROUTED1(QtRenderViewObserver_FetchDocumentInnerText, + uint64 /* requestId */) + +//----------------------------------------------------------------------------- +// WebContents messages +// These are messages sent from the renderer back to the browser process. + +IPC_MESSAGE_ROUTED2(QtRenderViewObserverHost_DidFetchDocumentMarkup, + base::string16 /* markup */, + uint64 /* requestId */) + +IPC_MESSAGE_ROUTED2(QtRenderViewObserverHost_DidFetchDocumentInnerText, + base::string16 /* innerText */, + uint64 /* requestId */) diff --git a/src/core/qt_render_view_observer_host.cpp b/src/core/qt_render_view_observer_host.cpp index fec2c4b0c..4b3cc0189 100644 --- a/src/core/qt_render_view_observer_host.cpp +++ b/src/core/qt_render_view_observer_host.cpp @@ -51,10 +51,24 @@ QtRenderViewObserverHost::QtRenderViewObserverHost(content::WebContents *webCont { } +void QtRenderViewObserverHost::fetchDocumentMarkup(quint64 requestId) +{ + Send(new QtRenderViewObserver_FetchDocumentMarkup(routing_id(), requestId)); +} + +void QtRenderViewObserverHost::fetchDocumentInnerText(quint64 requestId) +{ + Send(new QtRenderViewObserver_FetchDocumentInnerText(routing_id(), requestId)); +} + bool QtRenderViewObserverHost::OnMessageReceived(const IPC::Message& message) { bool handled = true; IPC_BEGIN_MESSAGE_MAP(QtRenderViewObserverHost, message) + IPC_MESSAGE_HANDLER(QtRenderViewObserverHost_DidFetchDocumentMarkup, + onDidFetchDocumentMarkup) + IPC_MESSAGE_HANDLER(QtRenderViewObserverHost_DidFetchDocumentInnerText, + onDidFetchDocumentInnerText) IPC_MESSAGE_UNHANDLED(handled = false) IPC_END_MESSAGE_MAP() return handled; diff --git a/src/core/qt_render_view_observer_host.h b/src/core/qt_render_view_observer_host.h index 61b6a4124..7d93176c5 100644 --- a/src/core/qt_render_view_observer_host.h +++ b/src/core/qt_render_view_observer_host.h @@ -55,9 +55,13 @@ class QtRenderViewObserverHost : public content::WebContentsObserver { public: QtRenderViewObserverHost(content::WebContents*, WebContentsAdapterClient *adapterClient); + void fetchDocumentMarkup(quint64 requestId); + void fetchDocumentInnerText(quint64 requestId); private: bool OnMessageReceived(const IPC::Message& message) Q_DECL_OVERRIDE; + void onDidFetchDocumentMarkup(const base::string16& markup, quint64 requestId); + void onDidFetchDocumentInnerText(const base::string16& innerText, quint64 requestId); WebContentsAdapterClient *m_adapterClient; }; diff --git a/src/core/renderer/qt_render_view_observer.cpp b/src/core/renderer/qt_render_view_observer.cpp index b3b4c38c4..0f5ca6556 100644 --- a/src/core/renderer/qt_render_view_observer.cpp +++ b/src/core/renderer/qt_render_view_observer.cpp @@ -54,10 +54,28 @@ QtRenderViewObserver::QtRenderViewObserver(content::RenderView* render_view) { } +void QtRenderViewObserver::onFetchDocumentMarkup(quint64 requestId) +{ + Send(new QtRenderViewObserverHost_DidFetchDocumentMarkup( + routing_id(), + render_view()->GetWebView()->mainFrame()->document().createMarkup(), + requestId)); +} + +void QtRenderViewObserver::onFetchDocumentInnerText(quint64 requestId) +{ + Send(new QtRenderViewObserverHost_DidFetchDocumentInnerText( + routing_id(), + render_view()->GetWebView()->mainFrame()->document().documentElement().innerText(), + requestId)); +} + bool QtRenderViewObserver::OnMessageReceived(const IPC::Message& message) { bool handled = true; IPC_BEGIN_MESSAGE_MAP(QtRenderViewObserver, message) + IPC_MESSAGE_HANDLER(QtRenderViewObserver_FetchDocumentMarkup, onFetchDocumentMarkup) + IPC_MESSAGE_HANDLER(QtRenderViewObserver_FetchDocumentInnerText, onFetchDocumentInnerText) IPC_MESSAGE_UNHANDLED(handled = false) IPC_END_MESSAGE_MAP() return handled; diff --git a/src/core/renderer/qt_render_view_observer.h b/src/core/renderer/qt_render_view_observer.h index 8c5713c4a..c37dce16d 100644 --- a/src/core/renderer/qt_render_view_observer.h +++ b/src/core/renderer/qt_render_view_observer.h @@ -48,6 +48,9 @@ public: QtRenderViewObserver(content::RenderView* render_view); private: + void onFetchDocumentMarkup(quint64 requestId); + void onFetchDocumentInnerText(quint64 requestId); + virtual bool OnMessageReceived(const IPC::Message& message) Q_DECL_OVERRIDE; DISALLOW_COPY_AND_ASSIGN(QtRenderViewObserver); diff --git a/src/core/web_contents_adapter.cpp b/src/core/web_contents_adapter.cpp index bd3be1744..6cdc83375 100644 --- a/src/core/web_contents_adapter.cpp +++ b/src/core/web_contents_adapter.cpp @@ -394,6 +394,20 @@ quint64 WebContentsAdapter::runJavaScriptCallbackResult(const QString &javaScrip return d->lastRequestId; } +quint64 WebContentsAdapter::fetchDocumentMarkup() +{ + Q_D(WebContentsAdapter); + d->renderViewObserverHost->fetchDocumentMarkup(++d->lastRequestId); + return d->lastRequestId; +} + +quint64 WebContentsAdapter::fetchDocumentInnerText() +{ + Q_D(WebContentsAdapter); + d->renderViewObserverHost->fetchDocumentInnerText(++d->lastRequestId); + return d->lastRequestId; +} + void WebContentsAdapter::dpiScaleChanged() { Q_D(WebContentsAdapter); diff --git a/src/core/web_contents_adapter.h b/src/core/web_contents_adapter.h index 49c1de4c0..e70aae259 100644 --- a/src/core/web_contents_adapter.h +++ b/src/core/web_contents_adapter.h @@ -86,6 +86,8 @@ public: void filesSelectedInChooser(const QStringList &fileList, WebContentsAdapterClient::FileChooserMode); void runJavaScript(const QString &javaScript, const QString &xPath); quint64 runJavaScriptCallbackResult(const QString &javaScript, const QString &xPath); + quint64 fetchDocumentMarkup(); + quint64 fetchDocumentInnerText(); void dpiScaleChanged(); diff --git a/src/core/web_contents_adapter_client.h b/src/core/web_contents_adapter_client.h index e3e88e110..77a02f5e7 100644 --- a/src/core/web_contents_adapter_client.h +++ b/src/core/web_contents_adapter_client.h @@ -130,6 +130,8 @@ public: 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; + virtual void didFetchDocumentMarkup(const QString& result, quint64 requestId) = 0; + virtual void didFetchDocumentInnerText(const QString& result, quint64 requestId) = 0; }; #endif // WEB_CONTENTS_ADAPTER_CLIENT_H |