| <html> | 
 | <head> | 
 | </head> | 
 |  | 
 | <embed id="pluginEmbed" type="application/x-gwt-hosted-mode" width="10" | 
 | height="10"> | 
 | </embed> | 
 |  | 
 |  | 
 | <script> | 
 | var plugin = document.getElementById('pluginEmbed'); | 
 | var disabledIcon = 'gwt32-gray.png'; | 
 | var enabledIcon = 'gwt32.png'; | 
 |  | 
 |  | 
 | function getHostFromUrl(url) { | 
 |   var hostname = ''; | 
 |   var idx = url.indexOf('://'); | 
 |   if (idx >= 0) { | 
 |     idx += 3; | 
 |     hostname = url.substring(idx); | 
 |   } | 
 |   idx = hostname.indexOf('/'); | 
 |   if (idx >= 0) { | 
 |     hostname = hostname.substring(0,idx); | 
 |   } | 
 |   idx = hostname.indexOf('@'); | 
 |   if( idx >= 0) | 
 |   { | 
 |     hostname = hostname.substring(idx+1); | 
 |   } | 
 |   idx = hostname.indexOf(':'); | 
 |   if (idx >= 0) { | 
 |     hostname = hostname.substring(0,idx); | 
 |   } | 
 |   return hostname; | 
 | } | 
 |  | 
 | function getCodeServerFromUrl(url) { | 
 |   var idx = url.indexOf('?'); | 
 |   if (idx < 0) { | 
 |     return ''; | 
 |   } | 
 |   url = url.substring(idx+1); | 
 |   idx = url.indexOf('gwt.codesvr='); | 
 |   if( idx < 0 ) { | 
 |     return ''; | 
 |   } | 
 |   url = url.substring(idx+12); | 
 |   var colon = url.indexOf(':'); | 
 |   var amp   = url.indexOf('&'); | 
 |   if( amp < 0 || colon < amp ) { | 
 |     amp = colon; | 
 |   } | 
 |   return amp < 0 ? url : url.substring(0,amp); | 
 | } | 
 |  | 
 | function devModeTabListener(tabId, changeInfo, tab) { | 
 |   var search = tab.url.slice(tab.url.indexOf('?')); | 
 |   if (search.indexOf('gwt.codesvr=') >= 0 || search.indexOf('gwt.hosted=') >= 0) { | 
 |     var permission = plugin.getHostPermission(tab.url); | 
 |     var host = getHostFromUrl(tab.url); | 
 |     var code = getCodeServerFromUrl(tab.url); | 
 |     var popup = 'page_action.html'; | 
 |     var icon = null; | 
 |     console.log("got permission " + permission + " for host " + host + '/ code ' + code); | 
 |  | 
 |     var idObject = {}; | 
 |     plugin.testJsIdentity( idObject, idObject ); | 
 |  | 
 |     if (permission == 'include') { | 
 |       icon = enabledIcon; | 
 |     } else if (permission == 'exclude') { | 
 |       icon = disabledIcon; | 
 |     } else if (permission == 'unknown') { | 
 |       icon = disabledIcon; | 
 |     } | 
 |     popup += "?permission=" + permission + "&host=" + host + "&codeserver=" + code; | 
 |     chrome.pageAction.setIcon({'tabId' : tabId, 'path' : icon}); | 
 |     chrome.pageAction.setPopup({'tabId' : tabId, 'popup' : popup}); | 
 |     chrome.pageAction.show(tabId); | 
 |  | 
 |     var hostEntries = window.localStorage.getItem('GWT_DEV_HOSTENTRY') || []; | 
 |     console.log("loading hostentries: " + hostEntries); | 
 |     plugin.loadHostEntries.apply(plugin, JSON.parse(hostEntries)); | 
 |   } else { | 
 |     chrome.pageAction.hide(tabId); | 
 |   } | 
 | }; | 
 |  | 
 | chrome.tabs.onUpdated.addListener(devModeTabListener); | 
 | </script> | 
 | </html> |