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