Bug 1169600 - Remove message listeners intended to coordinate registering a new browser with marionette once the browser has been registered. r=ato

This commit is contained in:
Chris Manchester 2015-06-24 00:10:10 -07:00
parent edcfe1acb6
commit 2055e5a9b3
2 changed files with 26 additions and 26 deletions

View File

@ -4,6 +4,7 @@
from marionette import MarionetteTestCase from marionette import MarionetteTestCase
from marionette_driver.keys import Keys from marionette_driver.keys import Keys
from marionette_driver.by import By
class TestAboutPages(MarionetteTestCase): class TestAboutPages(MarionetteTestCase):
@ -18,27 +19,8 @@ class TestAboutPages(MarionetteTestCase):
self.remote_uri = self.marionette.absolute_url("javascriptPage.html") self.remote_uri = self.marionette.absolute_url("javascriptPage.html")
self.marionette.navigate(self.remote_uri) self.marionette.navigate(self.remote_uri)
def purge_history(self):
with self.marionette.using_context("chrome"):
self.marionette.execute_script("""
let sh = gBrowser.webNavigation.sessionHistory;
if (sh.count) {
sh.PurgeHistory(sh.count - 1);
}
""")
self.wait_for_condition(
lambda mn: mn.execute_script("""
return gBrowser.webNavigation.sessionHistory.count === 1;
"""))
def test_back_forward(self): def test_back_forward(self):
self.marionette.navigate("about:blank") self.marionette.navigate("about:blank")
# Something about this sequence goes wrong when run in a tab with a lot
# of history (you have to "go_back" twice to get back to the remote
# uri). Running in a tab with less history effectively works around
# this. This is reproducible without marionette, filed as bug 1134518.
self.purge_history()
self.marionette.navigate(self.remote_uri) self.marionette.navigate(self.remote_uri)
self.marionette.navigate("about:preferences") self.marionette.navigate("about:preferences")
@ -90,3 +72,20 @@ class TestAboutPages(MarionetteTestCase):
urlbar.send_keys(self.remote_uri + Keys.ENTER) urlbar.send_keys(self.remote_uri + Keys.ENTER)
self.wait_for_condition(lambda mn: mn.get_url() == self.remote_uri) self.wait_for_condition(lambda mn: mn.get_url() == self.remote_uri)
def test_hang(self):
self.marionette.set_context('chrome')
initial_tab = self.marionette.window_handles[0]
# Open a new tab and close the first one
new_tab = self.marionette.find_element(By.ID, 'menu_newNavigatorTab')
new_tab.click()
new_tab = [handle for handle in self.marionette.window_handles if
handle != initial_tab][0]
self.marionette.close()
self.marionette.switch_to_window(new_tab)
with self.marionette.using_context('content'):
self.marionette.navigate(self.remote_uri)

View File

@ -465,7 +465,7 @@ GeckoDriver.prototype.registerPromise = function() {
const li = "Marionette:register"; const li = "Marionette:register";
return new Promise((resolve) => { return new Promise((resolve) => {
this.mm.addMessageListener(li, function cb(msg) { let cb = (msg) => {
let wid = msg.json.value; let wid = msg.json.value;
let be = msg.target; let be = msg.target;
let rv = this.registerBrowser(wid, be); let rv = this.registerBrowser(wid, be);
@ -481,17 +481,19 @@ GeckoDriver.prototype.registerPromise = function() {
// this is a sync message and listeners expect the ID back // this is a sync message and listeners expect the ID back
return rv; return rv;
}.bind(this)); };
this.mm.addMessageListener(li, cb);
}); });
}; };
GeckoDriver.prototype.listeningPromise = function() { GeckoDriver.prototype.listeningPromise = function() {
const li = "Marionette:listenersAttached"; const li = "Marionette:listenersAttached";
return new Promise((resolve) => { return new Promise((resolve) => {
this.mm.addMessageListener(li, function() { let cb = () => {
this.mm.removeMessageListener(li, this); this.mm.removeMessageListener(li, cb);
resolve(); resolve();
}.bind(this)); };
this.mm.addMessageListener(li, cb);
}); });
}; };
@ -3184,8 +3186,7 @@ BrowserObj.prototype.register = function(uid, target) {
BrowserObj.prototype.hasRemotenessChange = function() { BrowserObj.prototype.hasRemotenessChange = function() {
// None of these checks are relevant on b2g or if we don't have a tab yet, // None of these checks are relevant on b2g or if we don't have a tab yet,
// and may not apply on Fennec. // and may not apply on Fennec.
if (this.driver.appName != "Firefox" || this.tab === null || if (this.driver.appName != "Firefox" || this.tab === null) {
!this.browserForTab) {
return false; return false;
} }