Title: [119219] trunk/Source/WebCore
- Revision
- 119219
- Author
- [email protected]
- Date
- 2012-06-01 05:30:09 -0700 (Fri, 01 Jun 2012)
Log Message
Frame::willDetachPage() shouldn't be called more than once.
https://bugs.webkit.org/show_bug.cgi?id=88056
Reviewed by Ryosuke Niwa.
This change moved willDetachPage() to private and calls it from
detachFromParent(). Also, it checks m_page and call
willDetachPage() only once, if m_page is available.
No new tests. Covered by existing suites.
* loader/FrameLoader.cpp:
(WebCore::FrameLoader::closeAndRemoveChild):
(WebCore::FrameLoader::detachFromParent):
* page/Frame.cpp:
(WebCore::Frame::detachFromPage):
(WebCore):
(WebCore::Frame::willDetachPage):
* page/Frame.h:
(Frame):
* page/Page.cpp:
(WebCore::Page::~Page):
Modified Paths
Diff
Modified: trunk/Source/WebCore/ChangeLog (119218 => 119219)
--- trunk/Source/WebCore/ChangeLog 2012-06-01 12:26:49 UTC (rev 119218)
+++ trunk/Source/WebCore/ChangeLog 2012-06-01 12:30:09 UTC (rev 119219)
@@ -1,3 +1,28 @@
+2012-06-01 MORITA Hajime <[email protected]>
+
+ Frame::willDetachPage() shouldn't be called more than once.
+ https://bugs.webkit.org/show_bug.cgi?id=88056
+
+ Reviewed by Ryosuke Niwa.
+
+ This change moved willDetachPage() to private and calls it from
+ detachFromParent(). Also, it checks m_page and call
+ willDetachPage() only once, if m_page is available.
+
+ No new tests. Covered by existing suites.
+
+ * loader/FrameLoader.cpp:
+ (WebCore::FrameLoader::closeAndRemoveChild):
+ (WebCore::FrameLoader::detachFromParent):
+ * page/Frame.cpp:
+ (WebCore::Frame::detachFromPage):
+ (WebCore):
+ (WebCore::Frame::willDetachPage):
+ * page/Frame.h:
+ (Frame):
+ * page/Page.cpp:
+ (WebCore::Page::~Page):
+
2012-06-01 Pierre Rossi <[email protected]>
[Qt] Support drawing a pattern with a translation.
Modified: trunk/Source/WebCore/loader/FrameLoader.cpp (119218 => 119219)
--- trunk/Source/WebCore/loader/FrameLoader.cpp 2012-06-01 12:26:49 UTC (rev 119218)
+++ trunk/Source/WebCore/loader/FrameLoader.cpp 2012-06-01 12:30:09 UTC (rev 119219)
@@ -2266,7 +2266,6 @@
child->setView(0);
if (child->ownerElement() && child->page())
child->page()->decrementFrameCount();
- child->willDetachPage();
child->detachFromPage();
m_frame->tree()->removeChild(child);
@@ -2345,7 +2344,6 @@
parent->loader()->scheduleCheckCompleted();
} else {
m_frame->setView(0);
- m_frame->willDetachPage();
m_frame->detachFromPage();
}
}
Modified: trunk/Source/WebCore/page/Frame.cpp (119218 => 119219)
--- trunk/Source/WebCore/page/Frame.cpp 2012-06-01 12:26:49 UTC (rev 119218)
+++ trunk/Source/WebCore/page/Frame.cpp 2012-06-01 12:30:09 UTC (rev 119219)
@@ -689,18 +689,23 @@
return m_domWindow.get();
}
-void Frame::willDetachPage()
+void Frame::detachFromPage()
{
if (Frame* parent = tree()->parent())
parent->loader()->checkLoadComplete();
+ if (m_page)
+ willDetachPage();
+ m_page = 0;
+}
+
+void Frame::willDetachPage()
+{
HashSet<FrameDestructionObserver*>::iterator stop = m_destructionObservers.end();
for (HashSet<FrameDestructionObserver*>::iterator it = m_destructionObservers.begin(); it != stop; ++it)
(*it)->willDetachPage();
- // FIXME: It's unclear as to why this is called more than once, but it is,
- // so page() could be NULL.
- if (page() && page()->focusController()->focusedFrame() == this)
+ if (page()->focusController()->focusedFrame() == this)
page()->focusController()->setFocusedFrame(0);
script()->clearScriptObjects();
Modified: trunk/Source/WebCore/page/Frame.h (119218 => 119219)
--- trunk/Source/WebCore/page/Frame.h 2012-06-01 12:26:49 UTC (rev 119218)
+++ trunk/Source/WebCore/page/Frame.h 2012-06-01 12:30:09 UTC (rev 119219)
@@ -91,7 +91,6 @@
void addDestructionObserver(FrameDestructionObserver*);
void removeDestructionObserver(FrameDestructionObserver*);
- void willDetachPage();
void detachFromPage();
void disconnectOwnerElement();
@@ -207,6 +206,7 @@
Frame(Page*, HTMLFrameOwnerElement*, FrameLoaderClient*);
void injectUserScriptsForWorld(DOMWrapperWorld*, const UserScriptVector&, UserScriptInjectionTime);
+ void willDetachPage();
HashSet<FrameDestructionObserver*> m_destructionObservers;
@@ -351,11 +351,6 @@
return m_page;
}
- inline void Frame::detachFromPage()
- {
- m_page = 0;
- }
-
inline EventHandler* Frame::eventHandler() const
{
return &m_eventHandler;
Modified: trunk/Source/WebCore/page/Page.cpp (119218 => 119219)
--- trunk/Source/WebCore/page/Page.cpp 2012-06-01 12:26:49 UTC (rev 119218)
+++ trunk/Source/WebCore/page/Page.cpp 2012-06-01 12:30:09 UTC (rev 119219)
@@ -187,10 +187,8 @@
setGroupName(String());
allPages->remove(this);
- for (Frame* frame = mainFrame(); frame; frame = frame->tree()->traverseNext()) {
- frame->willDetachPage();
+ for (Frame* frame = mainFrame(); frame; frame = frame->tree()->traverseNext())
frame->detachFromPage();
- }
m_editorClient->pageDestroyed();
if (m_alternativeTextClient)
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes