summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Dywan <christian@twotoasts.de>2019-02-17 19:40:03 +0100
committerGitHub <noreply@github.com>2019-02-17 19:40:03 +0100
commit1fe668b75648c39e0db74c972a5f75b20db72a8b (patch)
treedf90f3854f049e9c67b2edb2c1a9491ffae53be7
parent67b6eb83005c2a9f29a02fe923adcc6833a32b61 (diff)
downloadmidori-git-1fe668b75648c39e0db74c972a5f75b20db72a8b.tar.gz
Better handling of browser action icon and content scripts (#256)
cf. https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/content_scripts
-rw-r--r--extensions/web-extensions.vala36
1 files changed, 27 insertions, 9 deletions
diff --git a/extensions/web-extensions.vala b/extensions/web-extensions.vala
index 155248d6..e0501ae1 100644
--- a/extensions/web-extensions.vala
+++ b/extensions/web-extensions.vala
@@ -51,6 +51,22 @@ namespace WebExtension {
// "WebExtensionExtensionManager::extension_added" is not a value type
public signal void extension_added (Object extension);
+ string? pick_default_icon (Json.Object action) {
+ if (action.has_member ("default_icon")) {
+ var node = action.get_member ("default_icon");
+ if (node != null) {
+ if (node.get_node_type () == Json.NodeType.OBJECT) {
+ foreach (var size in node.get_object ().get_members ()) {
+ return node.get_object ().get_string_member (size);
+ }
+ } else if (node.get_node_type () == Json.NodeType.VALUE) {
+ return node.get_string ();
+ }
+ }
+ }
+ return null;
+ }
+
public static ExtensionManager get_default () {
if (_default == null) {
_default = new ExtensionManager ();
@@ -103,23 +119,25 @@ namespace WebExtension {
var action = manifest.get_object_member ("browser_action");
if (action != null) {
extension.browser_action = new Action (
- action.has_member ("default_icon") ? action.get_string_member ("default_icon") : null,
+ pick_default_icon (action),
action.has_member ("default_title") ? action.get_string_member ("default_title") : null,
action.has_member ("default_popup") ? action.get_string_member ("default_popup") : null);
}
}
if (manifest.has_member ("content_scripts")) {
- var content_scripts = manifest.get_object_member ("content_scripts");
- if (content_scripts != null && content_scripts.has_member ("js")) {
- foreach (var element in content_scripts.get_array_member ("js").get_elements ()) {
- extension.content_scripts.append (element.get_string ());
+ foreach (var element in manifest.get_array_member ("content_scripts").get_elements ()) {
+ var content_script = element.get_object ();
+ if (content_script.has_member ("js")) {
+ foreach (var js in content_script.get_array_member ("js").get_elements ()) {
+ extension.content_scripts.append (js.get_string ());
+ }
}
- }
- if (content_scripts != null && content_scripts.has_member ("css")) {
- foreach (var element in content_scripts.get_array_member ("css").get_elements ()) {
- extension.content_styles.append (element.get_string ());
+ if (content_script.has_member ("css")) {
+ foreach (var css in content_script.get_array_member ("css").get_elements ()) {
+ extension.content_styles.append (css.get_string ());
+ }
}
}
}