summaryrefslogtreecommitdiffstats
path: root/WebCore/html/HTMLFrameElementBase.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'WebCore/html/HTMLFrameElementBase.cpp')
-rw-r--r--WebCore/html/HTMLFrameElementBase.cpp326
1 files changed, 0 insertions, 326 deletions
diff --git a/WebCore/html/HTMLFrameElementBase.cpp b/WebCore/html/HTMLFrameElementBase.cpp
deleted file mode 100644
index 1c80155..0000000
--- a/WebCore/html/HTMLFrameElementBase.cpp
+++ /dev/null
@@ -1,326 +0,0 @@
-/*
- * Copyright (C) 1999 Lars Knoll (knoll@kde.org)
- * (C) 1999 Antti Koivisto (koivisto@kde.org)
- * (C) 2000 Simon Hausmann (hausmann@kde.org)
- * (C) 2001 Dirk Mueller (mueller@kde.org)
- * Copyright (C) 2004, 2006, 2008 Apple Inc. All rights reserved.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB. If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#include "config.h"
-#include "HTMLFrameElementBase.h"
-
-#include "CSSHelper.h"
-#include "Document.h"
-#include "EventNames.h"
-#include "FocusController.h"
-#include "Frame.h"
-#include "FrameLoader.h"
-#include "FrameTree.h"
-#include "FrameView.h"
-#include "HTMLFrameSetElement.h"
-#include "HTMLNames.h"
-#include "KURL.h"
-#include "Page.h"
-#include "RenderFrame.h"
-#include "Settings.h"
-
-namespace WebCore {
-
-using namespace HTMLNames;
-
-HTMLFrameElementBase::HTMLFrameElementBase(const QualifiedName& tagName, Document *doc)
- : HTMLFrameOwnerElement(tagName, doc)
- , m_scrolling(ScrollbarAuto)
- , m_marginWidth(-1)
- , m_marginHeight(-1)
- , m_noResize(false)
- , m_viewSource(false)
- , m_shouldOpenURLAfterAttach(false)
-{
-}
-
-bool HTMLFrameElementBase::isURLAllowed(const AtomicString& URLString) const
-{
- if (URLString.isEmpty())
- return true;
-
- const KURL& completeURL = document()->completeURL(URLString);
-
- // Don't allow more than 200 total frames in a set. This seems
- // like a reasonable upper bound, and otherwise mutually recursive
- // frameset pages can quickly bring the program to its knees with
- // exponential growth in the number of frames.
- // FIXME: This limit could be higher, but because WebKit has some
- // algorithms that happen while loading which appear to be N^2 or
- // worse in the number of frames, we'll keep it at 200 for now.
- if (Frame* parentFrame = document()->frame()) {
- if (parentFrame->page()->frameCount() > 200)
- return false;
- }
-
- // We allow one level of self-reference because some sites depend on that.
- // But we don't allow more than one.
- bool foundSelfReference = false;
- for (Frame* frame = document()->frame(); frame; frame = frame->tree()->parent()) {
- if (equalIgnoringRef(frame->loader()->url(), completeURL)) {
- if (foundSelfReference)
- return false;
- foundSelfReference = true;
- }
- }
-
- return true;
-}
-
-void HTMLFrameElementBase::openURL()
-{
- ASSERT(!m_frameName.isEmpty());
-
- if (!isURLAllowed(m_URL))
- return;
-
- if (m_URL.isEmpty())
- m_URL = blankURL().string();
-
- Frame* parentFrame = document()->frame();
- if (!parentFrame)
- return;
-
- parentFrame->loader()->requestFrame(this, m_URL, m_frameName);
- if (contentFrame())
- contentFrame()->setInViewSourceMode(viewSourceMode());
-}
-
-void HTMLFrameElementBase::parseMappedAttribute(MappedAttribute *attr)
-{
- if (attr->name() == srcAttr)
- setLocation(parseURL(attr->value()));
- else if (attr->name() == idAttr) {
- // Important to call through to base for the id attribute so the hasID bit gets set.
- HTMLFrameOwnerElement::parseMappedAttribute(attr);
- m_frameName = attr->value();
- } else if (attr->name() == nameAttr) {
- m_frameName = attr->value();
- // FIXME: If we are already attached, this doesn't actually change the frame's name.
- // FIXME: If we are already attached, this doesn't check for frame name
- // conflicts and generate a unique frame name.
- } else if (attr->name() == marginwidthAttr) {
- m_marginWidth = attr->value().toInt();
- // FIXME: If we are already attached, this has no effect.
- } else if (attr->name() == marginheightAttr) {
- m_marginHeight = attr->value().toInt();
- // FIXME: If we are already attached, this has no effect.
- } else if (attr->name() == noresizeAttr) {
- m_noResize = true;
- // FIXME: If we are already attached, this has no effect.
- } else if (attr->name() == scrollingAttr) {
- // Auto and yes both simply mean "allow scrolling." No means "don't allow scrolling."
- if (equalIgnoringCase(attr->value(), "auto") || equalIgnoringCase(attr->value(), "yes"))
- m_scrolling = ScrollbarAuto;
- else if (equalIgnoringCase(attr->value(), "no"))
- m_scrolling = ScrollbarAlwaysOff;
- // FIXME: If we are already attached, this has no effect.
- } else if (attr->name() == viewsourceAttr) {
- m_viewSource = !attr->isNull();
- if (contentFrame())
- contentFrame()->setInViewSourceMode(viewSourceMode());
- } else if (attr->name() == onloadAttr) {
- setInlineEventListenerForTypeAndAttribute(eventNames().loadEvent, attr);
- } else if (attr->name() == onbeforeunloadAttr) {
- // FIXME: should <frame> elements have beforeunload handlers?
- setInlineEventListenerForTypeAndAttribute(eventNames().beforeunloadEvent, attr);
- } else
- HTMLFrameOwnerElement::parseMappedAttribute(attr);
-}
-
-void HTMLFrameElementBase::setNameAndOpenURL()
-{
- m_frameName = getAttribute(nameAttr);
- if (m_frameName.isNull())
- m_frameName = getAttribute(idAttr);
-
- if (Frame* parentFrame = document()->frame())
- m_frameName = parentFrame->tree()->uniqueChildName(m_frameName);
-
- openURL();
-}
-
-void HTMLFrameElementBase::setNameAndOpenURLCallback(Node* n)
-{
- static_cast<HTMLFrameElementBase*>(n)->setNameAndOpenURL();
-}
-
-void HTMLFrameElementBase::insertedIntoDocument()
-{
- HTMLFrameOwnerElement::insertedIntoDocument();
-
- // We delay frame loading until after the render tree is fully constructed.
- // Othewise, a synchronous load that executed JavaScript would see incorrect
- // (0) values for the frame's renderer-dependent properties, like width.
- m_shouldOpenURLAfterAttach = true;
-}
-
-void HTMLFrameElementBase::removedFromDocument()
-{
- m_shouldOpenURLAfterAttach = false;
-
- HTMLFrameOwnerElement::removedFromDocument();
-}
-
-void HTMLFrameElementBase::attach()
-{
- if (m_shouldOpenURLAfterAttach) {
- m_shouldOpenURLAfterAttach = false;
- queuePostAttachCallback(&HTMLFrameElementBase::setNameAndOpenURLCallback, this);
- }
-
- HTMLFrameOwnerElement::attach();
-
- if (RenderPart* renderPart = static_cast<RenderPart*>(renderer()))
- if (Frame* frame = contentFrame())
- renderPart->setWidget(frame->view());
-}
-
-KURL HTMLFrameElementBase::location() const
-{
- return src();
-}
-
-void HTMLFrameElementBase::setLocation(const String& str)
-{
- Settings* settings = document()->settings();
- if (settings && settings->needsAcrobatFrameReloadingQuirk() && m_URL == str)
- return;
-
- m_URL = AtomicString(str);
-
- if (inDocument())
- openURL();
-}
-
-bool HTMLFrameElementBase::isFocusable() const
-{
- return renderer();
-}
-
-void HTMLFrameElementBase::setFocus(bool received)
-{
- HTMLFrameOwnerElement::setFocus(received);
- if (Page* page = document()->page())
- page->focusController()->setFocusedFrame(received ? contentFrame() : 0);
-}
-
-bool HTMLFrameElementBase::isURLAttribute(Attribute *attr) const
-{
- return attr->name() == srcAttr;
-}
-
-String HTMLFrameElementBase::frameBorder() const
-{
- return getAttribute(frameborderAttr);
-}
-
-void HTMLFrameElementBase::setFrameBorder(const String &value)
-{
- setAttribute(frameborderAttr, value);
-}
-
-String HTMLFrameElementBase::longDesc() const
-{
- return getAttribute(longdescAttr);
-}
-
-void HTMLFrameElementBase::setLongDesc(const String &value)
-{
- setAttribute(longdescAttr, value);
-}
-
-String HTMLFrameElementBase::marginHeight() const
-{
- return getAttribute(marginheightAttr);
-}
-
-void HTMLFrameElementBase::setMarginHeight(const String &value)
-{
- setAttribute(marginheightAttr, value);
-}
-
-String HTMLFrameElementBase::marginWidth() const
-{
- return getAttribute(marginwidthAttr);
-}
-
-void HTMLFrameElementBase::setMarginWidth(const String &value)
-{
- setAttribute(marginwidthAttr, value);
-}
-
-String HTMLFrameElementBase::name() const
-{
- return getAttribute(nameAttr);
-}
-
-void HTMLFrameElementBase::setName(const String &value)
-{
- setAttribute(nameAttr, value);
-}
-
-void HTMLFrameElementBase::setNoResize(bool noResize)
-{
- setAttribute(noresizeAttr, noResize ? "" : 0);
-}
-
-String HTMLFrameElementBase::scrolling() const
-{
- return getAttribute(scrollingAttr);
-}
-
-void HTMLFrameElementBase::setScrolling(const String &value)
-{
- setAttribute(scrollingAttr, value);
-}
-
-KURL HTMLFrameElementBase::src() const
-{
- return document()->completeURL(getAttribute(srcAttr));
-}
-
-void HTMLFrameElementBase::setSrc(const String &value)
-{
- setAttribute(srcAttr, value);
-}
-
-int HTMLFrameElementBase::width() const
-{
- if (!renderer())
- return 0;
-
- document()->updateLayoutIgnorePendingStylesheets();
- return renderer()->width();
-}
-
-int HTMLFrameElementBase::height() const
-{
- if (!renderer())
- return 0;
-
- document()->updateLayoutIgnorePendingStylesheets();
- return renderer()->height();
-}
-
-} // namespace WebCore