2008-07-30 Beth Dakin <bdakin@apple.com>
Reviewed by Anders Carlsson.
Fixes <rdar://problem/
6041390>
Adds the ability to have a frame that is "disconnected" from the
main frame from the perspective of top and parent in
Javascript.
* WebCore.base.exp:
* page/DOMWindow.cpp:
(WebCore::DOMWindow::parent):
(WebCore::DOMWindow::top):
* page/Frame.cpp:
(WebCore::Frame::isDisconnectedFrame):
(WebCore::Frame::setIsDisconnectedFrame):
(WebCore::FramePrivate::FramePrivate):
* page/Frame.h:
* page/FramePrivate.h:
* page/FrameTree.cpp:
(WebCore::FrameTree::parent):
(WebCore::FrameTree::top):
* page/FrameTree.h:
WebKit/mac:
2008-07-30 Beth Dakin <bdakin@apple.com>
Reviewed by Anders Carlsson.
Fixes <rdar://problem/
6041390>
Adds the ability to have a frame that is "disconnected" from the
main frame from the perspective of top and parent in
Javascript.
* WebView/WebFrame.mm:
(-[WebFrame _setIsDisconnectedFrame]):
* WebView/WebFramePrivate.h:
git-svn-id: https://svn.webkit.org/repository/webkit/trunk@35467
268f45cc-cd09-0410-ab3c-
d52691b4dbfc
+2008-07-30 Beth Dakin <bdakin@apple.com>
+
+ Reviewed by Anders Carlsson.
+
+ Fixes <rdar://problem/6041390>
+
+ Adds the ability to have a frame that is "disconnected" from the
+ main frame from the perspective of top and parent in
+ Javascript.
+
+ * WebCore.base.exp:
+ * page/DOMWindow.cpp:
+ (WebCore::DOMWindow::parent):
+ (WebCore::DOMWindow::top):
+ * page/Frame.cpp:
+ (WebCore::Frame::isDisconnectedFrame):
+ (WebCore::Frame::setIsDisconnectedFrame):
+ (WebCore::FramePrivate::FramePrivate):
+ * page/Frame.h:
+ * page/FramePrivate.h:
+ * page/FrameTree.cpp:
+ (WebCore::FrameTree::parent):
+ (WebCore::FrameTree::top):
+ * page/FrameTree.h:
+
2008-07-25 Eric Seidel <eric@webkit.org>
Reviewed by Justin.
__ZN7WebCore11FrameLoader24setRestrictAccessToLocalEb
__ZN7WebCore11FrameLoader25setProvisionalHistoryItemEN3WTF10PassRefPtrINS_11HistoryItemEEE
__ZN7WebCore11FrameLoader26saveDocumentAndScrollStateEv
-__ZN7WebCore11FrameLoader36saveScrollPositionAndViewStateToItemEPNS_11HistoryItemE
__ZN7WebCore11FrameLoader33loadFrameRequestWithFormAndValuesERKNS_16FrameLoadRequestEbPNS_5EventEPNS_15HTMLFormElementERKN3WTF7HashMapINS_6StringESA_NS_10StringHashENS8_10HashTraitsISA_EESD_EE
+__ZN7WebCore11FrameLoader36saveScrollPositionAndViewStateToItemEPNS_11HistoryItemE
__ZN7WebCore11FrameLoader4loadEPNS_14DocumentLoaderE
__ZN7WebCore11FrameLoader4loadERKNS_15ResourceRequestE
__ZN7WebCore11FrameLoader4loadERKNS_15ResourceRequestERKNS_14SubstituteDataE
__ZN7WebCore5Frame15sendScrollEventEv
__ZN7WebCore5Frame16adjustPageHeightEPffff
__ZN7WebCore5Frame17bindingRootObjectEv
+__ZN7WebCore5Frame17setIsDisconnectedEb
__ZN7WebCore5Frame18windowScriptObjectEv
__ZN7WebCore5Frame20setSelectionFromNoneEv
__ZN7WebCore5Frame21markAllMatchesForTextERKNS_6StringEbj
__ZNK7WebCore9FrameTree24traversePreviousWithWrapEb
__ZNK7WebCore9FrameTree4findERKNS_12AtomicStringE
__ZNK7WebCore9FrameTree5childERKNS_12AtomicStringE
+__ZNK7WebCore9FrameTree6parentEb
__ZNK7WebCore9FrameView11needsLayoutEv
__ZNK7WebCore9Selection17isContentEditableEv
__ZNK7WebCore9Selection19rootEditableElementEv
if (!m_frame)
return 0;
- Frame* parent = m_frame->tree()->parent();
+ Frame* parent = m_frame->tree()->parent(true);
if (parent)
return parent->domWindow();
if (!page)
return 0;
- return page->mainFrame()->domWindow();
+ return m_frame->tree()->top(true)->domWindow();
}
Document* DOMWindow::document() const
return static_cast<RenderPart*>(object);
}
+bool Frame::isDisconnected() const
+{
+ return d->m_isDisconnected;
+}
+
+void Frame::setIsDisconnected(bool isDisconnected)
+{
+ d->m_isDisconnected = isDisconnected;
+}
+
// returns FloatRect because going through IntRect would truncate any floats
FloatRect Frame::selectionRect(bool clipToVisibleContent) const
{
, frameCount(0)
, m_prohibitsScrolling(false)
, m_needsReapplyStyles(false)
+ , m_isDisconnected(false)
#if ENABLE(NETSCAPE_PLUGIN_API)
, m_windowScriptNPObject(0)
#endif
RenderView* contentRenderer() const; // root renderer for the document contained in this frame
RenderPart* ownerRenderer() const; // renderer for the element that contains this frame
+
+ bool isDisconnected() const;
+ void setIsDisconnected(bool);
friend class FramePrivate;
bool m_prohibitsScrolling;
bool m_needsReapplyStyles;
+
+ bool m_isDisconnected;
// The root object used for objects bound outside the context of a plugin.
RefPtr<KJS::Bindings::RootObject> m_bindingRootObject;
m_name = parent()->tree()->uniqueChildName(name);
}
+Frame* FrameTree::parent(bool checkForDisconnectedFrame) const
+{
+ if (checkForDisconnectedFrame && m_thisFrame->isDisconnected())
+ return 0;
+ return m_parent;
+}
+
void FrameTree::appendChild(PassRefPtr<Frame> child)
{
ASSERT(child->page() == m_thisFrame->page());
return result;
}
-Frame* FrameTree::top() const
+Frame* FrameTree::top(bool checkForDisconnectedFrame) const
{
- if (Page* page = m_thisFrame->page())
- return page->mainFrame();
-
Frame* frame = m_thisFrame;
- while (Frame* parent = frame->tree()->parent())
+ for (Frame* parent = m_thisFrame; parent; parent = parent->tree()->parent()) {
frame = parent;
+ if (checkForDisconnectedFrame && frame->isDisconnected())
+ return frame;
+ }
return frame;
}
const AtomicString& name() const { return m_name; }
void setName(const AtomicString&);
- Frame* parent() const { return m_parent; }
+ Frame* parent(bool checkForDisconnectedFrame = false) const;
void setParent(Frame* parent) { m_parent = parent; }
Frame* nextSibling() const { return m_nextSibling.get(); }
AtomicString uniqueChildName(const AtomicString& requestedName) const;
- Frame* top() const;
+ Frame* top(bool checkForDisconnectedFrame = false) const;
private:
Frame* deepLastChild() const;
+2008-07-30 Beth Dakin <bdakin@apple.com>
+
+ Reviewed by Anders Carlsson.
+
+ Fixes <rdar://problem/6041390>
+
+ Adds the ability to have a frame that is "disconnected" from the
+ main frame from the perspective of top and parent in
+ Javascript.
+
+ * WebView/WebFrame.mm:
+ (-[WebFrame _setIsDisconnectedFrame]):
+ * WebView/WebFramePrivate.h:
+
2008-07-29 Mark Rowe <mrowe@apple.com>
Tweak to the build fix to keep Dan happy.
selector:selector];
}
+- (void)_setIsDisconnected:(bool)isDisconnected
+{
+ _private->coreFrame->setIsDisconnected(isDisconnected);
+}
+
#if ENABLE(NETSCAPE_PLUGIN_API)
- (void)_recursive_resumeNullEventsForAllNetscapePlugins
{
- (WebIconFetcher *)fetchApplicationIcon:(id)target
selector:(SEL)selector;
+- (void)_setIsDisconnected:(bool)isDisconnected;
+
#if ENABLE_NETSCAPE_PLUGIN_API
- (void)_recursive_resumeNullEventsForAllNetscapePlugins;
- (void)_recursive_pauseNullEventsForAllNetscapePlugins;