зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1368674 - Remove B2G Permissionis handling from Marionette. r=ato
The Permissions API was used extensively during B2G to make sure the state of the browser and permissions for APIs were in the relevant state. This code is no longer used and can be removed. MozReview-Commit-ID: HgcQe3GEd09 --HG-- extra : rebase_source : 08187e93b6729faae8a1913573d57add752dbb46
This commit is contained in:
Родитель
21aac9bd4d
Коммит
1b71e9f3bb
|
@ -842,134 +842,6 @@ class Marionette(object):
|
|||
typing.append(val[i])
|
||||
return "".join(typing)
|
||||
|
||||
def get_permission(self, perm):
|
||||
script = """
|
||||
let value = {
|
||||
'url': document.nodePrincipal.URI.spec,
|
||||
'appId': document.nodePrincipal.appId,
|
||||
'isInIsolatedMozBrowserElement': document.nodePrincipal.isInIsolatedMozBrowserElement,
|
||||
'type': arguments[0]
|
||||
};
|
||||
return value;"""
|
||||
with self.using_context("content"):
|
||||
value = self.execute_script(script, script_args=(perm,), sandbox="system")
|
||||
|
||||
with self.using_context("chrome"):
|
||||
permission = self.execute_script("""
|
||||
Components.utils.import("resource://gre/modules/Services.jsm");
|
||||
let perm = arguments[0];
|
||||
let secMan = Services.scriptSecurityManager;
|
||||
let attrs = {appId: perm.appId,
|
||||
inIsolatedMozBrowser: perm.isInIsolatedMozBrowserElement};
|
||||
let principal = secMan.createCodebasePrincipal(
|
||||
Services.io.newURI(perm.url, null, null),
|
||||
attrs);
|
||||
let testPerm = Services.perms.testPermissionFromPrincipal(
|
||||
principal, perm.type);
|
||||
return testPerm;
|
||||
""", script_args=(value,))
|
||||
return permission
|
||||
|
||||
def push_permission(self, perm, allow):
|
||||
script = """
|
||||
let allow = arguments[0];
|
||||
if (typeof(allow) == "boolean") {
|
||||
if (allow) {
|
||||
allow = Components.interfaces.nsIPermissionManager.ALLOW_ACTION;
|
||||
}
|
||||
else {
|
||||
allow = Components.interfaces.nsIPermissionManager.DENY_ACTION;
|
||||
}
|
||||
}
|
||||
let perm_type = arguments[1];
|
||||
|
||||
Components.utils.import("resource://gre/modules/Services.jsm");
|
||||
window.wrappedJSObject.permChanged = false;
|
||||
window.wrappedJSObject.permObserver = function(subject, topic, data) {
|
||||
if (topic == "perm-changed") {
|
||||
let permission = subject.QueryInterface(Components.interfaces.nsIPermission);
|
||||
if (perm_type == permission.type) {
|
||||
Services.obs.removeObserver(window.wrappedJSObject.permObserver,
|
||||
"perm-changed");
|
||||
window.wrappedJSObject.permChanged = true;
|
||||
}
|
||||
}
|
||||
};
|
||||
Services.obs.addObserver(window.wrappedJSObject.permObserver,
|
||||
"perm-changed", false);
|
||||
|
||||
let value = {
|
||||
'url': document.nodePrincipal.URI.spec,
|
||||
'appId': document.nodePrincipal.appId,
|
||||
'isInIsolatedMozBrowserElement': document.nodePrincipal.isInIsolatedMozBrowserElement,
|
||||
'type': perm_type,
|
||||
'action': allow
|
||||
};
|
||||
return value;
|
||||
"""
|
||||
with self.using_context("content"):
|
||||
perm = self.execute_script(script, script_args=(allow, perm,), sandbox="system")
|
||||
|
||||
current_perm = self.get_permission(perm["type"])
|
||||
if current_perm == perm["action"]:
|
||||
with self.using_context("content"):
|
||||
self.execute_script("""
|
||||
Components.utils.import("resource://gre/modules/Services.jsm");
|
||||
Services.obs.removeObserver(window.wrappedJSObject.permObserver,
|
||||
"perm-changed");
|
||||
""", sandbox="system")
|
||||
return
|
||||
|
||||
with self.using_context("chrome"):
|
||||
self.execute_script("""
|
||||
Components.utils.import("resource://gre/modules/Services.jsm");
|
||||
let perm = arguments[0];
|
||||
let secMan = Services.scriptSecurityManager;
|
||||
let attrs = {appId: perm.appId,
|
||||
inIsolatedMozBrowser: perm.isInIsolatedMozBrowserElement};
|
||||
let principal = secMan.createCodebasePrincipal(Services.io.newURI(perm.url,
|
||||
null, null),
|
||||
attrs);
|
||||
Services.perms.addFromPrincipal(principal, perm.type, perm.action);
|
||||
return true;
|
||||
""", script_args=(perm,))
|
||||
|
||||
with self.using_context("content"):
|
||||
self.execute_async_script("""
|
||||
let wait = function() {
|
||||
if (window.wrappedJSObject.permChanged) {
|
||||
marionetteScriptFinished();
|
||||
} else {
|
||||
window.setTimeout(wait, 100);
|
||||
}
|
||||
}();
|
||||
""", sandbox="system")
|
||||
|
||||
@contextmanager
|
||||
def using_permissions(self, perms):
|
||||
'''
|
||||
Sets permissions for code being executed in a `with` block,
|
||||
and restores them on exit.
|
||||
|
||||
:param perms: A dict containing one or more perms and their
|
||||
values to be set.
|
||||
|
||||
Usage example::
|
||||
|
||||
with marionette.using_permissions({'systemXHR': True}):
|
||||
... do stuff ...
|
||||
'''
|
||||
original_perms = {}
|
||||
for perm in perms:
|
||||
original_perms[perm] = self.get_permission(perm)
|
||||
self.push_permission(perm, perms[perm])
|
||||
|
||||
try:
|
||||
yield
|
||||
finally:
|
||||
for perm in original_perms:
|
||||
self.push_permission(perm, original_perms[perm])
|
||||
|
||||
def clear_pref(self, pref):
|
||||
"""Clear the user-defined value from the specified preference.
|
||||
|
||||
|
|
|
@ -1,118 +0,0 @@
|
|||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
from marionette_driver.by import By
|
||||
|
||||
from marionette_harness import MarionetteTestCase
|
||||
|
||||
|
||||
OOP_BY_DEFAULT = "dom.ipc.browser_frames.oop_by_default"
|
||||
BROWSER_FRAMES_ENABLED = "dom.mozBrowserFramesEnabled"
|
||||
|
||||
|
||||
class TestSwitchRemoteFrame(MarionetteTestCase):
|
||||
def setUp(self):
|
||||
super(TestSwitchRemoteFrame, self).setUp()
|
||||
with self.marionette.using_context('chrome'):
|
||||
self.oop_by_default = self.marionette.get_pref(OOP_BY_DEFAULT)
|
||||
self.mozBrowserFramesEnabled = self.marionette.get_pref(BROWSER_FRAMES_ENABLED)
|
||||
self.marionette.set_pref(OOP_BY_DEFAULT, True)
|
||||
self.marionette.set_pref(BROWSER_FRAMES_ENABLED, True)
|
||||
|
||||
self.multi_process_browser = self.marionette.execute_script("""
|
||||
try {
|
||||
return Services.appinfo.browserTabsRemoteAutostart;
|
||||
} catch (e) {
|
||||
return false;
|
||||
}""")
|
||||
|
||||
def tearDown(self):
|
||||
with self.marionette.using_context("chrome"):
|
||||
if self.oop_by_default is None:
|
||||
self.marionette.clear_pref(OOP_BY_DEFAULT)
|
||||
else:
|
||||
self.marionette.set_pref(OOP_BY_DEFAULT, self.oop_by_default)
|
||||
|
||||
if self.mozBrowserFramesEnabled is None:
|
||||
self.marionette.clear_pref(BROWSER_FRAMES_ENABLED)
|
||||
else:
|
||||
self.marionette.set_pref(BROWSER_FRAMES_ENABLED, self.mozBrowserFramesEnabled)
|
||||
|
||||
@property
|
||||
def is_main_process(self):
|
||||
return self.marionette.execute_script("""
|
||||
return Components.classes["@mozilla.org/xre/app-info;1"].
|
||||
getService(Components.interfaces.nsIXULRuntime).
|
||||
processType == Components.interfaces.nsIXULRuntime.PROCESS_TYPE_DEFAULT;
|
||||
""", sandbox="system")
|
||||
|
||||
def test_remote_frame(self):
|
||||
self.marionette.navigate(self.marionette.absolute_url("test.html"))
|
||||
self.marionette.push_permission('browser', True)
|
||||
self.marionette.execute_script("""
|
||||
let iframe = document.createElement("iframe");
|
||||
iframe.setAttribute('mozbrowser', true);
|
||||
iframe.setAttribute('remote', true);
|
||||
iframe.id = "remote_iframe";
|
||||
iframe.style.height = "100px";
|
||||
iframe.style.width = "100%%";
|
||||
iframe.src = "{}";
|
||||
document.body.appendChild(iframe);
|
||||
""".format(self.marionette.absolute_url("test.html")))
|
||||
remote_iframe = self.marionette.find_element(By.ID, "remote_iframe")
|
||||
self.marionette.switch_to_frame(remote_iframe)
|
||||
main_process = self.is_main_process
|
||||
self.assertFalse(main_process)
|
||||
|
||||
def test_remote_frame_revisit(self):
|
||||
# test if we can revisit a remote frame (this takes a different codepath)
|
||||
self.marionette.navigate(self.marionette.absolute_url("test.html"))
|
||||
self.marionette.push_permission('browser', True)
|
||||
self.marionette.execute_script("""
|
||||
let iframe = document.createElement("iframe");
|
||||
iframe.setAttribute('mozbrowser', true);
|
||||
iframe.setAttribute('remote', true);
|
||||
iframe.id = "remote_iframe";
|
||||
iframe.style.height = "100px";
|
||||
iframe.style.width = "100%%";
|
||||
iframe.src = "{}";
|
||||
document.body.appendChild(iframe);
|
||||
""".format(self.marionette.absolute_url("test.html")))
|
||||
self.marionette.switch_to_frame(self.marionette.find_element(By.ID,
|
||||
"remote_iframe"))
|
||||
main_process = self.is_main_process
|
||||
self.assertFalse(main_process)
|
||||
self.marionette.switch_to_frame()
|
||||
main_process = self.is_main_process
|
||||
should_be_main_process = not self.multi_process_browser
|
||||
self.assertEqual(main_process, should_be_main_process)
|
||||
self.marionette.switch_to_frame(self.marionette.find_element(By.ID,
|
||||
"remote_iframe"))
|
||||
main_process = self.is_main_process
|
||||
self.assertFalse(main_process)
|
||||
|
||||
def test_we_can_switch_to_a_remote_frame_by_index(self):
|
||||
# test if we can revisit a remote frame (this takes a different codepath)
|
||||
self.marionette.navigate(self.marionette.absolute_url("test.html"))
|
||||
self.marionette.push_permission('browser', True)
|
||||
self.marionette.execute_script("""
|
||||
let iframe = document.createElement("iframe");
|
||||
iframe.setAttribute('mozbrowser', true);
|
||||
iframe.setAttribute('remote', true);
|
||||
iframe.id = "remote_iframe";
|
||||
iframe.style.height = "100px";
|
||||
iframe.style.width = "100%%";
|
||||
iframe.src = "{}";
|
||||
document.body.appendChild(iframe);
|
||||
""".format(self.marionette.absolute_url("test.html")))
|
||||
self.marionette.switch_to_frame(0)
|
||||
main_process = self.is_main_process
|
||||
self.assertFalse(main_process)
|
||||
self.marionette.switch_to_frame()
|
||||
main_process = self.is_main_process
|
||||
should_be_main_process = not self.multi_process_browser
|
||||
self.assertEqual(main_process, should_be_main_process)
|
||||
self.marionette.switch_to_frame(0)
|
||||
main_process = self.is_main_process
|
||||
self.assertFalse(main_process)
|
|
@ -1,46 +0,0 @@
|
|||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
from marionette_driver.errors import JavascriptException
|
||||
|
||||
from marionette_harness import MarionetteTestCase
|
||||
|
||||
|
||||
class TestUsingPermssions(MarionetteTestCase):
|
||||
|
||||
def test_using_permissions(self):
|
||||
# Test that multiple permissions can be set with 'using_permissions',
|
||||
# and that they are set correctly and unset correctly after leaving
|
||||
# the context manager.
|
||||
original_perm = self.marionette.get_permission('systemXHR')
|
||||
original_alarm = self.marionette.get_permission('alarms')
|
||||
new_perm = True if original_perm != 1 else False
|
||||
new_alarm = True if original_alarm != 1 else False
|
||||
with self.marionette.using_permissions({'systemXHR': new_perm,
|
||||
'alarms': new_alarm}):
|
||||
now_perm = self.marionette.get_permission('systemXHR')
|
||||
now_alarm = self.marionette.get_permission('alarms')
|
||||
self.assertEquals(new_perm, now_perm)
|
||||
self.assertNotEquals(now_perm, original_perm)
|
||||
self.assertEquals(new_alarm, now_alarm)
|
||||
self.assertNotEquals(now_alarm, original_alarm)
|
||||
self.assertEquals(original_perm,
|
||||
self.marionette.get_permission('systemXHR'))
|
||||
self.assertEquals(original_alarm,
|
||||
self.marionette.get_permission('alarms'))
|
||||
|
||||
def test_exception_using_permissions(self):
|
||||
# Test that throwing an exception inside the context manager doesn't
|
||||
# prevent the permissions from being restored at context manager exit.
|
||||
original_perm = self.marionette.get_permission('systemXHR')
|
||||
new_perm = True if original_perm != 1 else False
|
||||
with self.marionette.using_permissions({'systemXHR': new_perm}):
|
||||
now_perm = self.marionette.get_permission('systemXHR')
|
||||
self.assertEquals(new_perm, now_perm)
|
||||
self.assertNotEquals(now_perm, original_perm)
|
||||
self.assertRaises(JavascriptException,
|
||||
self.marionette.execute_script,
|
||||
"return foo.bar.baz;")
|
||||
self.assertEquals(original_perm,
|
||||
self.marionette.get_permission('systemXHR'))
|
|
@ -51,8 +51,6 @@ skip-if = appname == 'fennec'
|
|||
[test_switch_frame.py]
|
||||
[test_switch_frame_chrome.py]
|
||||
skip-if = appname == 'fennec'
|
||||
[test_switch_remote_frame.py]
|
||||
skip-if = appname == 'fennec'
|
||||
[test_switch_window_chrome.py]
|
||||
skip-if = appname == 'fennec'
|
||||
[test_switch_window_content.py]
|
||||
|
@ -110,7 +108,6 @@ skip-if = appname == 'fennec'
|
|||
skip-if = appname == 'fennec' || os == "win" # http://bugs.python.org/issue14574
|
||||
|
||||
[test_execute_sandboxes.py]
|
||||
[test_using_permissions.py]
|
||||
[test_prefs.py]
|
||||
|
||||
[test_shadow_dom.py]
|
||||
|
|
Загрузка…
Ссылка в новой задаче