diff options
Diffstat (limited to 'src/3rdparty/webkit')
47 files changed, 796 insertions, 161 deletions
diff --git a/src/3rdparty/webkit/.tag b/src/3rdparty/webkit/.tag index a560e52..34446ae 100644 --- a/src/3rdparty/webkit/.tag +++ b/src/3rdparty/webkit/.tag @@ -1 +1 @@ -dda59e50379214c098f365a39c4d64b39ced427e +64cce100215c71575f19ca0b090c65fa97d4ba10 diff --git a/src/3rdparty/webkit/ChangeLog b/src/3rdparty/webkit/ChangeLog index 5f97e57..bc11b4d 100644 --- a/src/3rdparty/webkit/ChangeLog +++ b/src/3rdparty/webkit/ChangeLog @@ -1,26 +1,3 @@ -2011-08-26 Ademar de Souza Reis Jr. <ademar.reis@openbossa.org> - - [Qt] libwebcore.a source is compiled without -fvisibility=hidden - -fvisibility-inlines-hidden - https://bugs.webkit.org/show_bug.cgi?id=65470 - - Patch by Holger Freyther <zecke@selfish.org> - Rubberstamped by Andreas Kling. - - (qtwebkit-2.2 only by now) - - WTF_USE_EXPORT_MACROS is still not enabled on trunk because there are - pending issues with WebKit2, but it appears to be safe to enable this - on QtWebKit, so this change is being added to the qtwebkit-2.2 branch. - - The patch also adds CONFIG += hide_symbols and on Unix, += - bsymbolic_functions, which should help reduce the library binary size. - - Testing this is quite easy, so if there's any problem we'll soon - know. :-) - - * Source/WebKit.pri: - 2011-08-06 Aron Rosenberg <arosenberg@logitech.com> Reviewed by Benjamin Poulain. diff --git a/src/3rdparty/webkit/Source/JavaScriptCore/ChangeLog b/src/3rdparty/webkit/Source/JavaScriptCore/ChangeLog index 010e66a..9cda920 100644 --- a/src/3rdparty/webkit/Source/JavaScriptCore/ChangeLog +++ b/src/3rdparty/webkit/Source/JavaScriptCore/ChangeLog @@ -1,23 +1,61 @@ -2011-08-26 Ademar de Souza Reis Jr. <ademar.reis@openbossa.org> +2011-05-23 Thouraya ANDOLSI <thouraya.andolsi@st.com> - [Qt] libwebcore.a source is compiled without -fvisibility=hidden - -fvisibility-inlines-hidden - https://bugs.webkit.org/show_bug.cgi?id=65470 + Reviewed by Gavin Barraclough. + + [SH4] AssemblerLabel does not name a type + https://bugs.webkit.org/show_bug.cgi?id=59927 - Patch by Holger Freyther <zecke@selfish.org> - Rubberstamped by Andreas Kling. + SH4Assembler.h file shoold be included before AbstractMacroAssembler.h. + + * assembler/MacroAssemblerSH4.h: + +2011-06-28 Pierre Rossi <pierre.rossi@gmail.com> + + Reviewed by Eric Seidel. - (qtwebkit-2.2 only by now) + Warnings in JSC's JIT on 32 bit + https://bugs.webkit.org/show_bug.cgi?id=63259 + + Fairly straightforward, just use ASSERT_JIT_OFFSET_UNUSED when it applies. + + * jit/JITPropertyAccess32_64.cpp: + (JSC::JIT::emit_op_method_check): + (JSC::JIT::compileGetByIdHotPath): + (JSC::JIT::emit_op_put_by_id): - WTF_USE_EXPORT_MACROS is still not enabled on trunk because there are - pending issues with WebKit2, but it appears to be safe to enable this - on QtWebKit, so this change is being added to the qtwebkit-2.2 branch. +2011-08-30 Ademar de Souza Reis Jr. <ademar.reis@openbossa.org> - The patch also adds CONFIG += hide_symbols and on Unix, += - bsymbolic_functions, which should help reduce the library binary size. + [Qt] Do not unconditionally use pkg-config in .pro files + https://bugs.webkit.org/show_bug.cgi?id=67055 + + Reviewed by Andreas Kling. + + Original patch from Rohan McGovern <rohan.mcgovern@nokia.com> + + Using the first pkg-config in PATH is prone to errors when cross + compiling inside the Qt repository (using Qt's build-system). + + This patch protect calls for pkg-config with + !contains(QT_CONFIG, no-pkg-config). no-pkg-config is added to + QT_CONFIG by Qt's 'configure' when cross-compiling on systems + without pkg-config. + + The respective change in Qt's configure has been submited already. + + No new tests as this is just a build change. + + * wtf/wtf.pri: protect pkg-config calls + +2011-08-28 Jonathan Liu <net147@gmail.com> + + Fix build error when compiling with MinGW-w64 by disabling JIT + on Windows 64-bit + https://bugs.webkit.org/show_bug.cgi?id=61235 + + Reviewed by Gavin Barraclough. - Testing this is quite easy, so if there's any problem we'll soon - know. :-) + The fixed mmap executable allocator for JIT on x86_64 requires + sys/mman.h which is not available on Windows. * wtf/Platform.h: diff --git a/src/3rdparty/webkit/Source/JavaScriptCore/assembler/MacroAssemblerSH4.h b/src/3rdparty/webkit/Source/JavaScriptCore/assembler/MacroAssemblerSH4.h index 5ef7b20..9036f0f 100644 --- a/src/3rdparty/webkit/Source/JavaScriptCore/assembler/MacroAssemblerSH4.h +++ b/src/3rdparty/webkit/Source/JavaScriptCore/assembler/MacroAssemblerSH4.h @@ -29,8 +29,8 @@ #if ENABLE(ASSEMBLER) && CPU(SH4) -#include "AbstractMacroAssembler.h" #include "SH4Assembler.h" +#include "AbstractMacroAssembler.h" #include <wtf/Assertions.h> namespace JSC { diff --git a/src/3rdparty/webkit/Source/JavaScriptCore/jit/JITPropertyAccess32_64.cpp b/src/3rdparty/webkit/Source/JavaScriptCore/jit/JITPropertyAccess32_64.cpp index f18e277..c88e9ad 100644 --- a/src/3rdparty/webkit/Source/JavaScriptCore/jit/JITPropertyAccess32_64.cpp +++ b/src/3rdparty/webkit/Source/JavaScriptCore/jit/JITPropertyAccess32_64.cpp @@ -225,9 +225,9 @@ void JIT::emit_op_method_check(Instruction* currentInstruction) move(TrustedImm32(JSValue::CellTag), regT1); Jump match = jump(); - ASSERT_JIT_OFFSET(differenceBetween(info.structureToCompare, protoObj), patchOffsetMethodCheckProtoObj); + ASSERT_JIT_OFFSET_UNUSED(protoObj, differenceBetween(info.structureToCompare, protoObj), patchOffsetMethodCheckProtoObj); ASSERT_JIT_OFFSET(differenceBetween(info.structureToCompare, protoStructureToCompare), patchOffsetMethodCheckProtoStruct); - ASSERT_JIT_OFFSET(differenceBetween(info.structureToCompare, putFunction), patchOffsetMethodCheckPutFunction); + ASSERT_JIT_OFFSET_UNUSED(putFunction, differenceBetween(info.structureToCompare, putFunction), patchOffsetMethodCheckPutFunction); // Link the failure cases here. structureCheck.link(this); @@ -436,9 +436,9 @@ void JIT::compileGetByIdHotPath() loadPtr(Address(regT0, OBJECT_OFFSETOF(JSObject, m_propertyStorage)), regT2); DataLabel32 displacementLabel1 = loadPtrWithAddressOffsetPatch(Address(regT2, patchGetByIdDefaultOffset), regT0); // payload - ASSERT_JIT_OFFSET(differenceBetween(hotPathBegin, displacementLabel1), patchOffsetGetByIdPropertyMapOffset1); + ASSERT_JIT_OFFSET_UNUSED(displacementLabel1, differenceBetween(hotPathBegin, displacementLabel1), patchOffsetGetByIdPropertyMapOffset1); DataLabel32 displacementLabel2 = loadPtrWithAddressOffsetPatch(Address(regT2, patchGetByIdDefaultOffset), regT1); // tag - ASSERT_JIT_OFFSET(differenceBetween(hotPathBegin, displacementLabel2), patchOffsetGetByIdPropertyMapOffset2); + ASSERT_JIT_OFFSET_UNUSED(displacementLabel2, differenceBetween(hotPathBegin, displacementLabel2), patchOffsetGetByIdPropertyMapOffset2); Label putResult(this); ASSERT_JIT_OFFSET(differenceBetween(hotPathBegin, putResult), patchOffsetGetByIdPutResult); @@ -514,8 +514,8 @@ void JIT::emit_op_put_by_id(Instruction* currentInstruction) END_UNINTERRUPTED_SEQUENCE(sequencePutById); - ASSERT_JIT_OFFSET(differenceBetween(hotPathBegin, displacementLabel1), patchOffsetPutByIdPropertyMapOffset1); - ASSERT_JIT_OFFSET(differenceBetween(hotPathBegin, displacementLabel2), patchOffsetPutByIdPropertyMapOffset2); + ASSERT_JIT_OFFSET_UNUSED(displacementLabel1, differenceBetween(hotPathBegin, displacementLabel1), patchOffsetPutByIdPropertyMapOffset1); + ASSERT_JIT_OFFSET_UNUSED(displacementLabel2, differenceBetween(hotPathBegin, displacementLabel2), patchOffsetPutByIdPropertyMapOffset2); } void JIT::emitSlow_op_put_by_id(Instruction* currentInstruction, Vector<SlowCaseEntry>::iterator& iter) diff --git a/src/3rdparty/webkit/Source/JavaScriptCore/wtf/Platform.h b/src/3rdparty/webkit/Source/JavaScriptCore/wtf/Platform.h index 8309acc..a8298c4 100644 --- a/src/3rdparty/webkit/Source/JavaScriptCore/wtf/Platform.h +++ b/src/3rdparty/webkit/Source/JavaScriptCore/wtf/Platform.h @@ -1014,8 +1014,8 @@ #define ENABLE_JIT 0 #endif -/* JIT is not implemented for 64 bit on MSVC */ -#if !defined(ENABLE_JIT) && COMPILER(MSVC) && CPU(X86_64) +/* JIT is not implemented for Windows 64-bit */ +#if !defined(ENABLE_JIT) && OS(WINDOWS) && CPU(X86_64) #define ENABLE_JIT 0 #endif @@ -1221,11 +1221,7 @@ since most ports try to support sub-project independence, adding new headers to WTF causes many ports to break, and so this way we can address the build breakages one port at a time. */ -#if PLATFORM(QT) -#define WTF_USE_EXPORT_MACROS 1 -#else #define WTF_USE_EXPORT_MACROS 0 -#endif #if PLATFORM(QT) || PLATFORM(GTK) #define WTF_USE_UNIX_DOMAIN_SOCKETS 1 diff --git a/src/3rdparty/webkit/Source/JavaScriptCore/wtf/wtf.pri b/src/3rdparty/webkit/Source/JavaScriptCore/wtf/wtf.pri index 5af613e..ccc2f60 100644 --- a/src/3rdparty/webkit/Source/JavaScriptCore/wtf/wtf.pri +++ b/src/3rdparty/webkit/Source/JavaScriptCore/wtf/wtf.pri @@ -42,7 +42,7 @@ SOURCES += \ wtf/unicode/UTF8.cpp linux-*:!contains(DEFINES, USE_QTMULTIMEDIA=1) { - !contains(QT_CONFIG, no-pkg-config):system(pkg-config --exists glib-2.0 gio-2.0 gstreamer-0.10) { + !contains(QT_CONFIG, no-pkg-config):system(pkg-config --exists glib-2.0 gio-2.0 gstreamer-0.10): { DEFINES += ENABLE_GLIB_SUPPORT=1 PKGCONFIG += glib-2.0 gio-2.0 CONFIG += link_pkgconfig diff --git a/src/3rdparty/webkit/Source/WebCore/ChangeLog b/src/3rdparty/webkit/Source/WebCore/ChangeLog index 41d2ba7..da9d1b2 100644..100755 --- a/src/3rdparty/webkit/Source/WebCore/ChangeLog +++ b/src/3rdparty/webkit/Source/WebCore/ChangeLog @@ -1,3 +1,332 @@ +2011-09-12 Adam Klein <adamk@chromium.org> + + Fix out-of-bounds access in Gradient::sortStopsIfNecessary + https://bugs.webkit.org/show_bug.cgi?id=67958 + + Reviewed by Darin Adler. + + Reported by Valgrind in http://crbug.com/77049. + + The errant code was added as an optimization in r67804. + This patch reverts that one, as all parties agree that the optimization + doesn't seem worthwhile, and there clearly aren't any tests covering + the special case. + + No new tests, as existing tests should cover the remaining call to + |std::stable_sort|. + + * platform/graphics/Gradient.cpp: + (WebCore::Gradient::sortStopsIfNecessary): + +2011-09-09 Dominic Mazzoni <dmazzoni@google.com> + + Assert being hit in AccessibilityRenderObject::addChildren() + https://bugs.webkit.org/show_bug.cgi?id=61805 + + Reviewed by Chris Fleizach. + + Fix nextSibling and previousSibling to handle adjacent continuations + properly, otherwise nodes end up appearing in the accessibility + tree twice (or a debug assertion could be raised). + + Test: accessibility/adjacent-continuations-cause-assertion-failure.html + + * accessibility/AccessibilityRenderObject.cpp: + (WebCore::AccessibilityRenderObject::previousSibling): + (WebCore::AccessibilityRenderObject::nextSibling): + +2011-09-08 Abhishek Arya <inferno@chromium.org> + + :before content rendering issues with list markers and run-ins. + https://bugs.webkit.org/show_bug.cgi?id=67735 + + 1) Remove the isAnonymous checks for run-in detection since the + run-in can belong to a node. + 2) When the parent has block children, then the list marker will + be enclosed in an anonymous block. In that case, for going to the + next list marker, we need to traverse one level up. We don't need + this check when searching for generated run-in (loop 2), since we + know parent will have inline children, so the list marker wont be + enclosed in an anonymous block. + + Reviewed by Dave Hyatt. + + Tests: fast/lists/list-marker-before-content-table.html + fast/runin/runin-generated-before-content.html + + * rendering/RenderObjectChildList.cpp: + (WebCore::RenderObjectChildList::beforePseudoElementRenderer): + +2011-09-10 Ken Buchanan <kenrb@chromium.org> + + Crash due to bad data in SVGDocumentExtensions m_pendingResources + https://bugs.webkit.org/show_bug.cgi?id=67488 + + Reviewed by Nikolas Zimmermann. + + Resolving a crash condition caused by the deletion of + elements while pending resource entries for those elements are still + recorded. + + * rendering/svg/RenderSVGResourceContainer.cpp: + (WebCore::RenderSVGResourceContainer::registerResource) + * svg/SVGDocumentExtensions.h: + (WebCore::SVGDocumentExtensions::isElementInPendingResources) + * svg/SVGDocumentExtensions.cpp: + (WebCore::SVGDocumentExtensions::addPendingResource) + (WebCore::SVGDocumentExtensions::isElementInPendingResources) + (WebCore::SVGDocumentExtensions::removeElementFromPendingResources) + * svg/SVGStyledElement.h: + (WebCore::SVGStyledElement::clearHasPendingResourcesIfPossible) + * svg/SVGStyledElement.cpp: + (WebCore::SVGStyledElement::buildPendingResourcesIfNeeded) + (WebCore::SVGStyledElement::clearHasPendingResourcesIfPossible) + * svg/SVGUseElement.cpp: + (WebCore::SVGUseElement::svgAttributeChanged) + +2011-09-08 Alexey Proskuryakov <ap@apple.com> + + REGRESSION (r66874): Missing RefPtr in ScriptController + https://bugs.webkit.org/show_bug.cgi?id=67748 + + Reviewed by Adam Barth. + + * bindings/ScriptControllerBase.cpp: (WebCore::ScriptController::executeScript): + +2011-09-06 Abhishek Arya <inferno@chromium.org> + + Style not propagated to anonymous boxes and anonymous + inline-blocks. + https://bugs.webkit.org/show_bug.cgi?id=67364 + + Reviewed by James Robinson. + + Share propagateStyleToAnonymousChildren with RenderBlock::styleDidChange. + + * rendering/RenderBlock.cpp: + (WebCore::RenderBlock::styleDidChange): + * rendering/RenderObject.cpp: + (WebCore::RenderObject::propagateStyleToAnonymousChildren): + * rendering/RenderObject.h: + +2011-09-04 Abhishek Arya <inferno@chromium.org> + + Style not propagated to anonymous boxes and anonymous + inline-blocks. + https://bugs.webkit.org/show_bug.cgi?id=67364 + + Reviewed by James Robinson. + + Tests: fast/ruby/ruby-block-style-not-updated-with-before-after-content.html + fast/ruby/ruby-block-style-not-updated.html + fast/ruby/ruby-inline-style-not-updated-with-before-after-content.html + fast/ruby/ruby-inline-style-not-updated.html + fast/table/table-row-style-not-updated-with-after-content.html + fast/table/table-row-style-not-updated-with-before-content.html + fast/table/table-row-style-not-updated.html + fast/table/table-style-not-updated.html + + * rendering/RenderObject.cpp: + (WebCore::RenderObject::propagateStyleToAnonymousChildren): + * rendering/RenderObject.h: + (WebCore::RenderObject::isBeforeAfterContent): + * rendering/RenderRuby.cpp: + (WebCore::RenderRubyAsInline::styleDidChange): + (WebCore::RenderRubyAsBlock::styleDidChange): + * rendering/RenderRuby.h: + * rendering/RenderTable.cpp: + (WebCore::RenderTable::styleDidChange): + * rendering/RenderTableRow.cpp: + (WebCore::RenderTableRow::styleDidChange): + (WebCore::RenderTableRow::addChild): + * rendering/RenderTableSection.cpp: + (WebCore::RenderTableSection::styleDidChange): + (WebCore::RenderTableSection::addChild): + * rendering/RenderTableSection.h: + +2011-09-05 Abhishek Arya <inferno@chromium.org> + + Crash in RenderObjectChildList::destroyLeftOverChildren() + https://bugs.webkit.org/show_bug.cgi?id=64753 + + Reviewed by James Robinson. + + If any of the ancestors between column span element and containing + column's block is a continuation, then don't attempt to render the + column span by splitting the block into continuations. + + Test: fast/multicol/column-span-parent-continuation-crash.html + + * rendering/RenderBlock.cpp: + (WebCore::RenderBlock::columnsBlockForSpanningElement): + +2011-08-30 Abhishek Arya <inferno@chromium.org> + + Removed m_owner accessed in custom scrollbars. + https://bugs.webkit.org/show_bug.cgi?id=64737 + + Reviewed by David Hyatt. + + Problem does not reproduce in DRT, even with Eventhandler tricks + and gc(). So, adding a manual test. + + * manual-tests/custom-scrollbar-renderer-removed-crash.html: Added. + * page/FrameView.cpp: + (WebCore::FrameView::clearOwningRendererForCustomScrollbars): + * page/FrameView.h: + * rendering/RenderBox.cpp: + (WebCore::RenderBox::willBeDestroyed): when this renderbox is getting + destroyed, clear the custom scrollbar in this frameview having this renderbox + as its owning renderer. + * rendering/RenderScrollbar.cpp: + (WebCore::RenderScrollbar::getScrollbarPseudoStyle): fix the null check. + +2011-09-04 Abhishek Arya <inferno@chromium.org> + + Crash in Range::processAncestorsAndTheirSiblings. + https://bugs.webkit.org/show_bug.cgi?id=67556 + + Reviewed by Ryosuke Niwa. + + Create a temporary RefPtr Node vector to keep all the ancestor's + childs so that we don't access removed child nodes. + + Test: fast/dom/Range/range-delete-contents-event-fire-crash.html + + * dom/Range.cpp: + (WebCore::Range::processContents): + (WebCore::Range::processAncestorsAndTheirSiblings): + +2011-08-30 Adam Barth <abarth@webkit.org> + + Flaky crash with JavaScript URLs + https://bugs.webkit.org/show_bug.cgi?id=66360 + + Reviewed by Nate Chapin. + + This patch teaches DocumentWriter::begin to make a copy of the URL + before beginning a new document to avoid a crash. + + Test: fast/loader/javascript-url-iframe-crash.html + + * loader/DocumentWriter.cpp: + (WebCore::DocumentWriter::begin): + +2011-08-30 Caio Marcelo de Oliveira Filho <caio.oliveira@openbossa.org> + + Emit last progress notification before calling dispatchDidFinishLoad + https://bugs.webkit.org/show_bug.cgi?id=28851 + + Reviewed by Adam Barth. + + Original patch by Xan Lopez. Change FrameLoader to dispatch the notifications in + a more natural sequence. + + Test: http/tests/loading/progress-finished-callback.html + + * loader/FrameLoader.cpp: + (WebCore::FrameLoader::checkLoadCompleteForThisFrame): + +2011-08-22 Nate Chapin <japhet@chromium.org> + + Unload events can crash us when they blank out + a parent frame. + https://bugs.webkit.org/show_bug.cgi?id=64741 + + Reviewed by Adam Barth. + + Test: fast/loader/document-destruction-within-unload.html + + * loader/FrameLoader.cpp: + (WebCore::FrameLoader::stopLoading): Prevent unload events + from going into infinite recursion. + (WebCore::FrameLoader::setDocumentLoader): Ensure we don't + let set m_documentLoader to a DocumentLoader with a null Frame*. + (WebCore::FrameLoader::detachChildren): Save off a vector of + children to detach, rather than doing it inline. + +2011-08-30 Abhishek Arya <inferno@chromium.org> + + Style not updated for table parts in :before, :after content. + https://bugs.webkit.org/show_bug.cgi?id=66141 + + Reviewed by Dave Hyatt. + + Tests: fast/table/table-before-child-style-update.html + fast/table/table-row-before-child-style-update.html + + * rendering/RenderObjectChildList.cpp: + (WebCore::RenderObjectChildList::updateBeforeAfterContent): + +2011-08-25 Abhishek Arya <inferno@chromium.org> + + Incorrect layout of :before and :after content, with display + table, table-row and table-cell. + https://bugs.webkit.org/show_bug.cgi?id=66699 + + Reviewed by David Hyatt. + + Tests: fast/table/table-after-child-in-table.html + fast/table/table-before-child-in-table.html + fast/table/table-cell-after-child-in-block.html + fast/table/table-cell-after-child-in-table.html + fast/table/table-cell-before-child-in-block.html + fast/table/table-cell-before-child-in-table.html + fast/table/table-row-after-child-in-block.html + fast/table/table-row-after-child-in-table.html + fast/table/table-row-before-child-in-block.html + fast/table/table-row-before-child-in-table.html + + * rendering/RenderBlock.cpp: + (WebCore::RenderBlock::addChildIgnoringAnonymousColumnBlocks): + Fix the looping condition to detect :after child correctly. + isAnonymousBlock() does not apply to tables, instead + using isAnonymous(). + * rendering/RenderTableRow.cpp: + (WebCore::RenderTableRow::addChild): Don't add the new child + in the generatedContainer with :before, :after content. + * rendering/RenderTableSection.cpp: + (WebCore::RenderTableSection::addChild): Don't add the new child + in the generatedContainer with :before, :after content. + +2011-08-29 Abhishek Arya <inferno@chromium.org> + + Crash in InlineBox::deleteLine due to accessing removed + renderer. + https://bugs.webkit.org/show_bug.cgi?id=66015 + + Reviewed by Simon Fraser. + + Test: fast/block/line-layout/inline-box-wrapper-crash.html + + * rendering/RenderBox.cpp: + (WebCore::RenderBox::positionLineBox): Make sure that the + previous inline box wrapper is destroyed properly, before + setting a new one. + +2011-08-30 Ademar de Souza Reis Jr. <ademar.reis@openbossa.org> + + [Qt] Do not unconditionally use pkg-config in .pro files + https://bugs.webkit.org/show_bug.cgi?id=67055 + + Reviewed by Andreas Kling. + + Original patch from Rohan McGovern <rohan.mcgovern@nokia.com> + + Using the first pkg-config in PATH is prone to errors when cross + compiling inside the Qt repository (using Qt's build-system). + + This patch protect calls for pkg-config with + !contains(QT_CONFIG, no-pkg-config). no-pkg-config is added to + QT_CONFIG by Qt's 'configure' when cross-compiling on systems + without pkg-config. + + The respective change in Qt's configure has been submited already. + + No new tests as this is just a build change. + + * features.pri: protect pkg-config calls + 2011-08-25 Ademar de Souza Reis Jr. <ademar.reis@openbossa.org> [Qt] Enable password echo on Symbian builds diff --git a/src/3rdparty/webkit/Source/WebCore/WebCore.pri b/src/3rdparty/webkit/Source/WebCore/WebCore.pri index 82311d2..d8ba8a6 100644 --- a/src/3rdparty/webkit/Source/WebCore/WebCore.pri +++ b/src/3rdparty/webkit/Source/WebCore/WebCore.pri @@ -153,7 +153,7 @@ symbian { CONFIG += do_not_build_as_thumb CONFIG(release, debug|release): QMAKE_CXXFLAGS.ARMCC += -OTime -O3 - # Symbian plugin support + # Symbian plugin support. LIBS += -lefsrv !CONFIG(QTDIR_build) { @@ -303,7 +303,7 @@ win32-* { } # Remove whole program optimizations due to miscompilations -win32-msvc2005|win32-msvc2008|wince*:{ +win32-msvc2005|win32-msvc2008|win32-msvc2010|wince*:{ QMAKE_CFLAGS_RELEASE -= -GL QMAKE_CXXFLAGS_RELEASE -= -GL diff --git a/src/3rdparty/webkit/Source/WebCore/accessibility/AccessibilityRenderObject.cpp b/src/3rdparty/webkit/Source/WebCore/accessibility/AccessibilityRenderObject.cpp index 25078c5..9725a6b 100644 --- a/src/3rdparty/webkit/Source/WebCore/accessibility/AccessibilityRenderObject.cpp +++ b/src/3rdparty/webkit/Source/WebCore/accessibility/AccessibilityRenderObject.cpp @@ -302,8 +302,12 @@ AccessibilityObject* AccessibilityRenderObject::previousSibling() const // Case 2: Anonymous block parent of the end of a continuation - skip all the way to before // the parent of the start, since everything in between will be linked up via the continuation. - else if (m_renderer->isAnonymousBlock() && firstChildIsInlineContinuation(m_renderer)) - previousSibling = startOfContinuations(m_renderer->firstChild())->parent()->previousSibling(); + else if (m_renderer->isAnonymousBlock() && firstChildIsInlineContinuation(m_renderer)) { + RenderObject* firstParent = startOfContinuations(m_renderer->firstChild())->parent(); + while (firstChildIsInlineContinuation(firstParent)) + firstParent = startOfContinuations(firstParent->firstChild())->parent(); + previousSibling = firstParent->previousSibling(); + } // Case 3: The node has an actual previous sibling else if (RenderObject* ps = m_renderer->previousSibling()) @@ -340,8 +344,12 @@ AccessibilityObject* AccessibilityRenderObject::nextSibling() const // Case 2: Anonymous block parent of the start of a continuation - skip all the way to // after the parent of the end, since everything in between will be linked up via the continuation. - else if (m_renderer->isAnonymousBlock() && lastChildHasContinuation(m_renderer)) - nextSibling = endOfContinuations(m_renderer->lastChild())->parent()->nextSibling(); + else if (m_renderer->isAnonymousBlock() && lastChildHasContinuation(m_renderer)) { + RenderObject* lastParent = endOfContinuations(m_renderer->lastChild())->parent(); + while (lastChildHasContinuation(lastParent)) + lastParent = endOfContinuations(lastParent->lastChild())->parent(); + nextSibling = lastParent->nextSibling(); + } // Case 3: node has an actual next sibling else if (RenderObject* ns = m_renderer->nextSibling()) diff --git a/src/3rdparty/webkit/Source/WebCore/bindings/ScriptControllerBase.cpp b/src/3rdparty/webkit/Source/WebCore/bindings/ScriptControllerBase.cpp index 4190637..254a6c2 100644 --- a/src/3rdparty/webkit/Source/WebCore/bindings/ScriptControllerBase.cpp +++ b/src/3rdparty/webkit/Source/WebCore/bindings/ScriptControllerBase.cpp @@ -59,6 +59,8 @@ ScriptValue ScriptController::executeScript(const ScriptSourceCode& sourceCode) bool wasInExecuteScript = m_inExecuteScript; m_inExecuteScript = true; + RefPtr<Frame> protect(m_frame); // Script execution can destroy the frame, and thus the ScriptController. + ScriptValue result = evaluate(sourceCode); if (!wasInExecuteScript) { diff --git a/src/3rdparty/webkit/Source/WebCore/bindings/js/JSExceptionBase.h b/src/3rdparty/webkit/Source/WebCore/bindings/js/JSExceptionBase.h index 01c6ac2..a9366ed 100644 --- a/src/3rdparty/webkit/Source/WebCore/bindings/js/JSExceptionBase.h +++ b/src/3rdparty/webkit/Source/WebCore/bindings/js/JSExceptionBase.h @@ -1,43 +1,43 @@ -/*
- * Copyright (C) 2009 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef JSExceptionBase_h
-#define JSExceptionBase_h
-
-namespace JSC {
-
-class JSValue;
-
-} // namespace JSC
-
-namespace WebCore {
-
-class ExceptionBase;
-
-ExceptionBase* toExceptionBase(JSC::JSValue);
-
-} // namespace WebCore
-
-#endif // JSExceptionBase_h
+/* + * Copyright (C) 2009 Apple Inc. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef JSExceptionBase_h +#define JSExceptionBase_h + +namespace JSC { + +class JSValue; + +} // namespace JSC + +namespace WebCore { + +class ExceptionBase; + +ExceptionBase* toExceptionBase(JSC::JSValue); + +} // namespace WebCore + +#endif // JSExceptionBase_h diff --git a/src/3rdparty/webkit/Source/WebCore/dom/Range.cpp b/src/3rdparty/webkit/Source/WebCore/dom/Range.cpp index 0c247c2..4f8ad85 100644 --- a/src/3rdparty/webkit/Source/WebCore/dom/Range.cpp +++ b/src/3rdparty/webkit/Source/WebCore/dom/Range.cpp @@ -51,6 +51,8 @@ using namespace std; static WTF::RefCountedLeakCounter rangeCounter("Range"); #endif +typedef Vector<RefPtr<Node> > NodeVector; + inline Range::Range(PassRefPtr<Document> ownerDocument) : m_ownerDocument(ownerDocument) , m_start(m_ownerDocument) @@ -665,8 +667,6 @@ static inline unsigned lengthOfContentsInNode(Node* node) PassRefPtr<DocumentFragment> Range::processContents(ActionType action, ExceptionCode& ec) { - typedef Vector<RefPtr<Node> > NodeVector; - RefPtr<DocumentFragment> fragment; if (action == EXTRACT_CONTENTS || action == CLONE_CONTENTS) fragment = DocumentFragment::create(m_ownerDocument.get()); @@ -880,9 +880,14 @@ PassRefPtr<Node> Range::processAncestorsAndTheirSiblings(ActionType action, Node // FIXME: This assertion may fail if DOM is modified during mutation event // FIXME: Share code with Range::processNodes ASSERT(!firstChildInAncestorToProcess || firstChildInAncestorToProcess->parentNode() == ancestor); - RefPtr<Node> next; - for (Node* child = firstChildInAncestorToProcess.get(); child; child = next.get()) { - next = direction == ProcessContentsForward ? child->nextSibling() : child->previousSibling(); + + NodeVector nodes; + for (Node* child = firstChildInAncestorToProcess.get(); child; + child = (direction == ProcessContentsForward) ? child->nextSibling() : child->previousSibling()) + nodes.append(child); + + for (NodeVector::const_iterator it = nodes.begin(); it != nodes.end(); it++) { + Node* child = it->get(); switch (action) { case DELETE_CONTENTS: ancestor->removeChild(child, ec); diff --git a/src/3rdparty/webkit/Source/WebCore/features.pri b/src/3rdparty/webkit/Source/WebCore/features.pri index 3e397a1..f04d0b4 100644 --- a/src/3rdparty/webkit/Source/WebCore/features.pri +++ b/src/3rdparty/webkit/Source/WebCore/features.pri @@ -168,7 +168,7 @@ symbian|maemo5|maemo6 { DEFINES += WTF_USE_QTKIT=1 DEFINES -= WTF_USE_QTKIT=0 } else: linux-*:!contains(DEFINES, USE_QTMULTIMEDIA=1) { - !contains(QT_CONFIG, no-pkg-config):system(pkg-config --exists glib-2.0 gio-2.0 gstreamer-0.10) { + !contains(QT_CONFIG, no-pkg-config):system(pkg-config --exists glib-2.0 gio-2.0 gstreamer-0.10): { DEFINES -= ENABLE_VIDEO=0 DEFINES += ENABLE_VIDEO=1 DEFINES += WTF_USE_GSTREAMER=1 diff --git a/src/3rdparty/webkit/Source/WebCore/loader/DocumentWriter.cpp b/src/3rdparty/webkit/Source/WebCore/loader/DocumentWriter.cpp index 2fc02d1..cbce0d3 100644 --- a/src/3rdparty/webkit/Source/WebCore/loader/DocumentWriter.cpp +++ b/src/3rdparty/webkit/Source/WebCore/loader/DocumentWriter.cpp @@ -106,12 +106,17 @@ PassRefPtr<Document> DocumentWriter::createDocument(const KURL& url) return DOMImplementation::createDocument(m_mimeType, m_frame, url, m_frame->inViewSourceMode()); } -void DocumentWriter::begin(const KURL& url, bool dispatch, SecurityOrigin* origin) +void DocumentWriter::begin(const KURL& urlReference, bool dispatch, SecurityOrigin* origin) { // We need to take a reference to the security origin because |clear| // might destroy the document that owns it. RefPtr<SecurityOrigin> forcedSecurityOrigin = origin; + // We grab a local copy of the URL because it's easy for callers to supply + // a URL that will be deallocated during the execution of this function. + // For example, see <https://bugs.webkit.org/show_bug.cgi?id=66360>. + KURL url = urlReference; + // Create a new document before clearing the frame, because it may need to // inherit an aliased security context. RefPtr<Document> document = createDocument(url); diff --git a/src/3rdparty/webkit/Source/WebCore/loader/FrameLoader.cpp b/src/3rdparty/webkit/Source/WebCore/loader/FrameLoader.cpp index 1b046b3..4bef249 100644 --- a/src/3rdparty/webkit/Source/WebCore/loader/FrameLoader.cpp +++ b/src/3rdparty/webkit/Source/WebCore/loader/FrameLoader.cpp @@ -1880,6 +1880,20 @@ void FrameLoader::setDocumentLoader(DocumentLoader* loader) m_documentLoader->detachFromFrame(); m_documentLoader = loader; + + // The following abomination is brought to you by the unload event. + // The detachChildren() call above may trigger a child frame's unload event, + // which could do something obnoxious like call document.write("") on + // the main frame, which results in detaching children while detaching children. + // This can cause the new m_documentLoader to be detached from its Frame*, but still + // be alive. To make matters worse, DocumentLoaders with a null Frame* aren't supposed + // to happen when they're still alive (and many places below us on the stack think the + // DocumentLoader is still usable). Ergo, we reattach loader to its Frame, and pretend + // like nothing ever happened. + if (m_documentLoader && !m_documentLoader->frame()) { + ASSERT(!m_documentLoader->isLoading()); + m_documentLoader->setFrame(m_frame); + } } void FrameLoader::setPolicyDocumentLoader(DocumentLoader* loader) @@ -2506,14 +2520,15 @@ void FrameLoader::checkLoadCompleteForThisFrame() if (m_stateMachine.creatingInitialEmptyDocument() || !m_stateMachine.committedFirstRealDocumentLoad()) return; + if (Page* page = m_frame->page()) + page->progress()->progressCompleted(m_frame); + const ResourceError& error = dl->mainDocumentError(); if (!error.isNull()) m_client->dispatchDidFailLoad(error); else m_client->dispatchDidFinishLoad(); - if (Page* page = m_frame->page()) - page->progress()->progressCompleted(m_frame); return; } @@ -2589,12 +2604,14 @@ void FrameLoader::frameLoadCompleted() void FrameLoader::detachChildren() { - // FIXME: Is it really necessary to do this in reverse order? - Frame* previous; - for (Frame* child = m_frame->tree()->lastChild(); child; child = previous) { - previous = child->tree()->previousSibling(); - child->loader()->detachFromParent(); - } + typedef Vector<RefPtr<Frame> > FrameVector; + FrameVector childrenToDetach; + childrenToDetach.reserveCapacity(m_frame->tree()->childCount()); + for (Frame* child = m_frame->tree()->lastChild(); child; child = child->tree()->previousSibling()) + childrenToDetach.append(child); + FrameVector::iterator end = childrenToDetach.end(); + for (FrameVector::iterator it = childrenToDetach.begin(); it != end; it++) + (*it)->loader()->detachFromParent(); } void FrameLoader::closeAndRemoveChild(Frame* child) diff --git a/src/3rdparty/webkit/Source/WebCore/page/FrameView.cpp b/src/3rdparty/webkit/Source/WebCore/page/FrameView.cpp index 3dadbf3..ef72fb7 100644 --- a/src/3rdparty/webkit/Source/WebCore/page/FrameView.cpp +++ b/src/3rdparty/webkit/Source/WebCore/page/FrameView.cpp @@ -2277,6 +2277,23 @@ bool FrameView::hasCustomScrollbars() const return false; } +void FrameView::clearOwningRendererForCustomScrollbars(RenderBox* box) +{ + const HashSet<RefPtr<Widget> >* viewChildren = children(); + HashSet<RefPtr<Widget> >::const_iterator end = viewChildren->end(); + for (HashSet<RefPtr<Widget> >::const_iterator current = viewChildren->begin(); current != end; ++current) { + Widget* widget = current->get(); + if (widget->isScrollbar()) { + Scrollbar* scrollbar = static_cast<Scrollbar*>(widget); + if (scrollbar->isCustomScrollbar()) { + RenderScrollbar* customScrollbar = toRenderScrollbar(scrollbar); + if (customScrollbar->owningRenderer() == box) + customScrollbar->clearOwningRenderer(); + } + } + } +} + FrameView* FrameView::parentFrameView() const { if (Widget* parentView = parent()) { diff --git a/src/3rdparty/webkit/Source/WebCore/page/FrameView.h b/src/3rdparty/webkit/Source/WebCore/page/FrameView.h index fafebfe..b151cfc 100644 --- a/src/3rdparty/webkit/Source/WebCore/page/FrameView.h +++ b/src/3rdparty/webkit/Source/WebCore/page/FrameView.h @@ -267,6 +267,8 @@ public: virtual bool shouldSuspendScrollAnimations() const; + void clearOwningRendererForCustomScrollbars(RenderBox*); + protected: virtual bool scrollContentsFastPath(const IntSize& scrollDelta, const IntRect& rectToScroll, const IntRect& clipRect); virtual void scrollContentsSlowPath(const IntRect& updateRect); diff --git a/src/3rdparty/webkit/Source/WebCore/platform/graphics/Gradient.cpp b/src/3rdparty/webkit/Source/WebCore/platform/graphics/Gradient.cpp index 7e3984f..fc7b741 100644 --- a/src/3rdparty/webkit/Source/WebCore/platform/graphics/Gradient.cpp +++ b/src/3rdparty/webkit/Source/WebCore/platform/graphics/Gradient.cpp @@ -124,10 +124,6 @@ void Gradient::sortStopsIfNecessary() if (!m_stops.size()) return; - // Shortcut for the ideal case (ordered 2-stop gradient) - if (m_stops.size() == 2 && compareStops(*m_stops.begin(), *m_stops.end())) - return; - std::stable_sort(m_stops.begin(), m_stops.end(), compareStops); } diff --git a/src/3rdparty/webkit/Source/WebCore/rendering/RenderBlock.cpp b/src/3rdparty/webkit/Source/WebCore/rendering/RenderBlock.cpp index 39c0469..4ad1bfe 100644 --- a/src/3rdparty/webkit/Source/WebCore/rendering/RenderBlock.cpp +++ b/src/3rdparty/webkit/Source/WebCore/rendering/RenderBlock.cpp @@ -241,21 +241,7 @@ void RenderBlock::styleDidChange(StyleDifference diff, const RenderStyle* oldSty } } - // FIXME: We could save this call when the change only affected non-inherited properties - for (RenderObject* child = firstChild(); child; child = child->nextSibling()) { - if (child->isAnonymousBlock()) { - RefPtr<RenderStyle> newStyle = RenderStyle::createAnonymousStyle(style()); - if (style()->specifiesColumns()) { - if (child->style()->specifiesColumns()) - newStyle->inheritColumnPropertiesFrom(style()); - if (child->style()->columnSpan()) - newStyle->setColumnSpan(true); - } - newStyle->setDisplay(BLOCK); - child->setStyle(newStyle.release()); - } - } - + propagateStyleToAnonymousChildren(true); m_lineHeight = -1; // Update pseudos for :before and :after now. @@ -654,8 +640,22 @@ RenderBlock* RenderBlock::columnsBlockForSpanningElement(RenderObject* newChild) && !newChild->isInline() && !isAnonymousColumnSpanBlock()) { if (style()->specifiesColumns()) columnsBlockAncestor = this; - else if (!isInline() && parent() && parent()->isRenderBlock()) + else if (!isInline() && parent() && parent()->isRenderBlock()) { columnsBlockAncestor = toRenderBlock(parent())->containingColumnsBlock(false); + + if (columnsBlockAncestor) { + // Make sure that none of the parent ancestors have a continuation. + // If yes, we do not want split the block into continuations. + RenderObject* curr = this; + while (curr && curr != columnsBlockAncestor) { + if (curr->isRenderBlock() && toRenderBlock(curr)->continuation()) { + columnsBlockAncestor = 0; + break; + } + curr = curr->parent(); + } + } + } } return columnsBlockAncestor; } @@ -665,10 +665,10 @@ void RenderBlock::addChildIgnoringAnonymousColumnBlocks(RenderObject* newChild, // Make sure we don't append things after :after-generated content if we have it. if (!beforeChild) { RenderObject* lastRenderer = lastChild(); - if (isAfterContent(lastRenderer)) + while (lastRenderer && lastRenderer->isAnonymous() && !isAfterContent(lastRenderer)) + lastRenderer = lastRenderer->lastChild(); + if (lastRenderer && isAfterContent(lastRenderer)) beforeChild = lastRenderer; - else if (lastRenderer && lastRenderer->isAnonymousBlock() && isAfterContent(lastRenderer->lastChild())) - beforeChild = lastRenderer->lastChild(); } // If the requested beforeChild is not one of our children, then this is because diff --git a/src/3rdparty/webkit/Source/WebCore/rendering/RenderBox.cpp b/src/3rdparty/webkit/Source/WebCore/rendering/RenderBox.cpp index 9c2aa48..f052ee7 100644 --- a/src/3rdparty/webkit/Source/WebCore/rendering/RenderBox.cpp +++ b/src/3rdparty/webkit/Source/WebCore/rendering/RenderBox.cpp @@ -204,6 +204,11 @@ void RenderBox::destroy() if (style() && (style()->logicalHeight().isPercent() || style()->logicalMinHeight().isPercent() || style()->logicalMaxHeight().isPercent())) RenderBlock::removePercentHeightDescendant(this); + // If this renderer is owning renderer for the frameview's custom scrollbars, + // we need to clear it from the scrollbar. See webkit bug 64737. + if (style() && style()->hasPseudoStyle(SCROLLBAR) && frame() && frame()->view()) + frame()->view()->clearOwningRendererForCustomScrollbars(this); + RenderBoxModelObject::destroy(); } @@ -1372,6 +1377,8 @@ void RenderBox::positionLineBox(InlineBox* box) box->destroy(renderArena()); } else if (isReplaced()) { setLocation(lroundf(box->x()), lroundf(box->y())); + if (m_inlineBoxWrapper) + deleteLineBoxWrapper(); m_inlineBoxWrapper = box; } } diff --git a/src/3rdparty/webkit/Source/WebCore/rendering/RenderObject.cpp b/src/3rdparty/webkit/Source/WebCore/rendering/RenderObject.cpp index a81e668..c1f5ba0 100644 --- a/src/3rdparty/webkit/Source/WebCore/rendering/RenderObject.cpp +++ b/src/3rdparty/webkit/Source/WebCore/rendering/RenderObject.cpp @@ -1811,6 +1811,24 @@ void RenderObject::styleDidChange(StyleDifference diff, const RenderStyle* oldSt } } +void RenderObject::propagateStyleToAnonymousChildren(bool blockChildrenOnly) +{ + // FIXME: We could save this call when the change only affected non-inherited properties. + for (RenderObject* child = firstChild(); child; child = child->nextSibling()) { + if (blockChildrenOnly ? child->isAnonymousBlock() : child->isAnonymous() && !child->isBeforeOrAfterContent()) { + RefPtr<RenderStyle> newStyle = RenderStyle::createAnonymousStyle(style()); + if (style()->specifiesColumns()) { + if (child->style()->specifiesColumns()) + newStyle->inheritColumnPropertiesFrom(style()); + if (child->style()->columnSpan()) + newStyle->setColumnSpan(true); + } + newStyle->setDisplay(blockChildrenOnly ? BLOCK : child->style()->display()); + child->setStyle(newStyle.release()); + } + } +} + void RenderObject::updateFillImages(const FillLayer* oldLayers, const FillLayer* newLayers) { // Optimize the common case diff --git a/src/3rdparty/webkit/Source/WebCore/rendering/RenderObject.h b/src/3rdparty/webkit/Source/WebCore/rendering/RenderObject.h index 44ee43c..2ba0114 100644 --- a/src/3rdparty/webkit/Source/WebCore/rendering/RenderObject.h +++ b/src/3rdparty/webkit/Source/WebCore/rendering/RenderObject.h @@ -322,8 +322,10 @@ public: inline bool isBeforeContent() const; inline bool isAfterContent() const; + inline bool isBeforeOrAfterContent() const; static inline bool isBeforeContent(const RenderObject* obj) { return obj && obj->isBeforeContent(); } static inline bool isAfterContent(const RenderObject* obj) { return obj && obj->isAfterContent(); } + static inline bool isBeforeOrAfterContent(const RenderObject* obj) { return obj && obj->isBeforeOrAfterContent(); } bool childrenInline() const { return m_childrenInline; } void setChildrenInline(bool b = true) { m_childrenInline = b; } @@ -791,6 +793,7 @@ protected: virtual void styleWillChange(StyleDifference, const RenderStyle* newStyle); // Overrides should call the superclass at the start virtual void styleDidChange(StyleDifference, const RenderStyle* oldStyle); + void propagateStyleToAnonymousChildren(bool blockChildrenOnly = false); void drawLineForBoxSide(GraphicsContext*, int x1, int y1, int x2, int y2, BoxSide, Color, EBorderStyle, int adjbw1, int adjbw2, bool antialias = false); @@ -932,6 +935,11 @@ inline bool RenderObject::isAfterContent() const return true; } +inline bool RenderObject::isBeforeOrAfterContent() const +{ + return isBeforeContent() || isAfterContent(); +} + inline void RenderObject::setNeedsLayout(bool b, bool markParents) { bool alreadyNeededLayout = m_needsLayout; diff --git a/src/3rdparty/webkit/Source/WebCore/rendering/RenderObjectChildList.cpp b/src/3rdparty/webkit/Source/WebCore/rendering/RenderObjectChildList.cpp index ff9ff15..28703c5 100644 --- a/src/3rdparty/webkit/Source/WebCore/rendering/RenderObjectChildList.cpp +++ b/src/3rdparty/webkit/Source/WebCore/rendering/RenderObjectChildList.cpp @@ -271,7 +271,12 @@ RenderObject* RenderObjectChildList::beforePseudoElementRenderer(const RenderObj do { // Skip list markers and generated run-ins first = first->firstChild(); - while (first && (first->isListMarker() || (first->isRenderInline() && first->isRunIn() && first->isAnonymous()))) + while (first && first->isListMarker()) { + if (first->parent() != owner && first->parent()->isAnonymousBlock()) + first = first->parent(); + first = first->nextSibling(); + } + while (first && first->isRenderInline() && first->isRunIn()) first = first->nextSibling(); } while (first && first->isAnonymous() && first->style()->styleType() == NOPSEUDO); @@ -293,7 +298,7 @@ RenderObject* RenderObjectChildList::beforePseudoElementRenderer(const RenderObj // We still need to skip any list markers that could exist before the run-in. while (first && first->isListMarker()) first = first->nextSibling(); - if (first && first->style()->styleType() == BEFORE && first->isRenderInline() && first->isRunIn() && first->isAnonymous()) + if (first && first->style()->styleType() == BEFORE && first->isRenderInline() && first->isRunIn()) return first; } return 0; @@ -388,6 +393,21 @@ void RenderObjectChildList::updateBeforeAfterContent(RenderObject* owner, Pseudo if (!beforeAfterParent) return; + // When beforeAfterParent is not equal to child (e.g. in tables), + // we need to create new styles inheriting from pseudoElementStyle + // on all the intermediate parents (leaving their display same). + if (beforeAfterParent != child) { + RenderObject* curr = beforeAfterParent; + while (curr && curr != child) { + ASSERT(curr->isAnonymous()); + RefPtr<RenderStyle> newStyle = RenderStyle::create(); + newStyle->inheritFrom(pseudoElementStyle); + newStyle->setDisplay(curr->style()->display()); + curr->setStyle(newStyle); + curr = curr->parent(); + } + } + // Note that if we ever support additional types of generated content (which should be way off // in the future), this code will need to be patched. for (RenderObject* genChild = beforeAfterParent->firstChild(); genChild; genChild = genChild->nextSibling()) { diff --git a/src/3rdparty/webkit/Source/WebCore/rendering/RenderRuby.cpp b/src/3rdparty/webkit/Source/WebCore/rendering/RenderRuby.cpp index e0137de..41604d6 100644 --- a/src/3rdparty/webkit/Source/WebCore/rendering/RenderRuby.cpp +++ b/src/3rdparty/webkit/Source/WebCore/rendering/RenderRuby.cpp @@ -119,6 +119,12 @@ RenderRubyAsInline::~RenderRubyAsInline() { } +void RenderRubyAsInline::styleDidChange(StyleDifference diff, const RenderStyle* oldStyle) +{ + RenderInline::styleDidChange(diff, oldStyle); + propagateStyleToAnonymousChildren(); +} + void RenderRubyAsInline::addChild(RenderObject* child, RenderObject* beforeChild) { // Insert :before and :after content before/after the RenderRubyRun(s) @@ -220,6 +226,12 @@ RenderRubyAsBlock::~RenderRubyAsBlock() { } +void RenderRubyAsBlock::styleDidChange(StyleDifference diff, const RenderStyle* oldStyle) +{ + RenderBlock::styleDidChange(diff, oldStyle); + propagateStyleToAnonymousChildren(); +} + void RenderRubyAsBlock::addChild(RenderObject* child, RenderObject* beforeChild) { // Insert :before and :after content before/after the RenderRubyRun(s) diff --git a/src/3rdparty/webkit/Source/WebCore/rendering/RenderRuby.h b/src/3rdparty/webkit/Source/WebCore/rendering/RenderRuby.h index 24ac0db..2ab964c 100644 --- a/src/3rdparty/webkit/Source/WebCore/rendering/RenderRuby.h +++ b/src/3rdparty/webkit/Source/WebCore/rendering/RenderRuby.h @@ -59,6 +59,9 @@ public: virtual void addChild(RenderObject* child, RenderObject* beforeChild = 0); virtual void removeChild(RenderObject* child); +protected: + virtual void styleDidChange(StyleDifference, const RenderStyle* oldStyle); + private: virtual bool isRuby() const { return true; } virtual const char* renderName() const { return "RenderRuby (inline)"; } @@ -75,6 +78,9 @@ public: virtual void addChild(RenderObject* child, RenderObject* beforeChild = 0); virtual void removeChild(RenderObject* child); +protected: + virtual void styleDidChange(StyleDifference, const RenderStyle* oldStyle); + private: virtual bool isRuby() const { return true; } virtual const char* renderName() const { return "RenderRuby (block)"; } diff --git a/src/3rdparty/webkit/Source/WebCore/rendering/RenderScrollbar.cpp b/src/3rdparty/webkit/Source/WebCore/rendering/RenderScrollbar.cpp index 962024c..7a75b2e 100644 --- a/src/3rdparty/webkit/Source/WebCore/rendering/RenderScrollbar.cpp +++ b/src/3rdparty/webkit/Source/WebCore/rendering/RenderScrollbar.cpp @@ -149,7 +149,7 @@ ScrollbarPart RenderScrollbar::partForStyleResolve() PassRefPtr<RenderStyle> RenderScrollbar::getScrollbarPseudoStyle(ScrollbarPart partType, PseudoId pseudoId) { - if (!m_owner) + if (!owningRenderer()) return 0; s_styleResolvePart = partType; diff --git a/src/3rdparty/webkit/Source/WebCore/rendering/RenderTable.cpp b/src/3rdparty/webkit/Source/WebCore/rendering/RenderTable.cpp index 4e90ffc..73b0801 100644 --- a/src/3rdparty/webkit/Source/WebCore/rendering/RenderTable.cpp +++ b/src/3rdparty/webkit/Source/WebCore/rendering/RenderTable.cpp @@ -73,6 +73,7 @@ RenderTable::~RenderTable() void RenderTable::styleDidChange(StyleDifference diff, const RenderStyle* oldStyle) { RenderBlock::styleDidChange(diff, oldStyle); + propagateStyleToAnonymousChildren(); ETableLayout oldTableLayout = oldStyle ? oldStyle->tableLayout() : TAUTO; diff --git a/src/3rdparty/webkit/Source/WebCore/rendering/RenderTableRow.cpp b/src/3rdparty/webkit/Source/WebCore/rendering/RenderTableRow.cpp index 2edcfc4..686bc3a 100644 --- a/src/3rdparty/webkit/Source/WebCore/rendering/RenderTableRow.cpp +++ b/src/3rdparty/webkit/Source/WebCore/rendering/RenderTableRow.cpp @@ -74,10 +74,10 @@ void RenderTableRow::updateBeforeAndAfterContent() void RenderTableRow::styleDidChange(StyleDifference diff, const RenderStyle* oldStyle) { RenderBox::styleDidChange(diff, oldStyle); + propagateStyleToAnonymousChildren(); if (parent()) updateBeforeAndAfterContent(); - } void RenderTableRow::addChild(RenderObject* child, RenderObject* beforeChild) @@ -90,7 +90,7 @@ void RenderTableRow::addChild(RenderObject* child, RenderObject* beforeChild) RenderObject* last = beforeChild; if (!last) last = lastChild(); - if (last && last->isAnonymous() && last->isTableCell()) { + if (last && last->isAnonymous() && last->isTableCell() && !last->isBeforeOrAfterContent()) { if (beforeChild == last) beforeChild = last->firstChild(); last->addChild(child, beforeChild); @@ -98,7 +98,7 @@ void RenderTableRow::addChild(RenderObject* child, RenderObject* beforeChild) } // If beforeChild is inside an anonymous cell, insert into the cell. - if (last && !last->isTableCell() && last->parent() && last->parent()->isAnonymous()) { + if (last && !last->isTableCell() && last->parent() && last->parent()->isAnonymous() && !last->parent()->isBeforeOrAfterContent()) { last->parent()->addChild(child, beforeChild); return; } diff --git a/src/3rdparty/webkit/Source/WebCore/rendering/RenderTableSection.cpp b/src/3rdparty/webkit/Source/WebCore/rendering/RenderTableSection.cpp index 6b080b8..7d414a0 100644 --- a/src/3rdparty/webkit/Source/WebCore/rendering/RenderTableSection.cpp +++ b/src/3rdparty/webkit/Source/WebCore/rendering/RenderTableSection.cpp @@ -74,6 +74,12 @@ RenderTableSection::~RenderTableSection() clearGrid(); } +void RenderTableSection::styleDidChange(StyleDifference diff, const RenderStyle* oldStyle) +{ + RenderBox::styleDidChange(diff, oldStyle); + propagateStyleToAnonymousChildren(); +} + void RenderTableSection::destroy() { RenderTable* recalcTable = table(); @@ -96,7 +102,7 @@ void RenderTableSection::addChild(RenderObject* child, RenderObject* beforeChild RenderObject* last = beforeChild; if (!last) last = lastChild(); - if (last && last->isAnonymous()) { + if (last && last->isAnonymous() && !last->isBeforeOrAfterContent()) { if (beforeChild == last) beforeChild = last->firstChild(); last->addChild(child, beforeChild); @@ -108,7 +114,7 @@ void RenderTableSection::addChild(RenderObject* child, RenderObject* beforeChild RenderObject* lastBox = last; while (lastBox && lastBox->parent()->isAnonymous() && !lastBox->isTableRow()) lastBox = lastBox->parent(); - if (lastBox && lastBox->isAnonymous()) { + if (lastBox && lastBox->isAnonymous() && !lastBox->isBeforeOrAfterContent()) { lastBox->addChild(child, beforeChild); return; } diff --git a/src/3rdparty/webkit/Source/WebCore/rendering/RenderTableSection.h b/src/3rdparty/webkit/Source/WebCore/rendering/RenderTableSection.h index cc969e8..db6edc2 100644 --- a/src/3rdparty/webkit/Source/WebCore/rendering/RenderTableSection.h +++ b/src/3rdparty/webkit/Source/WebCore/rendering/RenderTableSection.h @@ -118,6 +118,9 @@ public: int getBaseline(int row) { return m_grid[row].baseline; } +protected: + virtual void styleDidChange(StyleDifference, const RenderStyle* oldStyle); + private: virtual RenderObjectChildList* virtualChildren() { return children(); } virtual const RenderObjectChildList* virtualChildren() const { return children(); } diff --git a/src/3rdparty/webkit/Source/WebCore/rendering/RenderWidget.cpp b/src/3rdparty/webkit/Source/WebCore/rendering/RenderWidget.cpp index 97444cd..5a00374 100644 --- a/src/3rdparty/webkit/Source/WebCore/rendering/RenderWidget.cpp +++ b/src/3rdparty/webkit/Source/WebCore/rendering/RenderWidget.cpp @@ -143,6 +143,11 @@ void RenderWidget::destroy() if (style() && (style()->logicalHeight().isPercent() || style()->logicalMinHeight().isPercent() || style()->logicalMaxHeight().isPercent())) RenderBlock::removePercentHeightDescendant(this); + // If this renderer is owning renderer for the frameview's custom scrollbars, + // we need to clear it from the scrollbar. See webkit bug 64737. + if (style() && style()->hasPseudoStyle(SCROLLBAR) && frame() && frame()->view()) + frame()->view()->clearOwningRendererForCustomScrollbars(this); + if (hasLayer()) { layer()->clearClipRects(); setHasLayer(false); diff --git a/src/3rdparty/webkit/Source/WebCore/rendering/svg/RenderSVGResourceContainer.cpp b/src/3rdparty/webkit/Source/WebCore/rendering/svg/RenderSVGResourceContainer.cpp index 79e8e1e..db4027b 100644 --- a/src/3rdparty/webkit/Source/WebCore/rendering/svg/RenderSVGResourceContainer.cpp +++ b/src/3rdparty/webkit/Source/WebCore/rendering/svg/RenderSVGResourceContainer.cpp @@ -168,7 +168,7 @@ void RenderSVGResourceContainer::registerResource() const SVGDocumentExtensions::SVGPendingElements::const_iterator end = clients->end(); for (SVGDocumentExtensions::SVGPendingElements::const_iterator it = clients->begin(); it != end; ++it) { ASSERT((*it)->hasPendingResources()); - (*it)->setHasPendingResources(false); + (*it)->clearHasPendingResourcesIfPossible(); RenderObject* renderer = (*it)->renderer(); if (!renderer) continue; diff --git a/src/3rdparty/webkit/Source/WebCore/svg/SVGDocumentExtensions.cpp b/src/3rdparty/webkit/Source/WebCore/svg/SVGDocumentExtensions.cpp index d74f646..4b339ca 100644..100755 --- a/src/3rdparty/webkit/Source/WebCore/svg/SVGDocumentExtensions.cpp +++ b/src/3rdparty/webkit/Source/WebCore/svg/SVGDocumentExtensions.cpp @@ -227,7 +227,7 @@ void SVGDocumentExtensions::addPendingResource(const AtomicString& id, SVGStyled m_pendingResources.add(id, set); } - element->setHasPendingResources(true); + element->setHasPendingResources(); } bool SVGDocumentExtensions::hasPendingResources(const AtomicString& id) const @@ -238,6 +238,24 @@ bool SVGDocumentExtensions::hasPendingResources(const AtomicString& id) const return m_pendingResources.contains(id); } +bool SVGDocumentExtensions::isElementInPendingResources(SVGStyledElement* element) const +{ + ASSERT(element); + + if (m_pendingResources.isEmpty()) + return false; + + HashMap<AtomicString, SVGPendingElements*>::const_iterator end = m_pendingResources.end(); + for (HashMap<AtomicString, SVGPendingElements*>::const_iterator it = m_pendingResources.begin(); it != end; ++it) { + SVGPendingElements* elements = it->second; + ASSERT(elements); + + if (elements->contains(element)) + return true; + } + return false; +} + void SVGDocumentExtensions::removeElementFromPendingResources(SVGStyledElement* element) { ASSERT(element); @@ -245,8 +263,6 @@ void SVGDocumentExtensions::removeElementFromPendingResources(SVGStyledElement* if (m_pendingResources.isEmpty() || !element->hasPendingResources()) return; - element->setHasPendingResources(false); - Vector<AtomicString> toBeRemoved; HashMap<AtomicString, SVGPendingElements*>::iterator end = m_pendingResources.end(); for (HashMap<AtomicString, SVGPendingElements*>::iterator it = m_pendingResources.begin(); it != end; ++it) { @@ -259,6 +275,8 @@ void SVGDocumentExtensions::removeElementFromPendingResources(SVGStyledElement* toBeRemoved.append(it->first); } + element->clearHasPendingResourcesIfPossible(); + if (toBeRemoved.isEmpty()) return; diff --git a/src/3rdparty/webkit/Source/WebCore/svg/SVGDocumentExtensions.h b/src/3rdparty/webkit/Source/WebCore/svg/SVGDocumentExtensions.h index a66b066..8ad44f8 100644..100755 --- a/src/3rdparty/webkit/Source/WebCore/svg/SVGDocumentExtensions.h +++ b/src/3rdparty/webkit/Source/WebCore/svg/SVGDocumentExtensions.h @@ -81,6 +81,7 @@ public: // For instance, dynamically build gradients / patterns / clippers... void addPendingResource(const AtomicString& id, SVGStyledElement*); bool hasPendingResources(const AtomicString& id) const; + bool isElementInPendingResources(SVGStyledElement*) const; void removeElementFromPendingResources(SVGStyledElement*); PassOwnPtr<SVGPendingElements> removePendingResource(const AtomicString& id); }; diff --git a/src/3rdparty/webkit/Source/WebCore/svg/SVGStyledElement.cpp b/src/3rdparty/webkit/Source/WebCore/svg/SVGStyledElement.cpp index c1a6449..0693eb0 100644..100755 --- a/src/3rdparty/webkit/Source/WebCore/svg/SVGStyledElement.cpp +++ b/src/3rdparty/webkit/Source/WebCore/svg/SVGStyledElement.cpp @@ -380,7 +380,7 @@ void SVGStyledElement::insertedIntoDocument() for (SVGDocumentExtensions::SVGPendingElements::const_iterator it = clients->begin(); it != end; ++it) { ASSERT((*it)->hasPendingResources()); (*it)->buildPendingResource(); - (*it)->setHasPendingResources(false); + (*it)->clearHasPendingResourcesIfPossible(); } } @@ -453,9 +453,15 @@ bool SVGStyledElement::hasPendingResources() const return hasRareSVGData() && rareSVGData()->hasPendingResources(); } -void SVGStyledElement::setHasPendingResources(bool value) +void SVGStyledElement::setHasPendingResources() { - ensureRareSVGData()->setHasPendingResources(value); + ensureRareSVGData()->setHasPendingResources(true); +} + +void SVGStyledElement::clearHasPendingResourcesIfPossible() +{ + if (!document()->accessSVGExtensions()->isElementInPendingResources(this)) + ensureRareSVGData()->setHasPendingResources(false); } AffineTransform SVGStyledElement::localCoordinateSpaceTransform(SVGLocatable::CTMScope) const diff --git a/src/3rdparty/webkit/Source/WebCore/svg/SVGStyledElement.h b/src/3rdparty/webkit/Source/WebCore/svg/SVGStyledElement.h index f48513c..fdad347 100644..100755 --- a/src/3rdparty/webkit/Source/WebCore/svg/SVGStyledElement.h +++ b/src/3rdparty/webkit/Source/WebCore/svg/SVGStyledElement.h @@ -53,7 +53,8 @@ public: void setInstanceUpdatesBlocked(bool); bool hasPendingResources() const; - void setHasPendingResources(bool); + void setHasPendingResources(); + void clearHasPendingResourcesIfPossible(); AnimatedAttributeType animatedPropertyTypeForCSSProperty(const QualifiedName&); static bool isAnimatableCSSProperty(const QualifiedName&); diff --git a/src/3rdparty/webkit/Source/WebCore/svg/SVGUseElement.cpp b/src/3rdparty/webkit/Source/WebCore/svg/SVGUseElement.cpp index d8f9674..7de1f4c 100644 --- a/src/3rdparty/webkit/Source/WebCore/svg/SVGUseElement.cpp +++ b/src/3rdparty/webkit/Source/WebCore/svg/SVGUseElement.cpp @@ -172,11 +172,11 @@ void SVGUseElement::svgAttributeChanged(const QualifiedName& attrName) const SVGDocumentExtensions::SVGPendingElements::const_iterator end = clients->end(); for (SVGDocumentExtensions::SVGPendingElements::const_iterator it = clients->begin(); it != end; ++it) { ASSERT((*it)->hasPendingResources()); - (*it)->setHasPendingResources(false); + (*it)->clearHasPendingResourcesIfPossible(); } m_resourceId = String(); - setHasPendingResources(false); + clearHasPendingResourcesIfPossible(); } invalidateShadowTree(); diff --git a/src/3rdparty/webkit/Source/WebKit.pri b/src/3rdparty/webkit/Source/WebKit.pri index be1c7b7..5bd9577 100644 --- a/src/3rdparty/webkit/Source/WebKit.pri +++ b/src/3rdparty/webkit/Source/WebKit.pri @@ -2,9 +2,6 @@ contains(QT_CONFIG, qpa)|contains(QT_CONFIG, embedded): CONFIG += embedded -contains(QT_CONFIG, reduce_exports):CONFIG += hide_symbols -unix:contains(QT_CONFIG, reduce_relocations):CONFIG += bsymbolic_functions - # Detect that we are building as a standalone package by the presence of # either the generated files directory or as part of the Qt package through # QTDIR_build diff --git a/src/3rdparty/webkit/Source/WebKit/qt/ChangeLog b/src/3rdparty/webkit/Source/WebKit/qt/ChangeLog index 0bca4b2..32428f1 100644 --- a/src/3rdparty/webkit/Source/WebKit/qt/ChangeLog +++ b/src/3rdparty/webkit/Source/WebKit/qt/ChangeLog @@ -1,3 +1,68 @@ +2011-09-06 Ademar de Souza Reis Jr. <ademar.reis@openbossa.org> + + [Qt][Symbian] REGRESSION[94105] DumpRenderTree.exe doesn't build on Symbian + https://bugs.webkit.org/show_bug.cgi?id=67644 + + Reviewed by Csaba Osztrogonác. + + * symbian/eabi/QtWebKitu.def: add missing entry for + FrameLoaderClientQt::dumpProgressFinishedCallback(bool) + +2011-08-31 Caio Marcelo de Oliveira Filho <caio.oliveira@openbossa.org> + + [Qt] Unskip API test for load signals order + https://bugs.webkit.org/show_bug.cgi?id=67285 + + Reviewed by Andreas Kling. + + * tests/qwebpage/tst_qwebpage.cpp: + (tst_QWebPage::loadSignalsOrder): + +2011-08-30 Caio Marcelo de Oliveira Filho <caio.oliveira@openbossa.org> + + Emit last progress notification before calling dispatchDidFinishLoad + https://bugs.webkit.org/show_bug.cgi?id=28851 + + Reviewed by Adam Barth. + + Add infrastructure to dump progressFinishedNotification callback in DRT. + + * WebCoreSupport/DumpRenderTreeSupportQt.cpp: + (DumpRenderTreeSupportQt::dumpProgressFinishedCallback): + * WebCoreSupport/DumpRenderTreeSupportQt.h: + * WebCoreSupport/FrameLoaderClientQt.cpp: + (WebCore::FrameLoaderClientQt::postProgressFinishedNotification): + * WebCoreSupport/FrameLoaderClientQt.h: + +2011-09-02 Jade Han <jade.han@nokia.com> + + [Qt][Symbian] REGRESSION(93235) Missing .def update + https://bugs.webkit.org/show_bug.cgi?id=67307 + + Reviewed by Laszlo Gombos. + + * symbian/eabi/QtWebKitu.def: + +2011-08-12 Caio Marcelo de Oliveira Filho <caio.oliveira@openbossa.org> + + [Qt] Add test for correct order of load signals in QWebPage + https://bugs.webkit.org/show_bug.cgi?id=66016 + + Reviewed by Benjamin Poulain. + + Add API test to ensure the order of load signals: loadStarted() needs to be emitted + first, then loadProgress(100), followed by loadFinished(). + + The test is skipped since this right now is broken, the bug + https://bugs.webkit.org/show_bug.cgi?id=28851 tracks one possible way to fix. + + * tests/qwebpage/tst_qwebpage.cpp: + (SpyForLoadSignalsOrder::SpyForLoadSignalsOrder): + (SpyForLoadSignalsOrder::isFinished): + (SpyForLoadSignalsOrder::onLoadProgress): + (tst_QWebPage::loadSignalsOrder_data): + (tst_QWebPage::loadSignalsOrder): + 2011-08-25 Ademar de Souza Reis Jr. <ademar.reis@openbossa.org> Unreviewed QtWebKit.pro fix for when building inside Qt diff --git a/src/3rdparty/webkit/Source/WebKit/qt/WebCoreSupport/DumpRenderTreeSupportQt.cpp b/src/3rdparty/webkit/Source/WebKit/qt/WebCoreSupport/DumpRenderTreeSupportQt.cpp index 2fc8e84..5d4bf6d 100644 --- a/src/3rdparty/webkit/Source/WebKit/qt/WebCoreSupport/DumpRenderTreeSupportQt.cpp +++ b/src/3rdparty/webkit/Source/WebKit/qt/WebCoreSupport/DumpRenderTreeSupportQt.cpp @@ -677,6 +677,11 @@ void DumpRenderTreeSupportQt::dumpFrameLoader(bool b) FrameLoaderClientQt::dumpFrameLoaderCallbacks = b; } +void DumpRenderTreeSupportQt::dumpProgressFinishedCallback(bool b) +{ + FrameLoaderClientQt::dumpProgressFinishedCallback = b; +} + void DumpRenderTreeSupportQt::dumpUserGestureInFrameLoader(bool b) { FrameLoaderClientQt::dumpUserGestureInFrameLoaderCallbacks = b; diff --git a/src/3rdparty/webkit/Source/WebKit/qt/WebCoreSupport/DumpRenderTreeSupportQt.h b/src/3rdparty/webkit/Source/WebKit/qt/WebCoreSupport/DumpRenderTreeSupportQt.h index 7040ea1..f485cb5 100644 --- a/src/3rdparty/webkit/Source/WebKit/qt/WebCoreSupport/DumpRenderTreeSupportQt.h +++ b/src/3rdparty/webkit/Source/WebKit/qt/WebCoreSupport/DumpRenderTreeSupportQt.h @@ -163,6 +163,7 @@ public: static QString plainText(const QVariant& rng); static void dumpFrameLoader(bool b); + static void dumpProgressFinishedCallback(bool); static void dumpUserGestureInFrameLoader(bool b); static void dumpResourceLoadCallbacks(bool b); static void dumpResourceResponseMIMETypes(bool b); diff --git a/src/3rdparty/webkit/Source/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.cpp b/src/3rdparty/webkit/Source/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.cpp index 8971fc4..5e0a2e6 100644 --- a/src/3rdparty/webkit/Source/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.cpp +++ b/src/3rdparty/webkit/Source/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.cpp @@ -170,6 +170,7 @@ static QString drtDescriptionSuitableForTestResult(const RefPtr<WebCore::Node> n namespace WebCore { bool FrameLoaderClientQt::dumpFrameLoaderCallbacks = false; +bool FrameLoaderClientQt::dumpProgressFinishedCallback = false; bool FrameLoaderClientQt::dumpUserGestureInFrameLoaderCallbacks = false; bool FrameLoaderClientQt::dumpResourceLoadCallbacks = false; bool FrameLoaderClientQt::sendRequestReturnsNullOnRedirect = false; @@ -586,6 +587,9 @@ void FrameLoaderClientQt::postProgressEstimateChangedNotification() void FrameLoaderClientQt::postProgressFinishedNotification() { + if (dumpProgressFinishedCallback) + printf("postProgressFinishedNotification\n"); + // Send a mousemove event to: // (1) update the cursor to change according to whatever is underneath the mouse cursor right now; // (2) display the tool tip if the mouse hovers a node which has a tool tip. diff --git a/src/3rdparty/webkit/Source/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.h b/src/3rdparty/webkit/Source/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.h index 1be365d..1b9d3b8 100644 --- a/src/3rdparty/webkit/Source/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.h +++ b/src/3rdparty/webkit/Source/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.h @@ -247,6 +247,7 @@ public: const KURL& lastRequestedUrl() const { return m_lastRequestedUrl; } static bool dumpFrameLoaderCallbacks; + static bool dumpProgressFinishedCallback; static bool dumpUserGestureInFrameLoaderCallbacks; static bool dumpResourceLoadCallbacks; static bool dumpResourceResponseMIMETypes; diff --git a/src/3rdparty/webkit/Source/WebKit/qt/symbian/eabi/QtWebKitu.def b/src/3rdparty/webkit/Source/WebKit/qt/symbian/eabi/QtWebKitu.def index d948de4..b67d3f8 100644 --- a/src/3rdparty/webkit/Source/WebKit/qt/symbian/eabi/QtWebKitu.def +++ b/src/3rdparty/webkit/Source/WebKit/qt/symbian/eabi/QtWebKitu.def @@ -878,3 +878,6 @@ EXPORTS _ZN8QDRTNodeD1Ev @ 877 NONAME
_ZN8QDRTNodeD2Ev @ 878 NONAME
_ZN8QDRTNodeaSERKS_ @ 879 NONAME
+ _ZN23DumpRenderTreeSupportQt21injectInternalsObjectEP9QWebFrame @ 880 NONAME
+ _ZN23DumpRenderTreeSupportQt20resetInternalsObjectEP9QWebFrame @ 881 NONAME
+ _ZN23DumpRenderTreeSupportQt28dumpProgressFinishedCallbackEb @ 882 NONAME
diff --git a/src/3rdparty/webkit/Source/WebKit/qt/tests/qwebpage/tst_qwebpage.cpp b/src/3rdparty/webkit/Source/WebKit/qt/tests/qwebpage/tst_qwebpage.cpp index 893c284..6102102 100644 --- a/src/3rdparty/webkit/Source/WebKit/qt/tests/qwebpage/tst_qwebpage.cpp +++ b/src/3rdparty/webkit/Source/WebKit/qt/tests/qwebpage/tst_qwebpage.cpp @@ -28,6 +28,7 @@ #include <QMainWindow> #include <QMenu> #include <QPushButton> +#include <QStateMachine> #include <QStyle> #include <QtTest/QtTest> #include <QTextCharFormat> @@ -155,6 +156,8 @@ private slots: void navigatorCookieEnabled(); void deleteQWebViewTwice(); void renderOnRepaintRequestedShouldNotRecurse(); + void loadSignalsOrder_data(); + void loadSignalsOrder(); #ifdef Q_OS_MAC void macCopyUnicodeToClipboard(); @@ -3065,5 +3068,57 @@ void tst_QWebPage::renderOnRepaintRequestedShouldNotRecurse() QVERIFY(::waitForSignal(&r, SIGNAL(finished()))); } +class SpyForLoadSignalsOrder : public QStateMachine { + Q_OBJECT +public: + SpyForLoadSignalsOrder(QWebPage* page, QObject* parent = 0) + : QStateMachine(parent) + { + connect(page, SIGNAL(loadProgress(int)), SLOT(onLoadProgress(int))); + + QState* waitingForLoadStarted = new QState(this); + QState* waitingForLastLoadProgress = new QState(this); + QState* waitingForLoadFinished = new QState(this); + QFinalState* final = new QFinalState(this); + + waitingForLoadStarted->addTransition(page, SIGNAL(loadStarted()), waitingForLastLoadProgress); + waitingForLastLoadProgress->addTransition(this, SIGNAL(lastLoadProgress()), waitingForLoadFinished); + waitingForLoadFinished->addTransition(page, SIGNAL(loadFinished(bool)), final); + + setInitialState(waitingForLoadStarted); + start(); + } + bool isFinished() const + { + return !isRunning(); + } +public Q_SLOTS: + void onLoadProgress(int progress) + { + if (progress == 100) + emit lastLoadProgress(); + } +signals: + void lastLoadProgress(); +}; + +void tst_QWebPage::loadSignalsOrder_data() +{ + QTest::addColumn<QUrl>("url"); + QTest::newRow("inline data") << QUrl("data:text/html,This is first page"); + QTest::newRow("simple page") << QUrl("qrc:///resources/content.html"); + QTest::newRow("frameset page") << QUrl("qrc:///resources/index.html"); +} + +void tst_QWebPage::loadSignalsOrder() +{ + QFETCH(QUrl, url); + QWebPage page; + SpyForLoadSignalsOrder loadSpy(&page); + waitForSignal(&loadSpy, SIGNAL(started())); + page.mainFrame()->load(url); + QTRY_VERIFY(loadSpy.isFinished()); +} + QTEST_MAIN(tst_QWebPage) #include "tst_qwebpage.moc" diff --git a/src/3rdparty/webkit/VERSION b/src/3rdparty/webkit/VERSION index 413f504..6a40345 100644 --- a/src/3rdparty/webkit/VERSION +++ b/src/3rdparty/webkit/VERSION @@ -4,4 +4,4 @@ This is a snapshot of the Qt port of WebKit from and has the sha1 checksum - dda59e50379214c098f365a39c4d64b39ced427e + 64cce100215c71575f19ca0b090c65fa97d4ba10 |