Diff
Modified: trunk/Source/WebCore/ChangeLog (102902 => 102903)
--- trunk/Source/WebCore/ChangeLog 2011-12-15 09:21:41 UTC (rev 102902)
+++ trunk/Source/WebCore/ChangeLog 2011-12-15 09:23:19 UTC (rev 102903)
@@ -1,3 +1,45 @@
+2011-12-15 Alexander Pavlov <[email protected]>
+
+ Web Inspector: [Styles] Update selected DOM element styles whenever applicable media queries change
+ https://bugs.webkit.org/show_bug.cgi?id=74292
+
+ The change introduces and handles in the frontend a new event type for the CSS domain,
+ "mediaQueryResultChanged", which gets fired every time a viewport-dependent media feature
+ changes its value. This allows users to see live changes of the (media-dependent) matched
+ rules for inspected elements.
+
+ Reviewed by Pavel Feldman.
+
+ * inspector/CodeGeneratorInspector.py:
+ (DomainNameFixes):
+ * inspector/Inspector.json:
+ * inspector/InspectorCSSAgent.cpp:
+ (WebCore::InspectorCSSAgent::InspectorCSSAgent):
+ (WebCore::InspectorCSSAgent::setFrontend):
+ (WebCore::InspectorCSSAgent::clearFrontend):
+ (WebCore::InspectorCSSAgent::restore):
+ (WebCore::InspectorCSSAgent::enable):
+ (WebCore::InspectorCSSAgent::disable):
+ (WebCore::InspectorCSSAgent::mediaQueryResultChanged):
+ * inspector/InspectorCSSAgent.h:
+ * inspector/InspectorInstrumentation.cpp:
+ (WebCore::InspectorInstrumentation::mediaQueryResultChangedImpl):
+ * inspector/InspectorInstrumentation.h:
+ (WebCore::InspectorInstrumentation::mediaQueryResultChanged):
+ * inspector/front-end/CSSStyleModel.js:
+ (WebInspector.CSSStyleModel):
+ (WebInspector.CSSStyleModel.prototype.mediaQueryResultChanged):
+ (WebInspector.CSSDispatcher):
+ (WebInspector.CSSDispatcher.prototype.mediaQueryResultChanged):
+ * inspector/front-end/MetricsSidebarPane.js:
+ (WebInspector.MetricsSidebarPane):
+ (WebInspector.MetricsSidebarPane.prototype._styleSheetOrMediaQueryResultChanged):
+ * inspector/front-end/StylesSidebarPane.js:
+ (WebInspector.StylesSidebarPane):
+ (WebInspector.StylesSidebarPane.prototype._styleSheetOrMediaQueryResultChanged):
+ * page/FrameView.cpp:
+ (WebCore::FrameView::layout):
+
2011-12-14 Vsevolod Vlasov <[email protected]>
Web Inspector: [Regression] Network manager fails to show resource type and MIME type in incorrect MIME type console message.
Modified: trunk/Source/WebCore/inspector/CodeGeneratorInspector.py (102902 => 102903)
--- trunk/Source/WebCore/inspector/CodeGeneratorInspector.py 2011-12-15 09:21:41 UTC (rev 102902)
+++ trunk/Source/WebCore/inspector/CodeGeneratorInspector.py 2011-12-15 09:23:19 UTC (rev 102903)
@@ -204,7 +204,7 @@
return Res
- skip_js_bind_domains = set(["Runtime", "CSS", "DOMDebugger"])
+ skip_js_bind_domains = set(["Runtime", "DOMDebugger"])
agent_type_map = {"Network": "InspectorResourceAgent", "Inspector": "InspectorAgent", }
Modified: trunk/Source/WebCore/inspector/Inspector.json (102902 => 102903)
--- trunk/Source/WebCore/inspector/Inspector.json 2011-12-15 09:21:41 UTC (rev 102902)
+++ trunk/Source/WebCore/inspector/Inspector.json 2011-12-15 09:23:19 UTC (rev 102903)
@@ -1617,6 +1617,14 @@
],
"commands": [
{
+ "name": "enable",
+ "description": "Enables the CSS agent for the given page. Clients should not assume that the CSS agent has been enabled until the result of this command is received."
+ },
+ {
+ "name": "disable",
+ "description": "Disables the CSS agent for the given page."
+ },
+ {
"name": "getMatchedStylesForNode",
"parameters": [
{ "name": "nodeId", "$ref": "DOM.NodeId" },
@@ -1742,6 +1750,12 @@
],
"description": "Returns all supported CSS property names."
}
+ ],
+ "events": [
+ {
+ "name": "mediaQueryResultChanged",
+ "description": "Fires whenever a MediaQuery result changes (for example, after a browser window has been resized.) The current implementation considers only viewport-dependent media features."
+ }
]
},
{
Modified: trunk/Source/WebCore/inspector/InspectorCSSAgent.cpp (102902 => 102903)
--- trunk/Source/WebCore/inspector/InspectorCSSAgent.cpp 2011-12-15 09:21:41 UTC (rev 102902)
+++ trunk/Source/WebCore/inspector/InspectorCSSAgent.cpp 2011-12-15 09:23:19 UTC (rev 102903)
@@ -40,6 +40,7 @@
#include "DOMWindow.h"
#include "HTMLHeadElement.h"
#include "InspectorDOMAgent.h"
+#include "InspectorState.h"
#include "InspectorValues.h"
#include "InstrumentingAgents.h"
#include "Node.h"
@@ -128,6 +129,10 @@
// text : <string> // Optional - whenever the text is available for a text-based stylesheet
// }
+namespace CSSAgentState {
+static const char cssAgentEnabled[] = "cssAgentEnabled";
+}
+
namespace WebCore {
enum ForcePseudoClassFlags {
@@ -186,6 +191,7 @@
InspectorCSSAgent::InspectorCSSAgent(InstrumentingAgents* instrumentingAgents, InspectorState* state, InspectorDOMAgent* domAgent)
: InspectorBaseAgent<InspectorCSSAgent>("CSS", instrumentingAgents, state)
+ , m_frontend(0)
, m_domAgent(domAgent)
, m_lastPseudoState(0)
, m_lastStyleSheetId(1)
@@ -193,7 +199,6 @@
, m_lastStyleId(1)
{
m_domAgent->setDOMListener(this);
- m_instrumentingAgents->setInspectorCSSAgent(this);
}
InspectorCSSAgent::~InspectorCSSAgent()
@@ -203,9 +208,18 @@
reset();
}
+void InspectorCSSAgent::setFrontend(InspectorFrontend* frontend)
+{
+ ASSERT(!m_frontend);
+ m_frontend = frontend->css();
+}
+
void InspectorCSSAgent::clearFrontend()
{
+ ASSERT(m_frontend);
+ m_frontend = 0;
clearPseudoState(true);
+ m_instrumentingAgents->setInspectorCSSAgent(0);
}
void InspectorCSSAgent::discardAgent()
@@ -214,6 +228,14 @@
m_domAgent = 0;
}
+void InspectorCSSAgent::restore()
+{
+ if (m_state->getBoolean(CSSAgentState::cssAgentEnabled)) {
+ ErrorString error;
+ enable(&error);
+ }
+}
+
void InspectorCSSAgent::reset()
{
m_idToInspectorStyleSheet.clear();
@@ -222,6 +244,23 @@
m_documentToInspectorStyleSheet.clear();
}
+void InspectorCSSAgent::enable(ErrorString*)
+{
+ m_state->setBoolean(CSSAgentState::cssAgentEnabled, true);
+ m_instrumentingAgents->setInspectorCSSAgent(this);
+}
+
+void InspectorCSSAgent::disable(ErrorString*)
+{
+ m_state->setBoolean(CSSAgentState::cssAgentEnabled, false);
+}
+
+void InspectorCSSAgent::mediaQueryResultChanged()
+{
+ if (m_frontend)
+ m_frontend->mediaQueryResultChanged();
+}
+
bool InspectorCSSAgent::forcePseudoState(Element* element, CSSSelector::PseudoType pseudoType)
{
if (m_lastElementWithPseudoState != element)
Modified: trunk/Source/WebCore/inspector/InspectorCSSAgent.h (102902 => 102903)
--- trunk/Source/WebCore/inspector/InspectorCSSAgent.h 2011-12-15 09:21:41 UTC (rev 102902)
+++ trunk/Source/WebCore/inspector/InspectorCSSAgent.h 2011-12-15 09:23:19 UTC (rev 102903)
@@ -26,6 +26,7 @@
#define InspectorCSSAgent_h
#include "CSSSelector.h"
+#include "Document.h"
#include "InspectorBaseAgent.h"
#include "InspectorDOMAgent.h"
#include "InspectorStyleSheet.h"
@@ -65,9 +66,14 @@
~InspectorCSSAgent();
bool forcePseudoState(Element*, CSSSelector::PseudoType);
+ virtual void setFrontend(InspectorFrontend*);
virtual void clearFrontend();
virtual void discardAgent();
+ virtual void restore();
+ void enable(ErrorString*);
+ void disable(ErrorString*);
void reset();
+ void mediaQueryResultChanged();
void getComputedStyleForNode(ErrorString*, int nodeId, const RefPtr<InspectorArray>* forcedPseudoClasses, RefPtr<InspectorArray>* style);
void getInlineStylesForNode(ErrorString*, int nodeId, RefPtr<InspectorObject>* inlineStyle, RefPtr<InspectorArray>* attributes);
@@ -110,6 +116,7 @@
void clearPseudoState(bool recalcStyles);
+ InspectorFrontend::CSS* m_frontend;
InspectorDOMAgent* m_domAgent;
RefPtr<Element> m_lastElementWithPseudoState;
unsigned m_lastPseudoState;
Modified: trunk/Source/WebCore/inspector/InspectorInstrumentation.cpp (102902 => 102903)
--- trunk/Source/WebCore/inspector/InspectorInstrumentation.cpp 2011-12-15 09:21:41 UTC (rev 102902)
+++ trunk/Source/WebCore/inspector/InspectorInstrumentation.cpp 2011-12-15 09:23:19 UTC (rev 102903)
@@ -182,6 +182,12 @@
consoleAgent->frameWindowDiscarded(window);
}
+void InspectorInstrumentation::mediaQueryResultChangedImpl(InstrumentingAgents* instrumentingAgents)
+{
+ if (InspectorCSSAgent* cssAgent = instrumentingAgents->inspectorCSSAgent())
+ cssAgent->mediaQueryResultChanged();
+}
+
void InspectorInstrumentation::mouseDidMoveOverElementImpl(InstrumentingAgents* instrumentingAgents, const HitTestResult& result, unsigned modifierFlags)
{
if (InspectorDOMAgent* domAgent = instrumentingAgents->inspectorDOMAgent())
Modified: trunk/Source/WebCore/inspector/InspectorInstrumentation.h (102902 => 102903)
--- trunk/Source/WebCore/inspector/InspectorInstrumentation.h 2011-12-15 09:21:41 UTC (rev 102902)
+++ trunk/Source/WebCore/inspector/InspectorInstrumentation.h 2011-12-15 09:23:19 UTC (rev 102903)
@@ -87,6 +87,7 @@
static void characterDataModified(Document*, CharacterData*);
static void didInvalidateStyleAttr(Document*, Node*);
static void frameWindowDiscarded(Frame*, DOMWindow*);
+ static void mediaQueryResultChanged(Document*);
static void mouseDidMoveOverElement(Page*, const HitTestResult&, unsigned modifierFlags);
static bool handleMousePress(Page*);
@@ -227,6 +228,7 @@
static void characterDataModifiedImpl(InstrumentingAgents*, CharacterData*);
static void didInvalidateStyleAttrImpl(InstrumentingAgents*, Node*);
static void frameWindowDiscardedImpl(InstrumentingAgents*, DOMWindow*);
+ static void mediaQueryResultChangedImpl(InstrumentingAgents*);
static void mouseDidMoveOverElementImpl(InstrumentingAgents*, const HitTestResult&, unsigned modifierFlags);
static bool handleMousePressImpl(InstrumentingAgents*);
@@ -435,6 +437,15 @@
#endif
}
+inline void InspectorInstrumentation::mediaQueryResultChanged(Document* document)
+{
+#if ENABLE(INSPECTOR)
+ FAST_RETURN_IF_NO_FRONTENDS(void());
+ if (InstrumentingAgents* instrumentingAgents = instrumentingAgentsForDocument(document))
+ mediaQueryResultChangedImpl(instrumentingAgents);
+#endif
+}
+
inline void InspectorInstrumentation::mouseDidMoveOverElement(Page* page, const HitTestResult& result, unsigned modifierFlags)
{
#if ENABLE(INSPECTOR)
Modified: trunk/Source/WebCore/inspector/front-end/CSSStyleModel.js (102902 => 102903)
--- trunk/Source/WebCore/inspector/front-end/CSSStyleModel.js 2011-12-15 09:21:41 UTC (rev 102902)
+++ trunk/Source/WebCore/inspector/front-end/CSSStyleModel.js 2011-12-15 09:23:19 UTC (rev 102903)
@@ -35,6 +35,8 @@
WebInspector.CSSStyleModel = function()
{
new WebInspector.CSSStyleModelResourceBinding(this);
+ InspectorBackend.registerCSSDispatcher(new WebInspector.CSSDispatcher(this));
+ CSSAgent.enable();
}
WebInspector.CSSStyleModel.parseRuleArrayPayload = function(ruleArray)
@@ -46,7 +48,8 @@
}
WebInspector.CSSStyleModel.Events = {
- StyleSheetChanged: "StyleSheetChanged"
+ StyleSheetChanged: "StyleSheetChanged",
+ MediaQueryResultChanged: "MediaQueryResultChanged"
}
WebInspector.CSSStyleModel.prototype = {
@@ -248,6 +251,11 @@
CSSAgent.addRule(nodeId, selector, callback.bind(this, successCallback, failureCallback, selector));
},
+ mediaQueryResultChanged: function()
+ {
+ this.dispatchEventToListeners(WebInspector.CSSStyleModel.Events.MediaQueryResultChanged);
+ },
+
_documentElementId: function(nodeId)
{
var node = WebInspector.domAgent.nodeForId(nodeId);
@@ -850,6 +858,21 @@
WebInspector.CSSStyleModelResourceBinding.prototype.__proto__ = WebInspector.ResourceDomainModelBinding.prototype;
/**
+ * @constructor
+ */
+WebInspector.CSSDispatcher = function(cssModel)
+{
+ this._cssModel = cssModel;
+}
+
+WebInspector.CSSDispatcher.prototype = {
+ mediaQueryResultChanged: function()
+ {
+ this._cssModel.mediaQueryResultChanged();
+ }
+}
+
+/**
* @type {WebInspector.CSSStyleModel}
*/
WebInspector.cssModel = null;
Modified: trunk/Source/WebCore/inspector/front-end/MetricsSidebarPane.js (102902 => 102903)
--- trunk/Source/WebCore/inspector/front-end/MetricsSidebarPane.js 2011-12-15 09:21:41 UTC (rev 102902)
+++ trunk/Source/WebCore/inspector/front-end/MetricsSidebarPane.js 2011-12-15 09:23:19 UTC (rev 102903)
@@ -34,7 +34,8 @@
{
WebInspector.SidebarPane.call(this, WebInspector.UIString("Metrics"));
- WebInspector.cssModel.addEventListener(WebInspector.CSSStyleModel.Events.StyleSheetChanged, this._styleSheetChanged, this);
+ WebInspector.cssModel.addEventListener(WebInspector.CSSStyleModel.Events.StyleSheetChanged, this._styleSheetOrMediaQueryResultChanged, this);
+ WebInspector.cssModel.addEventListener(WebInspector.CSSStyleModel.Events.MediaQueryResultChanged, this._styleSheetOrMediaQueryResultChanged, this);
WebInspector.domAgent.addEventListener(WebInspector.DOMAgent.Events.AttrModified, this._attributesUpdated, this);
WebInspector.domAgent.addEventListener(WebInspector.DOMAgent.Events.AttrRemoved, this._attributesUpdated, this);
}
@@ -82,7 +83,7 @@
WebInspector.cssModel.getInlineStylesAsync(node.id, inlineStyleCallback.bind(this));
},
- _styleSheetChanged: function()
+ _styleSheetOrMediaQueryResultChanged: function()
{
this._innerUpdate();
},
Modified: trunk/Source/WebCore/inspector/front-end/StylesSidebarPane.js (102902 => 102903)
--- trunk/Source/WebCore/inspector/front-end/StylesSidebarPane.js 2011-12-15 09:21:41 UTC (rev 102902)
+++ trunk/Source/WebCore/inspector/front-end/StylesSidebarPane.js 2011-12-15 09:23:19 UTC (rev 102903)
@@ -89,7 +89,8 @@
this._sectionsContainer = document.createElement("div");
this.bodyElement.appendChild(this._sectionsContainer);
- WebInspector.cssModel.addEventListener(WebInspector.CSSStyleModel.Events.StyleSheetChanged, this._styleSheetChanged, this);
+ WebInspector.cssModel.addEventListener(WebInspector.CSSStyleModel.Events.StyleSheetChanged, this._styleSheetOrMediaQueryResultChanged, this);
+ WebInspector.cssModel.addEventListener(WebInspector.CSSStyleModel.Events.MediaQueryResultChanged, this._styleSheetOrMediaQueryResultChanged, this);
WebInspector.domAgent.addEventListener(WebInspector.DOMAgent.Events.AttrModified, this._attributesModified, this);
WebInspector.domAgent.addEventListener(WebInspector.DOMAgent.Events.AttrRemoved, this._attributesRemoved, this);
WebInspector.domAgent.addEventListener(WebInspector.DOMAgent.Events.StyleInvalidated, this._styleInvalidated, this);
@@ -286,7 +287,7 @@
this._executeRebuildUpdate(node, userCallback);
},
- _styleSheetChanged: function()
+ _styleSheetOrMediaQueryResultChanged: function()
{
if (this._userOperation || this._isEditingStyle)
return;
Modified: trunk/Source/WebCore/page/FrameView.cpp (102902 => 102903)
--- trunk/Source/WebCore/page/FrameView.cpp 2011-12-15 09:21:41 UTC (rev 102902)
+++ trunk/Source/WebCore/page/FrameView.cpp 2011-12-15 09:23:19 UTC (rev 102903)
@@ -1000,8 +1000,10 @@
// Viewport-dependent media queries may cause us to need completely different style information.
// Check that here.
- if (document->styleSelector()->affectedByViewportChange())
+ if (document->styleSelector()->affectedByViewportChange()) {
document->styleSelectorChanged(RecalcStyleImmediately);
+ InspectorInstrumentation::mediaQueryResultChanged(document);
+ }
// Always ensure our style info is up-to-date. This can happen in situations where
// the layout beats any sort of style recalc update that needs to occur.