From bbb78bee027832dff5710a1568accbfcca83bdc9 Mon Sep 17 00:00:00 2001 From: Kyle Spearrin Date: Wed, 28 Sep 2016 19:12:14 -0400 Subject: [PATCH] Grayed out icon when logged out. field context script for highlighting login fields. --- src/background.js | 70 +++++++---- src/content/field.js | 166 +++++++++++++++++++++++++ src/images/icon128_gray.png | Bin 0 -> 2281 bytes src/images/icon16_gray.png | Bin 0 -> 461 bytes src/images/icon19_gray.png | Bin 0 -> 487 bytes src/images/icon32_gray.png | Bin 0 -> 726 bytes src/images/icon38_gray.png | Bin 0 -> 853 bytes src/images/icon48_gray.png | Bin 0 -> 1006 bytes src/images/icon96_gray.png | Bin 0 -> 1825 bytes src/manifest.json | 5 + src/popup/app/services/loginService.js | 3 + 11 files changed, 222 insertions(+), 22 deletions(-) create mode 100644 src/content/field.js create mode 100644 src/images/icon128_gray.png create mode 100644 src/images/icon16_gray.png create mode 100644 src/images/icon19_gray.png create mode 100644 src/images/icon32_gray.png create mode 100644 src/images/icon38_gray.png create mode 100644 src/images/icon48_gray.png create mode 100644 src/images/icon96_gray.png diff --git a/src/background.js b/src/background.js index e3eca53e871..5d2949fee12 100644 --- a/src/background.js +++ b/src/background.js @@ -11,13 +11,46 @@ var autofillService = new AutofillService(); var passwordGenerationService = new PasswordGenerationService(); var appIdService = new AppIdService(); -chrome.runtime.onInstalled.addListener(function (details) { - ga('send', { - hitType: 'event', - eventAction: 'onInstalled ' + details.reason - }); +chrome.runtime.onMessage.addListener(function (msg, sender, sendResponse) { + if (msg.command === 'loggedOut') { + setIcon(true); + refreshBadgeAndMenu(); + } + else if (msg.command === 'loggedIn') { + setIcon(false); + } + else if (msg.command === 'syncCompleted' && msg.successfully) { + setTimeout(refreshBadgeAndMenu, 2000); + } }); +userService.isAuthenticated(function (isAuthenticated) { + setIcon(!isAuthenticated); +}); + +function setIcon(grayedOut) { + var suffix = ''; + if (grayedOut) { + suffix = '_gray'; + } + + chrome.browserAction.setIcon({ + path: { + '19': 'images/icon19' + suffix + '.png', + '38': 'images/icon38' + suffix + '.png', + } + }); +} + +if (chrome.runtime.onInstalled) { + chrome.runtime.onInstalled.addListener(function (details) { + ga('send', { + hitType: 'event', + eventAction: 'onInstalled ' + details.reason + }); + }); +} + function buildContextMenu() { chrome.contextMenus.removeAll(); chrome.contextMenus.create({ @@ -44,23 +77,16 @@ function buildContextMenu() { chrome.tabs.onActivated.addListener(function (activeInfo) { buildContextMenu(); - chrome.tabs.query({ active: true, currentWindow: true }, function (tabs) { - var tab = null; - if (tabs.length > 0) { - tab = tabs[0]; - } - - if (!tab || !tab.url) { - return; - } - - buildContextMenuOptions(tab.url); - }); + refreshBadgeAndMenu(); }); var loadedMenu = false; chrome.tabs.onReplaced.addListener(function (addedTabId, removedTabId) { - chrome.tabs.query({ active: true, currentWindow: true }, function (tabs) { + refreshBadgeAndMenu(); +}); + +function refreshBadgeAndMenu() { + chrome.tabs.query({ active: true }, function (tabs) { var tab = null; if (tabs.length > 0) { tab = tabs[0]; @@ -70,13 +96,13 @@ chrome.tabs.onReplaced.addListener(function (addedTabId, removedTabId) { return; } - loadMenuAndUpdateBadge(tab.url, tab.id, false); + buildContextMenu(); + loadMenuAndUpdateBadge(tab.url, tab.id, true); }); -}); +} chrome.tabs.onUpdated.addListener(function (tabId, changeInfo, tab) { buildContextMenu(); - loadMenuAndUpdateBadge(tab.url, tabId, true); }); @@ -126,7 +152,7 @@ function loadMenuAndUpdateBadge(url, tabId, loadContextMenuOptions) { else { loadNoSitesContextMenuOptions(); chrome.browserAction.setBadgeText({ - text: null, + text: '', tabId: tabId }); } diff --git a/src/content/field.js b/src/content/field.js new file mode 100644 index 00000000000..e06a488ee8c --- /dev/null +++ b/src/content/field.js @@ -0,0 +1,166 @@ +!(function () { + chrome.runtime.onMessage.addListener(function (msg, sender, sendResponse) { + if (msg.command === 'setFieldOverlayIcons') { + setFieldOverlayIcons(); + sendResponse(); + return true; + } + }); + + document.addEventListener('DOMContentLoaded', function () { + setFieldOverlayIcons(); + + var bodies = document.querySelectorAll('body'); + if (bodies.length > 0) { + observeDOM(bodies[0], function () { + setTimeout(setFieldOverlayIcons, 1000); + }); + } + }, false); + + function setFieldOverlayIcons() { + var pageDetails = JSON.parse(collect(document)); + if (pageDetails) { + var fields = []; + + for (var i = 0; i < pageDetails.fields.length; i++) { + var f = pageDetails.fields[i]; + if (f.type === 'password') { + fields.push(f); + + var fieldJustBeforePassword = null; + for (var j = 0; j < pageDetails.fields.length; j++) { + var f2 = pageDetails.fields[j]; + if ((f2.type === 'text' || f2.type === 'email') && f2.elementNumber < f.elementNumber) { + fieldJustBeforePassword = f2; + } + } + + if (!fields.includes(fieldJustBeforePassword)) { + fields.push(fieldJustBeforePassword); + } + } + } + + for (i = 0; i < fields.length; i++) { + var element = getElement(fields[i].opid); + + // TODO: insert icon for popup + + //element.style.backgroundColor = 'yellow'; + } + } + } + + // ref http://stackoverflow.com/a/14570614/1090359 + var observeDOM = (function () { + var MutationObserver = window.MutationObserver || window.WebKitMutationObserver, + eventListenerSupported = window.addEventListener; + + return function (obj, callback) { + if (MutationObserver) { + // define a new observer + var obs = new MutationObserver(function (mutations, observer) { + if (mutations[0].addedNodes.length || mutations[0].removedNodes.length) { + callback(); + } + }); + // have the observer observe foo for changes in children + obs.observe(obj, { childList: true, subtree: true }); + } + else if (eventListenerSupported) { + obj.addEventListener('DOMNodeInserted', callback, false); + obj.addEventListener('DOMNodeRemoved', callback, false); + } + } + })(); + + function getElement(opid) { + if (!opid) { + return null; + } + + var element; + try { + var inputFields = Array.prototype.slice.call(document.querySelectorAll('input')); + var opidInputFields = inputFields.filter(function (b) { + return b.opid === opid; + }); + + if (opidInputFields.length > 0) { + element = opidInputFields[0]; + + if (opidInputFields.length > 1) { + console.warn('More than one element found with opid ' + opid); + } + } + else { + var index = parseInt(opid.split('__')[1], 10); + isNaN(index) || (element = inputFields[index]) + } + } + catch (e) { + console.error('An unexpected error occurred: ' + e); + } + finally { + return element; + } + } + + /* + 1Password Extension + + Lovingly handcrafted by Dave Teare, Michael Fey, Rad Azzouz, and Roustem Karimov. + Copyright (c) 2014 AgileBits. All rights reserved. + + ================================================================================ + + Copyright (c) 2014 AgileBits Inc. + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. + */ + + function collect(document, undefined) { + document.elementsByOPID={};document.addEventListener('input',function(c){!1!==c.a&&'input'===c.target.tagName.toLowerCase()&&(c.target.dataset['com.agilebits.onepassword.userEdited']='yes')},!0); + function r(c,e){function b(a,g){var d=a[g];if('string'==typeof d)return d;d=a.getAttribute(g);return'string'==typeof d?d:null}function h(a,g){if(-1===['text','password'].indexOf(g.type.toLowerCase())||!(n.test(a.value)||n.test(a.htmlID)||n.test(a.htmlName)||n.test(a.placeholder)||n.test(a['label-tag'])||n.test(a['label-data'])||n.test(a['label-aria'])))return!1;if(!a.visible)return!0;if('password'==g.type.toLowerCase())return!1;var d=g.type;w(g,!0);return d!==g.type}function p(a){switch(q(a.type)){case 'checkbox':return a.checked? + '✓':'';case 'hidden':a=a.value;if(!a||'number'!=typeof a.length)return'';254\\?]/mg,''):null;return[d?d:null,a.value]}),{options:a}):null}function s(a){var c;for(a=a.parentElement||a.parentNode;a&&'td'!=q(a.tagName);)a=a.parentElement||a.parentNode;if(!a|| + void 0===a)return null;c=a.parentElement||a.parentNode;if('tr'!=c.tagName.toLowerCase())return null;c=c.previousElementSibling;if(!c||'tr'!=(c.tagName+'').toLowerCase()||c.cells&&a.cellIndex>=c.cells.length)return null;a=c.cells[a.cellIndex];a=a.textContent||a.innerText;return a=y(a)}function t(a){var g,d=[];if(a.labels&&a.labels.length&&0c.clientWidth||10>c.clientHeight)return!1;var t=c.getClientRects();if(0===t.length)return!1;for(var f=0;fh||0>s.right)return!1;if(0>m||m>h||0>e||e>p)return!1;for(b=c.ownerDocument.elementFromPoint(m+(b.right>window.innerWidth?(window.innerWidth-m)/2:b.width/2),e+(b.bottom>window.innerHeight? + (window.innerHeight-e)/2:b.height/2));b&&b!==c&&b!==document;){if(b.tagName&&'string'===typeof b.tagName&&'label'===b.tagName.toLowerCase()&&c.labels&&00&F7JCG-QmUo4QnM|66xG_ZT2doQm59;D zdTdn^TGT8RtI<5x>;2{Z3*K|?=YG!To_p>&_uO;Oy{Q)F2Hc#2oB#lD8yV_Zo^jlN z!OnW-yHW0gXT4Ra5{0%$M12Uf%=(A@`XiFNmS z5ZsT|1OWC(BR#ZrIAyb7!^Fmc|L@%4{swcFq&u4g-yEd7j<@?nK`KWnT7mT;tAxAT z3N+N{frNnbD<0x$+8QliZaoWi$+d%b60bwZ#+=jd9%Zh5uY2-?%YO z%B43Ez5eYE6_+%j{Ze2rwx__yDf{^{mc8F@nH>I!DI*Srk}3?XQ8;T<8c!3T{5tDY zJWytk+VI#0dSfic|wcL1qxjT+IF6#&(`)V2I*pLm4j$nynI2~2Az*M8DQ!i@=aD6%5 z=Rph4Z%y98PLs!N#(H{*eSLkfiAuAH6EoJTsw#uYFJICr6wJ=noCZR!i5YCDGR{y_ zQxjFn4o0>YclCVwl)Aecf{@F4`Ukl#6OX|N7QmVBt`74y`iv;=o=<&ti+(C4CADAL zG)uYg`Hux1by-HIrf$7E01v|zydM)hg|%V=&Jx47 z<6LO^mX?2Qg|TQw{T?NO$wS|5HkV>6Zx<0ZXc`(CpUMm}Hl^d}^!sBJit&g^rD>k1 z`0c`)kKmaI7(2nW!<=R!ub^-bJ~2J*d#Vbsi1d^jW%WE3P>^xBp9GoTn)|r;wLOx+ zM{d9lhC)v)g2J|D>pK7#S8MoAseeI+T%3fM*cxi9>k*`Kwn(aEelSJ4VmIU<37@Krn9$-|12V14>Ft6d%fL*BhI+ z#Ofj!m-Yyxc@Zj*68%yfNPIMsulAjDRSrWmEU&6!3*BVwt(tL{ylTB1wYy|AHa524 zyE>AmU?Ah%s#xqfb^zCknVmdTvH|!Z)^>IpQw$sqhv|SzN(wbfr>t{a<%i6+J(zel z?AqvUMusP~1%FSnRrdC51tKCMdO8!>t~41E?=0vHG2*>xXAP{4meh%jCL)oWC&!1S z4GrV;r^(&9a;^l2>(!30VG9^_sH6G(OruW|RE3(o(4Cw!8BSrB258IC;>6`VYT{T$cq*+q5<0hqP&{C9~ zFPzY3p~yH{7tY65csZE-p_|lsLsooz%UM#;)LNhxy z2XRx$*RNeOzN_xn{#9%^KELDcs<}yJe`F#H`n1KfmnX3BX7Hk(6(Lo7xW=K8$joDE zru(VZv6;B@#O6|`j1;iFziws5JTo&Rs-`xR=`XTRnVYLkmmD6zh{z# zt1JFPq;9OMy}hsWD)kM^cEXrq*J}X*0nE4BgGZ1O*3K(3fz*502}A&=yw5ZJgo`!R zR#i#M!gXOZay--fuYkWJ2w+Z6OG`7wbHfOzkfjvmKk5(t?}z|;l5O{6*omxP2+kAU z9Pt5NlT4KrHa0ex{4P+asty3q5M9$ENThy^eZAnR zaBU!48dEvc_FzxX*4B1(4*c@)f`oaBRh2pJZdCFZGf2^JFm&9?9U>?iJe_^EQy#Kd zM|`VtY2x%q`2O0TJDW2K3l@SRfLPhPu*He1RNvE+V+ucLPRGMzF>`evmI?XlZ@~nz z);N|rhwkY*&lj0FA1^jZk_G!|f=yv2R#sVeI6lL)3x2SkFE}B-XztG3tas~tc;J8v z7h=1NZF0#7^GWZFxQ-TqE2FDi!Cr!B0(iqjH7k{Q_frOX33iaG>vTt*k{Vmln9nQAlLUdGL3Vr6uxmT#h_ zcdNDd15&v@fL*JD(U8FjWwPD3*WR&YStDI%gnp)^(I-xIds0q?E`yy!K|N;@y;pc- zhvWDmY9@mp94(Lft2jz=$ym_P()VpEJJ%~Z>3Pl@F6lJSb*L`RuIyiREbsUU_rBLD b$8~@*O`TB!+cKT~Du9u`xgJ5s?csj_hbJO; literal 0 HcmV?d00001 diff --git a/src/images/icon16_gray.png b/src/images/icon16_gray.png new file mode 100644 index 0000000000000000000000000000000000000000..71376bf97d72f69c183242319ad033222e34abc3 GIT binary patch literal 461 zcmV;;0W$uHP)lt$*)zs5Q?@{%P+VLbI`t7s-l9;Dyg|l-LC6vioFpVZghRkY zT$=ysJr^TdYia4!4?geVdd~0Q^;}^%9Nq$WVZLL&!O!&0Y%xDo*~4VM$L~aq9+)cx z7|>3?-$%FGg&+vHTrO#5y(Dd}tJMmoX=1nA|9|8;j8U2v|P{cKT00000NkvXXu0mjf D_u|8c literal 0 HcmV?d00001 diff --git a/src/images/icon19_gray.png b/src/images/icon19_gray.png new file mode 100644 index 0000000000000000000000000000000000000000..7607aa2b513c1e3d3bcf2159cee9e99cc08b2adb GIT binary patch literal 487 zcmVWgb%=AP(xFgrb1$@1=+vp7An4}m?jV9FL@3lH zAQXuh1kpr#?}4IiVpHkX7oKo`-uvabyZ3~8y`BJY%XH0jiQmT?(+ktH#6EXS4>&)_ zz!Ot~V71+-s;V#y1HSM7NRT86gTVl{ZSRI^1k3Dtnx-L_%f+^|Uat>f87a=9e!q`y zw~J&l$z3aof^xYGK@g7J#(~Y}b2yH(?~9@snkV89<3GZ-+ik2xRAXWJN3g>iI~7!q z6w~Q68a5h@;JWTfP&S)Ip-_P5c^D3d(XiEOg?76g3DR{P)oPWuDQ~%4p1y$bcnr(3 z5Cp+~ER{;3R4TzVOTBsR26kAB0lu4pL52Lk(Q-Sp21l>jUy}wm5Qf zass2#2)SI2@p!zE3d1ny^?Ha#qqx1jT^v5622_httyT-QTK#@gl}e$}XqFjJG5BB{ zY;yDS^D{gi51yW$AP@-V#zvzN>~=epO6B$pP&AuO*2ppphr_pX8ODm@WbHc+Wl&}cL^GC+@Xkx0Z|w^}V!tJT#F)M_IKsudfo%4l6B7x0jW4|f7-7XS|#H)?Xs|M&v76=6R zb({(XE-x>kQvL05g25mLgTZ>cfaZeV?_Wv$`1lxCS64VXI-148;V=q?!e;$IGMU6= zGJ(}<{io@m%S!u3lgR|VUOzV$3WX4h#onhQN~Kcl*1Wj5V7J#4G|L?h2gG9WEJl~x z=kvWebKZrhTrR`yb|at9&vm>n#Y?3UTrStj;?os)Sk@UYL%-jL*XxB&r-Q{}nLY1z zyNyUBf?O`gchfvj12=?U_}o=27E!O)VK5ljavP7w(dl&7DH%7^z&FCreBX{}X{EE? z0DY>>aBrz!xxlW_=QQu9N%)KKl<+5EXN$rePUDo*#2*0$0N>Bj2>ECIP5=M^07*qo IM6N<$f&*_)q5uE@ literal 0 HcmV?d00001 diff --git a/src/images/icon38_gray.png b/src/images/icon38_gray.png new file mode 100644 index 0000000000000000000000000000000000000000..3259274412c996299267f67076e6e3c11759a309 GIT binary patch literal 853 zcmV-b1FHOqP)s+Oi96&k8J136+1Cf8g^)y=7$nNfDcD5vaU~Ws)N1 z606l}wHO*2LVtfhUS3{gZJFaZq*5uw<8h?ZX|Y#aDq*0PXn1%S7K;T2Lvx0k$z*~; zp}^MGmRR*y>Po#>O+0$%TJ-Pl@1=ts9vdRiYCZGGjE*=&Yh|9?-qzrT-zg9GVccXxM)Mx%Vl8$O@0?YY%zEh>vdBFJPi z_03B9A;C4G&dyFa91e7JbQH?Ax3_U}a?)73SXo)Y)zwwqgME5>y68Z2dwYvuFxYq= zqnWd`v?RGp>FDQjxzO9&TPUMrpx^Ju&CQKG36{=)KA*4ZwwW4MsZ_ApY;ZcA&}cM8 z>0xEXG?#&C?hQF#B6*k4P+m{NQ)u-yP^@YffM(%*q_|Z{~3!g4qv*$qH?b f3k<}9zXA*ZIkg!>%vT*100000NkvXXu0mjf_4|-$ literal 0 HcmV?d00001 diff --git a/src/images/icon48_gray.png b/src/images/icon48_gray.png new file mode 100644 index 0000000000000000000000000000000000000000..57fd0e5a6598909cce929b87143202b019e75aa1 GIT binary patch literal 1006 zcmV<>kR{x1*w>0@v5q z&%#Wv*JEpI3m%UL2L}gnU5Nyklx1dS zzL<~DNF*>5m#D?JktNg)lHMfXmCvgl)}c zGrGIGll}&$7FW>ebSXW@AZ0asU7SX^9GjJ&~MKvPpw)b*vMC7hq1%QJ~LHa4)ixv7YNwzf7D6cjwVc6fM* zm6a8FqtNv9wCp98mX;R2fEDXoVj@sd0%#OwXJ=)L`5he{sHv%my65$JMfW~gQe_pl z+l`{4B3LYzl*#Aj=JMpr%gdwg?d+9>H+K0nogDNXw|NukTCtAu6-` zd_I^=CKMMJ$8AT&;r8}+l$DjmY_qz$%J+OQ7))tYQ!Xu1&yI|Y;N;{44Gj%3ld-I< zEU*rG@*Q(?b8xv_lA@dB+UU&848KOSwzeWaKVQ@{1RTdb83g9%=P^7yEGo|tVgG0ZDB-Y3eG^rpr>3TOA&rfVsIIPlg`Jxu;xTU*PYvMektD3yx1NdO(+J0SB(C56UR*9)<6guzM9 z>SOqmhWq*7#QkozeGyzKU5vPXeYg^b7@7qkK@}4Z3LKjS&QYnvFNSx*@3M-BFGp~@ cxBmhR03WV5!Jt+Zg8%>k07*qoM6N<$f+}j+qyPW_ literal 0 HcmV?d00001 diff --git a/src/images/icon96_gray.png b/src/images/icon96_gray.png new file mode 100644 index 0000000000000000000000000000000000000000..664b06491cc690a29723ab1640d0036e3373eb33 GIT binary patch literal 1825 zcmV++2j2LJP)3n7N9j+r9A zP8Ifpuqk1G3;S8v*lKTftn$09!hRDrB&>wV_Xr`9vmwdhR!;>$uWuIildxdsbIk~r z95zc%bqN5!-Y$m|Lk+-Xr{s230iaTYu+Nw?<@i)`yL%-8{DsxYh799GsFPfOB)}PV zJEpm#Gam{7Wlk|Srs0&+(>Mh<&C!nO(a~wA0QjbuIWZmJJQxDxtd=M+3_Xh=_^eh>!pm6usW795`@b(~u8@hK5pda_*Ny;W{6{X zR<>3wEiG+20Tlhu{tgaCygacp1uOsy!0;Y??R@iZ-@c``wlF@$u2h14dkz=K!9B87u$`z+eGb00s-d0x(zr z7J$J5umB7efCXT%04xB51z-UfEC36@U;$VF1`EIfFjxQS{Q2_@Lq2*oo)2(`H*elpM}YD1@eLyY$k+4S^Yrwzbp&|& z^eMf1^=d;1uz&x4?dS!wI-L>$W@l$nNtK z2_q^hFE3Y~O#)a-jE|3}($Z4xC}mH9>YS(&xH5QaEUAp9zMWro=4juZ%>_3X|uD7>WBhHh^#Ffjy;d^$u|`cXM;ImN#JMLP|=?s_h2{2kGX`n^tr;F5?d*V%Uj#-0FAw`t@sVG=N~l z{rD)U6LjWxI{3Yx=yWBbIKX6Gf8{EN7ft~%W1VAOOv5?J`TvS> z7zG2&jo}!OT+@dFU{d&6*aUNA7$zjgbFKs+nUsCy93Bj%7?IpQT>e8>g>~Syohz+mV0q|EIaALuf9s0%&q^*`F1b0}y!l6AQNqgUebJ7g4^xt}D9Pc9 zomkI$0F?Vy*!RM+h2cRe)Q+|YOJc4y^dLVJhW+dR2y3MGWq!B#Pk;dc19(Kf2;qht P00000NkvXXu0mjf&)ZZo literal 0 HcmV?d00001 diff --git a/src/manifest.json b/src/manifest.json index b72d802e1e6..e34c7912148 100644 --- a/src/manifest.json +++ b/src/manifest.json @@ -23,6 +23,11 @@ "js": [ "content/overlay.js" ], "matches": [ "http://*/*", "https://*/*", "file:///*" ], "run_at": "document_start" + }, + { + "js": [ "content/field.js" ], + "matches": [ "http://*/*", "https://*/*", "file:///*" ], + "run_at": "document_start" } ], "background": { diff --git a/src/popup/app/services/loginService.js b/src/popup/app/services/loginService.js index 1307431be35..e9eab377d43 100644 --- a/src/popup/app/services/loginService.js +++ b/src/popup/app/services/loginService.js @@ -22,6 +22,7 @@ if (response.profile) { userService.setUserId(response.profile.id, function () { userService.setEmail(response.profile.email, function () { + chrome.runtime.sendMessage({ command: 'loggedIn' }); deferred.resolve(response); }); }); @@ -51,6 +52,7 @@ tokenService.setToken(response.token, function () { userService.setUserId(response.profile.id, function () { userService.setEmail(response.profile.email, function () { + chrome.runtime.sendMessage({ command: 'loggedIn' }); deferred.resolve(response); }); }); @@ -72,6 +74,7 @@ folderService.clear(userId, function () { $rootScope.vaultSites = null; $rootScope.vaultFolders = null; + chrome.runtime.sendMessage({ command: 'loggedOut' }); callback(); }); });