diff options
author | Simon Hausmann <simon.hausmann@digia.com> | 2012-11-26 11:37:00 +0100 |
---|---|---|
committer | Simon Hausmann <simon.hausmann@digia.com> | 2012-11-26 11:36:36 +0100 |
commit | f474b2b60ec57205facd4eec2181ebe69b686772 (patch) | |
tree | 42a132541a82c97039ea8a98b40e5012187ede28 /Source/WebKit2/UIProcess | |
parent | 061d58bc0fa016cfeed744fd3e4663460635d69b (diff) | |
download | qtwebkit-f474b2b60ec57205facd4eec2181ebe69b686772.tar.gz |
Imported WebKit commit 76dac539db7ece7079963adfcfe878d8e2f7d861 (http://svn.webkit.org/repository/webkit/trunk@135696)
New snapshot that fixes build after QMacStyle removal
Change-Id: Idea95c96c73b49158d52861db2a4b8d2c51766b0
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Diffstat (limited to 'Source/WebKit2/UIProcess')
6 files changed, 112 insertions, 93 deletions
diff --git a/Source/WebKit2/UIProcess/API/efl/EwkViewCallbacks.h b/Source/WebKit2/UIProcess/API/efl/EwkViewCallbacks.h index 4140c742b..cf822a2ed 100644 --- a/Source/WebKit2/UIProcess/API/efl/EwkViewCallbacks.h +++ b/Source/WebKit2/UIProcess/API/efl/EwkViewCallbacks.h @@ -96,63 +96,58 @@ enum CallbackType { #endif }; -template<typename T> -inline bool callbackArgumentsExpected() -{ - return true; -} +template <CallbackType> +struct CallBackInfo; -template<> -inline bool callbackArgumentsExpected<void>() -{ - return false; -} +class EvasObjectHolder { +protected: + explicit EvasObjectHolder(Evas_Object* object) + : m_object(object) + { + ASSERT(m_object); + } -template <CallbackType> -struct CallBackInfo { - typedef void* Type; + Evas_Object* m_object; +}; - static inline const char* name() +template <CallbackType callbackType, typename ArgType = typename CallBackInfo<callbackType>::Type> +struct CallBack: public EvasObjectHolder { + explicit CallBack(Evas_Object* view) : EvasObjectHolder(view) { } + + void call(ArgType argument) { - ASSERT_NOT_REACHED(); - return ""; + evas_object_smart_callback_call(m_object, CallBackInfo<callbackType>::name(), static_cast<void*>(argument)); } }; template <CallbackType callbackType> -class CallBack { -public: - typedef typename CallBackInfo<callbackType>::Type ArgType; +struct CallBack <callbackType, void> : public EvasObjectHolder { + explicit CallBack(Evas_Object* view) : EvasObjectHolder(view) { } - explicit CallBack(Evas_Object* view) - : m_view(view) + void call() { - ASSERT(m_view); + evas_object_smart_callback_call(m_object, CallBackInfo<callbackType>::name(), 0); } +}; - void call(ArgType* argument = 0) - { - if (argument && !callbackArgumentsExpected<ArgType>()) { - CRITICAL("should not pass arguments for this callback!"); - ASSERT_NOT_REACHED(); - return; - } +template <CallbackType callbackType> +struct CallBack <callbackType, const char*> : public EvasObjectHolder { + explicit CallBack(Evas_Object* view) : EvasObjectHolder(view) { } - evas_object_smart_callback_call(m_view, CallBackInfo<callbackType>::name(), static_cast<void*>(argument)); + void call(const char* arg) + { + evas_object_smart_callback_call(m_object, CallBackInfo<callbackType>::name(), const_cast<char*>(arg)); } void call(const String& arg) { - call(const_cast<char*>(arg.utf8().data())); + call(arg.utf8().data()); } void call(const WKEinaSharedString& arg) { - call(const_cast<char*>(static_cast<const char*>(arg))); + call(static_cast<const char*>(arg)); } - -private: - Evas_Object* m_view; }; #define DECLARE_EWK_VIEW_CALLBACK(callbackType, string, type) \ @@ -163,45 +158,45 @@ struct CallBackInfo<callbackType> { \ } // Note: type 'void' means that no arguments are expected. -DECLARE_EWK_VIEW_CALLBACK(AuthenticationRequest, "authentication,request", Ewk_Auth_Request); +DECLARE_EWK_VIEW_CALLBACK(AuthenticationRequest, "authentication,request", Ewk_Auth_Request*); DECLARE_EWK_VIEW_CALLBACK(BackForwardListChange, "back,forward,list,changed", void); DECLARE_EWK_VIEW_CALLBACK(CancelVibration, "cancel,vibration", void); -DECLARE_EWK_VIEW_CALLBACK(DownloadJobCancelled, "download,cancelled", Ewk_Download_Job); -DECLARE_EWK_VIEW_CALLBACK(DownloadJobFailed, "download,failed", Ewk_Download_Job_Error); -DECLARE_EWK_VIEW_CALLBACK(DownloadJobFinished, "download,finished", Ewk_Download_Job); -DECLARE_EWK_VIEW_CALLBACK(DownloadJobRequested, "download,request", Ewk_Download_Job); -DECLARE_EWK_VIEW_CALLBACK(FileChooserRequest, "file,chooser,request", Ewk_File_Chooser_Request); -DECLARE_EWK_VIEW_CALLBACK(NewFormSubmissionRequest, "form,submission,request", Ewk_Form_Submission_Request); +DECLARE_EWK_VIEW_CALLBACK(DownloadJobCancelled, "download,cancelled", Ewk_Download_Job*); +DECLARE_EWK_VIEW_CALLBACK(DownloadJobFailed, "download,failed", Ewk_Download_Job_Error*); +DECLARE_EWK_VIEW_CALLBACK(DownloadJobFinished, "download,finished", Ewk_Download_Job*); +DECLARE_EWK_VIEW_CALLBACK(DownloadJobRequested, "download,request", Ewk_Download_Job*); +DECLARE_EWK_VIEW_CALLBACK(FileChooserRequest, "file,chooser,request", Ewk_File_Chooser_Request*); +DECLARE_EWK_VIEW_CALLBACK(NewFormSubmissionRequest, "form,submission,request", Ewk_Form_Submission_Request*); DECLARE_EWK_VIEW_CALLBACK(IconChanged, "icon,changed", void); -DECLARE_EWK_VIEW_CALLBACK(LoadError, "load,error", Ewk_Error); +DECLARE_EWK_VIEW_CALLBACK(LoadError, "load,error", Ewk_Error*); DECLARE_EWK_VIEW_CALLBACK(LoadFinished, "load,finished", void); -DECLARE_EWK_VIEW_CALLBACK(LoadProgress, "load,progress", double); -DECLARE_EWK_VIEW_CALLBACK(ProvisionalLoadFailed, "load,provisional,failed", Ewk_Error); +DECLARE_EWK_VIEW_CALLBACK(LoadProgress, "load,progress", double*); +DECLARE_EWK_VIEW_CALLBACK(ProvisionalLoadFailed, "load,provisional,failed", Ewk_Error*); DECLARE_EWK_VIEW_CALLBACK(ProvisionalLoadRedirect, "load,provisional,redirect", void); DECLARE_EWK_VIEW_CALLBACK(ProvisionalLoadStarted, "load,provisional,started", void); -DECLARE_EWK_VIEW_CALLBACK(MenuBarVisible, "menubar,visible", bool); -DECLARE_EWK_VIEW_CALLBACK(NavigationPolicyDecision, "policy,decision,navigation", Ewk_Navigation_Policy_Decision); -DECLARE_EWK_VIEW_CALLBACK(NewWindowPolicyDecision, "policy,decision,new,window", Ewk_Navigation_Policy_Decision); -DECLARE_EWK_VIEW_CALLBACK(ResourceLoadStarted, "resource,request,new", Ewk_Resource_Request); -DECLARE_EWK_VIEW_CALLBACK(ResourceLoadResponse, "resource,request,response", Ewk_Resource_Load_Response); -DECLARE_EWK_VIEW_CALLBACK(ResourceLoadFailed, "resource,request,failed", Ewk_Resource_Load_Error); -DECLARE_EWK_VIEW_CALLBACK(ResourceLoadFinished, "resource,request,finished", Ewk_Resource); -DECLARE_EWK_VIEW_CALLBACK(ResourceRequestSent, "resource,request,sent", Ewk_Resource_Request); -DECLARE_EWK_VIEW_CALLBACK(StatusBarVisible, "statusbar,visible", bool); -DECLARE_EWK_VIEW_CALLBACK(TextFound, "text,found", unsigned); -DECLARE_EWK_VIEW_CALLBACK(TitleChange, "title,changed", char); -DECLARE_EWK_VIEW_CALLBACK(ToolbarVisible, "toolbar,visible", bool); +DECLARE_EWK_VIEW_CALLBACK(MenuBarVisible, "menubar,visible", bool*); +DECLARE_EWK_VIEW_CALLBACK(NavigationPolicyDecision, "policy,decision,navigation", Ewk_Navigation_Policy_Decision*); +DECLARE_EWK_VIEW_CALLBACK(NewWindowPolicyDecision, "policy,decision,new,window", Ewk_Navigation_Policy_Decision*); +DECLARE_EWK_VIEW_CALLBACK(ResourceLoadStarted, "resource,request,new", Ewk_Resource_Request*); +DECLARE_EWK_VIEW_CALLBACK(ResourceLoadResponse, "resource,request,response", Ewk_Resource_Load_Response*); +DECLARE_EWK_VIEW_CALLBACK(ResourceLoadFailed, "resource,request,failed", Ewk_Resource_Load_Error*); +DECLARE_EWK_VIEW_CALLBACK(ResourceLoadFinished, "resource,request,finished", Ewk_Resource*); +DECLARE_EWK_VIEW_CALLBACK(ResourceRequestSent, "resource,request,sent", Ewk_Resource_Request*); +DECLARE_EWK_VIEW_CALLBACK(StatusBarVisible, "statusbar,visible", bool*); +DECLARE_EWK_VIEW_CALLBACK(TextFound, "text,found", unsigned*); +DECLARE_EWK_VIEW_CALLBACK(TitleChange, "title,changed", const char*); +DECLARE_EWK_VIEW_CALLBACK(ToolbarVisible, "toolbar,visible", bool*); DECLARE_EWK_VIEW_CALLBACK(TooltipTextUnset, "tooltip,text,unset", void); -DECLARE_EWK_VIEW_CALLBACK(TooltipTextSet, "tooltip,text,set", char); -DECLARE_EWK_VIEW_CALLBACK(URLChanged, "url,changed", char); -DECLARE_EWK_VIEW_CALLBACK(Vibrate, "vibrate", uint64_t); -DECLARE_EWK_VIEW_CALLBACK(WebProcessCrashed, "webprocess,crashed", bool); -DECLARE_EWK_VIEW_CALLBACK(WindowResizable, "window,resizable", bool); +DECLARE_EWK_VIEW_CALLBACK(TooltipTextSet, "tooltip,text,set", const char*); +DECLARE_EWK_VIEW_CALLBACK(URLChanged, "url,changed", const char*); +DECLARE_EWK_VIEW_CALLBACK(Vibrate, "vibrate", uint64_t*); +DECLARE_EWK_VIEW_CALLBACK(WebProcessCrashed, "webprocess,crashed", bool*); +DECLARE_EWK_VIEW_CALLBACK(WindowResizable, "window,resizable", bool*); #if ENABLE(WEB_INTENTS) -DECLARE_EWK_VIEW_CALLBACK(IntentRequest, "intent,request,new", Ewk_Intent); +DECLARE_EWK_VIEW_CALLBACK(IntentRequest, "intent,request,new", Ewk_Intent*); #endif #if ENABLE(WEB_INTENTS_TAG) -DECLARE_EWK_VIEW_CALLBACK(IntentServiceRegistration, "intent,service,register", Ewk_Intent_Service); +DECLARE_EWK_VIEW_CALLBACK(IntentServiceRegistration, "intent,service,register", Ewk_Intent_Service*); #endif } diff --git a/Source/WebKit2/UIProcess/API/efl/EwkViewImpl.cpp b/Source/WebKit2/UIProcess/API/efl/EwkViewImpl.cpp index e0c59054d..29161ff23 100644 --- a/Source/WebKit2/UIProcess/API/efl/EwkViewImpl.cpp +++ b/Source/WebKit2/UIProcess/API/efl/EwkViewImpl.cpp @@ -314,7 +314,14 @@ AffineTransform EwkViewImpl::transformToScreen() const #ifdef HAVE_ECORE_X Ecore_Evas* ecoreEvas = ecore_evas_ecore_evas_get(sd->base.evas); - Ecore_X_Window window = ecore_evas_software_x11_window_get(ecoreEvas); // Returns 0 if none. + + Ecore_X_Window window; +#if USE(ACCELERATED_COMPOSITING) + window = ecore_evas_gl_x11_window_get(ecoreEvas); + // Fallback to software mode if necessary. + if (!window) +#endif + window = ecore_evas_software_x11_window_get(ecoreEvas); // Returns 0 if none. int x, y; // x, y are relative to parent (in a reparenting window manager). while (window) { diff --git a/Source/WebKit2/UIProcess/CoordinatedGraphics/LayerTreeRenderer.cpp b/Source/WebKit2/UIProcess/CoordinatedGraphics/LayerTreeRenderer.cpp index 305882edd..0c009ec48 100644 --- a/Source/WebKit2/UIProcess/CoordinatedGraphics/LayerTreeRenderer.cpp +++ b/Source/WebKit2/UIProcess/CoordinatedGraphics/LayerTreeRenderer.cpp @@ -68,8 +68,8 @@ static FloatPoint boundedScrollPosition(const FloatPoint& scrollPosition, const LayerTreeRenderer::LayerTreeRenderer(LayerTreeCoordinatorProxy* layerTreeCoordinatorProxy) : m_layerTreeCoordinatorProxy(layerTreeCoordinatorProxy) - , m_rootLayerID(InvalidWebLayerID) , m_isActive(false) + , m_rootLayerID(InvalidWebLayerID) , m_animationsLocked(false) #if ENABLE(REQUEST_ANIMATION_FRAME) , m_animationFrameRequested(false) @@ -86,9 +86,8 @@ LayerTreeRenderer::~LayerTreeRenderer() PassOwnPtr<GraphicsLayer> LayerTreeRenderer::createLayer(WebLayerID) { - GraphicsLayer* newLayer = new GraphicsLayerTextureMapper(this); - TextureMapperLayer* layer = toTextureMapperLayer(newLayer); - layer->setShouldUpdateBackingStoreFromLayer(false); + GraphicsLayerTextureMapper* newLayer = new GraphicsLayerTextureMapper(this); + newLayer->setHasOwnBackingStore(false); return adoptPtr(newLayer); } @@ -411,7 +410,7 @@ PassRefPtr<CoordinatedBackingStore> LayerTreeRenderer::getBackingStore(GraphicsL RefPtr<CoordinatedBackingStore> backingStore = static_cast<CoordinatedBackingStore*>(layer->backingStore().get()); if (!backingStore) { backingStore = CoordinatedBackingStore::create(); - layer->setBackingStore(backingStore.get()); + layer->setBackingStore(backingStore); } ASSERT(backingStore); return backingStore; @@ -452,6 +451,7 @@ void LayerTreeRenderer::removeTile(WebLayerID layerID, int tileID) RefPtr<CoordinatedBackingStore> backingStore = getBackingStore(layer); backingStore->removeTile(tileID); resetBackingStoreSizeToLayerSize(layer); + m_backingStoresWithPendingBuffers.add(backingStore); removeBackingStoreIfNeeded(layer); } @@ -550,7 +550,6 @@ void LayerTreeRenderer::flushLayerChanges() void LayerTreeRenderer::renderNextFrame() { - ASSERT(isMainThread()); if (m_layerTreeCoordinatorProxy) m_layerTreeCoordinatorProxy->renderNextFrame(); } @@ -593,7 +592,6 @@ void LayerTreeRenderer::syncRemoteContent() void LayerTreeRenderer::purgeGLResources() { - ASSERT(isMainThread()); TextureMapperLayer* layer = toTextureMapperLayer(rootLayer()); if (layer) @@ -613,6 +611,11 @@ void LayerTreeRenderer::purgeGLResources() m_backingStoresWithPendingBuffers.clear(); setActive(false); + dispatchOnMainThread(bind(&LayerTreeRenderer::purgeBackingStores, this)); +} + +void LayerTreeRenderer::purgeBackingStores() +{ if (m_layerTreeCoordinatorProxy) m_layerTreeCoordinatorProxy->purgeBackingStores(); } @@ -659,7 +662,6 @@ void LayerTreeRenderer::appendUpdate(const Function<void()>& function) void LayerTreeRenderer::setActive(bool active) { - ASSERT(isMainThread()); if (m_isActive == active) return; @@ -669,7 +671,7 @@ void LayerTreeRenderer::setActive(bool active) m_renderQueue.clear(); m_isActive = active; if (m_isActive) - renderNextFrame(); + dispatchOnMainThread(bind(&LayerTreeRenderer::renderNextFrame, this)); } void LayerTreeRenderer::setBackgroundColor(const WebCore::Color& color) diff --git a/Source/WebKit2/UIProcess/CoordinatedGraphics/LayerTreeRenderer.h b/Source/WebKit2/UIProcess/CoordinatedGraphics/LayerTreeRenderer.h index 40333cfa1..b081c5e16 100644 --- a/Source/WebKit2/UIProcess/CoordinatedGraphics/LayerTreeRenderer.h +++ b/Source/WebKit2/UIProcess/CoordinatedGraphics/LayerTreeRenderer.h @@ -67,7 +67,6 @@ public: }; explicit LayerTreeRenderer(LayerTreeCoordinatorProxy*); virtual ~LayerTreeRenderer(); - void purgeGLResources(); void paintToCurrentGLContext(const WebCore::TransformationMatrix&, float, const WebCore::FloatRect&, WebCore::TextureMapper::PaintFlags = 0); void paintToGraphicsContext(BackingStore::PlatformGraphicsContext); void setContentsSize(const WebCore::FloatSize&); @@ -81,6 +80,10 @@ public: void detach(); void appendUpdate(const Function<void()>&); + + // The painting thread must lock the main thread to use below two methods, because two methods access members that the main thread manages. See m_layerTreeCoordinatorProxy. + // Currently, QQuickWebPage::updatePaintNode() locks the main thread before calling both methods. + void purgeGLResources(); void setActive(bool); void deleteLayer(WebLayerID); @@ -111,7 +114,6 @@ public: #if ENABLE(REQUEST_ANIMATION_FRAME) void requestAnimationFrame(); - void animationFrameReady(); #endif private: @@ -121,22 +123,27 @@ private: WebCore::GraphicsLayer* rootLayer() { return m_rootLayer.get(); } void syncRemoteContent(); + void adjustPositionForFixedLayers(); // Reimplementations from WebCore::GraphicsLayerClient. virtual void notifyAnimationStarted(const WebCore::GraphicsLayer*, double) { } virtual void notifyFlushRequired(const WebCore::GraphicsLayer*) { } virtual void paintContents(const WebCore::GraphicsLayer*, WebCore::GraphicsContext&, WebCore::GraphicsLayerPaintingPhase, const WebCore::IntRect&) OVERRIDE { } - void updateViewport(); void dispatchOnMainThread(const Function<void()>&); - void adjustPositionForFixedLayers(); + void updateViewport(); +#if ENABLE(REQUEST_ANIMATION_FRAME) + void animationFrameReady(); +#endif + void renderNextFrame(); + void purgeBackingStores(); + void assignImageBackingToLayer(WebCore::GraphicsLayer*, CoordinatedImageBackingID); void removeReleasedImageBackingsIfNeeded(); void ensureRootLayer(); void ensureLayer(WebLayerID); void commitTileOperations(); - void renderNextFrame(); PassRefPtr<CoordinatedBackingStore> getBackingStore(WebCore::GraphicsLayer*); void removeBackingStoreIfNeeded(WebCore::GraphicsLayer*); @@ -163,7 +170,10 @@ private: SurfaceBackingStoreMap m_surfaceBackingStores; #endif + // Below two members are accessed by only the main thread. The painting thread must lock the main thread to access both members. LayerTreeCoordinatorProxy* m_layerTreeCoordinatorProxy; + bool m_isActive; + OwnPtr<WebCore::GraphicsLayer> m_rootLayer; LayerMap m_layers; @@ -171,7 +181,6 @@ private: WebLayerID m_rootLayerID; WebCore::IntPoint m_renderedContentsScrollPosition; WebCore::IntPoint m_pendingRenderedContentsScrollPosition; - bool m_isActive; bool m_animationsLocked; #if ENABLE(REQUEST_ANIMATION_FRAME) bool m_animationFrameRequested; diff --git a/Source/WebKit2/UIProcess/PageViewportController.cpp b/Source/WebKit2/UIProcess/PageViewportController.cpp index 5de791920..7c43a5546 100644 --- a/Source/WebKit2/UIProcess/PageViewportController.cpp +++ b/Source/WebKit2/UIProcess/PageViewportController.cpp @@ -44,6 +44,7 @@ PageViewportController::PageViewportController(WebKit::WebPageProxy* proxy, Page , m_client(client) , m_allowsUserScaling(false) , m_minimumScaleToFit(1) + , m_initiallyFitToViewport(true) , m_hasSuspendedContent(false) , m_hadUserInteraction(false) , m_effectiveScale(1) @@ -109,7 +110,17 @@ void PageViewportController::didCommitLoad() void PageViewportController::didChangeContentsSize(const IntSize& newSize) { m_contentsSize = newSize; - if (updateMinimumScaleToFit()) + + bool minimumScaleUpdated = updateMinimumScaleToFit(); + + if (m_initiallyFitToViewport) { + // Restrict scale factors to m_minimumScaleToFit. + ASSERT(m_minimumScaleToFit > 0); + m_rawAttributes.initialScale = m_minimumScaleToFit; + WebCore::restrictScaleFactorToInitialScaleIfNotUserScalable(m_rawAttributes); + } + + if (minimumScaleUpdated) m_client->didChangeViewportAttributes(); } @@ -149,8 +160,8 @@ void PageViewportController::pageTransitionViewportReady() { if (!m_rawAttributes.layoutSize.isEmpty()) { m_hadUserInteraction = false; - ASSERT(m_rawAttributes.initialScale > 0); - applyScaleAfterRenderingContents(innerBoundedViewportScale(toViewportScale(m_rawAttributes.initialScale))); + float initialScale = m_initiallyFitToViewport ? m_minimumScaleToFit : m_rawAttributes.initialScale; + applyScaleAfterRenderingContents(innerBoundedViewportScale(toViewportScale(initialScale))); } // At this point we should already have received the first viewport arguments and the requested scroll @@ -218,18 +229,12 @@ void PageViewportController::didChangeViewportAttributes(const WebCore::Viewport m_rawAttributes = newAttributes; m_allowsUserScaling = !!m_rawAttributes.userScalable; + m_initiallyFitToViewport = (m_rawAttributes.initialScale < 0); - bool minimumScaleUpdated = updateMinimumScaleToFit(); - - ASSERT(m_minimumScaleToFit > 0); - - // Set the initial scale if it was not specified in the viewport meta tag. - if (m_rawAttributes.initialScale < 0) - m_rawAttributes.initialScale = m_minimumScaleToFit; + if (!m_initiallyFitToViewport) + WebCore::restrictScaleFactorToInitialScaleIfNotUserScalable(m_rawAttributes); - WebCore::restrictScaleFactorToInitialScaleIfNotUserScalable(m_rawAttributes); - - if (minimumScaleUpdated) + if (updateMinimumScaleToFit()) m_client->didChangeViewportAttributes(); } diff --git a/Source/WebKit2/UIProcess/PageViewportController.h b/Source/WebKit2/UIProcess/PageViewportController.h index 3be3d2745..052e89ab0 100644 --- a/Source/WebKit2/UIProcess/PageViewportController.h +++ b/Source/WebKit2/UIProcess/PageViewportController.h @@ -94,6 +94,7 @@ private: bool m_allowsUserScaling; float m_minimumScaleToFit; + bool m_initiallyFitToViewport; bool m_hasSuspendedContent; bool m_hadUserInteraction; |