Changeset 62774 in webkit
- Timestamp:
- Jul 8, 2010 2:37:32 AM (14 years ago)
- Location:
- trunk
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/WebCore/ChangeLog
r62772 r62774 1 2010-07-07 Alexander Pavlov <apavlov@chromium.org> 2 3 Reviewed by Darin Fisher. 4 5 [Chromium] Crash when re-entering message loop 6 https://bugs.webkit.org/show_bug.cgi?id=41697 7 8 A Chromium-specific test case will be submitted into Chromium shortly. 9 10 * page/PageGroupLoadDeferrer.cpp: 11 (WebCore::PageGroupLoadDeferrer::PageGroupLoadDeferrer): 12 * page/PageGroupLoadDeferrer.h: 13 (WebCore::PageGroupLoadDeferrer::nextDeferrer): 14 1 15 2010-07-07 Yury Semikhatsky <yurys@chromium.org> 2 16 -
trunk/WebCore/page/PageGroupLoadDeferrer.cpp
r61126 r62774 31 31 using namespace std; 32 32 33 PageGroupLoadDeferrer::PageGroupLoadDeferrer(Page* page, bool deferSelf) 33 PageGroupLoadDeferrer::PageGroupLoadDeferrer(Page* page, bool deferSelf, PageGroupLoadDeferrer* nextDeferrer) 34 : m_nextDeferrer(nextDeferrer) 34 35 { 35 36 const HashSet<Page*>& pages = page->group().pages(); -
trunk/WebCore/page/PageGroupLoadDeferrer.h
r45891 r62774 31 31 class PageGroupLoadDeferrer : public Noncopyable { 32 32 public: 33 PageGroupLoadDeferrer(Page*, bool deferSelf );33 PageGroupLoadDeferrer(Page*, bool deferSelf, PageGroupLoadDeferrer* nextDeferrer = 0); 34 34 ~PageGroupLoadDeferrer(); 35 PageGroupLoadDeferrer* nextDeferrer() { return m_nextDeferrer; } 35 36 36 37 private: 37 38 Vector<RefPtr<Frame>, 16> m_deferredFrames; 39 PageGroupLoadDeferrer* m_nextDeferrer; 38 40 }; 39 41 } -
trunk/WebKit/chromium/ChangeLog
r62770 r62774 1 2010-07-07 Alexander Pavlov <apavlov@chromium.org> 2 3 Reviewed by Darin Fisher. 4 5 [Chromium] Crash when re-entering message loop 6 7 Allow re-entrancy of the message loop by tracking all suspended pages 8 through a PageGroupLoadDeferrer stack. 9 https://bugs.webkit.org/show_bug.cgi?id=41697 10 11 * src/WebViewImpl.cpp: 12 (WebKit::WebView::willEnterModalLoop): 13 (WebKit::WebView::didExitModalLoop): 14 * src/js/Tests.js: 15 (.TestSuite.prototype.evaluateInConsole_): 16 (.TestSuite.prototype.testCompletionOnPause): 17 (.TestSuite.prototype.testMessageLoopReentrant.this): 18 1 19 2010-07-08 David Holloway <dhollowa@chromium.org> 2 20 -
trunk/WebKit/chromium/src/WebViewImpl.cpp
r62743 r62774 186 186 void WebView::willEnterModalLoop() 187 187 { 188 // It is not valid to nest more than once.189 ASSERT(!pageGroupLoadDeferrer);190 191 188 PageGroup* pageGroup = PageGroup::pageGroup(pageGroupName); 192 189 ASSERT(pageGroup); … … 196 193 197 194 // Pick any page in the page group since we are deferring all pages. 198 pageGroupLoadDeferrer = new PageGroupLoadDeferrer(*pageGroup->pages().begin(), true );195 pageGroupLoadDeferrer = new PageGroupLoadDeferrer(*pageGroup->pages().begin(), true, pageGroupLoadDeferrer); 199 196 } 200 197 201 198 void WebView::didExitModalLoop() 202 199 { 200 ASSERT(pageGroupLoadDeferrer); 201 PageGroupLoadDeferrer* nextDeferrer = pageGroupLoadDeferrer->nextDeferrer(); 202 203 203 delete pageGroupLoadDeferrer; 204 pageGroupLoadDeferrer = 0;204 pageGroupLoadDeferrer = nextDeferrer; 205 205 } 206 206 -
trunk/WebKit/chromium/src/js/Tests.js
r62000 r62774 853 853 TestSuite.prototype.evaluateInConsole_ = function(code, callback) 854 854 { 855 WebInspector. console.visible = true;855 WebInspector.showConsole(); 856 856 WebInspector.console.prompt.text = code; 857 857 WebInspector.console.promptElement.dispatchEvent( TestSuite.createKeyEvent("Enter")); … … 953 953 954 954 function showConsole() { 955 test.addSniffer(WebInspector.console, "afterShow", testLocalsCompletion); 956 WebInspector.showConsole(); 955 if (WebInspector.currentFocusElement === WebInspector.console.promptElement) 956 testLocalsCompletion(); 957 else { 958 test.addSniffer(WebInspector.console, "afterShow", testLocalsCompletion); 959 WebInspector.showConsole(); 960 } 957 961 } 958 962 … … 1776 1780 TestSuite.prototype.testConsoleLog = function() 1777 1781 { 1778 WebInspector. console.visible = true;1782 WebInspector.showConsole(); 1779 1783 var messages = WebInspector.console.messages; 1780 1784 var index = 0; … … 1818 1822 TestSuite.prototype.testEvalGlobal = function() 1819 1823 { 1820 WebInspector. console.visible = true;1824 WebInspector.showConsole(); 1821 1825 1822 1826 var inputs = ["foo", "foobar"]; … … 1851 1855 1852 1856 /** 1857 * Tests the message loop re-entrancy. 1858 */ 1859 TestSuite.prototype.testMessageLoopReentrant = function() 1860 { 1861 var test = this; 1862 this.showPanel("scripts"); 1863 1864 var breakpointLine = 16; 1865 1866 WebInspector.showConsole(); 1867 1868 this._waitUntilScriptsAreParsed(["debugger_test_page.html"], 1869 function() { 1870 test.showMainPageScriptSource_( 1871 "debugger_test_page.html", 1872 function(view, url) { 1873 view._addBreakpoint(breakpointLine); 1874 1875 test.evaluateInConsole_( 1876 'setTimeout("calculate()", 0)', 1877 function(resultText) { 1878 test.assertTrue(!isNaN(resultText), "Failed to get timer id: " + resultText); 1879 }); 1880 1881 }); 1882 }); 1883 1884 // Wait until script is paused. 1885 this.addSniffer( 1886 WebInspector, 1887 "pausedScript", 1888 function(callFrames) { 1889 test.evaluateInConsole_( 1890 'document.cookie', 1891 test.releaseControl.bind(test)); // This callback will be invoked only if the test succeeds (i.e. no crash). 1892 }); 1893 1894 this.takeControl(); 1895 }; 1896 1897 1898 /** 1853 1899 * Tests that Storage panel can be open and that local DOM storage is added 1854 1900 * to the panel.
Note: See TracChangeset
for help on using the changeset viewer.