summaryrefslogtreecommitdiffstats
path: root/WebCore/inspector/InspectorCSSStore.cpp
diff options
context:
space:
mode:
authorBen Murdoch <benm@google.com>2011-05-05 14:36:32 +0100
committerBen Murdoch <benm@google.com>2011-05-10 15:38:30 +0100
commitf05b935882198ccf7d81675736e3aeb089c5113a (patch)
tree4ea0ca838d9ef1b15cf17ddb3928efb427c7e5a1 /WebCore/inspector/InspectorCSSStore.cpp
parent60fbdcc62bced8db2cb1fd233cc4d1e4ea17db1b (diff)
downloadexternal_webkit-f05b935882198ccf7d81675736e3aeb089c5113a.zip
external_webkit-f05b935882198ccf7d81675736e3aeb089c5113a.tar.gz
external_webkit-f05b935882198ccf7d81675736e3aeb089c5113a.tar.bz2
Merge WebKit at r74534: Initial merge by git.
Change-Id: I6ccd1154fa1b19c2ec2a66878eb675738735f1eb
Diffstat (limited to 'WebCore/inspector/InspectorCSSStore.cpp')
-rw-r--r--WebCore/inspector/InspectorCSSStore.cpp340
1 files changed, 0 insertions, 340 deletions
diff --git a/WebCore/inspector/InspectorCSSStore.cpp b/WebCore/inspector/InspectorCSSStore.cpp
deleted file mode 100644
index 08634cb..0000000
--- a/WebCore/inspector/InspectorCSSStore.cpp
+++ /dev/null
@@ -1,340 +0,0 @@
-/*
- * Copyright (C) 2010 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of
- * its contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "config.h"
-#include "InspectorCSSStore.h"
-
-#if ENABLE(INSPECTOR)
-
-#include "CSSMutableStyleDeclaration.h"
-#include "CSSParser.h"
-#include "CSSRuleList.h"
-#include "CSSStyleDeclaration.h"
-#include "CSSStyleRule.h"
-#include "CSSStyleSheet.h"
-#include "CachedResource.h"
-#include "DocumentLoader.h"
-#include "Element.h"
-#include "Frame.h"
-#include "HTMLHeadElement.h"
-#include "InspectorController.h"
-#include "InspectorResourceAgent.h"
-#include "Node.h"
-#include "PlatformString.h"
-#include "SharedBuffer.h"
-#include "StyleSheetList.h"
-#include "TextEncoding.h"
-
-namespace WebCore {
-
-InspectorCSSStore::InspectorCSSStore(InspectorController* inspectorController)
- : m_inspectorController(inspectorController)
- , m_lastStyleId(1)
- , m_lastStyleSheetId(1)
- , m_lastRuleId(1)
-{
-}
-
-InspectorCSSStore::~InspectorCSSStore()
-{
-}
-
-void InspectorCSSStore::reset()
-{
- m_styleToId.clear();
- m_idToStyle.clear();
- m_ruleToId.clear();
- m_idToRule.clear();
- deleteAllValues(m_styleSheetToOffsets);
- m_styleSheetToOffsets.clear();
- m_styleSheetToId.clear();
- m_idToStyleSheet.clear();
- m_idToStyleSheetText.clear();
- m_idToDisabledStyle.clear();
- m_documentNodeToInspectorStyleSheetMap.clear();
-
- m_lastStyleId = 1;
- m_lastStyleSheetId = 1;
- m_lastRuleId = 1;
-}
-
-void InspectorCSSStore::removeDocument(Document* doc)
-{
- m_documentNodeToInspectorStyleSheetMap.remove(doc);
-}
-
-CSSStyleSheet* InspectorCSSStore::inspectorStyleSheet(Document* ownerDocument, bool createIfAbsent)
-{
- DocumentToStyleSheetMap::iterator it = m_documentNodeToInspectorStyleSheetMap.find(ownerDocument);
- if (it != m_documentNodeToInspectorStyleSheetMap.end())
- return it->second.get();
- if (!createIfAbsent)
- return 0;
- ExceptionCode ec = 0;
- RefPtr<Element> styleElement = ownerDocument->createElement("style", ec);
- if (!ec)
- styleElement->setAttribute("type", "text/css", ec);
- if (!ec)
- ownerDocument->head()->appendChild(styleElement, ec);
- if (ec)
- return 0;
- StyleSheetList* styleSheets = ownerDocument->styleSheets();
- StyleSheet* styleSheet = styleSheets->item(styleSheets->length() - 1);
- if (!styleSheet->isCSSStyleSheet())
- return 0;
- CSSStyleSheet* inspectorStyleSheet = static_cast<CSSStyleSheet*>(styleSheet);
- m_documentNodeToInspectorStyleSheetMap.set(ownerDocument, inspectorStyleSheet);
- return inspectorStyleSheet;
-}
-
-String InspectorCSSStore::styleSheetText(long styleSheetId)
-{
- IdToStyleSheetTextMap::iterator it = m_idToStyleSheetText.find(styleSheetId);
- if (it != m_idToStyleSheetText.end())
- return it->second;
-
- CSSStyleSheet* styleSheet = styleSheetForId(styleSheetId);
- if (!styleSheet)
- return String();
-
- String result;
- bool success = false;
- Node* ownerNode = styleSheet->ownerNode();
- if (ownerNode && ownerNode->nodeType() == Node::ELEMENT_NODE) {
- Element* ownerElement = static_cast<Element*>(ownerNode);
- if (ownerElement->tagName().lower() == "style") {
- result = inlineStyleSheetText(styleSheet);
- success = true;
- }
- }
- if (!success)
- success = resourceStyleSheetText(styleSheet, &result);
-
- if (success)
- m_idToStyleSheetText.set(styleSheetId, result);
- return result;
-}
-
-bool InspectorCSSStore::resourceStyleSheetText(CSSStyleSheet* styleSheet, String* result)
-{
- return InspectorResourceAgent::resourceContent(styleSheet->document()->frame(), styleSheet->finalURL(), result);
-}
-
-String InspectorCSSStore::inlineStyleSheetText(CSSStyleSheet* styleSheet)
-{
- Node* ownerNode = styleSheet->ownerNode();
- if (!ownerNode || ownerNode->nodeType() != Node::ELEMENT_NODE || m_styleSheetToId.find(styleSheet) == m_styleSheetToId.end())
- return String();
- Element* ownerElement = static_cast<Element*>(ownerNode);
- if (ownerElement->tagName().lower() != "style")
- return String();
- return ownerElement->innerText();
-}
-
-
-// All ranges are: [start; end) (start - inclusive, end - exclusive).
-bool InspectorCSSStore::getRuleSourceData(CSSStyleDeclaration* style, RefPtr<CSSRuleSourceData>* result)
-{
- if (!style)
- return false;
-
- Element* element = inlineStyleElement(style);
- if (element) {
- // Inline: style="...".
- RefPtr<CSSRuleSourceData> ruleSourceData = CSSRuleSourceData::create();
- RefPtr<CSSStyleSourceData> styleSourceData = CSSStyleSourceData::create();
- bool success = getStyleAttributeRanges(element, &styleSourceData);
- if (!success)
- return false;
- ruleSourceData->styleSourceData = styleSourceData.release();
- *result = ruleSourceData;
- return true;
- }
-
- CSSStyleSheet* styleSheet = getParentStyleSheet(style);
- if (!styleSheet)
- return false;
-
- Vector<RefPtr<CSSRuleSourceData> >* rangesVector = 0;
- StyleSheetToOffsetsMap::iterator it = m_styleSheetToOffsets.find(styleSheet);
- if (it == m_styleSheetToOffsets.end()) {
- String text = styleSheetText(bindStyleSheet(styleSheet));
- if (!text.isEmpty()) {
- RefPtr<CSSStyleSheet> newStyleSheet = CSSStyleSheet::create(styleSheet->ownerNode());
- CSSParser p;
- StyleRuleRangeMap ruleRangeMap;
- p.parseSheet(newStyleSheet.get(), text, 0, &ruleRangeMap);
- rangesVector = new Vector<RefPtr<CSSRuleSourceData> >;
- extractRanges(newStyleSheet.get(), ruleRangeMap, rangesVector);
- m_styleSheetToOffsets.set(styleSheet, rangesVector);
- }
- } else
- rangesVector = it->second;
- if (!rangesVector)
- return false;
-
- unsigned ruleIndex = 0;
- for (unsigned i = 0, length = styleSheet->length(); i < length; ++i) {
- CSSStyleRule* rule = asCSSStyleRule(styleSheet->item(i));
- if (!rule)
- continue;
- if (rule->style() == style) {
- ASSERT(ruleIndex < rangesVector->size());
- *result = rangesVector->at(ruleIndex);
- return true;
- }
- ruleIndex++;
- }
- return false;
-}
-
-void InspectorCSSStore::extractRanges(CSSStyleSheet* styleSheet, const StyleRuleRangeMap& ruleRangeMap, Vector<RefPtr<CSSRuleSourceData> >* rangesVector)
-{
- for (unsigned i = 0, length = styleSheet->length(); i < length; ++i) {
- CSSStyleRule* rule = asCSSStyleRule(styleSheet->item(i));
- if (!rule)
- continue;
- StyleRuleRangeMap::const_iterator it = ruleRangeMap.find(rule);
- if (it != ruleRangeMap.end())
- rangesVector->append(it->second);
- }
-}
-
-bool InspectorCSSStore::getStyleAttributeRanges(Node* node, RefPtr<CSSStyleSourceData>* result)
-{
- if (!node || !node->isStyledElement())
- return false;
-
- String styleText = static_cast<StyledElement*>(node)->getAttribute("style");
- if (styleText.isEmpty()) {
- (*result)->styleBodyRange.start = 0;
- (*result)->styleBodyRange.end = 0;
- return true;
- }
-
- RefPtr<CSSMutableStyleDeclaration> tempDeclaration = CSSMutableStyleDeclaration::create();
- CSSParser p;
- p.parseDeclaration(tempDeclaration.get(), styleText, result);
- return true;
-}
-
-CSSStyleSheet* InspectorCSSStore::getParentStyleSheet(CSSStyleDeclaration* style)
-{
- if (!style)
- return 0;
-
- StyleSheet* styleSheet = style->stylesheet();
- if (styleSheet && styleSheet->isCSSStyleSheet())
- return static_cast<CSSStyleSheet*>(styleSheet);
-
- return 0;
-}
-
-CSSStyleRule* InspectorCSSStore::asCSSStyleRule(StyleBase* styleBase)
-{
- if (!styleBase->isStyleRule())
- return 0;
- CSSRule* rule = static_cast<CSSRule*>(styleBase);
- if (rule->type() != CSSRule::STYLE_RULE)
- return 0;
- return static_cast<CSSStyleRule*>(rule);
-}
-
-DisabledStyleDeclaration* InspectorCSSStore::disabledStyleForId(long styleId, bool createIfAbsent)
-{
- IdToDisabledStyleMap::iterator it = m_idToDisabledStyle.find(styleId);
- if (it == m_idToDisabledStyle.end() && createIfAbsent)
- it = m_idToDisabledStyle.set(styleId, DisabledStyleDeclaration()).first;
- return it == m_idToDisabledStyle.end() ? 0 : &(it->second);
-}
-
-CSSStyleDeclaration* InspectorCSSStore::styleForId(long styleId)
-{
- IdToStyleMap::iterator it = m_idToStyle.find(styleId);
- return it == m_idToStyle.end() ? 0 : it->second.get();
-}
-
-CSSStyleSheet* InspectorCSSStore::styleSheetForId(long styleSheetId)
-{
- IdToStyleSheetMap::iterator it = m_idToStyleSheet.find(styleSheetId);
- return it == m_idToStyleSheet.end() ? 0 : it->second.get();
-}
-
-CSSStyleRule* InspectorCSSStore::ruleForId(long ruleId)
-{
- IdToRuleMap::iterator it = m_idToRule.find(ruleId);
- return it == m_idToRule.end() ? 0 : it->second.get();
-}
-
-long InspectorCSSStore::bindStyle(CSSStyleDeclaration* style)
-{
- long id = m_styleToId.get(style);
- if (!id) {
- id = m_lastStyleId++;
- m_idToStyle.set(id, style);
- m_styleToId.set(style, id);
- }
- return id;
-}
-
-long InspectorCSSStore::bindStyleSheet(CSSStyleSheet* styleSheet)
-{
- long id = m_styleSheetToId.get(styleSheet);
- if (!id) {
- id = m_lastStyleSheetId++;
- m_idToStyleSheet.set(id, styleSheet);
- m_styleSheetToId.set(styleSheet, id);
- }
- return id;
-}
-
-long InspectorCSSStore::bindRule(CSSStyleRule* rule)
-{
- long id = m_ruleToId.get(rule);
- if (!id) {
- id = m_lastRuleId++;
- m_idToRule.set(id, rule);
- m_ruleToId.set(rule, id);
- }
- return id;
-}
-
-// static
-Element* InspectorCSSStore::inlineStyleElement(CSSStyleDeclaration* style)
-{
- if (!style || !style->isMutableStyleDeclaration())
- return 0;
- Node* node = static_cast<CSSMutableStyleDeclaration*>(style)->node();
- if (!node || !node->isStyledElement() || static_cast<StyledElement*>(node)->getInlineStyleDecl() != style)
- return 0;
- return static_cast<Element*>(node);
-}
-
-} // namespace WebCore
-
-#endif // ENABLE(INSPECTOR)