diff options
author | Allan Sandfeld Jensen <allan.jensen@theqtcompany.com> | 2015-11-20 16:01:37 +0100 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@theqtcompany.com> | 2015-11-20 16:04:42 +0100 |
commit | 1f474fcc4cd47a85ce8d99f07d18b46ef2af5898 (patch) | |
tree | d4e52b5ac98343b4c2417d622164bf320d781a59 /src/core | |
parent | 4cc28c7c89f794d469f5e8f778ff05effe8c646f (diff) | |
parent | 1173d48149a8133b607894b67e1ec32de68e21e8 (diff) |
Merge branch '5.6' into dev
Change-Id: I05fe27b8321944cf68cc96dfa9dfcaeb54c8c8cd
Diffstat (limited to 'src/core')
40 files changed, 414 insertions, 219 deletions
diff --git a/src/core/api/qwebenginecallback.h b/src/core/api/qwebenginecallback.h index ddee20d06..b675438f5 100644 --- a/src/core/api/qwebenginecallback.h +++ b/src/core/api/qwebenginecallback.h @@ -81,12 +81,19 @@ public: : d(new QtWebEnginePrivate::QWebEngineCallbackPrivate<T, F>(f)) { } QWebEngineCallback() { } + void swap(QWebEngineCallback &other) Q_DECL_NOTHROW { qSwap(d, other.d); } operator bool() const { return d; } private: friend class QtWebEngineCore::CallbackDirectory; QExplicitlySharedDataPointer<QtWebEnginePrivate::QWebEngineCallbackPrivateBase<T> > d; }; +Q_DECLARE_SHARED(QWebEngineCallback<int>) +Q_DECLARE_SHARED(QWebEngineCallback<const QByteArray &>) +Q_DECLARE_SHARED_NOT_MOVABLE_UNTIL_QT6(QWebEngineCallback<bool>) +Q_DECLARE_SHARED_NOT_MOVABLE_UNTIL_QT6(QWebEngineCallback<const QString &>) +Q_DECLARE_SHARED_NOT_MOVABLE_UNTIL_QT6(QWebEngineCallback<const QVariant &>) + QT_END_NAMESPACE #endif // QWEBENGINECALLBACK_H diff --git a/src/core/api/qwebenginecallback_p.h b/src/core/api/qwebenginecallback_p.h index f0c25fe9e..9bc9b9727 100644 --- a/src/core/api/qwebenginecallback_p.h +++ b/src/core/api/qwebenginecallback_p.h @@ -47,6 +47,7 @@ #include <QVariant> #include <type_traits> +// keep in sync with Q_DECLARE_SHARED... in qwebenginecallback.h #define FOR_EACH_TYPE(F) \ F(bool) \ F(int) \ @@ -227,6 +228,11 @@ void CallbackDirectory::CallbackSharedDataPointer<T>::invokeEmpty() parent->invokeEmptyInternal(callback); } +#define CHECK_RELOCATABLE(x) \ + Q_STATIC_ASSERT((QTypeInfoQuery<QWebEngineCallback< x > >::isRelocatable)); +FOR_EACH_TYPE(CHECK_RELOCATABLE) +#undef CHECK_RELOCATABLE + } // namespace QtWebEngineCore #endif // QWEBENGINECALLBACK_P_H diff --git a/src/core/api/qwebenginecookiestoreclient.cpp b/src/core/api/qwebenginecookiestoreclient.cpp index 167b3f68c..bd43b871d 100644 --- a/src/core/api/qwebenginecookiestoreclient.cpp +++ b/src/core/api/qwebenginecookiestoreclient.cpp @@ -181,7 +181,7 @@ bool QWebEngineCookieStoreClientPrivate::canSetCookie(const QUrl &firstPartyUrl, request.firstPartyUrl = firstPartyUrl; request.cookieLine = cookieLine; request.cookieSource = url; - callbackDirectory.invokeDirectly<const QWebEngineCookieStoreClient::FilterRequest&>(filterCallback, request); + callbackDirectory.invokeDirectly<QWebEngineCookieStoreClient::FilterRequest&>(filterCallback, request); return request.accepted; } return true; @@ -394,7 +394,7 @@ void QWebEngineCookieStoreClient::deleteAllCookies() \sa deleteAllCookiesWithCallback(), getAllCookies() */ -void QWebEngineCookieStoreClient::setCookieFilter(const QWebEngineCallback<const QWebEngineCookieStoreClient::FilterRequest&> &filter) +void QWebEngineCookieStoreClient::setCookieFilter(const QWebEngineCallback<QWebEngineCookieStoreClient::FilterRequest&> &filter) { Q_D(QWebEngineCookieStoreClient); d->filterCallback = filter; diff --git a/src/core/api/qwebenginecookiestoreclient.h b/src/core/api/qwebenginecookiestoreclient.h index 8bdb988e2..4664a8459 100644 --- a/src/core/api/qwebenginecookiestoreclient.h +++ b/src/core/api/qwebenginecookiestoreclient.h @@ -77,7 +77,7 @@ public: void deleteSessionCookiesWithCallback(const QWebEngineCallback<int> &resultCallback); void deleteAllCookiesWithCallback(const QWebEngineCallback<int> &resultCallback); void getAllCookies(const QWebEngineCallback<const QByteArray&> &resultCallback); - void setCookieFilter(const QWebEngineCallback<const FilterRequest&> &filterCallback); + void setCookieFilter(const QWebEngineCallback<FilterRequest&> &filterCallback); #endif void setCookie(const QNetworkCookie &cookie, const QUrl &origin = QUrl()); void deleteCookie(const QNetworkCookie &cookie, const QUrl &origin = QUrl()); diff --git a/src/core/api/qwebenginecookiestoreclient_p.h b/src/core/api/qwebenginecookiestoreclient_p.h index 43652fba6..54f3b9eb7 100644 --- a/src/core/api/qwebenginecookiestoreclient_p.h +++ b/src/core/api/qwebenginecookiestoreclient_p.h @@ -53,8 +53,7 @@ #include "qwebenginecallback_p.h" #include "qwebenginecookiestoreclient.h" -#include <QList> -#include <QMap> +#include <QVector> #include <QNetworkCookie> #include <QUrl> @@ -70,12 +69,12 @@ class QWEBENGINE_PRIVATE_EXPORT QWebEngineCookieStoreClientPrivate { QNetworkCookie cookie; QUrl origin; }; - + friend class QTypeInfo<CookieData>; public: Q_DECLARE_PUBLIC(QWebEngineCookieStoreClient) QtWebEngineCore::CallbackDirectory callbackDirectory; - QWebEngineCallback<const QWebEngineCookieStoreClient::FilterRequest&> filterCallback; - QList<CookieData> m_pendingUserCookies; + QWebEngineCallback<QWebEngineCookieStoreClient::FilterRequest&> filterCallback; + QVector<CookieData> m_pendingUserCookies; quint64 m_nextCallbackId; bool m_deleteSessionCookiesPending; bool m_deleteAllCookiesPending; @@ -102,6 +101,8 @@ public: void onCookieChanged(const QNetworkCookie &cookie, bool removed); }; +Q_DECLARE_TYPEINFO(QWebEngineCookieStoreClientPrivate::CookieData, Q_MOVABLE_TYPE); + QT_END_NAMESPACE #endif // QWEBENGINECOOKIESTORECLIENT_P_H diff --git a/src/core/api/qwebengineurlschemehandler.cpp b/src/core/api/qwebengineurlschemehandler.cpp index f887e4e98..7f9ebaf48 100644 --- a/src/core/api/qwebengineurlschemehandler.cpp +++ b/src/core/api/qwebengineurlschemehandler.cpp @@ -75,7 +75,6 @@ QWebEngineUrlSchemeHandler::QWebEngineUrlSchemeHandler(QObject *parent) QWebEngineUrlSchemeHandler::~QWebEngineUrlSchemeHandler() { Q_EMIT destroyed(this); - delete d_ptr; } /*! diff --git a/src/core/api/qwebengineurlschemehandler.h b/src/core/api/qwebengineurlschemehandler.h index 8c1e52646..66aebe00d 100644 --- a/src/core/api/qwebengineurlschemehandler.h +++ b/src/core/api/qwebengineurlschemehandler.h @@ -48,7 +48,6 @@ class URLRequestContextGetterQt; QT_BEGIN_NAMESPACE class QWebEngineUrlRequestJob; -class QWebEngineUrlSchemeHandlerPrivate; class QWEBENGINE_EXPORT QWebEngineUrlSchemeHandler : public QObject { Q_OBJECT @@ -63,8 +62,6 @@ Q_SIGNALS: private: Q_DISABLE_COPY(QWebEngineUrlSchemeHandler) - Q_DECLARE_PRIVATE(QWebEngineUrlSchemeHandler) - QWebEngineUrlSchemeHandlerPrivate *d_ptr; }; QT_END_NAMESPACE diff --git a/src/core/chrome_qt.gyp b/src/core/chrome_qt.gyp index 2d2abe802..6c8e0d4d6 100644 --- a/src/core/chrome_qt.gyp +++ b/src/core/chrome_qt.gyp @@ -20,13 +20,13 @@ '<(SHARED_INTERMEDIATE_DIR)/components/strings', ], 'sources': [ - '<(chromium_src_dir)/chrome/browser/media/desktop_streams_registry.cc', - '<(chromium_src_dir)/chrome/browser/media/desktop_streams_registry.h', - '<(chromium_src_dir)/chrome/browser/media/desktop_media_list.h', - '<(chromium_src_dir)/chrome/common/chrome_switches.cc', - '<(chromium_src_dir)/chrome/common/chrome_switches.h', - '<(chromium_src_dir)/chrome/common/localized_error.cc', - '<(chromium_src_dir)/chrome/common/localized_error.h', + '<(DEPTH)/chrome/browser/media/desktop_streams_registry.cc', + '<(DEPTH)/chrome/browser/media/desktop_streams_registry.h', + '<(DEPTH)/chrome/browser/media/desktop_media_list.h', + '<(DEPTH)/chrome/common/chrome_switches.cc', + '<(DEPTH)/chrome/common/chrome_switches.h', + '<(DEPTH)/chrome/common/localized_error.cc', + '<(DEPTH)/chrome/common/localized_error.h', ], }, { diff --git a/src/core/common/qt_messages.h b/src/core/common/qt_messages.h index 25a995b27..ae36a0d7f 100644 --- a/src/core/common/qt_messages.h +++ b/src/core/common/qt_messages.h @@ -25,13 +25,13 @@ IPC_STRUCT_TRAITS_END() // RenderView messages // These are messages sent from the browser to the renderer process. -IPC_MESSAGE_ROUTED1(QtRenderViewObserver_FetchDocumentMarkup, +IPC_MESSAGE_ROUTED1(RenderViewObserverQt_FetchDocumentMarkup, uint64 /* requestId */) -IPC_MESSAGE_ROUTED1(QtRenderViewObserver_FetchDocumentInnerText, +IPC_MESSAGE_ROUTED1(RenderViewObserverQt_FetchDocumentInnerText, uint64 /* requestId */) -IPC_MESSAGE_ROUTED1(QtRenderViewObserver_SetBackgroundColor, +IPC_MESSAGE_ROUTED1(RenderViewObserverQt_SetBackgroundColor, uint32 /* color */) IPC_MESSAGE_ROUTED1(WebChannelIPCTransport_Message, std::vector<char> /*binaryJSON*/) @@ -51,14 +51,14 @@ IPC_MESSAGE_CONTROL0(UserScriptController_ClearScripts) // WebContents messages // These are messages sent from the renderer back to the browser process. -IPC_MESSAGE_ROUTED2(QtRenderViewObserverHost_DidFetchDocumentMarkup, +IPC_MESSAGE_ROUTED2(RenderViewObserverHostQt_DidFetchDocumentMarkup, uint64 /* requestId */, base::string16 /* markup */) -IPC_MESSAGE_ROUTED2(QtRenderViewObserverHost_DidFetchDocumentInnerText, +IPC_MESSAGE_ROUTED2(RenderViewObserverHostQt_DidFetchDocumentInnerText, uint64 /* requestId */, base::string16 /* innerText */) -IPC_MESSAGE_ROUTED0(QtRenderViewObserverHost_DidFirstVisuallyNonEmptyLayout) +IPC_MESSAGE_ROUTED0(RenderViewObserverHostQt_DidFirstVisuallyNonEmptyLayout) IPC_MESSAGE_ROUTED1(WebChannelIPCTransportHost_SendMessage, std::vector<char> /*binaryJSON*/) diff --git a/src/core/common/user_script_data.h b/src/core/common/user_script_data.h index 3dfec0ec3..d0856e02a 100644 --- a/src/core/common/user_script_data.h +++ b/src/core/common/user_script_data.h @@ -60,4 +60,10 @@ struct UserScriptData { uint64 scriptId; }; +QT_BEGIN_NAMESPACE + +Q_DECLARE_TYPEINFO(UserScriptData, Q_MOVABLE_TYPE); + +QT_END_NAMESPACE + #endif // USER_SCRIPT_DATA_H diff --git a/src/core/config/linux.pri b/src/core/config/linux.pri index 85dfe69ae..c3398757e 100644 --- a/src/core/config/linux.pri +++ b/src/core/config/linux.pri @@ -27,9 +27,9 @@ GYP_CONFIG += \ contains(QT_CONFIG, system-zlib): use?(system_minizip): GYP_CONFIG += use_system_zlib=1 contains(QT_CONFIG, system-png): GYP_CONFIG += use_system_libpng=1 contains(QT_CONFIG, system-jpeg): GYP_CONFIG += use_system_libjpeg=1 +contains(QT_CONFIG, system-harfbuzz): GYP_CONFIG += use_system_harfbuzz=1 !contains(QT_CONFIG, pulseaudio): GYP_CONFIG += use_pulseaudio=0 - -use?(system_harfbuzz): GYP_CONFIG += use_system_harfbuzz=1 +!contains(QT_CONFIG, glib): GYP_CONFIG += use_glib=0 use?(system_libevent): GYP_CONFIG += use_system_libevent=1 use?(system_libwebp): GYP_CONFIG += use_system_libwebp=1 use?(system_libsrtp): GYP_CONFIG += use_system_libsrtp=1 diff --git a/src/core/cookie_monster_delegate_qt.h b/src/core/cookie_monster_delegate_qt.h index 7592d57fa..db80bf0a1 100644 --- a/src/core/cookie_monster_delegate_qt.h +++ b/src/core/cookie_monster_delegate_qt.h @@ -47,7 +47,6 @@ QT_WARNING_DISABLE_CLANG("-Wunused-parameter") #include "net/cookies/cookie_monster.h" QT_WARNING_POP -#include <QList> #include <QNetworkCookie> #include <QPointer> diff --git a/src/core/core_gyp_generator.pro b/src/core/core_gyp_generator.pro index 813626dc3..14b8d78e2 100644 --- a/src/core/core_gyp_generator.pro +++ b/src/core/core_gyp_generator.pro @@ -62,15 +62,15 @@ SOURCES = \ process_main.cpp \ proxy_config_service_qt.cpp \ qrc_protocol_handler_qt.cpp \ - qt_render_view_observer_host.cpp \ + render_view_observer_host_qt.cpp \ render_widget_host_view_qt.cpp \ renderer/content_renderer_client_qt.cpp \ renderer/pepper/pepper_flash_browser_host_qt.cpp \ renderer/pepper/pepper_flash_renderer_host_qt.cpp \ renderer/pepper/pepper_host_factory_qt.cpp \ renderer/pepper/pepper_renderer_host_factory_qt.cpp \ - renderer/qt_render_frame_observer.cpp \ - renderer/qt_render_view_observer.cpp \ + renderer/render_frame_observer_qt.cpp \ + renderer/render_view_observer_qt.cpp \ renderer/user_script_controller.cpp \ renderer/web_channel_ipc_transport.cpp \ resource_bundle_qt.cpp \ @@ -134,7 +134,7 @@ HEADERS = \ process_main.h \ proxy_config_service_qt.h \ qrc_protocol_handler_qt.h \ - qt_render_view_observer_host.h \ + render_view_observer_host_qt.h \ render_widget_host_view_qt.h \ render_widget_host_view_qt_delegate.h \ renderer/content_renderer_client_qt.h \ @@ -142,8 +142,8 @@ HEADERS = \ renderer/pepper/pepper_flash_renderer_host_qt.h \ renderer/pepper/pepper_host_factory_qt.h \ renderer/pepper/pepper_renderer_host_factory_qt.h \ - renderer/qt_render_frame_observer.h \ - renderer/qt_render_view_observer.h \ + renderer/render_frame_observer_qt.h \ + renderer/render_view_observer_qt.h \ renderer/user_script_controller.h \ renderer/web_channel_ipc_transport.h \ resource_context_qt.h \ diff --git a/src/core/delegated_frame_node.cpp b/src/core/delegated_frame_node.cpp index 724c2c9bc..a2836d5e6 100644 --- a/src/core/delegated_frame_node.cpp +++ b/src/core/delegated_frame_node.cpp @@ -56,6 +56,7 @@ #include "cc/output/delegated_frame_data.h" #include "cc/quads/debug_border_draw_quad.h" #include "cc/quads/draw_quad.h" +#include "cc/quads/io_surface_draw_quad.h" #include "cc/quads/render_pass_draw_quad.h" #include "cc/quads/solid_color_draw_quad.h" #include "cc/quads/stream_video_draw_quad.h" @@ -79,6 +80,10 @@ #define GL_TIMEOUT_IGNORED 0xFFFFFFFFFFFFFFFFull #endif +#ifndef GL_TEXTURE_RECTANGLE +#define GL_TEXTURE_RECTANGLE 0x84F5 +#endif + namespace QtWebEngineCore { class MailboxTexture : public QSGTexture, protected QOpenGLFunctions { @@ -130,7 +135,7 @@ private: QSGGeometry m_geometry; }; -static inline QSharedPointer<QSGLayer> findRenderPassLayer(const cc::RenderPassId &id, const QList<QPair<cc::RenderPassId, QSharedPointer<QSGLayer> > > &list) +static inline QSharedPointer<QSGLayer> findRenderPassLayer(const cc::RenderPassId &id, const QVector<QPair<cc::RenderPassId, QSharedPointer<QSGLayer> > > &list) { typedef QPair<cc::RenderPassId, QSharedPointer<QSGLayer> > Pair; Q_FOREACH (const Pair &pair, list) @@ -646,13 +651,29 @@ void DelegatedFrameNode::commit(ChromiumCompositorData *chromiumCompositorData, MailboxTexture *texture = static_cast<MailboxTexture *>(initAndHoldTexture(resource, quad->ShouldDrawWithBlending())); texture->setTarget(GL_TEXTURE_EXTERNAL_OES); // since this is not default TEXTURE_2D type - StreamVideoNode *svideoNode = new StreamVideoNode(texture); + StreamVideoNode *svideoNode = new StreamVideoNode(texture, false, ExternalTarget); svideoNode->setRect(toQt(squad->rect)); svideoNode->setTextureMatrix(toQt(squad->matrix.matrix())); currentLayerChain->appendChildNode(svideoNode); break; #endif - } default: + } + case cc::DrawQuad::IO_SURFACE_CONTENT: { + const cc::IOSurfaceDrawQuad *ioquad = cc::IOSurfaceDrawQuad::MaterialCast(quad); + ResourceHolder *resource = findAndHoldResource(ioquad->io_surface_resource_id(), resourceCandidates); + MailboxTexture *texture = static_cast<MailboxTexture *>(initAndHoldTexture(resource, quad->ShouldDrawWithBlending())); + texture->setTarget(GL_TEXTURE_RECTANGLE); + + bool flip = ioquad->orientation != cc::IOSurfaceDrawQuad::FLIPPED; + StreamVideoNode *svideoNode = new StreamVideoNode(texture, flip, RectangleTarget); + QMatrix4x4 matrix; + matrix.scale(ioquad->io_surface_size.width(), ioquad->io_surface_size.height()); + svideoNode->setRect(toQt(ioquad->rect)); + svideoNode->setTextureMatrix(matrix); + currentLayerChain->appendChildNode(svideoNode); + break; + } + default: qWarning("Unimplemented quad material: %d", quad->material); } } diff --git a/src/core/delegated_frame_node.h b/src/core/delegated_frame_node.h index 60a1535d2..eed03fadd 100644 --- a/src/core/delegated_frame_node.h +++ b/src/core/delegated_frame_node.h @@ -90,9 +90,9 @@ private: QExplicitlySharedDataPointer<ChromiumCompositorData> m_chromiumCompositorData; struct SGObjects { - QList<QPair<cc::RenderPassId, QSharedPointer<QSGLayer> > > renderPassLayers; - QList<QSharedPointer<QSGRootNode> > renderPassRootNodes; - QList<QSharedPointer<QSGTexture> > textureStrongRefs; + QVector<QPair<cc::RenderPassId, QSharedPointer<QSGLayer> > > renderPassLayers; + QVector<QSharedPointer<QSGRootNode> > renderPassRootNodes; + QVector<QSharedPointer<QSGTexture> > textureStrongRefs; } m_sgObjects; int m_numPendingSyncPoints; QMap<uint32, gfx::TransferableFence> m_mailboxGLFences; diff --git a/src/core/gl_context_qt.cpp b/src/core/gl_context_qt.cpp index b350c3c5b..3c3b8225d 100644 --- a/src/core/gl_context_qt.cpp +++ b/src/core/gl_context_qt.cpp @@ -146,10 +146,14 @@ scoped_refptr<GLContext> GLContext::CreateGLContext(GLShareGroup* share_group, G { #if defined(OS_WIN) scoped_refptr<GLContext> context; - if (GetGLImplementation() == kGLImplementationDesktopGL) + if (GetGLImplementation() == kGLImplementationDesktopGL) { context = new GLContextWGL(share_group); - else + if (!context->Initialize(compatible_surface, gpu_preference)) + return nullptr; + return context; + } else { context = new GLContextEGL(share_group); + } #else scoped_refptr<GLContext> context = new GLContextEGL(share_group); #endif diff --git a/src/core/location_provider_qt.cpp b/src/core/location_provider_qt.cpp index e3be01b36..222d15354 100644 --- a/src/core/location_provider_qt.cpp +++ b/src/core/location_provider_qt.cpp @@ -88,12 +88,15 @@ QtPositioningHelper::~QtPositioningHelper() m_locationProvider->m_positioningHelper = 0; } +static bool isHighAccuracySource(const QGeoPositionInfoSource *source) +{ + return source->supportedPositioningMethods().testFlag( + QGeoPositionInfoSource::SatellitePositioningMethods); +} + void QtPositioningHelper::start(bool highAccuracy) { DCHECK_CURRENTLY_ON(BrowserThread::UI); - Q_UNUSED(highAccuracy); - // FIXME: go through availableSources until one supports QGeoPositionInfoSource::SatellitePositioningMethods - // for the highAccuracy case. m_positionInfoSource = QGeoPositionInfoSource::createDefaultSource(this); if (!m_positionInfoSource) { qWarning("Failed to initialize location provider: The system either has no default " @@ -103,6 +106,23 @@ void QtPositioningHelper::start(bool highAccuracy) return; } + // Find high accuracy source if the default source is not already one. + if (highAccuracy && !isHighAccuracySource(m_positionInfoSource)) { + Q_FOREACH (const QString &name, QGeoPositionInfoSource::availableSources()) { + if (name == m_positionInfoSource->sourceName()) + continue; + QGeoPositionInfoSource *source = QGeoPositionInfoSource::createSource(name, this); + if (source && isHighAccuracySource(source)) { + delete m_positionInfoSource; + m_positionInfoSource = source; + break; + } + delete source; + } + m_positionInfoSource->setPreferredPositioningMethods( + QGeoPositionInfoSource::SatellitePositioningMethods); + } + connect(m_positionInfoSource, &QGeoPositionInfoSource::positionUpdated, this, &QtPositioningHelper::updatePosition); // disambiguate the error getter and the signal in QGeoPositionInfoSource. connect(m_positionInfoSource, static_cast<void (QGeoPositionInfoSource::*)(QGeoPositionInfoSource::Error)>(&QGeoPositionInfoSource::error) diff --git a/src/core/permission_manager_qt.cpp b/src/core/permission_manager_qt.cpp index d93f9c331..19204b270 100644 --- a/src/core/permission_manager_qt.cpp +++ b/src/core/permission_manager_qt.cpp @@ -83,8 +83,7 @@ void PermissionManagerQt::permissionRequestReply(const QUrl &origin, BrowserCont m_permissions[key] = reply; content::PermissionStatus status = reply ? content::PERMISSION_STATUS_GRANTED : content::PERMISSION_STATUS_DENIED; auto it = m_requests.begin(); - const auto end = m_requests.end(); - while (it != end) { + while (it != m_requests.end()) { if (it->origin == origin && it->type == type) { it->callback.Run(status); it = m_requests.erase(it); diff --git a/src/core/qtwebengine.gypi b/src/core/qtwebengine.gypi index a420918a0..96b48e2ca 100644 --- a/src/core/qtwebengine.gypi +++ b/src/core/qtwebengine.gypi @@ -13,6 +13,8 @@ '<(chromium_src_dir)/components/components.gyp:error_page_renderer', '<(chromium_src_dir)/components/components.gyp:visitedlink_browser', '<(chromium_src_dir)/components/components.gyp:visitedlink_renderer', + '<(chromium_src_dir)/components/components.gyp:web_cache_browser', + '<(chromium_src_dir)/components/components.gyp:web_cache_renderer', '<(chromium_src_dir)/content/content.gyp:content', '<(chromium_src_dir)/content/content.gyp:content_app_browser', '<(chromium_src_dir)/content/content.gyp:content_browser', diff --git a/src/core/qt_render_view_observer_host.cpp b/src/core/render_view_observer_host_qt.cpp index 97d001ed6..03c9d241f 100644 --- a/src/core/qt_render_view_observer_host.cpp +++ b/src/core/render_view_observer_host_qt.cpp @@ -34,7 +34,7 @@ ** ****************************************************************************/ -#include "qt_render_view_observer_host.h" +#include "render_view_observer_host_qt.h" #include "common/qt_messages.h" #include "content/public/browser/web_contents.h" @@ -44,31 +44,31 @@ namespace QtWebEngineCore { -QtRenderViewObserverHost::QtRenderViewObserverHost(content::WebContents *webContents, WebContentsAdapterClient *adapterClient) +RenderViewObserverHostQt::RenderViewObserverHostQt(content::WebContents *webContents, WebContentsAdapterClient *adapterClient) : content::WebContentsObserver(webContents) , m_adapterClient(adapterClient) { } -void QtRenderViewObserverHost::fetchDocumentMarkup(quint64 requestId) +void RenderViewObserverHostQt::fetchDocumentMarkup(quint64 requestId) { - Send(new QtRenderViewObserver_FetchDocumentMarkup(routing_id(), requestId)); + Send(new RenderViewObserverQt_FetchDocumentMarkup(routing_id(), requestId)); } -void QtRenderViewObserverHost::fetchDocumentInnerText(quint64 requestId) +void RenderViewObserverHostQt::fetchDocumentInnerText(quint64 requestId) { - Send(new QtRenderViewObserver_FetchDocumentInnerText(routing_id(), requestId)); + Send(new RenderViewObserverQt_FetchDocumentInnerText(routing_id(), requestId)); } -bool QtRenderViewObserverHost::OnMessageReceived(const IPC::Message& message) +bool RenderViewObserverHostQt::OnMessageReceived(const IPC::Message& message) { bool handled = true; - IPC_BEGIN_MESSAGE_MAP(QtRenderViewObserverHost, message) - IPC_MESSAGE_HANDLER(QtRenderViewObserverHost_DidFetchDocumentMarkup, + IPC_BEGIN_MESSAGE_MAP(RenderViewObserverHostQt, message) + IPC_MESSAGE_HANDLER(RenderViewObserverHostQt_DidFetchDocumentMarkup, onDidFetchDocumentMarkup) - IPC_MESSAGE_HANDLER(QtRenderViewObserverHost_DidFetchDocumentInnerText, + IPC_MESSAGE_HANDLER(RenderViewObserverHostQt_DidFetchDocumentInnerText, onDidFetchDocumentInnerText) - IPC_MESSAGE_HANDLER(QtRenderViewObserverHost_DidFirstVisuallyNonEmptyLayout, + IPC_MESSAGE_HANDLER(RenderViewObserverHostQt_DidFirstVisuallyNonEmptyLayout, onDidFirstVisuallyNonEmptyLayout) IPC_MESSAGE_UNHANDLED(handled = false) IPC_END_MESSAGE_MAP() @@ -76,17 +76,17 @@ bool QtRenderViewObserverHost::OnMessageReceived(const IPC::Message& message) } -void QtRenderViewObserverHost::onDidFetchDocumentMarkup(quint64 requestId, const base::string16& markup) +void RenderViewObserverHostQt::onDidFetchDocumentMarkup(quint64 requestId, const base::string16& markup) { m_adapterClient->didFetchDocumentMarkup(requestId, toQt(markup)); } -void QtRenderViewObserverHost::onDidFetchDocumentInnerText(quint64 requestId, const base::string16& innerText) +void RenderViewObserverHostQt::onDidFetchDocumentInnerText(quint64 requestId, const base::string16& innerText) { m_adapterClient->didFetchDocumentInnerText(requestId, toQt(innerText)); } -void QtRenderViewObserverHost::onDidFirstVisuallyNonEmptyLayout() +void RenderViewObserverHostQt::onDidFirstVisuallyNonEmptyLayout() { RenderWidgetHostViewQt *rwhv = static_cast<RenderWidgetHostViewQt*>(web_contents()->GetRenderWidgetHostView()); if (rwhv) diff --git a/src/core/qt_render_view_observer_host.h b/src/core/render_view_observer_host_qt.h index 148fcb9da..2683e5807 100644 --- a/src/core/qt_render_view_observer_host.h +++ b/src/core/render_view_observer_host_qt.h @@ -34,8 +34,8 @@ ** ****************************************************************************/ -#ifndef QT_RENDER_VIEW_OBSERVER_HOST_H -#define QT_RENDER_VIEW_OBSERVER_HOST_H +#ifndef RENDER_VIEW_OBSERVER_HOST_QT_H +#define RENDER_VIEW_OBSERVER_HOST_QT_H #include "content/public/browser/web_contents_observer.h" @@ -49,10 +49,10 @@ namespace QtWebEngineCore { class WebContentsAdapterClient; -class QtRenderViewObserverHost : public content::WebContentsObserver +class RenderViewObserverHostQt : public content::WebContentsObserver { public: - QtRenderViewObserverHost(content::WebContents*, WebContentsAdapterClient *adapterClient); + RenderViewObserverHostQt(content::WebContents*, WebContentsAdapterClient *adapterClient); void fetchDocumentMarkup(quint64 requestId); void fetchDocumentInnerText(quint64 requestId); @@ -67,4 +67,4 @@ private: } // namespace QtWebEngineCore -#endif // QT_RENDER_VIEW_OBSERVER_HOST_H +#endif // RENDER_VIEW_OBSERVER_HOST_QT_H diff --git a/src/core/render_widget_host_view_qt.cpp b/src/core/render_widget_host_view_qt.cpp index 94b459e74..d2d292ee9 100644 --- a/src/core/render_widget_host_view_qt.cpp +++ b/src/core/render_widget_host_view_qt.cpp @@ -186,13 +186,14 @@ static inline int flagsFromModifiers(Qt::KeyboardModifiers modifiers) static uint32 s_eventId = 0; class MotionEventQt : public ui::MotionEvent { public: - MotionEventQt(const QList<QTouchEvent::TouchPoint> &touchPoints, const base::TimeTicks &eventTime, Action action, const Qt::KeyboardModifiers modifiers, int index = -1) + MotionEventQt(const QList<QTouchEvent::TouchPoint> &touchPoints, const base::TimeTicks &eventTime, Action action, const Qt::KeyboardModifiers modifiers, float dpiScale, int index = -1) : touchPoints(touchPoints) , eventTime(eventTime) , action(action) , eventId(++s_eventId) , flags(flagsFromModifiers(modifiers)) , index(index) + , dpiScale(dpiScale) { // ACTION_DOWN and ACTION_UP must be accesssed through pointer_index 0 Q_ASSERT((action != ACTION_DOWN && action != ACTION_UP) || index == 0); @@ -203,8 +204,8 @@ public: virtual int GetActionIndex() const Q_DECL_OVERRIDE { return index; } virtual size_t GetPointerCount() const Q_DECL_OVERRIDE { return touchPoints.size(); } virtual int GetPointerId(size_t pointer_index) const Q_DECL_OVERRIDE { return touchPoints.at(pointer_index).id(); } - virtual float GetX(size_t pointer_index) const Q_DECL_OVERRIDE { return touchPoints.at(pointer_index).pos().x(); } - virtual float GetY(size_t pointer_index) const Q_DECL_OVERRIDE { return touchPoints.at(pointer_index).pos().y(); } + virtual float GetX(size_t pointer_index) const Q_DECL_OVERRIDE { return touchPoints.at(pointer_index).pos().x() / dpiScale; } + virtual float GetY(size_t pointer_index) const Q_DECL_OVERRIDE { return touchPoints.at(pointer_index).pos().y() / dpiScale; } virtual float GetRawX(size_t pointer_index) const Q_DECL_OVERRIDE { return touchPoints.at(pointer_index).screenPos().x(); } virtual float GetRawY(size_t pointer_index) const Q_DECL_OVERRIDE { return touchPoints.at(pointer_index).screenPos().y(); } virtual float GetTouchMajor(size_t pointer_index) const Q_DECL_OVERRIDE @@ -240,6 +241,7 @@ private: const uint32 eventId; int flags; int index; + float dpiScale; }; RenderWidgetHostViewQt::RenderWidgetHostViewQt(content::RenderWidgetHost* widget) @@ -413,12 +415,13 @@ gfx::Rect RenderWidgetHostViewQt::GetViewBounds() const return gfx::BoundingRect(p1, p2); } -void RenderWidgetHostViewQt::SetBackgroundColor(SkColor color) { +void RenderWidgetHostViewQt::SetBackgroundColor(SkColor color) +{ RenderWidgetHostViewBase::SetBackgroundColor(color); // Set the background of the compositor if necessary m_delegate->setClearColor(toQt(color)); // Set the background of the blink::FrameView - m_host->Send(new QtRenderViewObserver_SetBackgroundColor(m_host->GetRoutingID(), color)); + m_host->Send(new RenderViewObserverQt_SetBackgroundColor(m_host->GetRoutingID(), color)); } // Return value indicates whether the mouse is locked successfully or not. @@ -997,7 +1000,7 @@ void RenderWidgetHostViewQt::handleTouchEvent(QTouchEvent *ev) QList<QTouchEvent::TouchPoint> touchPoints = mapTouchPointIds(ev->touchPoints()); if (ev->type() == QEvent::TouchCancel) { - MotionEventQt cancelEvent(touchPoints, eventTimestamp, ui::MotionEvent::ACTION_CANCEL, ev->modifiers()); + MotionEventQt cancelEvent(touchPoints, eventTimestamp, ui::MotionEvent::ACTION_CANCEL, ev->modifiers(), dpiScale()); processMotionEvent(cancelEvent); return; } @@ -1030,7 +1033,7 @@ void RenderWidgetHostViewQt::handleTouchEvent(QTouchEvent *ev) continue; } - MotionEventQt motionEvent(touchPoints, eventTimestamp, action, ev->modifiers(), i); + MotionEventQt motionEvent(touchPoints, eventTimestamp, action, ev->modifiers(), dpiScale(), i); processMotionEvent(motionEvent); } } diff --git a/src/core/renderer/content_renderer_client_qt.cpp b/src/core/renderer/content_renderer_client_qt.cpp index 0b8262c76..db50caad8 100644 --- a/src/core/renderer/content_renderer_client_qt.cpp +++ b/src/core/renderer/content_renderer_client_qt.cpp @@ -40,6 +40,7 @@ #include "chrome/common/localized_error.h" #include "components/error_page/common/error_page_params.h" #include "components/visitedlink/renderer/visitedlink_slave.h" +#include "components/web_cache/renderer/web_cache_render_process_observer.h" #include "content/public/renderer/render_frame.h" #include "content/public/renderer/render_thread.h" #include "content/public/renderer/render_view.h" @@ -53,8 +54,8 @@ #include "content/public/common/web_preferences.h" #include "renderer/web_channel_ipc_transport.h" -#include "renderer/qt_render_frame_observer.h" -#include "renderer/qt_render_view_observer.h" +#include "renderer/render_frame_observer_qt.h" +#include "renderer/render_view_observer_qt.h" #include "renderer/user_script_controller.h" #include "grit/renderer_resources.h" @@ -77,7 +78,9 @@ void ContentRendererClientQt::RenderThreadStarted() content::RenderThread *renderThread = content::RenderThread::Get(); renderThread->RegisterExtension(WebChannelIPCTransport::getV8Extension()); m_visitedLinkSlave.reset(new visitedlink::VisitedLinkSlave); + m_webCacheObserver.reset(new web_cache::WebCacheRenderProcessObserver()); renderThread->AddObserver(m_visitedLinkSlave.data()); + renderThread->AddObserver(m_webCacheObserver.data()); renderThread->AddObserver(UserScriptController::instance()); // mark qrc as a secure scheme (avoids deprecation warnings) @@ -87,14 +90,14 @@ void ContentRendererClientQt::RenderThreadStarted() void ContentRendererClientQt::RenderViewCreated(content::RenderView* render_view) { // RenderViewObservers destroy themselves with their RenderView. - new QtRenderViewObserver(render_view); + new RenderViewObserverQt(render_view, m_webCacheObserver.data()); new WebChannelIPCTransport(render_view); UserScriptController::instance()->renderViewCreated(render_view); } void ContentRendererClientQt::RenderFrameCreated(content::RenderFrame* render_frame) { - new QtWebEngineCore::QtRenderFrameObserver(render_frame); + new QtWebEngineCore::RenderFrameObserverQt(render_frame); } bool ContentRendererClientQt::HasErrorPage(int httpStatusCode, std::string *errorDomain) diff --git a/src/core/renderer/content_renderer_client_qt.h b/src/core/renderer/content_renderer_client_qt.h index fab88441f..eb55156ad 100644 --- a/src/core/renderer/content_renderer_client_qt.h +++ b/src/core/renderer/content_renderer_client_qt.h @@ -45,6 +45,10 @@ namespace visitedlink { class VisitedLinkSlave; } +namespace web_cache { +class WebCacheRenderProcessObserver; +} + namespace QtWebEngineCore { class ContentRendererClientQt : public content::ContentRendererClient { @@ -64,6 +68,7 @@ public: private: QScopedPointer<visitedlink::VisitedLinkSlave> m_visitedLinkSlave; + QScopedPointer<web_cache::WebCacheRenderProcessObserver> m_webCacheObserver; }; } // namespace diff --git a/src/core/renderer/qt_render_frame_observer.cpp b/src/core/renderer/render_frame_observer_qt.cpp index 5f06d1e4e..8130cc53a 100644 --- a/src/core/renderer/qt_render_frame_observer.cpp +++ b/src/core/renderer/render_frame_observer_qt.cpp @@ -34,7 +34,7 @@ ** ****************************************************************************/ -#include "qt_render_frame_observer.h" +#include "render_frame_observer_qt.h" #include "content/public/renderer/renderer_ppapi_host.h" #include "ppapi/host/ppapi_host.h" @@ -44,17 +44,17 @@ namespace QtWebEngineCore { -QtRenderFrameObserver::QtRenderFrameObserver(content::RenderFrame* render_frame) +RenderFrameObserverQt::RenderFrameObserverQt(content::RenderFrame* render_frame) : RenderFrameObserver(render_frame) { } -QtRenderFrameObserver::~QtRenderFrameObserver() +RenderFrameObserverQt::~RenderFrameObserverQt() { } #if defined(ENABLE_PLUGINS) -void QtRenderFrameObserver::DidCreatePepperPlugin(content::RendererPpapiHost* host) +void RenderFrameObserverQt::DidCreatePepperPlugin(content::RendererPpapiHost* host) { host->GetPpapiHost()->AddHostFactoryFilter( scoped_ptr<ppapi::host::HostFactory>( diff --git a/src/core/renderer/qt_render_frame_observer.h b/src/core/renderer/render_frame_observer_qt.h index 42f2b7464..4835e442e 100644 --- a/src/core/renderer/qt_render_frame_observer.h +++ b/src/core/renderer/render_frame_observer_qt.h @@ -34,8 +34,8 @@ ** ****************************************************************************/ -#ifndef QT_RENDER_FRAME_OBSERVER_H -#define QT_RENDER_FRAME_OBSERVER_H +#ifndef RENDER_FRAME_OBSERVER_QT_H +#define RENDER_FRAME_OBSERVER_QT_H #include "base/basictypes.h" #include "base/compiler_specific.h" @@ -48,19 +48,19 @@ class RenderFrame; namespace QtWebEngineCore { -class QtRenderFrameObserver : public content::RenderFrameObserver { +class RenderFrameObserverQt : public content::RenderFrameObserver { public: - explicit QtRenderFrameObserver(content::RenderFrame* render_frame); - ~QtRenderFrameObserver(); + explicit RenderFrameObserverQt(content::RenderFrame* render_frame); + ~RenderFrameObserverQt(); #if defined(ENABLE_PLUGINS) void DidCreatePepperPlugin(content::RendererPpapiHost* host) override; #endif private: - DISALLOW_COPY_AND_ASSIGN(QtRenderFrameObserver); + DISALLOW_COPY_AND_ASSIGN(RenderFrameObserverQt); }; } // namespace QtWebEngineCore -#endif // QT_RENDER_FRAME_OBSERVER_H +#endif // RENDER_FRAME_OBSERVER_QT_H diff --git a/src/core/renderer/qt_render_view_observer.cpp b/src/core/renderer/render_view_observer_qt.cpp index ba91e54ae..47efd07e4 100644 --- a/src/core/renderer/qt_render_view_observer.cpp +++ b/src/core/renderer/render_view_observer_qt.cpp @@ -34,55 +34,65 @@ ** ****************************************************************************/ -#include "renderer/qt_render_view_observer.h" +#include "renderer/render_view_observer_qt.h" #include "common/qt_messages.h" +#include "components/web_cache/renderer/web_cache_render_process_observer.h" #include "content/public/renderer/render_view.h" #include "third_party/WebKit/public/web/WebDocument.h" #include "third_party/WebKit/public/web/WebElement.h" #include "third_party/WebKit/public/web/WebFrame.h" #include "third_party/WebKit/public/web/WebView.h" -QtRenderViewObserver::QtRenderViewObserver(content::RenderView* render_view) +RenderViewObserverQt::RenderViewObserverQt( + content::RenderView* render_view, + web_cache::WebCacheRenderProcessObserver* web_cache_render_process_observer) : content::RenderViewObserver(render_view) + , m_web_cache_render_process_observer(web_cache_render_process_observer) { } -void QtRenderViewObserver::onFetchDocumentMarkup(quint64 requestId) +void RenderViewObserverQt::onFetchDocumentMarkup(quint64 requestId) { - Send(new QtRenderViewObserverHost_DidFetchDocumentMarkup( + Send(new RenderViewObserverHostQt_DidFetchDocumentMarkup( routing_id(), requestId, render_view()->GetWebView()->mainFrame()->contentAsMarkup())); } -void QtRenderViewObserver::onFetchDocumentInnerText(quint64 requestId) +void RenderViewObserverQt::onFetchDocumentInnerText(quint64 requestId) { - Send(new QtRenderViewObserverHost_DidFetchDocumentInnerText( + Send(new RenderViewObserverHostQt_DidFetchDocumentInnerText( routing_id(), requestId, render_view()->GetWebView()->mainFrame()->contentAsText(std::numeric_limits<std::size_t>::max()))); } -void QtRenderViewObserver::onSetBackgroundColor(quint32 color) +void RenderViewObserverQt::onSetBackgroundColor(quint32 color) { render_view()->GetWebView()->setBaseBackgroundColor(color); } -void QtRenderViewObserver::OnFirstVisuallyNonEmptyLayout() +void RenderViewObserverQt::OnFirstVisuallyNonEmptyLayout() { - Send(new QtRenderViewObserverHost_DidFirstVisuallyNonEmptyLayout(routing_id())); + Send(new RenderViewObserverHostQt_DidFirstVisuallyNonEmptyLayout(routing_id())); } -bool QtRenderViewObserver::OnMessageReceived(const IPC::Message& message) +bool RenderViewObserverQt::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_HANDLER(QtRenderViewObserver_SetBackgroundColor, onSetBackgroundColor) + IPC_BEGIN_MESSAGE_MAP(RenderViewObserverQt, message) + IPC_MESSAGE_HANDLER(RenderViewObserverQt_FetchDocumentMarkup, onFetchDocumentMarkup) + IPC_MESSAGE_HANDLER(RenderViewObserverQt_FetchDocumentInnerText, onFetchDocumentInnerText) + IPC_MESSAGE_HANDLER(RenderViewObserverQt_SetBackgroundColor, onSetBackgroundColor) IPC_MESSAGE_UNHANDLED(handled = false) IPC_END_MESSAGE_MAP() return handled; } + +void RenderViewObserverQt::Navigate(const GURL &) +{ + if (m_web_cache_render_process_observer) + m_web_cache_render_process_observer->ExecutePendingClearCache(); +} diff --git a/src/core/renderer/qt_render_view_observer.h b/src/core/renderer/render_view_observer_qt.h index 3f7829a92..166dcc9ea 100644 --- a/src/core/renderer/qt_render_view_observer.h +++ b/src/core/renderer/render_view_observer_qt.h @@ -33,16 +33,21 @@ ** $QT_END_LICENSE$ ** ****************************************************************************/ -#ifndef QT_RENDER_VIEW_OBSERVER_H -#define QT_RENDER_VIEW_OBSERVER_H +#ifndef RENDER_VIEW_OBSERVER_QT_H +#define RENDER_VIEW_OBSERVER_QT_H #include "content/public/renderer/render_view_observer.h" #include <QtGlobal> -class QtRenderViewObserver : public content::RenderViewObserver { +namespace web_cache { +class WebCacheRenderProcessObserver; +} + +class RenderViewObserverQt : public content::RenderViewObserver { public: - QtRenderViewObserver(content::RenderView* render_view); + RenderViewObserverQt(content::RenderView* render_view, + web_cache::WebCacheRenderProcessObserver* web_cache_render_process_observer); private: void onFetchDocumentMarkup(quint64 requestId); @@ -52,8 +57,11 @@ private: void OnFirstVisuallyNonEmptyLayout() Q_DECL_OVERRIDE; virtual bool OnMessageReceived(const IPC::Message& message) Q_DECL_OVERRIDE; + virtual void Navigate(const GURL& url) Q_DECL_OVERRIDE; + + web_cache::WebCacheRenderProcessObserver* m_web_cache_render_process_observer; - DISALLOW_COPY_AND_ASSIGN(QtRenderViewObserver); + DISALLOW_COPY_AND_ASSIGN(RenderViewObserverQt); }; -#endif // QT_RENDER_VIEW_OBSERVER_H +#endif // RENDER_VIEW_OBSERVER_QT_H diff --git a/src/core/resources/devtools_discovery_page.html b/src/core/resources/devtools_discovery_page.html index 7aac74932..d37dbfcf4 100644 --- a/src/core/resources/devtools_discovery_page.html +++ b/src/core/resources/devtools_discovery_page.html @@ -3,44 +3,68 @@ <title>QtWebEngine Remote Debugging</title> <style> body { - background-color: rgb(245, 245, 245); + color: #222; font-family: Helvetica, Arial, sans-serif; + margin: 0; text-shadow: rgba(255, 255, 255, 0.496094) 0px 1px 0px; } #caption { - color: black; font-size: 16px; - margin-top: 30px; - margin-bottom: 0px; - margin-left: 70px; + margin-top: 15px; + margin-bottom: 10px; + margin-left: 20px; height: 20px; text-align: left; } #items { - margin-left: 60px; - margin-right: 60px; - -webkit-box-orient: horizontal; - -webkit-box-lines: multiple; + display: flex; + flex-direction: column; + margin: 10px; +} + +.item { + color: #222; + display: flex; + flex-direction: row; + text-decoration: none; + padding: 10px; + -webkit-transition-property: background-color, border-color; + -webkit-transition: background-color 0.15s, 0.15s; + -webkit-transition-delay: 0ms, 0ms; } -.frontend_ref { +.item:not(.connected):hover { + background-color: rgba(242, 242, 242, 1); + border-color: rgba(110, 116, 128, 1); color: black; - text-decoration: initial; } -.text { - background: no-repeat 0; - background-size: 16px; - font-size: 12px; - margin: 4px 0px 0px 4px; +.item.connected:hover { + border-color: rgba(184, 184, 184, 1); + color: rgb(110, 116, 128); +} + +.description { + display: flex; + flex-direction: column; +} + +.title, .subtitle { + font-size: 13px; + margin: 4px 0px 0px 6px; overflow: hidden; - padding: 2px 0px 0px 20px; - text-align: left; - text-overflow: ellipsis; - white-space: nowrap; + padding-left: 20px; } + +.title { + background-repeat: no-repeat; + background-size: 16px; + font-size: 15px; +} + + </style> <script> @@ -74,35 +98,43 @@ function overrideFrontendUrl(item) { } function appendItem(item_object) { - var frontend_ref; + var item_element; if (item_object.devtoolsFrontendUrl) { - frontend_ref = document.createElement('a'); - frontend_ref.href = overrideFrontendUrl(item_object); - frontend_ref.title = item_object.title; + item_element = document.createElement('a'); + item_element.href = overrideFrontendUrl(item_object); + item_element.title = item_object.title; } else { - frontend_ref = document.createElement('div'); - frontend_ref.title = 'The tab already has an active debug session'; + item_element = document.createElement('div'); + item_element.className = 'connected'; + item_element.title = 'The tab already has an active debug session'; } - frontend_ref.className = 'frontend_ref'; + item_element.classList.add('item'); - var text = document.createElement('div'); - text.className = 'text'; - text.innerText = item_object.description || item_object.title; - text.style.cssText = 'background-image:url(' + - item_object.faviconUrl + ')'; - frontend_ref.appendChild(text); + var description = document.createElement('div'); + description.className = 'description'; - var item = document.createElement('p'); - item.appendChild(frontend_ref); + var title = document.createElement('div'); + title.className = 'title'; + title.textContent = item_object.description || item_object.title; + title.style.cssText = 'background-image:url(' + + item_object.faviconUrl + ')'; + description.appendChild(title); - document.getElementById('items').appendChild(item); + var subtitle = document.createElement('div'); + subtitle.className = 'subtitle'; + subtitle.textContent = (item_object.url || '').substring(0, 300); + description.appendChild(subtitle); + + item_element.appendChild(description); + + document.getElementById('items').appendChild(item_element); } </script> </head> <body onload='onLoad()'> <div id='caption'>Inspectable pages</div> + <hr> <div id='items'> </div> - <hr> </body> </html> diff --git a/src/core/stream_video_node.cpp b/src/core/stream_video_node.cpp index a5a6041f3..fdae5fee2 100644 --- a/src/core/stream_video_node.cpp +++ b/src/core/stream_video_node.cpp @@ -38,9 +38,12 @@ #include <QtQuick/qsgtexture.h> +namespace QtWebEngineCore { + class StreamVideoMaterialShader : public QSGMaterialShader { public: + StreamVideoMaterialShader(TextureTarget target) : m_target(target) { } virtual void updateState(const RenderState &state, QSGMaterial *newMaterial, QSGMaterial *oldMaterial); virtual char const *const *attributeNames() const Q_DECL_OVERRIDE { @@ -55,7 +58,7 @@ public: protected: virtual const char *vertexShader() const Q_DECL_OVERRIDE { // Keep in sync with cc::VertexShaderVideoTransform - const char *shader = + static const char *shader = "attribute highp vec4 a_position;\n" "attribute mediump vec2 a_texCoord;\n" "uniform highp mat4 matrix;\n" @@ -70,7 +73,7 @@ protected: virtual const char *fragmentShader() const Q_DECL_OVERRIDE { // Keep in sync with cc::FragmentShaderRGBATexAlpha - static const char *shader = + static const char *shaderExternal = "#extension GL_OES_EGL_image_external : require\n" "varying mediump vec2 v_texCoord;\n" "uniform samplerExternalOES s_texture;\n" @@ -79,7 +82,19 @@ protected: " lowp vec4 texColor = texture2D(s_texture, v_texCoord);\n" " gl_FragColor = texColor * alpha;\n" "}"; - return shader; + static const char *shader2DRect = + "#extension GL_ARB_texture_rectangle : require\n" + "varying mediump vec2 v_texCoord;\n" + "uniform sampler2DRect s_texture;\n" + "uniform lowp float alpha;\n" + "void main() {\n" + " lowp vec4 texColor = texture2DRect(s_texture, v_texCoord);\n" + " gl_FragColor = texColor * alpha;\n" + "}"; + if (m_target == ExternalTarget) + return shaderExternal; + else + return shader2DRect; } virtual void initialize() { @@ -93,6 +108,7 @@ protected: int m_id_texMatrix; int m_id_sTexture; int m_id_opacity; + TextureTarget m_target; }; void StreamVideoMaterialShader::updateState(const RenderState &state, QSGMaterial *newMaterial, QSGMaterial *oldMaterial) @@ -113,31 +129,38 @@ void StreamVideoMaterialShader::updateState(const RenderState &state, QSGMateria program()->setUniformValue(m_id_texMatrix, mat->m_texMatrix); } -StreamVideoMaterial::StreamVideoMaterial(QSGTexture *texture) +StreamVideoMaterial::StreamVideoMaterial(QSGTexture *texture, TextureTarget target) : m_texture(texture) + , m_target(target) { } QSGMaterialShader *StreamVideoMaterial::createShader() const { - return new StreamVideoMaterialShader; + return new StreamVideoMaterialShader(m_target); } -StreamVideoNode::StreamVideoNode(QSGTexture *texture) +StreamVideoNode::StreamVideoNode(QSGTexture *texture, bool flip, TextureTarget target) : m_geometry(QSGGeometry::defaultAttributes_TexturedPoint2D(), 4) + , m_flip(flip) { setGeometry(&m_geometry); setFlag(QSGNode::OwnsMaterial); - m_material = new StreamVideoMaterial(texture); + m_material = new StreamVideoMaterial(texture, target); setMaterial(m_material); } void StreamVideoNode::setRect(const QRectF &rect) { - QSGGeometry::updateTexturedRectGeometry(geometry(), rect, QRectF(0, 0, 1, 1)); + if (m_flip) + QSGGeometry::updateTexturedRectGeometry(geometry(), rect, QRectF(0, 1, 1, -1)); + else + QSGGeometry::updateTexturedRectGeometry(geometry(), rect, QRectF(0, 0, 1, 1)); } void StreamVideoNode::setTextureMatrix(const QMatrix4x4 &matrix) { m_material->m_texMatrix = matrix; } + +} // namespace diff --git a/src/core/stream_video_node.h b/src/core/stream_video_node.h index f808bb609..92c640811 100644 --- a/src/core/stream_video_node.h +++ b/src/core/stream_video_node.h @@ -40,19 +40,22 @@ #include <QtQuick/qsgmaterial.h> #include <QtQuick/qsgnode.h> -QT_BEGIN_NAMESPACE -class QSGTexture; -QT_END_NAMESPACE +QT_FORWARD_DECLARE_CLASS(QSGTexture) + +namespace QtWebEngineCore { // These classes duplicate, QtQuick style, the logic of GLRenderer::DrawStreamVideoQuad. // Their behavior should stay as close as possible to GLRenderer. +enum TextureTarget { ExternalTarget, RectangleTarget }; + class StreamVideoMaterial : public QSGMaterial { public: - StreamVideoMaterial(QSGTexture *texture); + StreamVideoMaterial(QSGTexture *texture, TextureTarget target); - virtual QSGMaterialType *type() const Q_DECL_OVERRIDE{ + virtual QSGMaterialType *type() const Q_DECL_OVERRIDE + { static QSGMaterialType theType; return &theType; } @@ -61,18 +64,22 @@ public: QSGTexture *m_texture; QMatrix4x4 m_texMatrix; + TextureTarget m_target; }; class StreamVideoNode : public QSGGeometryNode { public: - StreamVideoNode(QSGTexture *texture); + StreamVideoNode(QSGTexture *texture, bool flip, TextureTarget target); void setRect(const QRectF &rect); void setTextureMatrix(const QMatrix4x4 &matrix); private: QSGGeometry m_geometry; + bool m_flip; StreamVideoMaterial *m_material; }; +} // namespace + #endif // STREAM_VIDEO_NODE_H diff --git a/src/core/web_contents_adapter.cpp b/src/core/web_contents_adapter.cpp index 8d3345d1c..84c4e50f3 100644 --- a/src/core/web_contents_adapter.cpp +++ b/src/core/web_contents_adapter.cpp @@ -45,8 +45,8 @@ #include "browser_context_adapter.h" #include "browser_context_qt.h" #include "media_capture_devices_dispatcher.h" -#include "qt_render_view_observer_host.h" #include "qwebenginecallback_p.h" +#include "render_view_observer_host_qt.h" #include "type_conversion.h" #include "web_channel_ipc_transport_host.h" #include "web_contents_adapter_client.h" @@ -385,7 +385,7 @@ void WebContentsAdapter::initialize(WebContentsAdapterClient *adapterClient) // Create and attach observers to the WebContents. d->webContentsDelegate.reset(new WebContentsDelegateQt(d->webContents.get(), adapterClient)); - d->renderViewObserverHost.reset(new QtRenderViewObserverHost(d->webContents.get(), adapterClient)); + d->renderViewObserverHost.reset(new RenderViewObserverHostQt(d->webContents.get(), adapterClient)); // Let the WebContent's view know about the WebContentsAdapterClient. WebContentsViewQt* contentsView = static_cast<WebContentsViewQt*>(static_cast<content::WebContentsImpl*>(d->webContents.get())->GetView()); diff --git a/src/core/web_contents_adapter_p.h b/src/core/web_contents_adapter_p.h index 9b4128749..093b9059d 100644 --- a/src/core/web_contents_adapter_p.h +++ b/src/core/web_contents_adapter_p.h @@ -60,7 +60,7 @@ QT_FORWARD_DECLARE_CLASS(QWebChannel) namespace QtWebEngineCore { class BrowserContextAdapter; -class QtRenderViewObserverHost; +class RenderViewObserverHostQt; class UserScriptControllerHost; class WebChannelIPCTransportHost; class WebContentsAdapterClient; @@ -75,7 +75,7 @@ public: QExplicitlySharedDataPointer<BrowserContextAdapter> browserContextAdapter; scoped_ptr<content::WebContents> webContents; scoped_ptr<WebContentsDelegateQt> webContentsDelegate; - scoped_ptr<QtRenderViewObserverHost> renderViewObserverHost; + scoped_ptr<RenderViewObserverHostQt> renderViewObserverHost; scoped_ptr<WebChannelIPCTransportHost> webChannelTransport; QWebChannel *webChannel; WebContentsAdapterClient *adapterClient; diff --git a/src/core/web_contents_delegate_qt.cpp b/src/core/web_contents_delegate_qt.cpp index 1f789161a..1897664e3 100644 --- a/src/core/web_contents_delegate_qt.cpp +++ b/src/core/web_contents_delegate_qt.cpp @@ -51,12 +51,14 @@ #include "web_engine_settings.h" #include "web_engine_visited_links_manager.h" +#include "components/web_cache/browser/web_cache_manager.h" #include "content/browser/renderer_host/render_widget_host_impl.h" #include "content/public/browser/favicon_status.h" #include "content/public/browser/invalidate_type.h" #include "content/public/browser/navigation_entry.h" #include "content/public/browser/render_view_host.h" #include "content/public/browser/render_frame_host.h" +#include "content/public/browser/render_process_host.h" #include "content/public/browser/web_contents.h" #include "content/public/common/favicon_url.h" #include "content/public/common/file_chooser_params.h" @@ -315,6 +317,11 @@ void WebContentsDelegateQt::DidNavigateAnyFrame(content::RenderFrameHost* render m_viewClient->browserContextAdapter()->visitedLinksManager()->addUrl(params.url); } +void WebContentsDelegateQt::WasShown() +{ + web_cache::WebCacheManager::GetInstance()->ObserveActivity(web_contents()->GetRenderProcessHost()->GetID()); +} + void WebContentsDelegateQt::RequestToLockMouse(content::WebContents *web_contents, bool user_gesture, bool last_unlocked_by_target) { Q_UNUSED(user_gesture); diff --git a/src/core/web_contents_delegate_qt.h b/src/core/web_contents_delegate_qt.h index abdf75fe5..d3075cfbf 100644 --- a/src/core/web_contents_delegate_qt.h +++ b/src/core/web_contents_delegate_qt.h @@ -44,6 +44,7 @@ #include "base/callback.h" #include "javascript_dialog_manager_qt.h" +#include <QtCore/qvector.h> #include <QtCore/qcompilerdetection.h> QT_FORWARD_DECLARE_CLASS(CertificateErrorController) @@ -104,6 +105,7 @@ public: virtual void DidFinishLoad(content::RenderFrameHost *render_frame_host, const GURL &validated_url) Q_DECL_OVERRIDE; virtual void DidUpdateFaviconURL(const std::vector<content::FaviconURL> &candidates) Q_DECL_OVERRIDE; virtual void DidNavigateAnyFrame(content::RenderFrameHost *render_frame_host, const content::LoadCommittedDetails &details, const content::FrameNavigateParams ¶ms) Q_DECL_OVERRIDE; + virtual void WasShown() Q_DECL_OVERRIDE; void overrideWebPreferences(content::WebContents *, content::WebPreferences*); void allowCertificateError(const QSharedPointer<CertificateErrorController> &) ; @@ -116,7 +118,7 @@ private: WebContentsAdapterClient *m_viewClient; QString m_lastSearchedString; int m_lastReceivedFindReply; - QList<int64> m_loadingErrorFrameList; + QVector<int64> m_loadingErrorFrameList; }; } // namespace QtWebEngineCore diff --git a/src/core/web_engine_context.cpp b/src/core/web_engine_context.cpp index 5be35b348..4d1cbf3d4 100644 --- a/src/core/web_engine_context.cpp +++ b/src/core/web_engine_context.cpp @@ -200,7 +200,7 @@ WebEngineContext::WebEngineContext() , m_browserRunner(content::BrowserMainRunner::Create()) , m_globalQObject(new QObject()) { - QList<QByteArray> args; + QVector<QByteArray> args; Q_FOREACH (const QString& arg, QCoreApplication::arguments()) args << arg.toUtf8(); diff --git a/src/core/web_engine_settings.cpp b/src/core/web_engine_settings.cpp index c8d1cc27f..88d8a0c5c 100644 --- a/src/core/web_engine_settings.cpp +++ b/src/core/web_engine_settings.cpp @@ -46,6 +46,10 @@ namespace QtWebEngineCore { +QHash<WebEngineSettings::Attribute, bool> WebEngineSettings::m_defaultAttributes; +QHash<WebEngineSettings::FontFamily, QString> WebEngineSettings::m_defaultFontFamilies; +QHash<WebEngineSettings::FontSize, int> WebEngineSettings::m_defaultFontSizes; + static const int batchTimerTimeout = 0; class BatchTimer : public QTimer { @@ -132,9 +136,12 @@ bool WebEngineSettings::testAttribute(WebEngineSettings::Attribute attr) const void WebEngineSettings::resetAttribute(WebEngineSettings::Attribute attr) { - if (!parentSettings) // FIXME: Set initial defaults. - return; - m_attributes.remove(attr); + if (!parentSettings) { + Q_ASSERT(m_defaultAttributes.contains(attr)); + m_attributes.insert(attr, m_defaultAttributes.value(attr)); + } else { + m_attributes.remove(attr); + } scheduleApplyRecursively(); } @@ -155,9 +162,12 @@ QString WebEngineSettings::fontFamily(WebEngineSettings::FontFamily which) void WebEngineSettings::resetFontFamily(WebEngineSettings::FontFamily which) { - if (!parentSettings) // FIXME: Set initial defaults. - return; - m_fontFamilies.remove(which); + if (!parentSettings) { + Q_ASSERT(m_defaultFontFamilies.contains(which)); + m_fontFamilies.insert(which, m_defaultFontFamilies.value(which)); + } else { + m_fontFamilies.remove(which); + } scheduleApplyRecursively(); } @@ -178,9 +188,12 @@ int WebEngineSettings::fontSize(WebEngineSettings::FontSize type) const void WebEngineSettings::resetFontSize(WebEngineSettings::FontSize type) { - if (!parentSettings) // FIXME: Set initial defaults. - return; - m_fontSizes.remove(type); + if (!parentSettings) { + Q_ASSERT(m_defaultFontSizes.contains(type)); + m_fontSizes.insert(type, m_defaultFontSizes.value(type)); + } else { + m_fontSizes.remove(type); + } scheduleApplyRecursively(); } @@ -199,46 +212,55 @@ QString WebEngineSettings::defaultTextEncoding() const void WebEngineSettings::initDefaults(bool offTheRecord) { - // Initialize the default settings. - m_attributes.insert(AutoLoadImages, true); - m_attributes.insert(JavascriptEnabled, true); - m_attributes.insert(JavascriptCanOpenWindows, true); - m_attributes.insert(JavascriptCanAccessClipboard, false); - m_attributes.insert(LinksIncludedInFocusChain, true); - m_attributes.insert(LocalStorageEnabled, !offTheRecord); - m_attributes.insert(LocalContentCanAccessRemoteUrls, false); - m_attributes.insert(XSSAuditingEnabled, false); - m_attributes.insert(SpatialNavigationEnabled, false); - m_attributes.insert(LocalContentCanAccessFileUrls, true); - m_attributes.insert(HyperlinkAuditingEnabled, false); - m_attributes.insert(ScrollAnimatorEnabled, false); - m_attributes.insert(ErrorPageEnabled, true); - m_attributes.insert(PluginsEnabled, false); - m_attributes.insert(FullScreenSupportEnabled, false); - m_attributes.insert(ScreenCaptureEnabled, false); - - // Default fonts - QFont defaultFont; - defaultFont.setStyleHint(QFont::Serif); - m_fontFamilies.insert(StandardFont, defaultFont.defaultFamily()); - m_fontFamilies.insert(SerifFont, defaultFont.defaultFamily()); - - defaultFont.setStyleHint(QFont::Fantasy); - m_fontFamilies.insert(FantasyFont, defaultFont.defaultFamily()); - - defaultFont.setStyleHint(QFont::Cursive); - m_fontFamilies.insert(CursiveFont, defaultFont.defaultFamily()); - - defaultFont.setStyleHint(QFont::SansSerif); - m_fontFamilies.insert(SansSerifFont, defaultFont.defaultFamily()); - - defaultFont.setStyleHint(QFont::Monospace); - m_fontFamilies.insert(FixedFont, defaultFont.defaultFamily()); - - m_fontSizes.insert(MinimumFontSize, 0); - m_fontSizes.insert(MinimumLogicalFontSize, 6); - m_fontSizes.insert(DefaultFixedFontSize, 13); - m_fontSizes.insert(DefaultFontSize, 16); + if (m_defaultAttributes.isEmpty()) { + // Initialize the default settings. + m_defaultAttributes.insert(AutoLoadImages, true); + m_defaultAttributes.insert(JavascriptEnabled, true); + m_defaultAttributes.insert(JavascriptCanOpenWindows, true); + m_defaultAttributes.insert(JavascriptCanAccessClipboard, false); + m_defaultAttributes.insert(LinksIncludedInFocusChain, true); + m_defaultAttributes.insert(LocalStorageEnabled, !offTheRecord); + m_defaultAttributes.insert(LocalContentCanAccessRemoteUrls, false); + m_defaultAttributes.insert(XSSAuditingEnabled, false); + m_defaultAttributes.insert(SpatialNavigationEnabled, false); + m_defaultAttributes.insert(LocalContentCanAccessFileUrls, true); + m_defaultAttributes.insert(HyperlinkAuditingEnabled, false); + m_defaultAttributes.insert(ScrollAnimatorEnabled, false); + m_defaultAttributes.insert(ErrorPageEnabled, true); + m_defaultAttributes.insert(PluginsEnabled, false); + m_defaultAttributes.insert(FullScreenSupportEnabled, false); + m_defaultAttributes.insert(ScreenCaptureEnabled, false); + } + m_attributes = m_defaultAttributes; + + if (m_defaultFontFamilies.isEmpty()) { + // Default fonts + QFont defaultFont; + defaultFont.setStyleHint(QFont::Serif); + m_defaultFontFamilies.insert(StandardFont, defaultFont.defaultFamily()); + m_defaultFontFamilies.insert(SerifFont, defaultFont.defaultFamily()); + + defaultFont.setStyleHint(QFont::Fantasy); + m_defaultFontFamilies.insert(FantasyFont, defaultFont.defaultFamily()); + + defaultFont.setStyleHint(QFont::Cursive); + m_defaultFontFamilies.insert(CursiveFont, defaultFont.defaultFamily()); + + defaultFont.setStyleHint(QFont::SansSerif); + m_defaultFontFamilies.insert(SansSerifFont, defaultFont.defaultFamily()); + + defaultFont.setStyleHint(QFont::Monospace); + m_defaultFontFamilies.insert(FixedFont, defaultFont.defaultFamily()); + } + m_fontFamilies = m_defaultFontFamilies; + + if (m_defaultFontSizes.isEmpty()) { + m_defaultFontSizes.insert(MinimumFontSize, 0); + m_defaultFontSizes.insert(MinimumLogicalFontSize, 6); + m_defaultFontSizes.insert(DefaultFixedFontSize, 13); + m_defaultFontSizes.insert(DefaultFontSize, 16); + } + m_fontSizes = m_defaultFontSizes; m_defaultEncoding = QStringLiteral("ISO-8859-1"); } diff --git a/src/core/web_engine_settings.h b/src/core/web_engine_settings.h index d850bd1ef..4104ec67c 100644 --- a/src/core/web_engine_settings.h +++ b/src/core/web_engine_settings.h @@ -137,6 +137,10 @@ private: WebEngineSettings *parentSettings; QSet<WebEngineSettings *> childSettings; + static QHash<Attribute, bool> m_defaultAttributes; + static QHash<FontFamily, QString> m_defaultFontFamilies; + static QHash<FontSize, int> m_defaultFontSizes; + friend class BatchTimer; friend class WebContentsAdapter; }; diff --git a/src/core/yuv_video_node.cpp b/src/core/yuv_video_node.cpp index 815ea7d51..7deeb5802 100644 --- a/src/core/yuv_video_node.cpp +++ b/src/core/yuv_video_node.cpp @@ -40,6 +40,8 @@ #include <QtGui/qopenglfunctions.h> #include <QtQuick/qsgtexture.h> +namespace QtWebEngineCore { + class YUVVideoMaterialShader : public QSGMaterialShader { public: @@ -369,3 +371,5 @@ void YUVVideoNode::setRect(const QRectF &rect) { QSGGeometry::updateTexturedRectGeometry(geometry(), rect, QRectF(0, 0, 1, 1)); } + +} // namespace diff --git a/src/core/yuv_video_node.h b/src/core/yuv_video_node.h index 457c2c7fe..5b13879d3 100644 --- a/src/core/yuv_video_node.h +++ b/src/core/yuv_video_node.h @@ -40,9 +40,9 @@ #include <QtQuick/qsgmaterial.h> #include <QtQuick/qsgnode.h> -QT_BEGIN_NAMESPACE -class QSGTexture; -QT_END_NAMESPACE +QT_FORWARD_DECLARE_CLASS(QSGTexture) + +namespace QtWebEngineCore { // These classes duplicate, QtQuick style, the logic of GLRenderer::DrawYUVVideoQuad. // Their behavior should stay as close as possible to GLRenderer. @@ -59,7 +59,8 @@ public: const QRectF &yaTexCoordRect, const QRectF &uvTexCoordRect, const QSizeF &yaTexSize, const QSizeF &uvTexSize, ColorSpace colorspace); - virtual QSGMaterialType *type() const Q_DECL_OVERRIDE { + virtual QSGMaterialType *type() const Q_DECL_OVERRIDE + { static QSGMaterialType theType; return &theType; } @@ -85,7 +86,8 @@ public: const QRectF &yaTexCoordRect, const QRectF &uvTexCoordRect, const QSizeF &yaTexSize, const QSizeF &uvTexSize, ColorSpace colorspace); - virtual QSGMaterialType *type() const Q_DECL_OVERRIDE{ + virtual QSGMaterialType *type() const Q_DECL_OVERRIDE + { static QSGMaterialType theType; return &theType; } @@ -109,4 +111,6 @@ private: YUVVideoMaterial *m_material; }; +} // namespace + #endif // YUV_VIDEO_NODE_H |