diff options
Diffstat (limited to 'Source/WebCore')
3 files changed, 41 insertions, 20 deletions
diff --git a/Source/WebCore/loader/icon/IconController.cpp b/Source/WebCore/loader/icon/IconController.cpp index 8f23f6db1..a808352af 100644 --- a/Source/WebCore/loader/icon/IconController.cpp +++ b/Source/WebCore/loader/icon/IconController.cpp @@ -159,6 +159,10 @@ void IconController::startLoader() } if (iconDatabase().supportsAsynchronousMode()) { + // FIXME (<rdar://problem/9168605>) - We should support in-memory-only private browsing icons in asynchronous icon database mode. + if (iconDatabase().supportsAsynchronousMode() && m_frame->page()->settings()->privateBrowsingEnabled()) + return; + m_frame->loader()->documentLoader()->getIconLoadDecisionForIconURL(urlString); // Commit the icon url mapping to the database just in case we don't end up loading later. commitToDatabase(iconURL); @@ -202,10 +206,6 @@ void IconController::continueLoadWithDecision(IconLoadDecision iconLoadDecision) { ASSERT(iconLoadDecision != IconLoadUnknown); - // FIXME (<rdar://problem/9168605>) - We should support in-memory-only private browsing icons in asynchronous icon database mode. - if (iconDatabase().supportsAsynchronousMode() && m_frame->page()->settings()->privateBrowsingEnabled()) - return; - if (iconLoadDecision == IconLoadNo) { KURL iconURL(url()); String urlString(iconURL.string()); diff --git a/Source/WebCore/platform/graphics/qt/GraphicsContext3DQt.cpp b/Source/WebCore/platform/graphics/qt/GraphicsContext3DQt.cpp index 0c9fddc83..dffcfc637 100644 --- a/Source/WebCore/platform/graphics/qt/GraphicsContext3DQt.cpp +++ b/Source/WebCore/platform/graphics/qt/GraphicsContext3DQt.cpp @@ -111,6 +111,18 @@ public: GraphicsSurface::Flags m_surfaceFlags; RefPtr<GraphicsSurface> m_graphicsSurface; #endif + + // Register as a child of a Qt context to make the necessary when it may be destroyed before the GraphicsContext3D instance + class QtContextWatcher : public QObject + { + public: + QtContextWatcher(QObject* ctx, GraphicsContext3DPrivate* watcher): QObject(ctx), m_watcher(watcher) { } + ~QtContextWatcher() { m_watcher->m_platformContext = 0; m_watcher->m_platformContextWatcher = 0; } + + private: + GraphicsContext3DPrivate* m_watcher; + }; + QtContextWatcher* m_platformContextWatcher; }; bool GraphicsContext3DPrivate::isOpenGLES() const @@ -149,11 +161,16 @@ GraphicsContext3DPrivate::GraphicsContext3DPrivate(GraphicsContext3D* context, H , m_surface(0) , m_platformContext(0) , m_surfaceOwner(0) + , m_platformContextWatcher(0) { if (renderStyle == GraphicsContext3D::RenderToCurrentGLContext) { m_platformContext = QOpenGLContext::currentContext(); if (m_platformContext) m_surface = m_platformContext->surface(); + + // Watcher needed to invalidate the GL context if destroyed before this instance + m_platformContextWatcher = new QtContextWatcher(m_platformContext, this); + initializeOpenGLFunctions(); return; } @@ -260,6 +277,9 @@ GraphicsContext3DPrivate::~GraphicsContext3DPrivate() #endif delete m_surfaceOwner; m_surfaceOwner = 0; + + delete m_platformContextWatcher; + m_platformContextWatcher = 0; } #if USE(ACCELERATED_COMPOSITING) @@ -441,22 +461,23 @@ GraphicsContext3D::~GraphicsContext3D() if (!m_private) return; - makeContextCurrent(); - m_functions->glDeleteTextures(1, &m_texture); - m_functions->glDeleteFramebuffers(1, &m_fbo); - if (m_attrs.antialias) { - m_functions->glDeleteRenderbuffers(1, &m_multisampleColorBuffer); - m_functions->glDeleteFramebuffers(1, &m_multisampleFBO); - if (m_attrs.stencil || m_attrs.depth) - m_functions->glDeleteRenderbuffers(1, &m_multisampleDepthStencilBuffer); - } else if (m_attrs.stencil || m_attrs.depth) { - if (isGLES2Compliant()) { - if (m_attrs.depth) - m_functions->glDeleteRenderbuffers(1, &m_depthBuffer); - if (m_attrs.stencil) - m_functions->glDeleteRenderbuffers(1, &m_stencilBuffer); + if (makeContextCurrent()) { + m_functions->glDeleteTextures(1, &m_texture); + m_functions->glDeleteFramebuffers(1, &m_fbo); + if (m_attrs.antialias) { + m_functions->glDeleteRenderbuffers(1, &m_multisampleColorBuffer); + m_functions->glDeleteFramebuffers(1, &m_multisampleFBO); + if (m_attrs.stencil || m_attrs.depth) + m_functions->glDeleteRenderbuffers(1, &m_multisampleDepthStencilBuffer); + } else if (m_attrs.stencil || m_attrs.depth) { + if (isGLES2Compliant()) { + if (m_attrs.depth) + m_functions->glDeleteRenderbuffers(1, &m_depthBuffer); + if (m_attrs.stencil) + m_functions->glDeleteRenderbuffers(1, &m_stencilBuffer); + } + m_functions->glDeleteRenderbuffers(1, &m_depthStencilBuffer); } - m_functions->glDeleteRenderbuffers(1, &m_depthStencilBuffer); } m_functions = 0; diff --git a/Source/WebCore/platform/graphics/texmap/GraphicsLayerTextureMapper.cpp b/Source/WebCore/platform/graphics/texmap/GraphicsLayerTextureMapper.cpp index 0daf2f890..e390792a3 100644 --- a/Source/WebCore/platform/graphics/texmap/GraphicsLayerTextureMapper.cpp +++ b/Source/WebCore/platform/graphics/texmap/GraphicsLayerTextureMapper.cpp @@ -627,7 +627,7 @@ void GraphicsLayerTextureMapper::updateBackingStoreIfNeeded() bool GraphicsLayerTextureMapper::shouldHaveBackingStore() const { - return drawsContent() && contentsAreVisible() && !m_size.isEmpty(); + return drawsContent() && contentsAreVisible() && !m_size.isEmpty() && (m_size.width() * m_size.height() <= 8192*8192); } bool GraphicsLayerTextureMapper::addAnimation(const KeyframeValueList& valueList, const IntSize& boxSize, const Animation* anim, const String& keyframesName, double timeOffset) |