From 11c596f7a06dbda123c077440f9275905f89e869 Mon Sep 17 00:00:00 2001 From: Matthew Horan Date: Tue, 1 Jan 2013 12:43:41 -0500 Subject: [PATCH] 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. --- spec/driver_spec.rb | 38 ++++++++++++++++++++++++++++++++++++++ src/WebPage.cpp | 2 +- 2 files changed, 39 insertions(+), 1 deletion(-) diff --git a/spec/driver_spec.rb b/spec/driver_spec.rb index 1f571cea..05a7ba14 100644 --- a/spec/driver_spec.rb +++ b/spec/driver_spec.rb @@ -1308,10 +1308,16 @@ def make_the_server_go_away

Hello

+

Hello first line.

+

Hello first letter.

HTML @@ -1326,6 +1332,38 @@ def make_the_server_go_away SCRIPT font_family.should == "Arial" 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 context "cookie-based app" do diff --git a/src/WebPage.cpp b/src/WebPage.cpp index 5cb967a4..57e72120 100644 --- a/src/WebPage.cpp +++ b/src/WebPage.cpp @@ -70,7 +70,7 @@ void WebPage::loadJavascript() { } 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); settings()->setUserStyleSheetUrl(url); }