--!movie
--!encoding=utf-8
global $
global gChromium
----------------------------------------
-- encryption key
----------------------------------------
global pwd -- used to decrypt scripts and PDF files encrypted with AES-256 encryption
----------------------------------------
--
----------------------------------------
on startMovie
_player.debugPlaybackEnabled = 1
----------------------------------------
-- CONFIG
----------------------------------------
pwd = "(!O0S9QiMfL$_*ltV(0M841JCxm*J6qV"
-- libs
$.import("aes")
$.import("base64")
$.import("file")
$.import("string")
-- window settings
_movie.stage.title = "Chromium Xtra Demo: Encrypted PDF"
_movie.stage.titlebarOptions.visible = 1
_movie.stage.titlebarOptions.maximizebox = 1
_movie.stage.rect = rect(0,0,1200,840)
_movie.stage.bgcolor = rgb(255,255,255)
_movie.centerStage = 1
_movie.stage.resizable = 1
_movie.puppetTempo(30)
_movie.stage.visible = 1
cefInit(["log_severity":99]) -- disable creation of debug.log
-- create browser window in stage window that shows the PDF
r = rect(0, 0, _movie.stage.rect.width, _movie.stage.rect.height)
p = $.string.replace("\", "/", $.PATH)
u = "file:///"&p&"resources/pdf/pdf.htm"
gChromium = xtra("Chromium").new(u, r, 1)
gChromium.browserSetAutoResize(TRUE)
-- for debugging only
--gChromium.browserShowDevTools()
end
----------------------------------------
--
----------------------------------------
on stopMovie (me)
if objectP(gChromium) then
gChromium.browserClose()
-- give browser some time to shutdown
Sleep(1000)
gChromium = VOID
end if
end
----------------------------------------
--
----------------------------------------
on loadEncryptedPDF (fn)
data = $.file.getBytes(fn)
data = $.aes.decryptByteArray(data, pwd)
js = "loadPDF(atob('"&$.base64.encode(data)&"'));"
gChromium.browserExecuteJavaScript(js, "js")
end
----------------------------------------
-- Loads JS script synchronously
----------------------------------------
on loadEncryptedScriptSync (fn)
data = $.file.getBytes(fn)
data = $.aes.decryptByteArray(data, pwd)
js = ""
put "var scr = document.createElement('script');" after js
put "var txt = document.createTextNode(atob('"&$.base64.encode(data)&"'));" after js
put "scr.appendChild(txt);" after js
put "document.getElementsByTagName('head')[0].appendChild(scr);" after js
gChromium.browserExecuteJavaScript(js, "js")
end
----------------------------------------
-- Loads JS script asynchronously.
-- Lingo code <callbackCode> is executed when script was loaded into DOM.
----------------------------------------
--on loadEncryptedScriptAsync (fn, callbackCode)
-- data = $.file.getBytes(fn)
-- data = $.aes.decryptByteArray(data, pwd)
-- uri = "data:text/javascript;base64," & $.base64.encode(data)
-- js = ""
-- put "var scr = document.createElement('script');" after js
-- put "scr.setAttribute('src', '"&uri&"');" after js
-- put "scr.onload=function(){" after js
-- put " window.cefQuery({request:'"&callbackCode&"'});" after js
-- put "};" after js
-- put "document.getElementsByTagName('head')[0].appendChild(scr);" after js
-- gChromium.browserExecuteJavaScript(js, "js")
--end
--**************************************
-- RAW CALLBACKS - NOT THREAD-SAFE!
--**************************************
----------------------------------------
-- @callback
----------------------------------------
on OnLoadEnd (aHttpStatusCode)
-- The dummy page was loaded.
-- Now completely reset the HTML code, in case a user messed with it
js = ""
put "document.write();" after js
put "var h=document.createElement('html');" after js
put "h.innerHTML='<head></head><body><canvas id=\'canvas\'></canvas></body>';" after js
put "document.appendChild(h);" after js
gChromium.browserExecuteJavaScript(js, "js")
-- Load the encrypted pdf.js code (synchronously)
loadEncryptedScriptSync($.PATH&"resources\pdf\pdf.min.js.enc")
-- Execute (encrypted) viewer script code
data = $.file.getBytes($.PATH&"resources\pdf\viewer.js.enc")
data = $.aes.decryptByteArray(data, pwd)
js = data.readRawString(data.length)
gChromium.browserExecuteJavaScript(js, "js")
-- Auto-load an encrypted PDF file
loadEncryptedPDF($.PATH&"media\test.pdf.enc")
end
----------------------------------------
-- @callback
----------------------------------------
on OnConsoleMessage (aLevel, aMsg)
put ["[DEBUG] ","[INFO] ","[WARNING] ","[ERROR] "][aLevel] & aMsg
end
----------------------------------------
-- @callback
----------------------------------------
on OnBeforeContextMenu
--return TRUE -- no context menu
-- custom context menu for navigation in PDF
return ["", "Next Page", "Previous Page", "-", "First Page", "Last Page", "-", "Zoom In", "Zoom Out"]
end
----------------------------------------
-- @callback
----------------------------------------
on OnContextMenuCommand (aCommandID)
case (aCommandID-26500) of
2: gChromium.browserExecuteJavaScript("onNextPage();", "js")
3: gChromium.browserExecuteJavaScript("onPrevPage();", "js")
5: gChromium.browserExecuteJavaScript("onGotoPage(1);", "js")
6: gChromium.browserExecuteJavaScript("onGotoPage(pdfDoc.numPages);", "js")
8: gChromium.browserExecuteJavaScript("scale=scale*1.1;onGotoPage(pageNum);", "js")
9: gChromium.browserExecuteJavaScript("scale=scale/1.1;onGotoPage(pageNum);", "js")
end case
end