diff --git a/dom/apps/tests/file_test_widget.js b/dom/apps/tests/file_test_widget.js index a0a600bbad9e..2dcfb1dc035f 100644 --- a/dom/apps/tests/file_test_widget.js +++ b/dom/apps/tests/file_test_widget.js @@ -1,6 +1,7 @@ var gWidgetManifestURL = 'http://test/tests/dom/apps/tests/file_app.sjs?apptype=widget&getmanifest=true'; var gInvalidWidgetManifestURL = 'http://test/tests/dom/apps/tests/file_app.sjs?apptype=invalidWidget&getmanifest=true'; var gApp; +var gHasBrowserPermission; function onError() { ok(false, "Error callback invoked"); @@ -82,21 +83,34 @@ function testApp(isValidWidget) { function testLimitedBrowserAPI(ifr) { var securitySensitiveCalls = [ - 'sendMouseEvent', - 'sendTouchEvent', - 'goBack', - 'goForward', - 'reload', - 'stop', - 'download', - 'purgeHistory', - 'getScreenshot', - 'zoom', - 'getCanGoBack', - 'getCanGoForward' + { api: 'sendMouseEvent' , args: ['mousedown', 0, 0, 0, 0, 0] }, + { api: 'sendTouchEvent' , args: ['touchstart', [0], [0], [0], [1], [1], [0], [1], 1, 0] }, + { api: 'goBack' , args: [] }, + { api: 'goForward' , args: [] }, + { api: 'reload' , args: [] }, + { api: 'stop' , args: [] }, + { api: 'download' , args: ['http://example.org'] }, + { api: 'purgeHistory' , args: [] }, + { api: 'getScreenshot' , args: [0, 0] }, + { api: 'zoom' , args: [0.1] }, + { api: 'getCanGoBack' , args: [] }, + { api: 'getCanGoForward' , args: [] }, + { api: 'getContentDimensions', args: [] } ]; securitySensitiveCalls.forEach( function(call) { - is(typeof ifr[call], "undefined", call + " should be hidden for widget"); + if (gHasBrowserPermission) { + isnot(typeof ifr[call.api], "undefined", call.api + " should be defined"); + var didThrow; + try { + ifr[call.api].apply(ifr, call.args); + } catch (e) { + ok(e instanceof DOMException, "throw right exception type"); + didThrow = e.code; + } + is(didThrow, DOMException.INVALID_NODE_TYPE_ERR, "call " + call.api + " should throw exception"); + } else { + is(typeof ifr[call.api], "undefined", call.api + " should be hidden for widget"); + } }); } @@ -154,7 +168,7 @@ var tests = [ // Permissions function() { SpecialPowers.pushPermissions( - [{ "type": "browser", "allow": 1, "context": document }, + [{ "type": "browser", "allow": gHasBrowserPermission ? 1 : 0, "context": document }, { "type": "embed-widgets", "allow": 1, "context": document }, { "type": "webapps-manage", "allow": 1, "context": document }], runTest); }, diff --git a/dom/apps/tests/mochitest.ini b/dom/apps/tests/mochitest.ini index 09bedc01ae8d..1c90136f1096 100644 --- a/dom/apps/tests/mochitest.ini +++ b/dom/apps/tests/mochitest.ini @@ -45,3 +45,5 @@ skip-if = (toolkit == 'android' && processor == 'x86') #x86 only [test_web_app_install.html] [test_widget.html] skip-if = os == "android" || toolkit == "gonk" # embed-apps doesn't work in mochitest app +[test_widget_browser.html] +skip-if = os == "android" || toolkit == "gonk" # embed-apps doesn't work in mochitest app diff --git a/dom/apps/tests/test_widget.html b/dom/apps/tests/test_widget.html index cd4a2271b5ae..61c8a605fa96 100644 --- a/dom/apps/tests/test_widget.html +++ b/dom/apps/tests/test_widget.html @@ -11,6 +11,7 @@
+ + +diff --git a/dom/apps/tests/test_widget_browser.html b/dom/apps/tests/test_widget_browser.html new file mode 100644 index 000000000000..e0d8f144952e --- /dev/null +++ b/dom/apps/tests/test_widget_browser.html @@ -0,0 +1,18 @@ + + +
+ +
+ + + + +
+