Bug 991959 - fix chrome iframe switching, r=dburns

This commit is contained in:
Malini Das 2014-04-10 10:33:39 -04:00
parent ca7e8f22b4
commit cdc2d8b982
2 changed files with 25 additions and 21 deletions

View File

@ -21,29 +21,29 @@ class TestSwitchFrameChrome(MarionetteTestCase):
MarionetteTestCase.tearDown(self)
def test_switch_simple(self):
self.assertTrue("test.xul" in self.marionette.get_url())
self.assertIn("test.xul", self.marionette.get_url(), "Initial navigation has failed")
self.marionette.switch_to_frame(0)
self.assertTrue("test2.xul" in self.marionette.get_url())
self.assertIn("test2.xul", self.marionette.get_url(),"Switching by index failed")
self.marionette.switch_to_frame()
self.assertEqual(None, self.marionette.get_active_frame())
self.assertTrue("test.xul" in self.marionette.get_url())
self.assertEqual(None, self.marionette.get_active_frame(), "Switiching by null failed")
self.assertIn("test.xul", self.marionette.get_url(), "Switching by null failed")
self.marionette.switch_to_frame("iframe")
self.assertTrue("test2.xul" in self.marionette.get_url())
self.assertIn("test2.xul", self.marionette.get_url(), "Switching by name failed")
self.marionette.switch_to_frame()
self.assertTrue("test.xul" in self.marionette.get_url())
self.assertIn("test.xul", self.marionette.get_url(), "Switching by null failed")
self.marionette.switch_to_frame("iframename")
self.assertTrue("test2.xul" in self.marionette.get_url())
self.assertIn("test2.xul", self.marionette.get_url(), "Switching by name failed")
iframe_element = self.marionette.get_active_frame()
self.marionette.switch_to_frame()
self.assertTrue("test.xul" in self.marionette.get_url())
self.assertIn("test.xul", self.marionette.get_url(), "Switching by null failed")
self.marionette.switch_to_frame(iframe_element)
self.assertTrue("test2.xul" in self.marionette.get_url())
self.assertIn("test2.xul", self.marionette.get_url(), "Switching by element failed")
def test_stack_trace(self):
self.assertTrue("test.xul" in self.marionette.get_url())
self.assertIn("test.xul", self.marionette.get_url(), "Initial navigation has failed")
self.marionette.switch_to_frame(0)
self.assertRaises(JavascriptException, self.marionette.execute_async_script, "foo();")
try:
self.marionette.execute_async_script("foo();")
except JavascriptException as e:
self.assertTrue("foo" in e.msg)
self.assertIn("foo", e.msg)

View File

@ -1303,6 +1303,7 @@ MarionetteServerConnection.prototype = {
let curWindow = this.getCurrentWindow();
let checkLoad = function() {
let errorRegex = /about:.+(error)|(blocked)\?/;
let curWindow = this.getCurrentWindow();
if (curWindow.document.readyState == "complete") {
this.sendOk(command_id);
return;
@ -1325,12 +1326,13 @@ MarionetteServerConnection.prototype = {
return;
}
if (aRequest.parameters.element != undefined) {
if (this.curBrowser.elementManager.seenItems[aRequest.parameters.element] != undefined) {
if (this.curBrowser.elementManager.seenItems[aRequest.parameters.element]) {
let wantedFrame = this.curBrowser.elementManager.getKnownElement(aRequest.parameters.element, curWindow); //HTMLIFrameElement
let numFrames = curWindow.frames.length;
let frames = curWindow.document.getElementsByTagName("iframe");
let numFrames = frames.length;
for (let i = 0; i < numFrames; i++) {
if (curWindow.frames[i].frameElement == wantedFrame) {
curWindow = curWindow.frames[i];
if (XPCNativeWrapper(frames[i]) == XPCNativeWrapper(wantedFrame)) {
curWindow = frames[i].contentWindow;
this.curFrame = curWindow;
if (aRequest.parameters.focus) {
this.curFrame.focus();
@ -1344,30 +1346,32 @@ MarionetteServerConnection.prototype = {
switch(typeof(aRequest.parameters.id)) {
case "string" :
let foundById = null;
let numFrames = curWindow.frames.length;
let frames = curWindow.document.getElementsByTagName("iframe");
let numFrames = frames.length;
for (let i = 0; i < numFrames; i++) {
//give precedence to name
let frame = curWindow.frames[i];
let frameElement = frame.frameElement;
if (frame.name == aRequest.parameters.id) {
let frame = frames[i];
if (frame.getAttribute("name") == aRequest.parameters.id) {
foundFrame = i;
curWindow = frame.contentWindow;
break;
} else if ((foundById == null) && (frameElement.id == aRequest.parameters.id)) {
} else if ((foundById == null) && (frame.id == aRequest.parameters.id)) {
foundById = i;
}
}
if ((foundFrame == null) && (foundById != null)) {
foundFrame = foundById;
curWindow = frames[foundById].contentWindow;
}
break;
case "number":
if (curWindow.frames[aRequest.parameters.id] != undefined) {
foundFrame = aRequest.parameters.id;
curWindow = curWindow.frames[foundFrame].frameElement.contentWindow;
}
break;
}
if (foundFrame != null) {
curWindow = curWindow.frames[foundFrame];
this.curFrame = curWindow;
if (aRequest.parameters.focus) {
this.curFrame.focus();