ADDED gc_lang/fr/webext/content_scripts/comunicate.html Index: gc_lang/fr/webext/content_scripts/comunicate.html ================================================================== --- gc_lang/fr/webext/content_scripts/comunicate.html +++ gc_lang/fr/webext/content_scripts/comunicate.html @@ -0,0 +1,6 @@ + + + + + + ADDED gc_lang/fr/webext/content_scripts/comunicate.js Index: gc_lang/fr/webext/content_scripts/comunicate.js ================================================================== --- gc_lang/fr/webext/content_scripts/comunicate.js +++ gc_lang/fr/webext/content_scripts/comunicate.js @@ -0,0 +1,82 @@ +let xGCEWorker = null; + +console.log('[Iframe] Loaded'); + +/* + Worker (separate thread to avoid freezing Firefox) +*/ +function createSharedworker (sPath) { + try { + xGCEWorker = new SharedWorker(sPath+"gce_sharedworker.js"); + } + catch (e) { + console.error(e); + } + + xGCEWorker.onerror = function(e) { + console.log('There is an error with your worker!'); + console.log(typeof(e)); + console.log(e); + for (let sParam in e) { + console.log(sParam); + console.log(e.sParam); + } + } + + xGCEWorker.port.onmessage = function (e) { + // https://developer.mozilla.org/en-US/docs/Web/API/MessageEvent + try { + //On retransmet directement le message à la page + console.log("[Iframe] send from Message Worker"); + window.postMessage({SharedWorker: e.data}, sPath ); + } + catch (e) { + console.error(e); + } + }; + + console.log("[Iframe] [worker]"); + console.log(xGCEWorker); + + + //xGCEWorker.port.start(); + //console.log("Content script [port started]"); + + //xGCEWorker.port.postMessage(["init", {sExtensionPath: browser.extension.getURL("."), sOptions: "", sContext: "Firefox"}]); + + console.log("[Iframe] [worker initialzed]"); + + //xGCEWorker.port.postMessage(["parse", {sText: "Vas... J’en aie mare...", sCountry: "FR", bDebug: false, bContext: false}]); + //xGCEWorker.port.postMessage(["parseAndSpellcheck", {sText: oRequest.sText, sCountry: "FR", bDebug: false, bContext: false}]); + //xGCEWorker.port.postMessage(["getListOfTokens", {sText: oRequest.sText}]); + //xGCEWorker.port.postMessage(["textToTest", {sText: oRequest.sText, sCountry: "FR", bDebug: false, bContext: false}]); + //xGCEWorker.port.postMessage(["fullTests"]); +} + + +var savePathExtension = ''; +var savePathOrigine = ''; +console.log('[Iframe] Set receivedMessageWeb'); +function receivedMessageWeb (oEvent) { + console.log('[Iframe] received:', oEvent, savePathExtension, savePathOrigine, oEvent.origin); + //Pour être sure que ca viens bien de notre iframe ;) + if ( !xGCEWorker && typeof oEvent.data.sPath !== "undefined" && typeof oEvent.data.sPage !== "undefined" && oEvent.data.sPage === oEvent.origin ){ + console.log('Create the Sharedworker ', oEvent.origin); + savePathExtension = oEvent.data.sPath; + savePathOrigine = oEvent.origin; + //On créer le Shraredworker + createSharedworker(savePathExtension); + //On initialise le Shraredworker + xGCEWorker.port.postMessage(["init", {sExtensionPath: savePathExtension, sOptions: "", sContext: "Firefox"}]); + } else if ( xGCEWorker && savePathOrigine === oEvent.origin) { + //Les messages reçus maintenant on un Sharedworker fonctionnel et donc si ça viens bien de la page on lui transmet + //TODO: Fodrait établir un protocol de communication afin qu'on ne traite vraiment que les messages a transmettre util ;) + console.log('[Iframe] exec command with Sharedworker'); + xGCEWorker.port.postMessage(oEvent.data); + console.log('[Iframe] end send message to worker'); + } +} +window.addEventListener("message", receivedMessageWeb, false); + + +console.log('[Iframe] END'); Index: gc_lang/fr/webext/content_scripts/modify_page.js ================================================================== --- gc_lang/fr/webext/content_scripts/modify_page.js +++ gc_lang/fr/webext/content_scripts/modify_page.js @@ -1,96 +1,58 @@ // Modify page "use strict"; -console.log("Content script [start]"); function showError (e) { console.error(e.fileName + "\n" + e.name + "\nline: " + e.lineNumber + "\n" + e.message); } + +console.log("Content script [start]"); + +/* +* Pour effectuer différent action sur la page en cours +*/ +function receivedMessageIframe (oEvent) { + if ( typeof oEvent.data.SharedWorker !== "undefined" ) { + //C'est ici que les action devront être effectuées + console.log('[Web] received (from iframe (Sharedworker)):', oEvent); + } +} /* - Worker (separate thread to avoid freezing Firefox) +* Creation d'une iframe pour communiquer entre la page visitée et le Shareworker */ -let xGCEWorker = new SharedWorker(browser.extension.getURL("../gce_sharedworker.js")); - -xGCEWorker.onerror = function(e) { - console.log('There is an error with your worker!'); - console.log(typeof(e)); - console.log(e); - for (let sParam in e) { - console.log(sParam); - console.log(e.sParam); - } -} - -xGCEWorker.port.onmessage = function (e) { - // https://developer.mozilla.org/en-US/docs/Web/API/MessageEvent +var iframe = document.createElement('iframe'); +iframe.id = "GrammaFrameModule"; +iframe.src = browser.extension.getURL('content_scripts/comunicate.html'); +iframe.hidden = true; +iframe.onload= function() { + console.log('[Web] Init protocol de communication'); + //var iframeContent = iframe.contentWindow; + var iframeContent = document.getElementById("GrammaFrameModule").contentWindow; + iframeContent.addEventListener("message", receivedMessageIframe, false); + try { - switch (e.data[0]) { - case "grammar_errors": - console.log("GRAMMAR ERRORS (SHARE)"); - console.log(e.data[1].aGrammErr); - //browser.runtime.sendMessage({sCommand: "grammar_errors", aGrammErr: e.data[1].aGrammErr}); - break; - case "spelling_and_grammar_errors": - console.log("SPELLING AND GRAMMAR ERRORS (SHARE)"); - console.log(e.data[1].aSpellErr); - console.log(e.data[1].aGrammErr); - break; - case "text_to_test_result": - console.log("TESTS RESULTS (SHARE)"); - console.log(e.data[1]); - break; - case "fulltests_result": - console.log("TESTS RESULTS (SHARE)"); - console.log(e.data[1]); - break; - case "options": - console.log("OPTIONS (SHARE)"); - console.log(e.data[1]); - break; - case "tokens": - console.log("TOKENS (SHARE)"); - console.log(e.data[1]); - let xLxgTab = browser.tabs.create({ - url: browser.extension.getURL("panel/lexicographer.html"), - }); - xLxgTab.then(onCreated, onError); - break; - case "error": - console.log("ERROR (SHARE)"); - console.log(e.data[1]); - break; - default: - console.log("Unknown command (SHARE): " + e.data[0]); - } + //La frame est chargé on envoie l'initialisation du Sharedworker + console.log('[Web] Initialise the worker :s'); + console.log('[Web] Domaine ext: '+browser.extension.getURL('')); + iframeContent.postMessage({sPath:browser.extension.getURL(''), sPage:location.origin.trim("/")}, browser.extension.getURL('') ); + + + //Un petit test pour débogage ;) + console.log('[Web] Test the worker :s'); + iframeContent.postMessage(["parse", {sText: "Vas... J’en aie mare...", sCountry: "FR", bDebug: false, bContext: false}], browser.extension.getURL('')); } catch (e) { - showError(e); - } -}; - -console.log("Content script [worker]"); -console.log(xGCEWorker); - - -//xGCEWorker.port.start(); -//console.log("Content script [port started]"); - -//xGCEWorker.port.postMessage(["init", {sExtensionPath: browser.extension.getURL("."), sOptions: "", sContext: "Firefox"}]); - -console.log("Content script [worker initialzed]"); - -xGCEWorker.port.postMessage(["parse", {sText: "Vas... J’en aie mare...", sCountry: "FR", bDebug: false, bContext: false}]); -//xGCEWorker.port.postMessage(["parseAndSpellcheck", {sText: oRequest.sText, sCountry: "FR", bDebug: false, bContext: false}]); -//xGCEWorker.port.postMessage(["getListOfTokens", {sText: oRequest.sText}]); -//xGCEWorker.port.postMessage(["textToTest", {sText: oRequest.sText, sCountry: "FR", bDebug: false, bContext: false}]); -//xGCEWorker.port.postMessage(["fullTests"]); - - - + console.error(e); + } +} +document.body.appendChild(iframe); + + +console.log('[Web] La suite des initialisations'); function wrapTextareas() {; let lNode = document.getElementsByTagName("textarea"); for (let xNode of lNode) { createGCButton(xNode); } Index: gc_lang/fr/webext/gce_sharedworker.js ================================================================== --- gc_lang/fr/webext/gce_sharedworker.js +++ gc_lang/fr/webext/gce_sharedworker.js @@ -58,16 +58,24 @@ Message Event Object https://developer.mozilla.org/en-US/docs/Web/API/MessageEvent */ let xPort = null; + +function showError (e) { + for (let sParam in e) { + console.log(sParam); + console.log(e[sParam]); + } +} onconnect = function(e) { console.log("START CONNECTION"); xPort = e.ports[0]; xPort.onmessage = function (e) { + console.log("[Sharedworker] ONMESSAGE"); console.log(e); console.log(e.data[0]); let oParam = e.data[1]; switch (e.data[0]) { case "init": @@ -102,11 +110,11 @@ break; case "getListOfTokens": getListOfTokens(oParam.sText); break; default: - console.log("Unknown command: " + e.data[0]); + console.log("Unknown command: " + showError(e.data[0])); } } //xPort.start(); } @@ -130,11 +138,11 @@ oLxg = new Lexicographe(oDict); if (sGCOptions !== "") { gc_engine.setOptions(helpers.objectToMap(JSON.parse(sGCOptions))); } oTokenizer = new Tokenizer("fr"); - tests(); + //tests(); // we always retrieve options from the gc_engine, for setOptions filters obsolete options xPort.postMessage(["options", gc_engine.getOptions().gl_toString()]); } catch (e) { console.error(e.fileName + "\n" + e.name + "\nline: " + e.lineNumber + "\n" + e.message); Index: gc_lang/fr/webext/manifest.json ================================================================== --- gc_lang/fr/webext/manifest.json +++ gc_lang/fr/webext/manifest.json @@ -42,11 +42,13 @@ "web_accessible_resources": [ "grammalecte/_dictionaries/French.json", "grammalecte/fr/conj_data.json", "grammalecte/fr/mfsp_data.json", "grammalecte/fr/phonet_data.json", - "grammalecte/fr/tests_data.json" + "grammalecte/fr/tests_data.json", + "content_scripts/comunicate.html", + "content_scripts/comunicate.js" ], "permissions": [ "activeTab", "contextMenus" ],