Changeset 29369 in webkit
- Timestamp:
- Jan 10, 2008 1:23:34 PM (16 years ago)
- Location:
- trunk
- Files:
-
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/WebCore/ChangeLog
r29368 r29369 1 2008-01-10 Adam Roben <aroben@apple.com> 2 3 Fixes to allow multiple FrameViews on Windows 4 5 Reviewed by Hyatt. 6 7 * page/FrameView.cpp: 8 (WebCore::FrameView::FrameView): Added a new constructor that takes an 9 IntSize to specify the FrameView's initial size. 10 (WebCore::FrameView::scheduleRelayout): Added an assertion that our 11 Document is not in the page cache. 12 * page/FrameView.h: 13 * platform/gtk/WidgetGtk.cpp: 14 (WebCore::Widget::~Widget): Add a warm, fuzzy ASSERT. 15 * platform/qt/WidgetQt.cpp: 16 (WebCore::Widget::~Widget): Ditto. 17 * rendering/RenderWidget.cpp: 18 (WebCore::RenderWidget::setWidget): Make sure to remove any existing 19 Widget from the Widget hierarchy before deleting it. One instance 20 where this is needed is when setWidget is called during FrameView 21 creation on Windows. 22 1 23 2008-01-10 Alp Toker <alp@atoker.com> 2 24 -
trunk/WebCore/page/FrameView.cpp
r29002 r29369 144 144 show(); 145 145 } 146 147 #if !PLATFORM(MAC) 148 FrameView::FrameView(Frame* frame, const IntSize& initialSize) 149 : m_refCount(1) 150 , m_frame(frame) 151 , d(new FrameViewPrivate(this)) 152 { 153 init(); 154 Widget::setFrameGeometry(IntRect(x(), y(), initialSize.width(), initialSize.height())); 155 show(); 156 } 157 #endif 146 158 147 159 FrameView::~FrameView() … … 700 712 void FrameView::scheduleRelayout() 701 713 { 714 ASSERT(!m_frame->document() || !m_frame->document()->inPageCache()); 702 715 ASSERT(m_frame->view() == this); 703 716 -
trunk/WebCore/page/FrameView.h
r28371 r29369 51 51 public: 52 52 FrameView(Frame*); 53 54 // On the Mac, FrameViews always get their size from the underlying NSView, 55 // so passing in a size is nonsensical. 56 #if !PLATFORM(MAC) 57 FrameView(Frame*, const IntSize& initialSize); 58 #endif 59 53 60 virtual ~FrameView(); 54 61 -
trunk/WebCore/platform/gtk/WidgetGtk.cpp
r28728 r29369 80 80 Widget::~Widget() 81 81 { 82 ASSERT(!parent()); 82 83 delete data; 83 84 } -
trunk/WebCore/platform/qt/WidgetQt.cpp
r29166 r29369 80 80 Widget::~Widget() 81 81 { 82 Q_ASSERT(!parent()); 82 83 delete data; 83 84 data = 0; -
trunk/WebCore/rendering/RenderWidget.cpp
r27263 r29369 126 126 if (widget != m_widget) { 127 127 if (m_widget) { 128 // removeFromParent is a no-op on Mac. 129 m_widget->removeFromParent(); 128 130 widgetRendererMap().remove(m_widget); 129 131 deleteWidget(); -
trunk/WebKit/win/ChangeLog
r29347 r29369 1 2008-01-10 Adam Roben <aroben@apple.com> 2 3 Fix many bugs by giving Windows one FrameView per page load 4 5 Bugs include: 6 <rdar://5659200> 7 Windows back/forward cache causes crashes in the layout tests 8 <rdar://5659355> 9 <http://bugs.webkit.org/show_bug.cgi?id=16808> 10 REGRESSION: PLT broken on Windows due to back/forward cache 11 <rdar://5663654> 12 <http://bugs.webkit.org/show_bug.cgi?id=16607> 13 Random crashes in FrameView::scheduleRelayout while surfing 14 Thinkgeek 15 16 On Windows until now we've only had one FrameView per Frame. Once the 17 back/forward cache was turned on this started causing assertions to 18 fail and crashes to occur due to a single FrameView being both in the 19 back/forward cache (possibly multiple times!) and used by a live 20 document. We now create a new FrameView for each page load, just as 21 Mac does. 22 23 This has the side-effect of plugging some of the world leaks seen at 24 the end of the PLT. 25 26 Reviewed by Hyatt. 27 28 * WebFrame.cpp: 29 (WebFrame::initWithWebFrameView): Don't create the FrameView right 30 away -- it'll be created when the load is committed. 31 (WebFrame::transitionToCommittedFromCachedPage): Match the Mac by no 32 longer calling resetMultipleFormSubmissionProtection here. 33 (WebFrame::transitionToCommittedForNewPage): Ported code from 34 -[WebCoreFrameBridge 35 createFrameViewWithNSView:marginWidth:marginHeight:], 36 -[WebCoreFrameBridge installInFrame:], and moved code here from 37 WebFrame::initWithWebFrameView and WebView::initWithFrame. WebCore 38 takes care of resetMultipleFormSubmissionProtection, just like it does 39 on the Mac. 40 * WebView.cpp: 41 (WebView::initWithFrame): Moved FrameView initialization code to 42 WebFrame::transitionToCommittedForNewPage. 43 1 44 2008-01-09 Ada Chan <adachan@apple.com> 2 45 -
trunk/WebKit/win/WebFrame.cpp
r28822 r29369 1070 1070 Frame* frame = new Frame(page, ownerElement, this); 1071 1071 d->frame = frame; 1072 1073 FrameView* frameView = new FrameView(frame);1074 1075 frame->setView(frameView);1076 frameView->deref(); // FrameViews are created with a ref count of 1. Release this ref since we've assigned it to frame.1077 1078 frameView->setContainingWindow(viewWindow);1079 1072 } 1080 1073 … … 1839 1832 void WebFrame::transitionToCommittedFromCachedPage(CachedPage*) 1840 1833 { 1841 transitionToCommittedForNewPage();1842 1834 } 1843 1835 1844 1836 void WebFrame::transitionToCommittedForNewPage() 1845 1837 { 1846 ASSERT(core(this)); 1847 1848 // On the mac, this is done in Frame::setView, but since we don't have separate 1849 // frame views, we'll just do it here instead. 1850 core(this)->loader()->resetMultipleFormSubmissionProtection(); 1838 Frame* frame = core(this); 1839 ASSERT(frame); 1840 1841 Page* page = frame->page(); 1842 ASSERT(page); 1843 1844 bool isMainFrame = frame == page->mainFrame(); 1845 1846 if (isMainFrame && frame->view()) 1847 frame->view()->detachFromWindow(); 1848 1849 frame->setView(0); 1850 1851 FrameView* frameView; 1852 if (isMainFrame) { 1853 RECT rect; 1854 d->webView->frameRect(&rect); 1855 frameView = new FrameView(frame, IntRect(rect).size()); 1856 } else 1857 frameView = new FrameView(frame); 1858 1859 frame->setView(frameView); 1860 frameView->deref(); // FrameViews are created with a ref count of 1. Release this ref since we've assigned it to frame. 1861 1862 HWND viewWindow; 1863 if (SUCCEEDED(d->webView->viewWindow(reinterpret_cast<OLE_HANDLE*>(&viewWindow)))) 1864 frameView->setContainingWindow(viewWindow); 1865 1866 if (isMainFrame) 1867 frameView->attachToWindow(); 1868 1869 if (frame->ownerRenderer()) 1870 frame->ownerRenderer()->setWidget(frameView); 1851 1871 } 1852 1872 -
trunk/WebKit/win/WebView.cpp
r29347 r29369 2061 2061 m_mainFrame = webFrame; 2062 2062 webFrame->Release(); // The WebFrame is owned by the Frame, so release our reference to it. 2063 m_page->mainFrame()->view()->attachToWindow();2064 m_page->mainFrame()->view()->resize(frame.right - frame.left, frame.bottom - frame.top);2065 2063 2066 2064 m_page->mainFrame()->tree()->setName(String(frameName, SysStringLen(frameName)));
Note: See TracChangeset
for help on using the changeset viewer.