18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/**
28e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * (C) 1999-2003 Lars Knoll (knoll@kde.org)
38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Copyright (C) 2004, 2006 Apple Computer, Inc.
48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * This library is free software; you can redistribute it and/or
68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * modify it under the terms of the GNU Library General Public
78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * License as published by the Free Software Foundation; either
88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * version 2 of the License, or (at your option) any later version.
98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * This library is distributed in the hope that it will be useful,
118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * but WITHOUT ANY WARRANTY; without even the implied warranty of
128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Library General Public License for more details.
148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * You should have received a copy of the GNU Library General Public License
168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * along with this library; see the file COPYING.LIB.  If not, write to
178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Boston, MA 02110-1301, USA.
198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */
208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "config.h"
218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "StyleSheet.h"
228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "MediaList.h"
246b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner#include "Node.h"
258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectnamespace WebCore {
278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
288a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve BlockStyleSheet::StyleSheet(StyleSheet* parentSheet, const String& originalURL, const KURL& finalURL)
298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    : StyleList(parentSheet)
308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    , m_parentNode(0)
318a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block    , m_originalURL(originalURL)
328a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block    , m_finalURL(finalURL)
338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    , m_disabled(false)
348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
378a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve BlockStyleSheet::StyleSheet(Node* parentNode, const String& originalURL, const KURL& finalURL)
388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    : StyleList(0)
398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    , m_parentNode(parentNode)
408a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block    , m_originalURL(originalURL)
418a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block    , m_finalURL(finalURL)
428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    , m_disabled(false)
438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
468a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve BlockStyleSheet::StyleSheet(StyleBase* owner, const String& originalURL, const KURL& finalURL)
478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    : StyleList(owner)
488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    , m_parentNode(0)
498a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block    , m_originalURL(originalURL)
508a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block    , m_finalURL(finalURL)
518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    , m_disabled(false)
528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectStyleSheet::~StyleSheet()
568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (m_media)
588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        m_media->setParent(0);
594a156157940f51b91eadd76f6c86f862ec0a1da0Ben Murdoch
604a156157940f51b91eadd76f6c86f862ec0a1da0Ben Murdoch    // For style rules outside the document, .parentStyleSheet can become null even if the style rule
614a156157940f51b91eadd76f6c86f862ec0a1da0Ben Murdoch    // is still observable from JavaScript. This matches the behavior of .parentNode for nodes, but
624a156157940f51b91eadd76f6c86f862ec0a1da0Ben Murdoch    // it's not ideal because it makes the CSSOM's behavior depend on the timing of garbage collection.
634a156157940f51b91eadd76f6c86f862ec0a1da0Ben Murdoch    for (unsigned i = 0; i < length(); ++i) {
644a156157940f51b91eadd76f6c86f862ec0a1da0Ben Murdoch        ASSERT(item(i)->parent() == this);
654a156157940f51b91eadd76f6c86f862ec0a1da0Ben Murdoch        item(i)->setParent(0);
664a156157940f51b91eadd76f6c86f862ec0a1da0Ben Murdoch    }
678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectStyleSheet* StyleSheet::parentStyleSheet() const
708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return (parent() && parent()->isStyleSheet()) ? static_cast<StyleSheet*>(parent()) : 0;
728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid StyleSheet::setMedia(PassRefPtr<MediaList> media)
758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (m_media)
778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        m_media->setParent(0);
788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    m_media = media;
808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    m_media->setParent(this);
818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
83635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source ProjectKURL StyleSheet::completeURL(const String& url) const
84635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{
85635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    // Always return a null URL when passed a null string.
86635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    // FIXME: Should we change the KURL constructor to have this behavior?
87635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    // See also Document::completeURL(const String&)
88635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    if (url.isNull())
89635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project        return KURL();
90635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    return KURL(baseURL(), url);
91635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project}
92635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
94