diff --git a/integration_tests/snapshots/css/css-fonts/relative-path-font-face.html.0.png b/integration_tests/snapshots/css/css-fonts/relative-path-font-face.html.0.png
new file mode 100644
index 0000000000..048108d441
Binary files /dev/null and b/integration_tests/snapshots/css/css-fonts/relative-path-font-face.html.0.png differ
diff --git a/integration_tests/specs/css/css-fonts/relative-path-font-face.html b/integration_tests/specs/css/css-fonts/relative-path-font-face.html
new file mode 100644
index 0000000000..f3e4654bd1
--- /dev/null
+++ b/integration_tests/specs/css/css-fonts/relative-path-font-face.html
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+ Document
+
+
+
+
+
+ AAAAAAAAA
+
+
+
+
\ No newline at end of file
diff --git a/integration_tests/windows/flutter/generated_plugin_registrant.cc b/integration_tests/windows/flutter/generated_plugin_registrant.cc
index 4b23bc136a..45a0b4000c 100644
--- a/integration_tests/windows/flutter/generated_plugin_registrant.cc
+++ b/integration_tests/windows/flutter/generated_plugin_registrant.cc
@@ -6,12 +6,9 @@
#include "generated_plugin_registrant.h"
-#include
#include
void RegisterPlugins(flutter::PluginRegistry* registry) {
- ConnectivityPlusWindowsPluginRegisterWithRegistrar(
- registry->GetRegistrarForPlugin("ConnectivityPlusWindowsPlugin"));
WebfPluginRegisterWithRegistrar(
registry->GetRegistrarForPlugin("WebfPlugin"));
}
diff --git a/integration_tests/windows/flutter/generated_plugins.cmake b/integration_tests/windows/flutter/generated_plugins.cmake
index 0a762d1572..e3552774d1 100644
--- a/integration_tests/windows/flutter/generated_plugins.cmake
+++ b/integration_tests/windows/flutter/generated_plugins.cmake
@@ -3,7 +3,6 @@
#
list(APPEND FLUTTER_PLUGIN_LIST
- connectivity_plus
webf
)
diff --git a/webf/lib/src/css/font_face.dart b/webf/lib/src/css/font_face.dart
index ef3c402ec5..f0d4da2147 100644
--- a/webf/lib/src/css/font_face.dart
+++ b/webf/lib/src/css/font_face.dart
@@ -29,16 +29,16 @@ class _Font {
}
class CSSFontFace {
- static Uri? _resolveFontSource(int contextId, String source) {
+ static Uri? _resolveFontSource(int contextId, String source, String? base) {
WebFController controller = WebFController.getControllerOfJSContextId(contextId)!;
- String base = controller.url;
+ base = base ?? controller.url;
try {
return controller.uriParser!.resolve(Uri.parse(base), Uri.parse(source));
} catch (_) {
return null;
}
}
- static void resolveFontFaceRules(CSSFontFaceRule fontFaceRule, int contextId) async {
+ static void resolveFontFaceRules(CSSFontFaceRule fontFaceRule, int contextId, String? baseHref) async {
CSSStyleDeclaration declaration = fontFaceRule.declarations;
String fontFamily = declaration.getPropertyValue('fontFamily');
String url = declaration.getPropertyValue('src');
@@ -89,12 +89,12 @@ class CSSFontFace {
loader.addFont(bytes);
loader.load();
} else {
- Uri? uri = _resolveFontSource(contextId, targetFont.src);
+ Uri? uri = _resolveFontSource(contextId, targetFont.src, baseHref);
if (uri == null) return;
WebFBundle bundle = WebFBundle.fromUrl(uri.toString());
await bundle.resolve(contextId);
assert(bundle.isResolved, 'Failed to obtain $url');
- FontLoader loader = FontLoader(fontFamily);
+ FontLoader loader = FontLoader(removeQuotationMark(fontFamily));
Future bytes = Future.value(bundle.data?.buffer.asByteData());
loader.addFont(bytes);
loader.load();
diff --git a/webf/lib/src/css/rule_set.dart b/webf/lib/src/css/rule_set.dart
index 4e81dc3de8..82925c8cfe 100644
--- a/webf/lib/src/css/rule_set.dart
+++ b/webf/lib/src/css/rule_set.dart
@@ -33,13 +33,13 @@ class RuleSet {
int _lastPosition = 0;
- void addRules(List rules) {
+ void addRules(List rules, { required String? baseHref }) {
for (CSSRule rule in rules) {
- addRule(rule);
+ addRule(rule, baseHref: baseHref);
}
}
- void addRule(CSSRule rule) {
+ void addRule(CSSRule rule, { required String? baseHref }) {
rule.position = _lastPosition++;
if (rule is CSSStyleRule) {
for (final selector in rule.selectorGroup.selectors) {
@@ -48,7 +48,7 @@ class RuleSet {
} else if (rule is CSSKeyframesRule) {
keyframesRules[rule.name] = rule;
} else if (rule is CSSFontFaceRule) {
- CSSFontFace.resolveFontFaceRules(rule, ownerDocument.contextId!);
+ CSSFontFace.resolveFontFaceRules(rule, ownerDocument.contextId!, baseHref);
} else {
assert(false, 'Unsupported rule type: ${rule.runtimeType}');
}
diff --git a/webf/lib/src/dom/document.dart b/webf/lib/src/dom/document.dart
index 3dbf1db096..90bcfd5056 100644
--- a/webf/lib/src/dom/document.dart
+++ b/webf/lib/src/dom/document.dart
@@ -441,7 +441,7 @@ class Document extends ContainerNode {
styleSheets.addAll(sheets.map((e) => e.clone()));
ruleSet.reset();
for (var sheet in sheets) {
- ruleSet.addRules(sheet.cssRules);
+ ruleSet.addRules(sheet.cssRules, baseHref: sheet.href);
}
}
diff --git a/webf/lib/src/dom/style_node_manager.dart b/webf/lib/src/dom/style_node_manager.dart
index d9d0539c71..2db4228b4c 100644
--- a/webf/lib/src/dom/style_node_manager.dart
+++ b/webf/lib/src/dom/style_node_manager.dart
@@ -136,20 +136,20 @@ class StyleNodeManager {
if (equals(oldSheets[index].cssRules, newSheets[index].cssRules)) {
continue;
}
- ruleSet.addRules(newSheets[index].cssRules);
- ruleSet.addRules(oldSheets[index].cssRules);
+ ruleSet.addRules(newSheets[index].cssRules, baseHref: newSheets[index].href);
+ ruleSet.addRules(oldSheets[index].cssRules, baseHref: oldSheets[index].href);
}
if (index == oldSheetsCount) {
for (; index < newSheetsCount; index++) {
- ruleSet.addRules(newSheets[index].cssRules);
+ ruleSet.addRules(newSheets[index].cssRules, baseHref: newSheets[index].href);
}
return ruleSet;
}
if (index == newSheetsCount) {
for (; index < oldSheetsCount; index++) {
- ruleSet.addRules(oldSheets[index].cssRules);
+ ruleSet.addRules(oldSheets[index].cssRules, baseHref: oldSheets[index].href);
}
return ruleSet;
}
@@ -166,7 +166,7 @@ class StyleNodeManager {
}
CSSStyleSheet sheet1 = mergeSorted[index];
if (index == mergeSorted.length - 1 || sheet != sheet1) {
- ruleSet.addRules(sheet1.cssRules);
+ ruleSet.addRules(sheet1.cssRules, baseHref: sheet1.href);
continue;
}
@@ -178,8 +178,8 @@ class StyleNodeManager {
continue;
}
- ruleSet.addRules(sheet1.cssRules);
- ruleSet.addRules(sheet2.cssRules);
+ ruleSet.addRules(sheet1.cssRules, baseHref: sheet1.href);
+ ruleSet.addRules(sheet2.cssRules, baseHref: sheet2.href);
}
return ruleSet;