Backed out changeset 2a9a7371947a (bug 1562844) for Android mochitest failures on test_ext_tabs_onUpdated. CLOSED TREE

This commit is contained in:
Cosmin Sabou 2019-08-12 19:18:01 +03:00
parent 344a794265
commit 4569ff802f
14 changed files with 30 additions and 242 deletions

View File

@ -36,11 +36,6 @@ let tabListener = {
let { BrowserApp } = browser.ownerGlobal;
let nativeTab = BrowserApp.getTabForBrowser(browser);
// Ignore initial about:blank
if (!request && this.initializingTabs.has(nativeTab)) {
return;
}
// Now we are certain that the first page in the tab was loaded.
this.initializingTabs.delete(nativeTab);

View File

@ -8,12 +8,6 @@ ChromeUtils.defineModuleGetter(
"resource://gre/modules/PrivateBrowsingUtils.jsm"
);
ChromeUtils.defineModuleGetter(
this,
"GeckoViewTabBridge",
"resource://gre/modules/GeckoViewTab.jsm"
);
/* globals EventDispatcher */
var { EventDispatcher } = ChromeUtils.import(
"resource://gre/modules/Messaging.jsm"
@ -99,23 +93,6 @@ class BrowserProgressListener {
}
}
const PROGRESS_LISTENER_FLAGS =
Ci.nsIWebProgress.NOTIFY_STATE_ALL | Ci.nsIWebProgress.NOTIFY_LOCATION;
class GeckoViewProgressListenerWrapper {
constructor(window, listener) {
this.listener = new BrowserProgressListener(
window.BrowserApp.selectedBrowser,
listener,
PROGRESS_LISTENER_FLAGS
);
}
destroy() {
this.listener.destroy();
}
}
/**
* Handles wrapping a tab progress listener in browser-specific
* BrowserProgressListener instances, an attaching them to each tab in a given
@ -126,12 +103,15 @@ class GeckoViewProgressListenerWrapper {
* @param {object} listener
* The tab progress listener to wrap.
*/
class FennecProgressListenerWrapper {
class ProgressListenerWrapper {
constructor(window, listener) {
this.window = window;
this.listener = listener;
this.listeners = new WeakMap();
this.flags =
Ci.nsIWebProgress.NOTIFY_STATE_ALL | Ci.nsIWebProgress.NOTIFY_LOCATION;
for (let nativeTab of this.window.BrowserApp.tabs) {
this.addBrowserProgressListener(nativeTab.browser);
}
@ -198,10 +178,6 @@ class FennecProgressListenerWrapper {
}
}
const ProgressListenerWrapper = Services.androidBridge.isFennec
? FennecProgressListenerWrapper
: GeckoViewProgressListenerWrapper;
class WindowTracker extends WindowTrackerBase {
constructor(...args) {
super(...args);
@ -213,10 +189,6 @@ class WindowTracker extends WindowTrackerBase {
return Services.wm.getMostRecentWindow(WINDOW_TYPE);
}
get topNonPBWindow() {
return Services.wm.getMostRecentNonPBWindow(WINDOW_TYPE);
}
isBrowserWindow(window) {
let { documentElement } = window.document;
return documentElement.getAttribute("windowtype") === WINDOW_TYPE;
@ -283,80 +255,7 @@ global.makeGlobalEvent = function makeGlobalEvent(
}).api();
};
class GeckoViewTabTracker extends TabTrackerBase {
init() {
if (this.initialized) {
return;
}
this.initialized = true;
windowTracker.addOpenListener(window => {
const nativeTab = window.BrowserApp.selectedTab;
this.emit("tab-created", { nativeTab });
});
windowTracker.addCloseListener(window => {
const nativeTab = window.BrowserApp.selectedTab;
const { windowId, tabId } = this.getBrowserData(
window.BrowserApp.selectedBrowser
);
this.emit("tab-removed", {
nativeTab,
tabId,
windowId,
// In GeckoView, it is not meaningful to speak of "window closed", because a tab is a window.
// Until we have a meaningful way to group tabs (and close multiple tabs at once),
// let's use isWindowClosing: false
isWindowClosing: false,
});
});
}
getId(nativeTab) {
return nativeTab.id;
}
getTab(id, default_ = undefined) {
const windowId = GeckoViewTabBridge.tabIdToWindowId(id);
const win = windowTracker.getWindow(windowId, null, false);
if (win && win.BrowserApp) {
let nativeTab = win.BrowserApp.selectedTab;
if (nativeTab) {
return nativeTab;
}
}
if (default_ !== undefined) {
return default_;
}
throw new ExtensionError(`Invalid tab ID: ${id}`);
}
getBrowserData(browser) {
const window = browser.ownerGlobal;
if (!window.BrowserApp) {
return {
tabId: -1,
windowId: -1,
};
}
return {
tabId: this.getId(window.BrowserApp.selectedTab),
windowId: windowTracker.getId(window),
};
}
get activeTab() {
let win = windowTracker.topWindow;
if (win && win.BrowserApp) {
return win.BrowserApp.selectedTab;
}
return null;
}
}
class FennecTabTracker extends TabTrackerBase {
class TabTracker extends TabTrackerBase {
constructor() {
super();
@ -587,11 +486,7 @@ class FennecTabTracker extends TabTrackerBase {
}
windowTracker = new WindowTracker();
if (Services.androidBridge.isFennec) {
tabTracker = new FennecTabTracker();
} else {
tabTracker = new GeckoViewTabTracker();
}
tabTracker = new TabTracker();
Object.assign(global, { tabTracker, windowTracker });

View File

@ -17,18 +17,21 @@ tags = webextensions
[test_ext_downloads_saveAs.html]
skip-if = !is_fennec # times out
[test_ext_tab_runtimeConnect.html]
skip-if = !is_fennec # times out; bug 1534640 webextension url
skip-if = !is_fennec # times out
[test_ext_tabs_captureVisibleTab.html]
[test_ext_tabs_create.html]
skip-if = !is_fennec # times out; bug 1507167; bug 1534640 webextension url
skip-if = !is_fennec # times out; bug 1507167
[test_ext_tabs_events.html]
skip-if = !is_fennec # times out
[test_ext_tabs_executeScript.html]
skip-if = !is_fennec # tabs.query returns empty list
[test_ext_tabs_executeScript_bad.html]
skip-if = true # Currently fails in emulator runs
[test_ext_tabs_executeScript_good.html]
[test_ext_tabs_executeScript_no_create.html]
skip-if = !is_fennec # depends on bug 1539144
[test_ext_tabs_executeScript_runAt.html]
[test_ext_tabs_get.html]
skip-if = !is_fennec # tabs.query returns empty list
[test_ext_tabs_getCurrent.html]
skip-if = !is_fennec # times out
[test_ext_tabs_insertCSS.html]
@ -39,8 +42,10 @@ skip-if = !is_fennec # times out
[test_ext_tabs_reload_bypass_cache.html]
skip-if = !is_fennec # times out
[test_ext_tabs_onUpdated.html]
skip-if = !is_fennec # times out
[test_ext_tabs_query.html]
skip-if = !is_fennec # tabs.onCreated not working, test uses BrowserApp.addTab.
[test_ext_tabs_sendMessage.html]
skip-if = !is_fennec # times out
[test_ext_tabs_update_url.html]
skip-if = !is_fennec # bug 1534640 webextension url
[test_ext_webNavigation_onCommitted.html]
skip-if = !is_fennec # tabs.update rejects any call.

View File

@ -151,11 +151,6 @@ add_task(async function testTabRemovalEvent() {
});
add_task(async function testTabActivationEvent() {
if (!SpecialPowers.Services.androidBridge.isFennec) {
// TODO bug 1565536: tabs.onActivated is not supported in GeckoView.
info("skipping testTabActivationEvent");
return;
}
async function background() {
function makeExpectable() {
let expectation = null, resolver = null;

View File

@ -22,11 +22,6 @@ add_task(async function testExecuteScript() {
async function background() {
try {
let [tab] = await browser.tabs.query({active: true, currentWindow: true});
// TODO bug 1565536: tab.active is broken in GeckoView.
if (!SpecialPowers.Services.androidBridge.isFennec) {
browser.test.assertEq(undefined, tab, "currentWindow's tab is not active (bug 1565536)");
[tab] = await browser.tabs.query({currentWindow: true});
}
let frames = await browser.webNavigation.getAllFrames({tabId: tab.id});
browser.test.log(`FRAMES: ${frames[1].frameId} ${JSON.stringify(frames)}\n`);

View File

@ -48,11 +48,6 @@ add_task(async function testExecuteScript() {
try {
[tab] = await browser.tabs.query({active: true, currentWindow: true});
// TODO bug 1565536: tab.active is broken in GeckoView.
if (!SpecialPowers.Services.androidBridge.isFennec) {
browser.test.assertEq(undefined, tab, "currentWindow's tab is not active (bug 1565536)");
[tab] = await browser.tabs.query({currentWindow: true});
}
let success = false;
for (let tries = 0; !success && tries < MAX_TRIES; tries++) {

View File

@ -1,38 +0,0 @@
<!DOCTYPE HTML>
<html>
<head>
<title>Tabs get Test</title>
<script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
<script type="text/javascript" src="/tests/SimpleTest/ExtensionTestUtils.js"></script>
<script type="text/javascript" src="head.js"></script>
<link rel="stylesheet" href="/tests/SimpleTest/test.css"/>
</head>
<body>
<script type="text/javascript">
"use strict";
add_task(async function() {
let extension = ExtensionTestUtils.loadExtension({
manifest: {
permissions: ["tabs"],
},
async background() {
const tab1 = await browser.tabs.create({});
const tab2 = await browser.tabs.create({});
browser.test.assertEq(tab1.id, (await browser.tabs.get(tab1.id)).id, "tabs.get should return tab with given id");
browser.test.assertEq(tab2.id, (await browser.tabs.get(tab2.id)).id, "tabs.get should return tab with given id");
await browser.tabs.remove(tab1.id);
await browser.tabs.remove(tab2.id);
browser.test.notifyPass("tabs.get");
},
});
await extension.startup();
await extension.awaitFinish("tabs.get");
await extension.unload();
});
</script>
</body>
</html>

View File

@ -27,18 +27,9 @@ add_task(async function test_onUpdated() {
let pageURL = "http://mochi.test:8888/tests/mobile/android/components/extensions/test/mochitest/context_tabs_onUpdated_page.html";
let expectedSequence = [
{status: "loading"},
{status: "loading", url: pageURL},
{status: "complete"},
];
if (SpecialPowers.Services.androidBridge.isFennec) {
// Fennec does not fire initial loading event - Firefox and GeckoView does
expectedSequence.shift();
} else {
// GeckoView always fire completed status for about:blank for new tabs
expectedSequence.unshift({status: "complete", url: "about:blank"});
}
let collectedSequence = [];
let tabId;

View File

@ -16,11 +16,6 @@ var {BrowserActions} = SpecialPowers.Cu.import("resource://gre/modules/BrowserAc
var {Services} = SpecialPowers.Cu.import("resource://gre/modules/Services.jsm", {});
add_task(async function test_query_highlighted() {
if (!SpecialPowers.Services.androidBridge.isFennec) {
// GeckoView does not support extension popups
info('skipping test_query_highlighted');
return;
}
let extension = ExtensionTestUtils.loadExtension({
manifest: {
"permissions": ["tabs"],
@ -105,10 +100,11 @@ add_task(async function test_query_index() {
},
});
const {BrowserApp} = Services.wm.getMostRecentWindow("navigator:browser");
await extension.startup();
const win = window.open("http://example.com");
let tab = BrowserApp.addTab("http://example.com/");
await extension.awaitFinish("tabs.query");
win.close();
BrowserApp.closeTab(tab);
await extension.unload();
});
</script>

View File

@ -1,49 +0,0 @@
<!DOCTYPE HTML>
<html>
<head>
<title>WebNavigation onCommitted Test</title>
<script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
<script type="text/javascript" src="/tests/SimpleTest/ExtensionTestUtils.js"></script>
<script type="text/javascript" src="head.js"></script>
<link rel="stylesheet" href="/tests/SimpleTest/test.css"/>
</head>
<body>
<script type="text/javascript">
"use strict";
add_task(async function() {
let extension = ExtensionTestUtils.loadExtension({
manifest: {
permissions: ["webNavigation", "tabs"],
},
async background() {
const url = "http://mochi.test:8888/";
const [tab, tabDetails] = await Promise.all([
browser.tabs.create({url}),
new Promise(resolve => {
browser.webNavigation.onCommitted.addListener(details => {
if (details.url === "about:blank") {
// skip initial about:blank
return;
}
resolve(details);
});
}),
]);
browser.test.assertEq(url, tabDetails.url, "webNavigation.onCommitted detects correct url");
browser.test.assertEq(tab.id, tabDetails.tabId, "webNavigation.onCommitted fire for proper tabId");
await browser.tabs.remove(tab.id);
browser.test.notifyPass("webNavigation.onCommitted");
},
});
await extension.startup();
await extension.awaitFinish("webNavigation.onCommitted");
await extension.unload();
});
</script>
</body>
</html>

View File

@ -198,7 +198,7 @@ public class TestRunnerActivity extends Activity {
@Override
public GeckoResult<AllowOrDeny> onCloseTab(WebExtension source, GeckoSession session) {
closeSession(session);
return GeckoResult.fromValue(AllowOrDeny.ALLOW);
return GeckoResult.ALLOW;
}
});
sRuntime.setDelegate(() -> {

View File

@ -171,7 +171,7 @@ public class GeckoViewActivity extends AppCompatActivity {
public GeckoResult<AllowOrDeny> onCloseTab(WebExtension source, GeckoSession session) {
TabSession tabSession = mTabSessionManager.getSession(session);
closeTab(tabSession);
return GeckoResult.fromValue(AllowOrDeny.ALLOW);
return GeckoResult.ALLOW;
}
});
}

View File

@ -65,6 +65,15 @@ class BrowserAppShim {
return this.selectedBrowser;
}
// ext-tabs calls tabListener.initTabReady(); which rely on deck when initializing ProgressListeners.
// Deck will be removed by https://phabricator.services.mozilla.com/D36575.
get deck() {
return {
addEventListener() {},
removeEventListener() {},
};
}
static getBrowserApp(window) {
let { BrowserApp } = window;

View File

@ -141,7 +141,6 @@ class WebNavigationEventManager extends EventManager {
if (
chromeWin &&
chromeWin.gBrowser &&
chromeWin.gBrowserInit &&
chromeWin.gBrowserInit.isAdoptingTab() &&
chromeWin.gBrowser.selectedBrowser === data.browser
) {