Changeset 80718 in webkit
- Timestamp:
- Mar 10, 2011 7:17:57 AM (13 years ago)
- Location:
- trunk
- Files:
-
- 1 deleted
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r80717 r80718 1 2011-03-10 Pavel Feldman <pfeldman@chromium.org> 2 3 Not reviewed: rolling out r80478 and its follow ups for breaking 4 inspector and engadget.com. 5 https://bugs.webkit.org/show_bug.cgi?id=49401 6 7 * platform/gtk/Skipped: 8 1 9 2011-03-10 Philippe Normand <pnormand@igalia.com> 2 10 -
trunk/LayoutTests/platform/gtk/Skipped
r80717 r80718 189 189 # https://bugs.webkit.org/show_bug.cgi?id=55135 190 190 http/tests/incremental/slow-utf8-html.pl 191 192 # https://bugs.webkit.org/show_bug.cgi?id=55941193 inspector/console/console-api-on-call-frame.html194 inspector/debugger/debug-inlined-scripts.html195 inspector/debugger/debugger-cyclic-ref.html196 inspector/debugger/debugger-eval-on-call-frame.html197 inspector/debugger/debugger-eval-while-paused.html198 inspector/debugger/debugger-expand-scope.html199 inspector/debugger/debugger-no-nested-pause.html200 inspector/debugger/debugger-pause-in-eval-script.html201 inspector/debugger/debugger-pause-on-breakpoint.html202 inspector/debugger/debugger-pause-on-debugger-statement.html203 inspector/debugger/debugger-pause-on-exception.html204 inspector/debugger/debugger-proto-property.html205 inspector/debugger/debugger-step-in.html206 inspector/debugger/debugger-step-over.html207 inspector/debugger/debugger-suspend-active-dom-objects.html208 inspector/extensions/extensions-resources.html209 191 210 192 ############################################################################### -
trunk/Source/WebCore/ChangeLog
r80716 r80718 1 2011-03-10 Pavel Feldman <pfeldman@chromium.org> 2 3 Not reviewed: rolling out r80478 and its follow ups for breaking 4 inspector and engadget.com. 5 https://bugs.webkit.org/show_bug.cgi?id=49401 6 7 * dom/Document.cpp: 8 (WebCore::Document::Document): 9 (WebCore::performTask): 10 (WebCore::Document::postTask): 11 * dom/Document.h: 12 * loader/FrameLoader.cpp: 13 (WebCore::FrameLoader::setDefersLoading): 14 * manual-tests/database-callback-deferred.html: Removed. 15 * page/PageGroupLoadDeferrer.cpp: 16 (WebCore::PageGroupLoadDeferrer::PageGroupLoadDeferrer): 17 (WebCore::PageGroupLoadDeferrer::~PageGroupLoadDeferrer): 18 1 19 2011-03-10 Gustavo Noronha Silva <gustavo.noronha@collabora.co.uk> 2 20 -
trunk/Source/WebCore/dom/Document.cpp
r80507 r80718 8 8 * Copyright (C) 2008, 2009 Google Inc. All rights reserved. 9 9 * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies) 10 * Copyright (C) Research In Motion, Limited 2010-2011.11 10 * 12 11 * This library is free software; you can redistribute it and/or … … 438 437 , m_writeRecursionIsTooDeep(false) 439 438 , m_writeRecursionDepth(0) 440 , m_pendingTasksTimer(this, &Document::pendingTasksTimerFired)441 439 { 442 440 m_document = this; … … 4719 4717 }; 4720 4718 4721 void Document::didReceiveTask(void* untypedContext)4719 static void performTask(void* ctx) 4722 4720 { 4723 4721 ASSERT(isMainThread()); 4724 4722 4725 OwnPtr<PerformTaskContext> context = adoptPtr(static_cast<PerformTaskContext*>(untypedContext));4723 PerformTaskContext* context = reinterpret_cast<PerformTaskContext*>(ctx); 4726 4724 ASSERT(context); 4727 4725 4728 Document* document = context->documentReference->document(); 4729 if (!document) 4730 return; 4731 4732 Page* page = document->page(); 4733 if ((page && page->defersLoading()) || !document->m_pendingTasks.isEmpty()) { 4734 document->m_pendingTasks.append(context->task.release()); 4735 return; 4736 } 4737 4738 context->task->performTask(document); 4726 if (Document* document = context->documentReference->document()) 4727 context->task->performTask(document); 4728 4729 delete context; 4739 4730 } 4740 4731 4741 4732 void Document::postTask(PassOwnPtr<Task> task) 4742 4733 { 4743 callOnMainThread(didReceiveTask, new PerformTaskContext(m_weakReference, task)); 4744 } 4745 4746 void Document::pendingTasksTimerFired(Timer<Document>*) 4747 { 4748 while (!m_pendingTasks.isEmpty()) { 4749 OwnPtr<Task> task = m_pendingTasks[0].release(); 4750 m_pendingTasks.remove(0); 4751 task->performTask(this); 4752 } 4753 } 4754 4755 void Document::suspendScheduledTasks() 4756 { 4757 suspendScriptedAnimationControllerCallbacks(); 4758 suspendActiveDOMObjects(ActiveDOMObject::WillShowDialog); 4759 asyncScriptRunner()->suspend(); 4760 m_pendingTasksTimer.stop(); 4761 if (m_parser) 4762 m_parser->suspendScheduledTasks(); 4763 } 4764 4765 void Document::resumeScheduledTasks() 4766 { 4767 if (m_parser) 4768 m_parser->resumeScheduledTasks(); 4769 if (!m_pendingTasks.isEmpty()) 4770 m_pendingTasksTimer.startOneShot(0); 4771 asyncScriptRunner()->resume(); 4772 resumeActiveDOMObjects(); 4773 resumeScriptedAnimationControllerCallbacks(); 4734 callOnMainThread(performTask, new PerformTaskContext(m_weakReference, task)); 4774 4735 } 4775 4736 -
trunk/Source/WebCore/dom/Document.h
r80478 r80718 1123 1123 ContentSecurityPolicy* contentSecurityPolicy() { return m_contentSecurityPolicy.get(); } 1124 1124 1125 void suspendScheduledTasks();1126 void resumeScheduledTasks();1127 1128 1125 protected: 1129 1126 Document(Frame*, const KURL&, bool isXHTML, bool isHTML); … … 1171 1168 1172 1169 void loadEventDelayTimerFired(Timer<Document>*); 1173 1174 void pendingTasksTimerFired(Timer<Document>*);1175 1176 static void didReceiveTask(void*);1177 1170 1178 1171 OwnPtr<CSSStyleSelector> m_styleSelector; … … 1442 1435 1443 1436 RefPtr<ContentSecurityPolicy> m_contentSecurityPolicy; 1444 1445 Timer<Document> m_pendingTasksTimer;1446 Vector<OwnPtr<Task> > m_pendingTasks;1447 1437 }; 1448 1438 -
trunk/Source/WebCore/loader/FrameLoader.cpp
r80478 r80718 254 254 startCheckCompleteTimer(); 255 255 } 256 257 // This code is not logically part of load deferring, but we do not want JS code executed beneath modal258 // windows or sheets, which is exactly when PageGroupLoadDeferrer is used.259 if (defers)260 m_frame->document()->suspendScheduledTasks();261 else262 m_frame->document()->resumeScheduledTasks();263 256 } 264 257 -
trunk/Source/WebCore/page/PageGroupLoadDeferrer.cpp
r80478 r80718 40 40 for (HashSet<Page*>::const_iterator it = pages.begin(); it != end; ++it) { 41 41 Page* otherPage = *it; 42 if ((deferSelf || otherPage != page) && !otherPage->defersLoading()) 43 m_deferredFrames.append(otherPage->mainFrame()); 42 if ((deferSelf || otherPage != page)) { 43 if (!otherPage->defersLoading()) { 44 m_deferredFrames.append(otherPage->mainFrame()); 45 46 // This code is not logically part of load deferring, but we do not want JS code executed beneath modal 47 // windows or sheets, which is exactly when PageGroupLoadDeferrer is used. 48 // NOTE: if PageGroupLoadDeferrer is ever used for tasks other than showing a modal window or sheet, 49 // the constructor will need to take a ActiveDOMObject::ReasonForSuspension. 50 for (Frame* frame = otherPage->mainFrame(); frame; frame = frame->tree()->traverseNext()) { 51 frame->document()->suspendScriptedAnimationControllerCallbacks(); 52 frame->document()->suspendActiveDOMObjects(ActiveDOMObject::WillShowDialog); 53 frame->document()->asyncScriptRunner()->suspend(); 54 if (DocumentParser* parser = frame->document()->parser()) 55 parser->suspendScheduledTasks(); 56 } 57 } 58 } 44 59 } 45 60 … … 53 68 { 54 69 for (size_t i = 0; i < m_deferredFrames.size(); ++i) { 55 if (Page* page = m_deferredFrames[i]->page()) 70 if (Page* page = m_deferredFrames[i]->page()) { 56 71 page->setDefersLoading(false); 72 73 for (Frame* frame = page->mainFrame(); frame; frame = frame->tree()->traverseNext()) { 74 frame->document()->resumeActiveDOMObjects(); 75 frame->document()->resumeScriptedAnimationControllerCallbacks(); 76 frame->document()->asyncScriptRunner()->resume(); 77 if (DocumentParser* parser = frame->document()->parser()) 78 parser->resumeScheduledTasks(); 79 } 80 } 57 81 } 58 82 }
Note: See TracChangeset
for help on using the changeset viewer.