Backed out changeset 4e174306e0b0 (bug 1381992) for e.g. failing chrome's mobile/android/components/extensions/test/mochitest/test_ext_activeTab_permission.html on Android. r=backout

This commit is contained in:
Sebastian Hengst 2017-09-25 18:28:58 +02:00
parent 53cf947ac6
commit 8abbab2bc7
7 changed files with 1 additions and 201 deletions

View File

@ -20,8 +20,6 @@ var {
defineLazyGetter,
} = ExtensionUtils;
const READER_MODE_PREFIX = "about:reader";
let tabTracker;
let windowTracker;
@ -230,8 +228,6 @@ class TabTracker extends TabTrackerBase {
windowTracker.addOpenListener(this._handleWindowOpen);
windowTracker.addCloseListener(this._handleWindowClose);
Services.mm.addMessageListener("Reader:UpdateReaderButton", this);
/* eslint-disable mozilla/balanced-listeners */
this.on("tab-detached", this._handleTabDestroyed);
this.on("tab-removed", this._handleTabDestroyed);
@ -366,21 +362,6 @@ class TabTracker extends TabTrackerBase {
}
}
/**
* @param {Object} message
* The message to handle.
* @private
*/
receiveMessage(message) {
switch (message.name) {
case "Reader:UpdateReaderButton":
if (message.data && message.data.isArticle !== undefined) {
this.emit("tab-isarticle", message);
}
break;
}
}
/**
* A private method which is called whenever a new browser window is opened,
* and dispatches the necessary events for it.
@ -654,14 +635,6 @@ class Tab extends TabBase {
return windowTracker.getId(this.window);
}
get isArticle() {
return this.nativeTab.linkedBrowser.isArticle;
}
get isInReaderMode() {
return this.url && this.url.startsWith(READER_MODE_PREFIX);
}
/**
* Converts session store data to an object compatible with the return value
* of the convert() method, representing that data.

View File

@ -17,10 +17,6 @@ XPCOMUtils.defineLazyModuleGetter(this, "PromiseUtils",
XPCOMUtils.defineLazyModuleGetter(this, "Services",
"resource://gre/modules/Services.jsm");
var {
ExtensionError,
} = ExtensionUtils;
let tabListener = {
tabReadyInitialized: false,
tabReadyPromises: new WeakMap(),
@ -293,29 +289,18 @@ this.tabs = class extends ExtensionAPI {
}
};
let isArticleChangeListener = (eventName, event) => {
let {gBrowser} = event.target.ownerGlobal;
let tab = tabManager.getWrapper(
gBrowser.getTabForBrowser(event.target));
fireForTab(tab, {isArticle: event.data.isArticle});
};
windowTracker.addListener("status", statusListener);
windowTracker.addListener("TabAttrModified", listener);
windowTracker.addListener("TabPinned", listener);
windowTracker.addListener("TabUnpinned", listener);
windowTracker.addListener("TabBrowserInserted", listener);
tabTracker.on("tab-isarticle", isArticleChangeListener);
return () => {
windowTracker.removeListener("status", statusListener);
windowTracker.removeListener("TabAttrModified", listener);
windowTracker.removeListener("TabPinned", listener);
windowTracker.removeListener("TabUnpinned", listener);
windowTracker.removeListener("TabBrowserInserted", listener);
tabTracker.off("tab-isarticle", isArticleChangeListener);
};
}).api(),
@ -928,16 +913,6 @@ this.tabs = class extends ExtensionAPI {
});
});
},
async toggleReaderMode(tabId) {
let tab = await promiseTabWhenReady(tabId);
if (!tab.isInReaderMode && !tab.isArticle) {
throw new ExtensionError("The specified tab cannot be placed into reader mode.");
}
tab = getTabOrActive(tabId);
tab.linkedBrowser.messageManager.sendAsyncMessage("Reader:ToggleReaderMode");
},
},
};
return self;

View File

@ -76,9 +76,7 @@
"width": {"type": "integer", "optional": true, "description": "The width of the tab in pixels."},
"height": {"type": "integer", "optional": true, "description": "The height of the tab in pixels."},
"sessionId": {"type": "string", "optional": true, "description": "The session ID used to uniquely identify a Tab obtained from the $(ref:sessions) API."},
"cookieStoreId": {"type": "string", "optional": true, "description": "The CookieStoreId used for the tab."},
"isArticle": {"type": "boolean", "optional": true, "description": "Whether the document in the tab can be rendered in reader mode."},
"isInReaderMode": {"type": "boolean", "optional": true, "description": "Whether the document in the tab is being rendered in reader mode."}
"cookieStoreId": {"type": "string", "optional": true, "description": "The CookieStoreId used for the tab."}
}
},
{
@ -902,21 +900,6 @@
}
]
},
{
"name": "toggleReaderMode",
"type": "function",
"description": "Toggles reader mode for the document in the tab.",
"async": true,
"parameters": [
{
"type": "integer",
"name": "tabId",
"minimum": 0,
"optional": true,
"description": "Defaults to the active tab of the $(topic:current-window)[current window]."
}
]
},
{
"name": "captureVisibleTab",
"type": "function",

View File

@ -32,8 +32,6 @@ support-files =
searchSuggestionEngine.xml
searchSuggestionEngine.sjs
../../../../../toolkit/components/extensions/test/mochitest/head_webrequest.js
../../../../../toolkit/components/reader/test/readerModeNonArticle.html
../../../../../toolkit/components/reader/test/readerModeArticle.html
[browser_ext_browserAction_area.js]
[browser_ext_browserAction_context.js]
@ -155,7 +153,6 @@ skip-if = os == "win" # Bug 1398514
[browser_ext_tabs_opener.js]
[browser_ext_tabs_printPreview.js]
[browser_ext_tabs_query.js]
[browser_ext_tabs_readerMode.js]
[browser_ext_tabs_reload.js]
[browser_ext_tabs_reload_bypass_cache.js]
[browser_ext_tabs_sendMessage.js]

View File

@ -1,103 +0,0 @@
/* -*- Mode: indent-tabs-mode: nil; js-indent-level: 2 -*- */
/* vim: set sts=2 sw=2 et tw=80: */
"use strict";
add_task(async function test_reader_mode() {
let extension = ExtensionTestUtils.loadExtension({
manifest: {
"permissions": ["tabs"],
},
async background() {
let tab;
let tabId;
let expected = {isInReaderMode: false};
let testState = {};
browser.test.onMessage.addListener(async (msg, ...args) => {
switch (msg) {
case "updateUrl":
expected.isArticle = args[0];
expected.url = args[1];
tab = await browser.tabs.update({url: expected.url});
tabId = tab.id;
break;
case "enterReaderMode":
expected.isArticle = !args[0];
expected.isInReaderMode = true;
tab = await browser.tabs.get(tabId);
browser.test.assertEq(false, tab.isInReaderMode, "The tab is not in reader mode.");
if (args[0]) {
browser.tabs.toggleReaderMode(tabId);
} else {
await browser.test.assertRejects(
browser.tabs.toggleReaderMode(tabId),
/The specified tab cannot be placed into reader mode/,
"Toggle fails with an unreaderable document.");
browser.test.assertEq(false, tab.isInReaderMode, "The tab is still not in reader mode.");
browser.test.sendMessage("enterFailed");
}
break;
case "leaveReaderMode":
expected.isInReaderMode = false;
tab = await browser.tabs.get(tabId);
browser.test.assertTrue(tab.isInReaderMode, "The tab is in reader mode.");
browser.tabs.toggleReaderMode(tabId);
break;
}
});
browser.tabs.onUpdated.addListener(async (tabId, changeInfo, tab) => {
if (tab.url !== "about:blank") {
if (changeInfo.status === "complete") {
testState.url = tab.url;
let urlOk = expected.isInReaderMode
? testState.url.startsWith("about:reader")
: expected.url == testState.url;
if (urlOk && expected.isArticle == testState.isArticle) {
browser.test.sendMessage("tabUpdated", tab);
}
return;
}
if (changeInfo.isArticle == expected.isArticle
&& changeInfo.isArticle != testState.isArticle) {
testState.isArticle = changeInfo.isArticle;
let urlOk = expected.isInReaderMode
? testState.url.startsWith("about:reader")
: expected.url == testState.url;
if (urlOk && expected.isArticle == testState.isArticle) {
browser.test.sendMessage("isArticle", tab);
}
}
}
});
},
});
const TEST_PATH = getRootDirectory(gTestPath).replace("chrome://mochitests/content", "http://example.com");
const READER_MODE_PREFIX = "about:reader";
await extension.startup();
extension.sendMessage("updateUrl", true, `${TEST_PATH}readerModeArticle.html`);
let tab = await extension.awaitMessage("isArticle");
ok(!tab.url.startsWith(READER_MODE_PREFIX), "Tab url does not indicate reader mode.");
ok(tab.isArticle, "Tab is readerable.");
extension.sendMessage("enterReaderMode", true);
tab = await extension.awaitMessage("tabUpdated");
ok(tab.url.startsWith(READER_MODE_PREFIX), "Tab url indicates reader mode.");
extension.sendMessage("leaveReaderMode");
tab = await extension.awaitMessage("tabUpdated");
ok(!tab.url.startsWith(READER_MODE_PREFIX), "Tab url does not indicate reader mode.");
extension.sendMessage("updateUrl", false, `${TEST_PATH}readerModeNonArticle.html`);
tab = await extension.awaitMessage("tabUpdated");
ok(!tab.url.startsWith(READER_MODE_PREFIX), "Tab url does not indicate reader mode.");
ok(!tab.isArticle, "Tab is not readerable.");
extension.sendMessage("enterReaderMode", false);
await extension.awaitMessage("enterFailed");
await extension.unload();
});

View File

@ -53,7 +53,6 @@ let expectedBackgroundApisTargetSpecific = [
"tabs.sendMessage",
"tabs.setZoom",
"tabs.setZoomSettings",
"tabs.toggleReaderMode",
"tabs.update",
"windows.CreateType",
"windows.WINDOW_ID_CURRENT",

View File

@ -419,28 +419,6 @@ class TabBase {
throw new Error("Not implemented");
}
/**
* @property {boolean} isArticle
* Returns true if the document in the tab can be rendered in reader
* mode.
* @readonly
* @abstract
*/
get isArticle() {
throw new Error("Not implemented");
}
/**
* @property {boolean} isInReaderMode
* Returns true if the document in the tab is being rendered in reader
* mode.
* @readonly
* @abstract
*/
get isInReaderMode() {
throw new Error("Not implemented");
}
/**
* Returns true if this tab matches the the given query info object. Omitted
* or null have no effect on the match.
@ -520,8 +498,6 @@ class TabBase {
lastAccessed: this.lastAccessed,
audible: this.audible,
mutedInfo: this.mutedInfo,
isArticle: this.isArticle,
isInReaderMode: this.isInReaderMode,
};
// If the tab has not been fully layed-out yet, fallback to the geometry