diff --git a/grunt_config.json b/grunt_config.json
--- a/grunt_config.json
+++ b/grunt_config.json
@@ -37,6 +37,7 @@
"<%= dirs.js.src %>/mousetrap.js",
"<%= dirs.js.src %>/moment.js",
"<%= dirs.js.node_modules %>/appenlight-client/appenlight-client.min.js",
+ "<%= dirs.js.node_modules %>/favico.js/favico-0.3.10.min.js",
"<%= dirs.js.src %>/i18n_utils.js",
"<%= dirs.js.src %>/deform.js",
"<%= dirs.js.src %>/plugins/jquery.pjax.js",
diff --git a/rhodecode/public/js/src/components/rhodecode-app/rhodecode-app.html b/rhodecode/public/js/src/components/rhodecode-app/rhodecode-app.html
--- a/rhodecode/public/js/src/components/rhodecode-app/rhodecode-app.html
+++ b/rhodecode/public/js/src/components/rhodecode-app/rhodecode-app.html
@@ -1,8 +1,11 @@
+
+
+
+
+
+
+
+
+
diff --git a/rhodecode/public/js/src/components/rhodecode-favicon/rhodecode-favicon.js b/rhodecode/public/js/src/components/rhodecode-favicon/rhodecode-favicon.js
new file mode 100644
--- /dev/null
+++ b/rhodecode/public/js/src/components/rhodecode-favicon/rhodecode-favicon.js
@@ -0,0 +1,20 @@
+Polymer({
+ is: 'rhodecode-favicon',
+ properties: {
+ favicon: Object,
+ counter: {
+ type: Number,
+ observer: '_handleCounter'
+ }
+ },
+
+ ready: function () {
+ this.favicon = new Favico({
+ type: 'rectangle',
+ animation: 'none'
+ });
+ },
+ _handleCounter: function (newVal, oldVal) {
+ this.favicon.badge(this.counter);
+ }
+});
diff --git a/rhodecode/public/js/src/components/rhodecode-toast/rhodecode-toast.js b/rhodecode/public/js/src/components/rhodecode-toast/rhodecode-toast.js
--- a/rhodecode/public/js/src/components/rhodecode-toast/rhodecode-toast.js
+++ b/rhodecode/public/js/src/components/rhodecode-toast/rhodecode-toast.js
@@ -13,9 +13,11 @@ Polymer({
],
_changedToasts: function(newValue, oldValue){
this.$['p-toast'].notifyResize();
+ $.Topic('/favicon/update').publish({count: this.toasts.length});
},
dismissNotifications: function(){
this.$['p-toast'].close();
+ $.Topic('/favicon/update').publish({count: 0});
},
handleClosed: function(){
this.splice('toasts', 0);
diff --git a/rhodecode/public/js/topics_list.txt b/rhodecode/public/js/topics_list.txt
--- a/rhodecode/public/js/topics_list.txt
+++ b/rhodecode/public/js/topics_list.txt
@@ -6,3 +6,4 @@
/connection_controller/subscribe - subscribes user to new channels
/connection_controller/presence - receives presence change messages
/connection_controller/channel_update - receives channel states
+/favicon/update - notify state change for favicon