Commit d9ebd07e authored by lushnikov's avatar lushnikov Committed by Commit bot

DevTools: add CSS.FontsUpdated event to signify that WebFont has loaded.

BUG=595356
R=dgozman

Review-Url: https://codereview.chromium.org/2198463003
Cr-Commit-Position: refs/heads/master@{#408833}
parent f80faab2
Verifies that CSS.fontsUpdated event is sent as the web font is loaded.
SUCCESS: CSS.FontsUpdated event received.
<html>
<head>
<link rel="stylesheet">
<script type="text/javascript" src="../../http/tests/inspector-protocol/inspector-protocol-test.js"></script>
<script type="text/javascript" src="../../http/tests/inspector-protocol/css-protocol-test.js"></script>
<script type="text/javascript" src="../../http/tests/inspector-protocol/dom-protocol-test.js"></script>
<script type="text/javascript">
function loadWebFont()
{
var link = document.querySelector("link");
link.href = "./resources/ahem.css";
}
function test()
{
InspectorTest.requestDocumentNodeId(onDocumentNodeId);
function onDocumentNodeId(nodeId)
{
InspectorTest.eventHandler["CSS.fontsUpdated"] = fontsUpdated;
InspectorTest.sendCommandOrDie("CSS.enable", {}, onCSSEnabled);
}
function onCSSEnabled()
{
InspectorTest.sendCommandOrDie("Runtime.evaluate", {expression: "loadWebFont()"});
}
function fontsUpdated()
{
InspectorTest.log("SUCCESS: CSS.FontsUpdated event received.");
InspectorTest.completeTest();
}
}
</script>
</head>
<body onload="runTest();">
<p>Verifies that CSS.fontsUpdated event is sent as the web font is loaded.</p>
</body>
</html>
@font-face {
font-family: "ahem";
src: url('./Ahem.ttf');
}
body {
font-family: "ahem";
}
...@@ -575,6 +575,7 @@ void StyleEngine::fontsNeedUpdate(CSSFontSelector*) ...@@ -575,6 +575,7 @@ void StyleEngine::fontsNeedUpdate(CSSFontSelector*)
if (m_resolver) if (m_resolver)
m_resolver->invalidateMatchedPropertiesCache(); m_resolver->invalidateMatchedPropertiesCache();
document().setNeedsStyleRecalc(SubtreeStyleChange, StyleChangeReasonForTracing::create(StyleChangeReason::Fonts)); document().setNeedsStyleRecalc(SubtreeStyleChange, StyleChangeReasonForTracing::create(StyleChangeReason::Fonts));
InspectorInstrumentation::fontsUpdated(m_document);
} }
void StyleEngine::setFontSelector(CSSFontSelector* fontSelector) void StyleEngine::setFontSelector(CSSFontSelector* fontSelector)
......
...@@ -709,6 +709,12 @@ void InspectorCSSAgent::mediaQueryResultChanged() ...@@ -709,6 +709,12 @@ void InspectorCSSAgent::mediaQueryResultChanged()
frontend()->mediaQueryResultChanged(); frontend()->mediaQueryResultChanged();
} }
void InspectorCSSAgent::fontsUpdated()
{
flushPendingProtocolNotifications();
frontend()->fontsUpdated();
}
void InspectorCSSAgent::activeStyleSheetsUpdated(Document* document) void InspectorCSSAgent::activeStyleSheetsUpdated(Document* document)
{ {
if (m_isSettingStyleSheetText) if (m_isSettingStyleSheetText)
......
...@@ -118,6 +118,7 @@ public: ...@@ -118,6 +118,7 @@ public:
void activeStyleSheetsUpdated(Document*); void activeStyleSheetsUpdated(Document*);
void documentDetached(Document*); void documentDetached(Document*);
void fontsUpdated();
void enable(ErrorString*, std::unique_ptr<EnableCallback>) override; void enable(ErrorString*, std::unique_ptr<EnableCallback>) override;
void disable(ErrorString*) override; void disable(ErrorString*) override;
......
...@@ -106,6 +106,9 @@ class XMLHttpRequest; ...@@ -106,6 +106,9 @@ class XMLHttpRequest;
[CSS] [CSS]
void activeStyleSheetsUpdated([Keep] Document*); void activeStyleSheetsUpdated([Keep] Document*);
[CSS]
void fontsUpdated(Document*);
[CSS] [CSS]
void mediaQueryResultChanged(Document*); void mediaQueryResultChanged(Document*);
......
...@@ -3029,6 +3029,10 @@ ...@@ -3029,6 +3029,10 @@
"name": "mediaQueryResultChanged", "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." "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."
}, },
{
"name": "fontsUpdated",
"description": "Fires whenever a web font gets loaded."
},
{ {
"name": "styleSheetChanged", "name": "styleSheetChanged",
"parameters": [ "parameters": [
......
...@@ -70,6 +70,7 @@ WebInspector.ComputedStyleModel.prototype = { ...@@ -70,6 +70,7 @@ WebInspector.ComputedStyleModel.prototype = {
this._cssModel.addEventListener(WebInspector.CSSModel.Events.StyleSheetAdded, this._onComputedStyleChanged, this), this._cssModel.addEventListener(WebInspector.CSSModel.Events.StyleSheetAdded, this._onComputedStyleChanged, this),
this._cssModel.addEventListener(WebInspector.CSSModel.Events.StyleSheetRemoved, this._onComputedStyleChanged, this), this._cssModel.addEventListener(WebInspector.CSSModel.Events.StyleSheetRemoved, this._onComputedStyleChanged, this),
this._cssModel.addEventListener(WebInspector.CSSModel.Events.StyleSheetChanged, this._onComputedStyleChanged, this), this._cssModel.addEventListener(WebInspector.CSSModel.Events.StyleSheetChanged, this._onComputedStyleChanged, this),
this._cssModel.addEventListener(WebInspector.CSSModel.Events.FontsUpdated, this._onComputedStyleChanged, this),
this._cssModel.addEventListener(WebInspector.CSSModel.Events.MediaQueryResultChanged, this._onComputedStyleChanged, this), this._cssModel.addEventListener(WebInspector.CSSModel.Events.MediaQueryResultChanged, this._onComputedStyleChanged, this),
this._cssModel.addEventListener(WebInspector.CSSModel.Events.PseudoStateForced, this._onComputedStyleChanged, this), this._cssModel.addEventListener(WebInspector.CSSModel.Events.PseudoStateForced, this._onComputedStyleChanged, this),
this._cssModel.addEventListener(WebInspector.CSSModel.Events.ModelWasEnabled, this._onComputedStyleChanged, this), this._cssModel.addEventListener(WebInspector.CSSModel.Events.ModelWasEnabled, this._onComputedStyleChanged, this),
......
...@@ -62,6 +62,7 @@ WebInspector.CSSModel = function(target) ...@@ -62,6 +62,7 @@ WebInspector.CSSModel = function(target)
WebInspector.CSSModel.Events = { WebInspector.CSSModel.Events = {
LayoutEditorChange: "LayoutEditorChange", LayoutEditorChange: "LayoutEditorChange",
FontsUpdated: "FontsUpdated",
MediaQueryResultChanged: "MediaQueryResultChanged", MediaQueryResultChanged: "MediaQueryResultChanged",
ModelWasEnabled: "ModelWasEnabled", ModelWasEnabled: "ModelWasEnabled",
PseudoStateForced: "PseudoStateForced", PseudoStateForced: "PseudoStateForced",
...@@ -758,6 +759,11 @@ WebInspector.CSSModel.prototype = { ...@@ -758,6 +759,11 @@ WebInspector.CSSModel.prototype = {
this.dispatchEventToListeners(WebInspector.CSSModel.Events.MediaQueryResultChanged); this.dispatchEventToListeners(WebInspector.CSSModel.Events.MediaQueryResultChanged);
}, },
fontsUpdated: function()
{
this.dispatchEventToListeners(WebInspector.CSSModel.Events.FontsUpdated);
},
/** /**
* @param {!CSSAgent.StyleSheetId} id * @param {!CSSAgent.StyleSheetId} id
* @return {?WebInspector.CSSStyleSheetHeader} * @return {?WebInspector.CSSStyleSheetHeader}
...@@ -1098,6 +1104,14 @@ WebInspector.CSSDispatcher.prototype = { ...@@ -1098,6 +1104,14 @@ WebInspector.CSSDispatcher.prototype = {
this._cssModel.mediaQueryResultChanged(); this._cssModel.mediaQueryResultChanged();
}, },
/**
* @override
*/
fontsUpdated: function()
{
this._cssModel.fontsUpdated();
},
/** /**
* @override * @override
* @param {!CSSAgent.StyleSheetId} styleSheetId * @param {!CSSAgent.StyleSheetId} styleSheetId
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment