Unreviewed, rolling out r142975.
http://trac.webkit.org/changeset/142975
https://bugs.webkit.org/show_bug.cgi?id=110225
Introduces hard-to-reproduce crashes upon inspected page
navigation on Mac (Requested by apavlov on #webkit).
Patch by Sheriff Bot <webkit.review.bot@gmail.com> on 2013-02-19
Source/WebCore:
* dom/DocumentStyleSheetCollection.cpp:
(WebCore::DocumentStyleSheetCollection::updateActiveStyleSheets):
* inspector/Inspector.json:
* inspector/InspectorCSSAgent.cpp:
(WebCore::InspectorCSSAgent::InspectorCSSAgent):
(WebCore::InspectorCSSAgent::clearFrontend):
(WebCore::InspectorCSSAgent::enable):
(WebCore::InspectorCSSAgent::getAllStyleSheets):
(WebCore::InspectorCSSAgent::collectStyleSheets):
(WebCore::InspectorCSSAgent::bindStyleSheet):
(WebCore::InspectorCSSAgent::viaInspectorStyleSheet):
(WebCore::InspectorCSSAgent::detectOrigin):
(WebCore::InspectorCSSAgent::buildObjectForRule):
* inspector/InspectorCSSAgent.h:
(InspectorCSSAgent):
* inspector/InspectorInstrumentation.cpp:
(WebCore):
* inspector/InspectorInstrumentation.h:
(WebCore):
(InspectorInstrumentation):
* inspector/front-end/CSSStyleModel.js:
(WebInspector.CSSStyleModel.prototype.getViaInspectorResourceForRule):
(WebInspector.CSSStyleModelResourceBinding.prototype.):
(WebInspector.CSSStyleModelResourceBinding.prototype.requestStyleSheetIdForResource):
(WebInspector.CSSStyleModelResourceBinding.prototype.requestResourceURLForStyleSheetId):
(WebInspector.CSSStyleModelResourceBinding.prototype._styleSheetIdForResource):
(WebInspector.CSSStyleModelResourceBinding.prototype._loadStyleSheetHeaders):
(WebInspector.CSSStyleModelResourceBinding.prototype.headersLoaded):
(WebInspector.CSSStyleModelResourceBinding.prototype._requestViaInspectorResource):
(WebInspector.CSSStyleModelResourceBinding.prototype._getOrCreateInspectorResource):
(WebInspector.CSSStyleModelResourceBinding.prototype._reset):
* inspector/front-end/SASSSourceMapping.js:
(WebInspector.SASSSourceMapping.prototype._styleSheetChanged.callback):
(WebInspector.SASSSourceMapping.prototype._styleSheetChanged):
* inspector/front-end/StylesSidebarPane.js:
(WebInspector.StylePropertiesSection.prototype._createRuleOriginNode.callback):
(WebInspector.StylePropertiesSection.prototype._createRuleOriginNode):
* inspector/front-end/StylesSourceMapping.js:
(WebInspector.StyleContentBinding.prototype.callback):
(WebInspector.StyleContentBinding.prototype.setStyleContent):
(WebInspector.StyleContentBinding.prototype.):
(WebInspector.StyleContentBinding.prototype._innerStyleSheetChanged):
LayoutTests:
* inspector/styles/resources/stylesheet-tracking.css: Removed.
* inspector/styles/stylesheet-tracking-expected.txt: Removed.
* inspector/styles/stylesheet-tracking.html: Removed.
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@143333 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/Source/WebCore/inspector/InspectorCSSAgent.cpp b/Source/WebCore/inspector/InspectorCSSAgent.cpp
index 9b9fa3f..6d705ae 100644
--- a/Source/WebCore/inspector/InspectorCSSAgent.cpp
+++ b/Source/WebCore/inspector/InspectorCSSAgent.cpp
@@ -54,7 +54,6 @@
#include "StylePropertyShorthand.h"
#include "StyleResolver.h"
#include "StyleRule.h"
-#include "StyleSheet.h"
#include "StyleSheetList.h"
#include "WebKitNamedFlow.h"
@@ -530,7 +529,6 @@
, m_frontend(0)
, m_domAgent(domAgent)
, m_lastStyleSheetId(1)
- , m_creatingViaInspectorStyleSheet(false)
{
m_domAgent->setDOMListener(this);
}
@@ -552,7 +550,8 @@
ASSERT(m_frontend);
m_frontend = 0;
resetNonPersistentData();
- stopSelectorProfilerImpl(0, false);
+ String errorString;
+ stopSelectorProfilerImpl(&errorString, false);
}
void InspectorCSSAgent::discardAgent()
@@ -594,12 +593,6 @@
{
m_state->setBoolean(CSSAgentState::cssAgentEnabled, true);
m_instrumentingAgents->setInspectorCSSAgent(this);
-
- RefPtr<TypeBuilder::Array<TypeBuilder::CSS::CSSStyleSheetHeader> > styleInfos = TypeBuilder::Array<TypeBuilder::CSS::CSSStyleSheetHeader>::create();
- Vector<InspectorStyleSheet*> styleSheets;
- collectAllStyleSheets(styleSheets);
- for (size_t i = 0; i < styleSheets.size(); ++i)
- m_frontend->styleSheetAdded(styleSheets.at(i)->buildObjectForStyleSheetInfo());
}
void InspectorCSSAgent::disable(ErrorString*)
@@ -658,38 +651,6 @@
m_frontend->regionLayoutUpdated(buildObjectForNamedFlow(&errorString, namedFlow, documentNodeId));
}
-void InspectorCSSAgent::activeStyleSheetsUpdated(const Vector<RefPtr<StyleSheet> >& oldSheets, const Vector<RefPtr<StyleSheet> >& newSheets)
-{
- HashSet<CSSStyleSheet*> removedSheets;
- for (size_t i = 0, size = oldSheets.size(); i < size; ++i) {
- StyleSheet* oldSheet = oldSheets.at(i).get();
- if (oldSheet->isCSSStyleSheet())
- removedSheets.add(static_cast<CSSStyleSheet*>(oldSheet));
- }
-
- HashSet<CSSStyleSheet*> addedSheets;
- for (size_t i = 0, size = newSheets.size(); i < size; ++i) {
- StyleSheet* newSheet = newSheets.at(i).get();
- if (!newSheet->isCSSStyleSheet())
- continue;
- CSSStyleSheet* newCSSSheet = static_cast<CSSStyleSheet*>(newSheet);
- if (removedSheets.contains(newCSSSheet))
- removedSheets.remove(newCSSSheet);
- else
- addedSheets.add(newCSSSheet);
- }
-
- RefPtr<TypeBuilder::Array<TypeBuilder::CSS::StyleSheetId> > removedIds = TypeBuilder::Array<TypeBuilder::CSS::StyleSheetId>::create();
- for (HashSet<CSSStyleSheet*>::iterator it = removedSheets.begin(); it != removedSheets.end(); ++it) {
- RefPtr<InspectorStyleSheet> inspectorStyleSheet = m_cssStyleSheetToInspectorStyleSheet.get(*it);
- ASSERT(inspectorStyleSheet);
- m_frontend->styleSheetRemoved(unbindStyleSheet(inspectorStyleSheet.get()));
- }
- RefPtr<TypeBuilder::Array<TypeBuilder::CSS::CSSStyleSheetHeader> > addedHeaders = TypeBuilder::Array<TypeBuilder::CSS::CSSStyleSheetHeader>::create();
- for (HashSet<CSSStyleSheet*>::iterator it = addedSheets.begin(); it != addedSheets.end(); ++it)
- m_frontend->styleSheetAdded(bindStyleSheet(static_cast<CSSStyleSheet*>(*it))->buildObjectForStyleSheetInfo());
-}
-
bool InspectorCSSAgent::forcePseudoState(Element* element, CSSSelector::PseudoType pseudoType)
{
if (m_nodeIdToForcedPseudoState.isEmpty())
@@ -797,10 +758,15 @@
void InspectorCSSAgent::getAllStyleSheets(ErrorString*, RefPtr<TypeBuilder::Array<TypeBuilder::CSS::CSSStyleSheetHeader> >& styleInfos)
{
styleInfos = TypeBuilder::Array<TypeBuilder::CSS::CSSStyleSheetHeader>::create();
- Vector<InspectorStyleSheet*> styleSheets;
- collectAllStyleSheets(styleSheets);
- for (size_t i = 0; i < styleSheets.size(); ++i)
- styleInfos->addItem(styleSheets.at(i)->buildObjectForStyleSheetInfo());
+ Vector<Document*> documents = m_domAgent->documents();
+ for (Vector<Document*>::iterator it = documents.begin(); it != documents.end(); ++it) {
+ StyleSheetList* list = (*it)->styleSheets();
+ for (unsigned i = 0; i < list->length(); ++i) {
+ StyleSheet* styleSheet = list->item(i);
+ if (styleSheet->isCSSStyleSheet())
+ collectStyleSheets(static_cast<CSSStyleSheet*>(styleSheet), styleInfos.get());
+ }
+ }
}
void InspectorCSSAgent::getStyleSheet(ErrorString* errorString, const String& styleSheetId, RefPtr<TypeBuilder::CSS::CSSStyleSheetBody>& styleSheetObject)
@@ -1057,23 +1023,10 @@
return documentNodeId;
}
-void InspectorCSSAgent::collectAllStyleSheets(Vector<InspectorStyleSheet*>& result)
-{
- Vector<Document*> documents = m_domAgent->documents();
- for (Vector<Document*>::iterator it = documents.begin(); it != documents.end(); ++it) {
- StyleSheetList* list = (*it)->styleSheets();
- for (unsigned i = 0; i < list->length(); ++i) {
- StyleSheet* styleSheet = list->item(i);
- if (styleSheet->isCSSStyleSheet())
- collectStyleSheets(static_cast<CSSStyleSheet*>(styleSheet), result);
- }
- }
-}
-
-void InspectorCSSAgent::collectStyleSheets(CSSStyleSheet* styleSheet, Vector<InspectorStyleSheet*>& result)
+void InspectorCSSAgent::collectStyleSheets(CSSStyleSheet* styleSheet, TypeBuilder::Array<TypeBuilder::CSS::CSSStyleSheetHeader>* result)
{
InspectorStyleSheet* inspectorStyleSheet = bindStyleSheet(static_cast<CSSStyleSheet*>(styleSheet));
- result.append(inspectorStyleSheet);
+ result->addItem(inspectorStyleSheet->buildObjectForStyleSheetInfo());
for (unsigned i = 0, size = styleSheet->length(); i < size; ++i) {
CSSRule* rule = styleSheet->item(i);
if (rule->type() == CSSRule::IMPORT_RULE) {
@@ -1093,20 +1046,10 @@
inspectorStyleSheet = InspectorStyleSheet::create(m_domAgent->pageAgent(), id, styleSheet, detectOrigin(styleSheet, document), InspectorDOMAgent::documentURLString(document), this);
m_idToInspectorStyleSheet.set(id, inspectorStyleSheet);
m_cssStyleSheetToInspectorStyleSheet.set(styleSheet, inspectorStyleSheet);
- if (m_creatingViaInspectorStyleSheet)
- m_documentToInspectorStyleSheet.add(document, inspectorStyleSheet);
}
return inspectorStyleSheet.get();
}
-String InspectorCSSAgent::unbindStyleSheet(InspectorStyleSheet* inspectorStyleSheet)
-{
- String id = inspectorStyleSheet->id();
- m_idToInspectorStyleSheet.remove(id);
- m_cssStyleSheetToInspectorStyleSheet.remove(inspectorStyleSheet->pageStyleSheet());
- return id;
-}
-
InspectorStyleSheet* InspectorCSSAgent::viaInspectorStyleSheet(Document* document, bool createIfAbsent)
{
if (!document) {
@@ -1133,15 +1076,21 @@
return 0;
InlineStyleOverrideScope overrideScope(document);
- m_creatingViaInspectorStyleSheet = true;
targetNode->appendChild(styleElement, ec);
- // At this point the added stylesheet will get bound through the updateActiveStyleSheets() invocation.
- // We just need to pick the respective InspectorStyleSheet from m_documentToInspectorStyleSheet.
- m_creatingViaInspectorStyleSheet = false;
}
if (ec)
return 0;
- return m_documentToInspectorStyleSheet.get(document).get();
+ StyleSheetList* styleSheets = document->styleSheets();
+ StyleSheet* styleSheet = styleSheets->item(styleSheets->length() - 1);
+ if (!styleSheet || !styleSheet->isCSSStyleSheet())
+ return 0;
+ CSSStyleSheet* cssStyleSheet = static_cast<CSSStyleSheet*>(styleSheet);
+ String id = String::number(m_lastStyleSheetId++);
+ inspectorStyleSheet = InspectorStyleSheet::create(m_domAgent->pageAgent(), id, cssStyleSheet, TypeBuilder::CSS::StyleSheetOrigin::Inspector, InspectorDOMAgent::documentURLString(document), this);
+ m_idToInspectorStyleSheet.set(id, inspectorStyleSheet);
+ m_cssStyleSheetToInspectorStyleSheet.set(cssStyleSheet, inspectorStyleSheet);
+ m_documentToInspectorStyleSheet.set(document, inspectorStyleSheet);
+ return inspectorStyleSheet.get();
}
InspectorStyleSheet* InspectorCSSAgent::assertStyleSheetForId(ErrorString* errorString, const String& styleSheetId)
@@ -1156,9 +1105,6 @@
TypeBuilder::CSS::StyleSheetOrigin::Enum InspectorCSSAgent::detectOrigin(CSSStyleSheet* pageStyleSheet, Document* ownerDocument)
{
- if (m_creatingViaInspectorStyleSheet)
- return TypeBuilder::CSS::StyleSheetOrigin::Inspector;
-
TypeBuilder::CSS::StyleSheetOrigin::Enum origin = TypeBuilder::CSS::StyleSheetOrigin::Regular;
if (pageStyleSheet && !pageStyleSheet->ownerNode() && pageStyleSheet->href().isEmpty())
origin = TypeBuilder::CSS::StyleSheetOrigin::User_agent;
@@ -1185,7 +1131,8 @@
if (!rule)
return 0;
}
- return bindStyleSheet(rule->parentStyleSheet())->buildObjectForRule(rule);
+ InspectorStyleSheet* inspectorStyleSheet = bindStyleSheet(rule->parentStyleSheet());
+ return inspectorStyleSheet ? inspectorStyleSheet->buildObjectForRule(rule) : 0;
}
PassRefPtr<TypeBuilder::Array<TypeBuilder::CSS::CSSRule> > InspectorCSSAgent::buildArrayForRuleList(CSSRuleList* ruleList, StyleResolver* styleResolver)