Changeset 15170 in webkit


Ignore:
Timestamp:
Jul 5, 2006 2:29:41 PM (18 years ago)
Author:
andersca
Message:

WebCore:

2006-07-05 Anders Carlsson <acarlsson@apple.com>

Reviewed by Maciej.

http://bugzilla.opendarwin.org/show_bug.cgi?id=3581
iFrames set to display:none are Missing from frames array

  • bridge/mac/FrameMac.h:
  • bridge/mac/FrameMac.mm: (WebCore::FrameMac::FrameMac): (WebCore::FrameMac::createFrame):
  • bridge/mac/WebCoreFrameBridge.h:
  • bridge/mac/WebCoreFrameBridge.mm: (-[WebCoreFrameBridge initSubframeWithOwnerElement:]): (-[WebCoreFrameBridge installInFrame:]): Modify to pass the owner element instead of the owner renderer.
  • dom/ContainerNode.cpp: (WebCore::ContainerNode::insertBefore): (WebCore::ContainerNode::replaceChild): (WebCore::ContainerNode::appendChild): Dispatch the node inserted events before attaching the nodes. This is what the tokenizer does.


  • html/HTMLFrameElement.cpp: (WebCore::HTMLFrameElement::openURL): (WebCore::HTMLFrameElement::attach): Pass the element to requestFrame.


(WebCore::HTMLFrameElement::setLocation):
Don't call attach/detach on an iframe.

  • html/HTMLIFrameElement.cpp: (WebCore::HTMLIFrameElement::insertedIntoDocument): Load the frame here (using openURL).


(WebCore::HTMLIFrameElement::removedFromDocument):
Call frameDetached.


(WebCore::HTMLIFrameElement::attach):
If there's a renderer, attach the content frame to it.


(WebCore::HTMLIFrameElement::detach):
Reset the renderer's frame.


(WebCore::HTMLIFrameElement::openURL):
Modify to request the frame.


  • html/HTMLIFrameElement.h: Add detach.


  • page/Frame.cpp: (WebCore::parentFromOwnerElement): (WebCore::Frame::Frame): (WebCore::Frame::~Frame): (WebCore::Frame::requestFrame): (WebCore::Frame::requestObject): (WebCore::Frame::loadSubframe): (WebCore::Frame::ownerElement): (WebCore::Frame::ownerRenderer): (WebCore::Frame::disconnectOwnerElement):
  • page/Frame.h:
  • page/FramePrivate.h: (WebCore::FramePrivate::FramePrivate):
  • rendering/RenderPart.cpp: (WebCore::RenderPart::setFrame): Modify to keep an owner element around instead of the renderer.


  • rendering/RenderPartObject.cpp: (WebCore::RenderPartObject::updateWidget): Don't do anything for iframes.

WebKit:

2006-07-05 Anders Carlsson <acarlsson@apple.com>

Reviewed by Maciej.

http://bugzilla.opendarwin.org/show_bug.cgi?id=3581
iFrames set to display:none are Missing from frames array


  • WebCoreSupport/WebFrameBridge.m: (-[WebFrameBridge initSubframeWithOwnerElement:frameName:view:]): (-[WebFrameBridge createChildFrameNamed:withURL:referrer:ownerElement:allowsScrolling:marginWidth:marginHeight:]): Modify to pass the owner element instead of the owner renderer.


  • WebView/WebHTMLView.m: (-[WebHTMLView _topHTMLView]): Remove assertion, it's not valid anymore.

LayoutTests:

2006-07-05 Anders Carlsson <acarlsson@apple.com>

Reviewed by Maciej.

http://bugzilla.opendarwin.org/show_bug.cgi?id=3581
iFrames set to display:none are Missing from frames array

  • fast/events/mouseover-mouseout2-expected.txt:
  • fast/events/mouseover-mouseout2.html: Update expected result. Since we now keep the frame around, the mouseout event is now dispatched to the element in the frame.
  • fast/events/onloadFrameCrash-expected.checksum:
  • fast/events/onloadFrameCrash-expected.png:
  • fast/events/onloadFrameCrash-expected.txt: This does hide the frame now.


  • fast/frames/iframe-display-none-expected.txt: Added.
  • fast/frames/iframe-display-none.html: Added.
  • fast/frames/resources/iframe-display-none-child.html: Added. New test that tests JS interaction with frames.


  • fast/frames/iframe-double-attach-expected.txt: Added.
  • fast/frames/iframe-double-attach.html: Added.
Location:
trunk
Files:
5 added
24 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r15158 r15170  
     12006-07-05  Anders Carlsson  <acarlsson@apple.com>
     2
     3        Reviewed by Maciej.
     4
     5        http://bugzilla.opendarwin.org/show_bug.cgi?id=3581
     6        iFrames set to display:none are Missing from frames array
     7
     8        * fast/events/mouseover-mouseout2-expected.txt:
     9        * fast/events/mouseover-mouseout2.html:
     10        Update expected result. Since we now keep the frame around, the mouseout event is
     11        now dispatched to the element in the frame.
     12
     13        * fast/events/onloadFrameCrash-expected.checksum:
     14        * fast/events/onloadFrameCrash-expected.png:
     15        * fast/events/onloadFrameCrash-expected.txt:
     16        This does hide the frame now.
     17       
     18        * fast/frames/iframe-display-none-expected.txt: Added.
     19        * fast/frames/iframe-display-none.html: Added.
     20        * fast/frames/resources/iframe-display-none-child.html: Added.
     21        New test that tests JS interaction with frames.
     22       
     23        * fast/frames/iframe-double-attach-expected.txt: Added.
     24        * fast/frames/iframe-double-attach.html: Added.
     25       
    1262006-07-04  Maciej Stachowiak  <mjs@apple.com>
    227
  • trunk/LayoutTests/fast/events/mouseover-mouseout2-expected.txt

    r13402 r15170  
    2222mouseover on frame3
    2323mouseover on t3_1
     24mouseout on t3_1
    2425mouseout on frame3
    2526mouseover on t3_2
     
    4849mouseover on frame3
    4950mouseover on t3_1
     51mouseout on t3_1
    5052mouseout on frame3
    5153mouseover on t3_2
  • trunk/LayoutTests/fast/events/mouseover-mouseout2.html

    r13402 r15170  
    224224<tr>
    225225    <td id=log style="vertical-align:top"></td>
    226     <td id=exp style="vertical-align:top"><LI>mouseover on frame1</LI><LI>mouseover on t1</LI><LI>mouseout on t1</LI><LI>mouseout on frame1</LI><LI>mouseover on frame2</LI><LI>mouseover on t2</LI><LI>mouseout on t2</LI><LI>mouseout on frame2</LI><LI>mouseover on frame3</LI><LI>mouseover on t3_1</LI><LI>mouseout on frame3</LI><LI>mouseover on t3_2</LI><LI>mouseout on t3_2</LI><LI>mouseover on t4_2</LI><LI>mouseout on t4_2</LI><LI>mouseover on frame4</LI><LI>mouseover on t4_1</LI><LI>mouseout on t4_1</LI><LI>mouseout on frame4</LI><LI>mouseover on frame5</LI><LI>mouseover on t5_1</LI><LI>mouseout on frame5</LI><LI>mouseover on t5_2</LI><LI>mouseout on t5_2</LI><LI>mouseover on t6</LI><LI>mouseout on t6</LI></td>
     226    <td id=exp style="vertical-align:top"><LI>mouseover on frame1</LI><LI>mouseover on t1</LI><LI>mouseout on t1</LI><LI>mouseout on frame1</LI><LI>mouseover on frame2</LI><LI>mouseover on t2</LI><LI>mouseout on t2</LI><LI>mouseout on frame2</LI><LI>mouseover on frame3</LI><LI>mouseover on t3_1</LI><LI>mouseout on t3_1</LI><LI>mouseout on frame3</LI><LI>mouseover on t3_2</LI><LI>mouseout on t3_2</LI><LI>mouseover on t4_2</LI><LI>mouseout on t4_2</LI><LI>mouseover on frame4</LI><LI>mouseover on t4_1</LI><LI>mouseout on t4_1</LI><LI>mouseout on frame4</LI><LI>mouseover on frame5</LI><LI>mouseover on t5_1</LI><LI>mouseout on frame5</LI><LI>mouseover on t5_2</LI><LI>mouseout on t5_2</LI><LI>mouseover on t6</LI><LI>mouseout on t6</LI></td>
    227227</tr>
    228228</table>
  • trunk/LayoutTests/fast/events/onloadFrameCrash-expected.checksum

    r11995 r15170  
    1 cbc367633746909085889bdfe6ac90ce
     1853de00567d121bea0b7bece66a5d61c
  • trunk/LayoutTests/fast/events/onloadFrameCrash-expected.txt

    r14684 r15170  
    33layer at (0,0) size 800x600
    44  RenderBlock {HTML} at (0,0) size 800x600
    5     RenderBody {BODY} at (8,8) size 784x584
    6       RenderPartObject {IFRAME} at (0,0) size 300x150
    7       RenderText {#text} at (300,136) size 92x18
    8         text run at (300,136) width 92: "This is the text"
  • trunk/WebCore/ChangeLog

    r15154 r15170  
     12006-07-05  Anders Carlsson  <acarlsson@apple.com>
     2
     3        Reviewed by Maciej.
     4
     5        http://bugzilla.opendarwin.org/show_bug.cgi?id=3581
     6        iFrames set to display:none are Missing from frames array
     7
     8        * bridge/mac/FrameMac.h:
     9        * bridge/mac/FrameMac.mm:
     10        (WebCore::FrameMac::FrameMac):
     11        (WebCore::FrameMac::createFrame):
     12        * bridge/mac/WebCoreFrameBridge.h:
     13        * bridge/mac/WebCoreFrameBridge.mm:
     14        (-[WebCoreFrameBridge initSubframeWithOwnerElement:]):
     15        (-[WebCoreFrameBridge installInFrame:]):
     16        Modify to pass the owner element instead of the owner renderer.       
     17
     18        * dom/ContainerNode.cpp:
     19        (WebCore::ContainerNode::insertBefore):
     20        (WebCore::ContainerNode::replaceChild):
     21        (WebCore::ContainerNode::appendChild):
     22        Dispatch the node inserted events before attaching the nodes. This is what the
     23        tokenizer does.
     24       
     25        * html/HTMLFrameElement.cpp:
     26        (WebCore::HTMLFrameElement::openURL):
     27        (WebCore::HTMLFrameElement::attach):
     28        Pass the element to requestFrame.
     29       
     30        (WebCore::HTMLFrameElement::setLocation):
     31        Don't call attach/detach on an iframe.
     32
     33        * html/HTMLIFrameElement.cpp:
     34        (WebCore::HTMLIFrameElement::insertedIntoDocument):
     35        Load the frame here (using openURL).
     36       
     37        (WebCore::HTMLIFrameElement::removedFromDocument):
     38        Call frameDetached.
     39       
     40        (WebCore::HTMLIFrameElement::attach):
     41        If there's a renderer, attach the content frame to it.
     42       
     43        (WebCore::HTMLIFrameElement::detach):
     44        Reset the renderer's frame.
     45       
     46        (WebCore::HTMLIFrameElement::openURL):
     47        Modify to request the frame.
     48       
     49        * html/HTMLIFrameElement.h:
     50        Add detach.
     51       
     52        * page/Frame.cpp:
     53        (WebCore::parentFromOwnerElement):
     54        (WebCore::Frame::Frame):
     55        (WebCore::Frame::~Frame):
     56        (WebCore::Frame::requestFrame):
     57        (WebCore::Frame::requestObject):
     58        (WebCore::Frame::loadSubframe):
     59        (WebCore::Frame::ownerElement):
     60        (WebCore::Frame::ownerRenderer):
     61        (WebCore::Frame::disconnectOwnerElement):
     62        * page/Frame.h:
     63        * page/FramePrivate.h:
     64        (WebCore::FramePrivate::FramePrivate):       
     65        * rendering/RenderPart.cpp:
     66        (WebCore::RenderPart::setFrame):
     67        Modify to keep an owner element around instead of the renderer.
     68       
     69        * rendering/RenderPartObject.cpp:
     70        (WebCore::RenderPartObject::updateWidget):
     71        Don't do anything for iframes.
     72
    1732006-07-04  Kevin Ollivier  <kevino@theolliviers.com>
    274
  • trunk/WebCore/WebCore.xcodeproj/project.pbxproj

    r15154 r15170  
    73477347                        isa = XCBuildConfiguration;
    73487348                        buildSettings = {
     7349                                DEBUG_INFORMATION_FORMAT = dwarf;
    73497350                                FEATURE_DEFINES = "SVG_SUPPORT XPATH_SUPPORT";
    73507351                                GCC_ENABLE_CPP_EXCEPTIONS = NO;
     
    73837384                        isa = XCBuildConfiguration;
    73847385                        buildSettings = {
     7386                                DEBUG_INFORMATION_FORMAT = dwarf;
    73857387                                FEATURE_DEFINES = "SVG_SUPPORT XPATH_SUPPORT";
    73867388                                GCC_ENABLE_CPP_EXCEPTIONS = NO;
     
    74197421                        isa = XCBuildConfiguration;
    74207422                        buildSettings = {
     7423                                DEBUG_INFORMATION_FORMAT = dwarf;
    74217424                                FEATURE_DEFINES = "SVG_SUPPORT XPATH_SUPPORT";
    74227425                                GCC_ENABLE_CPP_EXCEPTIONS = NO;
  • trunk/WebCore/bridge/mac/FrameMac.h

    r15090 r15170  
    113113{
    114114public:
    115     FrameMac(Page*, RenderPart*);
     115    FrameMac(Page*, Element*);
    116116    ~FrameMac();
    117117   
     
    139139    virtual void redirectDataToPlugin(Widget* pluginWidget);
    140140
    141     virtual Frame* createFrame(const KURL& url, const String& name, RenderPart* renderer, const String& referrer);
     141    virtual Frame* createFrame(const KURL& url, const String& name, Element* ownerElement, const String& referrer);
    142142
    143143    virtual void scheduleClose();
  • trunk/WebCore/bridge/mac/FrameMac.mm

    r15109 r15170  
    149149}
    150150
    151 FrameMac::FrameMac(Page* page, RenderPart* ownerRenderer)
    152     : Frame(page, ownerRenderer)
     151FrameMac::FrameMac(Page* page, Element* ownerElement)
     152    : Frame(page, ownerElement)
    153153    , _bridge(nil)
    154154    , _mouseDownView(nil)
     
    540540
    541541
    542 Frame* FrameMac::createFrame(const KURL& url, const String& name, RenderPart* renderer, const String& referrer)
     542Frame* FrameMac::createFrame(const KURL& url, const String& name, Element* ownerElement, const String& referrer)
    543543{
    544544    BEGIN_BLOCK_OBJC_EXCEPTIONS;
     
    547547    int marginWidth = -1;
    548548    int marginHeight = -1;
    549     if (renderer->element()->hasTagName(frameTag) || renderer->element()->hasTagName(iframeTag)) {
    550         HTMLFrameElement* o = static_cast<HTMLFrameElement*>(renderer->element());
     549    if (ownerElement->hasTagName(frameTag) || ownerElement->hasTagName(iframeTag)) {
     550        HTMLFrameElement* o = static_cast<HTMLFrameElement*>(ownerElement);
    551551        allowsScrolling = o->scrollingMode() != ScrollBarAlwaysOff;
    552552        marginWidth = o->getMarginWidth();
     
    557557                                                             withURL:url.getNSURL()
    558558                                                            referrer:referrer
    559                                                           renderPart:renderer
     559                                                          ownerElement:ownerElement
    560560                                                     allowsScrolling:allowsScrolling
    561561                                                         marginWidth:marginWidth
  • trunk/WebCore/bridge/mac/WebCoreFrameBridge.h

    r15106 r15170  
    3636namespace WebCore {
    3737    class FrameMac;
    38     class RenderPart;
     38    class Element;
    3939}
    4040
    4141typedef WebCore::FrameMac WebCoreMacFrame;
    42 typedef WebCore::RenderPart WebCoreRenderPart;
     42typedef WebCore::Element WebCoreElement;
    4343
    4444#else
    4545
    4646@class WebCoreMacFrame;
    47 @class WebCoreRenderPart;
     47@class WebCoreElement;
    4848@class RenderArena;
    4949
     
    190190
    191191- (id)initMainFrameWithPage:(WebCorePageBridge *)page;
    192 - (id)initSubframeWithRenderer:(WebCoreRenderPart *)renderer;
     192- (id)initSubframeWithOwnerElement:(WebCoreElement *)ownerElement;
    193193
    194194- (void)close;
     
    536536- (WebCoreFrameBridge *)createChildFrameNamed:(NSString *)frameName withURL:(NSURL *)URL
    537537    referrer:(NSString *)referrer
    538     renderPart:(WebCoreRenderPart *)renderPart
     538    ownerElement:(WebCoreElement *)ownerElement
    539539    allowsScrolling:(BOOL)allowsScrolling marginWidth:(int)width marginHeight:(int)height;
    540540
  • trunk/WebCore/bridge/mac/WebCoreFrameBridge.mm

    r15106 r15170  
    465465}
    466466
    467 - (id)initSubframeWithRenderer:(RenderPart *)renderer
     467- (id)initSubframeWithOwnerElement:(Element *)ownerElement
    468468{
    469469    if (!(self = [super init]))
    470470        return nil;
    471471   
    472     m_frame = new FrameMac(renderer->node()->document()->frame()->page(), renderer);
     472    m_frame = new FrameMac(ownerElement->document()->frame()->page(), ownerElement);
    473473    m_frame->setBridge(self);
    474474    _shouldCreateRenderers = YES;
     
    10071007    // If this isn't the main frame, it must have a render m_frame set, or it
    10081008    // won't ever get installed in the view hierarchy.
    1009     ASSERT(self == [[self page] mainFrame] || m_frame->ownerRenderer());
     1009    ASSERT(self == [[self page] mainFrame] || m_frame->ownerElement());
    10101010
    10111011    m_frame->view()->setView(view);
  • trunk/WebCore/dom/ContainerNode.cpp

    r14916 r15170  
    198198        allowEventDispatch();
    199199
     200        // Dispatch the mutation events.
     201        dispatchChildInsertionEvents(child.get(), ec);
     202               
    200203        // Add child to the rendering tree.
    201204        if (attached() && !child->attached())
    202205            child->attach();
    203 
    204         // Dispatch the mutation events.
    205         dispatchChildInsertionEvents(child.get(), ec);
    206206
    207207        child = nextChild.release();
     
    302302        allowEventDispatch();
    303303
     304        // Dispatch the mutation events
     305        dispatchChildInsertionEvents(child.get(), ec);
     306               
    304307        // Add child to the rendering tree
    305308        if (attached() && !child->attached())
    306309            child->attach();
    307 
    308         // Dispatch the mutation events
    309         dispatchChildInsertionEvents(child.get(), ec);
    310310
    311311        prev = child;
     
    521521        allowEventDispatch();
    522522
     523        // Dispatch the mutation events
     524        dispatchChildInsertionEvents(child.get(), ec);
     525               
    523526        // Add child to the rendering tree
    524527        // ### should we detach() it first if it's already attached?
     
    526529            child->attach();
    527530       
    528         // Dispatch the mutation events
    529         dispatchChildInsertionEvents(child.get(), ec);
    530 
    531531        child = nextChild.release();
    532532    }
  • trunk/WebCore/html/HTMLFrameElement.cpp

    r15050 r15170  
    123123        childFrame->openURL(document()->completeURL(relativeURL.deprecatedString()));
    124124    else
    125         parentFrame->requestFrame(static_cast<RenderFrame *>(renderer()), relativeURL, m_name);
     125        parentFrame->requestFrame(this, relativeURL, m_name);
    126126}
    127127
     
    221221
    222222    // load the frame contents
    223     frame->requestFrame(static_cast<RenderFrame*>(renderer()), relativeURL, m_name);
     223    frame->requestFrame(this, relativeURL, m_name);
    224224   
    225225    if (contentFrame())
     
    267267    // Handle the common case where we decided not to make a frame the first time.
    268268    // Detach and the let attach() decide again whether to make the frame for this URL.
    269     if (!renderer()) {
     269    if (!renderer() && !hasTagName(iframeTag)) {
    270270        detach();
    271271        attach();
  • trunk/WebCore/html/HTMLIFrameElement.cpp

    r14334 r15170  
    4949HTMLIFrameElement::~HTMLIFrameElement()
    5050{
     51    if (Frame* frame = contentFrame()) {
     52        frame->disconnectOwnerElement();
     53        frame->page()->decrementFrameCount();
     54        frame->frameDetached();
     55        ASSERT(!contentFrame());
     56    }   
    5157}
    5258
     
    94100
    95101    HTMLElement::insertedIntoDocument();
     102   
     103    // Load the frame
     104    m_name = getAttribute(nameAttr);
     105    if (m_name.isNull())
     106        m_name = getAttribute(idAttr);
     107   
     108    Frame* parentFrame = document()->frame();
     109    if (parentFrame) {
     110        parentFrame->page()->incrementFrameCount();
     111        m_name = parentFrame->tree()->uniqueChildName(m_name);
     112       
     113        openURL();
     114    }   
    96115}
    97116
     
    103122    }
    104123
     124    if (Frame* frame = contentFrame()) {
     125        frame->disconnectOwnerElement();
     126        frame->page()->decrementFrameCount();
     127        frame->frameDetached();
     128        ASSERT(!contentFrame());
     129    }
     130   
    105131    HTMLElement::removedFromDocument();
    106132}
     
    119145void HTMLIFrameElement::attach()
    120146{
    121     m_name = getAttribute(nameAttr);
    122     if (m_name.isNull())
    123         m_name = getAttribute(idAttr);
    124 
    125147    HTMLElement::attach();
    126148
    127     Frame* parentFrame = document()->frame();
    128     if (renderer() && parentFrame) {
    129         parentFrame->page()->incrementFrameCount();
    130         m_name = parentFrame->tree()->uniqueChildName(m_name);
    131         static_cast<RenderPartObject*>(renderer())->updateWidget();
     149    RenderPartObject* renderPart = static_cast<RenderPartObject*>(renderer());
     150
     151    if (renderPart) {       
     152        if (!contentFrame())
     153            openURL();
     154       
     155        renderPart->setFrame(contentFrame());
     156        renderPart->setWidget(contentFrame()->view());
     157        renderPart->updateWidget();
    132158        needWidgetUpdate = false;
    133159    }
    134160}
     161
     162void HTMLIFrameElement::detach()
     163{
     164    RenderPartObject* renderPart = static_cast<RenderPartObject*>(renderer());
     165   
     166    if (renderPart)
     167        renderPart->setFrame(0);
     168   
     169    HTMLElement::detach();
     170}
     171
    135172
    136173void HTMLIFrameElement::recalcStyle( StyleChange ch )
     
    146183void HTMLIFrameElement::openURL()
    147184{
    148     needWidgetUpdate = true;
    149     setChanged();
     185    if (!isURLAllowed(m_URL))
     186        return;
     187    if (m_URL.isEmpty())
     188        m_URL = "about:blank";
     189   
     190    document()->frame()->requestFrame(this, m_URL, m_name);
     191    if (contentFrame())
     192        contentFrame()->setInViewSourceMode(viewSourceMode());
    150193}
    151194
  • trunk/WebCore/html/HTMLIFrameElement.h

    r14334 r15170  
    4747
    4848    virtual void attach();
     49    virtual void detach();
    4950    virtual bool rendererIsNeeded(RenderStyle*);
    5051    virtual RenderObject *createRenderer(RenderArena*, RenderStyle*);
  • trunk/WebCore/page/Frame.cpp

    r15097 r15170  
    140140#endif
    141141
    142 static inline Frame* parentFromOwnerRenderer(RenderPart* ownerRenderer)
    143 {
    144     if (!ownerRenderer)
     142static inline Frame* parentFromOwnerElement(Element* ownerElement)
     143{
     144    if (!ownerElement)
    145145        return 0;
    146     return ownerRenderer->node()->document()->frame();
    147 }
    148 
    149 Frame::Frame(Page* page, RenderPart* ownerRenderer)
    150     : d(new FramePrivate(page, parentFromOwnerRenderer(ownerRenderer), this, ownerRenderer))
     146    return ownerElement->document()->frame();
     147}
     148
     149Frame::Frame(Page* page, Element* ownerElement)
     150    : d(new FramePrivate(page, parentFromOwnerElement(ownerElement), this, ownerElement))
    151151{
    152152    AtomicString::init();
     
    170170#endif
    171171
    172     if (ownerRenderer)
    173         ownerRenderer->setFrame(this);
     172    if (ownerRenderer())
     173        ownerRenderer()->setFrame(this);
    174174}
    175175
     
    206206    for (HashSet<Frame*>::iterator it = openedBy.begin(); it != end; ++it)
    207207        (*it)->setOpener(0);
    208 
    209     if (d->m_ownerRenderer)
    210         d->m_ownerRenderer->setFrame(0);
    211     ASSERT(!d->m_ownerRenderer);
    212 
     208   
     209    if (ownerRenderer()) {
     210        ownerRenderer()->setFrame(0);
     211        ASSERT(!d->m_ownerElement);
     212    }
     213   
    213214    if (d->m_view) {
    214215        d->m_view->hide();
     
    13811382}
    13821383
    1383 bool Frame::requestFrame(RenderPart* renderer, const String& urlParam, const AtomicString& frameName)
     1384bool Frame::requestFrame(Element* ownerElement, const String& urlParam, const AtomicString& frameName)
    13841385{
    13851386    DeprecatedString _url = urlParam.deprecatedString();
     
    14001401        frame->openURLRequest(request);
    14011402    } else
    1402         frame = loadSubframe(renderer, url, frameName, d->m_referrer);
     1403        frame = loadSubframe(ownerElement, url, frameName, d->m_referrer);
    14031404   
    14041405    if (!frame)
     
    14261427
    14271428    // FIXME: ok to always make a new one? when does the old frame get removed?
    1428     return loadSubframe(renderer, completedURL, frameName, d->m_referrer);
     1429    return loadSubframe(static_cast<Element*>(renderer->element()), completedURL, frameName, d->m_referrer);
    14291430}
    14301431
     
    14721473}
    14731474
    1474 Frame* Frame::loadSubframe(RenderPart* renderer, const KURL& url, const String& name, const String& referrer)
    1475 {
    1476     Frame* frame = createFrame(url, name, renderer, referrer);
     1475Frame* Frame::loadSubframe(Element* ownerElement, const KURL& url, const String& name, const String& referrer)
     1476{
     1477    Frame* frame = createFrame(url, name, ownerElement, referrer);
    14771478    if (!frame)  {
    14781479        checkEmitLoadEvent();
     
    14821483    frame->childBegin();
    14831484   
    1484     if (renderer && frame->view())
    1485         renderer->setWidget(frame->view());
     1485    if (ownerElement->renderer() && frame->view())
     1486        static_cast<RenderWidget*>(ownerElement->renderer())->setWidget(frame->view());
    14861487   
    14871488    checkEmitLoadEvent();
     
    25962597Element* Frame::ownerElement()
    25972598{
    2598     RenderPart* ownerElementRenderer = d->m_ownerRenderer;
    2599     if (!ownerElementRenderer)
     2599    return d->m_ownerElement;
     2600}
     2601
     2602RenderPart* Frame::ownerRenderer()
     2603{
     2604    Element* ownerElement = d->m_ownerElement;
     2605    if (!ownerElement)
    26002606        return 0;
    2601     return static_cast<Element*>(ownerElementRenderer->element());
    2602 }
    2603 
    2604 RenderPart* Frame::ownerRenderer()
    2605 {
    2606     return d->m_ownerRenderer;
     2607    return static_cast<RenderPart*>(ownerElement->renderer());
    26072608}
    26082609
     
    35813582}
    35823583
    3583 void Frame::disconnectOwnerRenderer()
    3584 {
    3585     d->m_ownerRenderer = 0;
     3584void Frame::disconnectOwnerElement()
     3585{
     3586    d->m_ownerElement = 0;
    35863587}
    35873588
  • trunk/WebCore/page/Frame.h

    r15050 r15170  
    9797  enum { NoXPosForVerticalArrowNavigation = INT_MIN };
    9898
    99   Frame(Page*, RenderPart*);
     99  Frame(Page*, Element*);
    100100  virtual ~Frame();
    101101
     
    579579protected:
    580580  virtual Plugin* createPlugin(Element* node, const KURL& url, const Vector<String>& paramNames, const Vector<String>& paramValues, const String& mimeType) = 0;
    581   virtual Frame* createFrame(const KURL& url, const String& name, RenderPart* renderer, const String& referrer) = 0;
     581  virtual Frame* createFrame(const KURL& url, const String& name, Element* ownerElement, const String& referrer) = 0;
    582582  virtual ObjectContentType objectContentType(const KURL& url, const String& mimeType) = 0;
    583583
     
    618618  bool loadPlugin(RenderPart* renderer, const KURL& url, const String& mimeType,
    619619                  const Vector<String>& paramNames, const Vector<String>& paramValues, bool useFallback);
    620   Frame* loadSubframe(RenderPart* renderer, const KURL& url, const String& name, const String& referrer);
     620  Frame* loadSubframe(Element* ownerElement, const KURL& url, const String& name, const String& referrer);
    621621
    622622public:
     
    627627  bool requestObject(RenderPart* frame, const String& url, const AtomicString& frameName,
    628628                     const String& serviceType, const Vector<String>& paramNames, const Vector<String>& paramValues);
    629   bool requestFrame(RenderPart* frame, const String& url, const AtomicString& frameName);
     629  bool requestFrame(Element* ownerElement, const String& url, const AtomicString& frameName);
    630630
    631631  Document* document() const;
     
    746746  void replaceContentsWithScriptResult(const KURL& url);
    747747
    748     void disconnectOwnerRenderer();
     748    void disconnectOwnerElement();
    749749
    750750    void setNeedsReapplyStyles();
  • trunk/WebCore/page/FramePrivate.h

    r15050 r15170  
    5656    class FramePrivate {
    5757    public:
    58         FramePrivate(Page* page, Frame* parent, Frame* thisFrame, RenderPart* ownerRenderer)
     58        FramePrivate(Page* page, Frame* parent, Frame* thisFrame, Element* ownerElement)
    5959            : m_page(page)
    6060            , m_treeNode(thisFrame, parent)
    61             , m_ownerRenderer(ownerRenderer)
     61            , m_ownerElement(ownerElement)
    6262            , m_extension(0)
    6363            , m_jscript(0)
     
    119119        Vector<RefPtr<Plugin> > m_plugins;
    120120
    121         RenderPart* m_ownerRenderer;
     121        Element* m_ownerElement;
    122122        RefPtr<FrameView> m_view;
    123123        BrowserExtension* m_extension;
  • trunk/WebCore/rendering/RenderPart.cpp

    r14334 r15170  
    6464    if (frame == m_frame)
    6565        return;
     66
    6667    if (m_frame)
    67         m_frame->disconnectOwnerRenderer();
     68        m_frame->disconnectOwnerElement();
    6869    m_frame = frame;
    6970}
  • trunk/WebCore/rendering/RenderPartObject.cpp

    r15050 r15170  
    236236      }
    237237      frame->requestObject(this, url, o->getAttribute(nameAttr), serviceType, paramNames, paramValues);
    238   } else {
    239       assert(element()->hasTagName(iframeTag));
    240       HTMLIFrameElement* o = static_cast<HTMLIFrameElement*>(element());
    241       url = o->m_URL;
    242       if (!isURLAllowed(document(), url))
    243           return;
    244       if (url.isEmpty())
    245           url = "about:blank";
    246       FrameView* v = static_cast<FrameView*>(m_view);
    247       v->frame()->requestFrame(this, url, o->m_name);
    248       if (o->contentFrame())
    249           o->contentFrame()->setInViewSourceMode(o->viewSourceMode());
    250238  }
    251239}
  • trunk/WebKit/ChangeLog

    r15169 r15170  
     12006-07-05  Anders Carlsson  <acarlsson@apple.com>
     2
     3        Reviewed by Maciej.
     4
     5        http://bugzilla.opendarwin.org/show_bug.cgi?id=3581
     6        iFrames set to display:none are Missing from frames array
     7       
     8        * WebCoreSupport/WebFrameBridge.m:
     9        (-[WebFrameBridge initSubframeWithOwnerElement:frameName:view:]):
     10        (-[WebFrameBridge createChildFrameNamed:withURL:referrer:ownerElement:allowsScrolling:marginWidth:marginHeight:]):
     11        Modify to pass the owner element instead of the owner renderer.
     12       
     13        * WebView/WebHTMLView.m:
     14        (-[WebHTMLView _topHTMLView]):
     15        Remove assertion, it's not valid anymore.
     16
    1172006-07-05  Timothy Hatcher  <timothy@apple.com>
    218
     
    925        * WebKit.xcodeproj/project.pbxproj:
    1026
     27>>>>>>> .r15169
    11282006-07-04  Timothy Hatcher  <timothy@apple.com>
    1229
  • trunk/WebKit/WebCoreSupport/WebFrameBridge.m

    r15159 r15170  
    127127}
    128128
    129 - (id)initSubframeWithRenderer:(WebCoreRenderPart *)renderer frameName:(NSString *)name view:(WebFrameView *)view
    130 {
    131     self = [super initSubframeWithRenderer:renderer];
     129- (id)initSubframeWithOwnerElement:(WebCoreElement *)ownerElement frameName:(NSString *)name view:(WebFrameView *)view
     130{
     131    self = [super initSubframeWithOwnerElement:ownerElement];
    132132
    133133    ++WebBridgeCount;
     
    749749                                      withURL:(NSURL *)URL
    750750                                     referrer:(NSString *)referrer
    751                                    renderPart:(WebCoreRenderPart *)childRenderPart
     751                                   ownerElement:(WebCoreElement *)ownerElement
    752752                              allowsScrolling:(BOOL)allowsScrolling
    753753                                  marginWidth:(int)width
     
    762762    WebFrameView *childView = [[WebFrameView alloc] initWithFrame:NSMakeRect(0,0,0,0)];
    763763    [childView setAllowsScrolling:allowsScrolling];
    764     WebFrameBridge *newBridge = [[WebFrameBridge alloc] initSubframeWithRenderer:childRenderPart frameName:frameName view:childView];
     764    WebFrameBridge *newBridge = [[WebFrameBridge alloc] initSubframeWithOwnerElement:ownerElement frameName:frameName view:childView];
    765765    [_frame _addChild:[newBridge webFrame]];
    766766    [childView release];
  • trunk/WebKit/WebView/WebHTMLView.m

    r15106 r15170  
    888888    WebHTMLView *view = (WebHTMLView *)[[[[_private->dataSource _webView] mainFrame] frameView] documentView];
    889889    ASSERT([view isKindOfClass:[WebHTMLView class]]);
    890     ASSERT([self isDescendantOf:view]);
    891890    return view;
    892891}
Note: See TracChangeset for help on using the changeset viewer.