Ignore custom fonts applied to pseudo elements
WebPage::setUserStylesheet prevents Web Fonts from loading when styles are applied directly to elements, however if the styles are applied to pseudo elements, the override does not apply. This leads to crashes on Mac OS X, likely due to https://bugs.webkit.org/show_bug.cgi?id=61031.
This commit is contained in:
parent
5dab9f72be
commit
11c596f7a0
|
@ -1308,10 +1308,16 @@ describe Capybara::Webkit::Driver do
|
||||||
<head>
|
<head>
|
||||||
<style type="text/css">
|
<style type="text/css">
|
||||||
p { font-family: "Verdana"; }
|
p { font-family: "Verdana"; }
|
||||||
|
p:before { font-family: "Verdana"; }
|
||||||
|
p:after { font-family: "Verdana"; }
|
||||||
|
#first-line-div:first-line { font-family: "Verdana"; }
|
||||||
|
#first-letter-div:first-letter { font-family: "Verdana"; }
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<p id="text">Hello</p>
|
<p id="text">Hello</p>
|
||||||
|
<p id="first-line-div">Hello first line.</p>
|
||||||
|
<p id="first-letter-div">Hello first letter.</p>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
HTML
|
HTML
|
||||||
|
@ -1326,6 +1332,38 @@ describe Capybara::Webkit::Driver do
|
||||||
SCRIPT
|
SCRIPT
|
||||||
font_family.should == "Arial"
|
font_family.should == "Arial"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it "ignores custom fonts before an element" do
|
||||||
|
font_family = driver.evaluate_script(<<-SCRIPT)
|
||||||
|
var element = document.getElementById("text");
|
||||||
|
element.ownerDocument.defaultView.getComputedStyle(element, 'before').getPropertyValue("font-family");
|
||||||
|
SCRIPT
|
||||||
|
font_family.should == "Arial"
|
||||||
|
end
|
||||||
|
|
||||||
|
it "ignores custom fonts after an element" do
|
||||||
|
font_family = driver.evaluate_script(<<-SCRIPT)
|
||||||
|
var element = document.getElementById("text");
|
||||||
|
element.ownerDocument.defaultView.getComputedStyle(element, 'after').getPropertyValue("font-family");
|
||||||
|
SCRIPT
|
||||||
|
font_family.should == "Arial"
|
||||||
|
end
|
||||||
|
|
||||||
|
it "ignores custom fonts applied to the first-line pseudo element" do
|
||||||
|
font_family = driver.evaluate_script(<<-SCRIPT)
|
||||||
|
var element = document.getElementById("first-line-div");
|
||||||
|
element.ownerDocument.defaultView.getComputedStyle(element, 'first-line').getPropertyValue("font-family");
|
||||||
|
SCRIPT
|
||||||
|
font_family.should == "Arial"
|
||||||
|
end
|
||||||
|
|
||||||
|
it "ignores custom fonts applied to the first-letter pseudo element" do
|
||||||
|
font_family = driver.evaluate_script(<<-SCRIPT)
|
||||||
|
var element = document.getElementById("first-letter-div");
|
||||||
|
element.ownerDocument.defaultView.getComputedStyle(element, 'first-letter').getPropertyValue("font-family");
|
||||||
|
SCRIPT
|
||||||
|
font_family.should == "Arial"
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context "cookie-based app" do
|
context "cookie-based app" do
|
||||||
|
|
|
@ -70,7 +70,7 @@ void WebPage::loadJavascript() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void WebPage::setUserStylesheet() {
|
void WebPage::setUserStylesheet() {
|
||||||
QString data = QString("* { font-family: 'Arial' ! important; }").toUtf8().toBase64();
|
QString data = QString("*, :first-line, :first-letter, :before, :after { font-family: 'Arial' ! important; }").toUtf8().toBase64();
|
||||||
QUrl url = QUrl(QString("data:text/css;charset=utf-8;base64,") + data);
|
QUrl url = QUrl(QString("data:text/css;charset=utf-8;base64,") + data);
|
||||||
settings()->setUserStyleSheetUrl(url);
|
settings()->setUserStyleSheetUrl(url);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue