зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1312094 - Don't show 'send to device' for huge or otherwise unsyncable URIs. r=markh
MozReview-Commit-ID: 8Eh23UGOwNv --HG-- extra : rebase_source : 635e6bf7eb2763e7d417770782270bd636676d39
This commit is contained in:
Родитель
cc67c49950
Коммит
0861a8ce52
|
@ -83,6 +83,28 @@ var gFxAccounts = {
|
|||
return Services.prefs.getBoolPref("services.sync.sendTabToDevice.enabled");
|
||||
},
|
||||
|
||||
isSendableURI(aURISpec) {
|
||||
if (!aURISpec) {
|
||||
return false;
|
||||
}
|
||||
// Disallow sending tabs with more than 65535 characters.
|
||||
if (aURISpec.length > 65535) {
|
||||
return false;
|
||||
}
|
||||
try {
|
||||
// Filter out un-sendable URIs -- things like local files, object urls, etc.
|
||||
const unsendableRegexp = new RegExp(
|
||||
Services.prefs.getCharPref("services.sync.engine.tabs.filteredUrls"), "i");
|
||||
return !unsendableRegexp.test(aURISpec);
|
||||
} catch (e) {
|
||||
// The preference has been removed, or is an invalid regexp, so we log an
|
||||
// error and treat it as a valid URI -- and the more problematic case is
|
||||
// the length, which we've already addressed.
|
||||
Cu.reportError(`Failed to build url filter regexp for send tab: ${e}`);
|
||||
return true;
|
||||
}
|
||||
},
|
||||
|
||||
get remoteClients() {
|
||||
return Weave.Service.clientsEngine.remoteClients
|
||||
.sort((a, b) => a.name.localeCompare(b.name));
|
||||
|
@ -410,14 +432,16 @@ var gFxAccounts = {
|
|||
devicesPopup.appendChild(fragment);
|
||||
},
|
||||
|
||||
updateTabContextMenu(aPopupMenu) {
|
||||
updateTabContextMenu(aPopupMenu, aTargetTab) {
|
||||
if (!this.sendTabToDeviceEnabled) {
|
||||
return;
|
||||
}
|
||||
|
||||
const remoteClientPresent = this.remoteClients.length > 0;
|
||||
const targetURI = aTargetTab.linkedBrowser.currentURI.spec;
|
||||
const showSendTab = this.remoteClients.length > 0 && this.isSendableURI(targetURI);
|
||||
|
||||
["context_sendTabToDevice", "context_sendTabToDevice_separator"]
|
||||
.forEach(id => { document.getElementById(id).hidden = !remoteClientPresent });
|
||||
.forEach(id => { document.getElementById(id).hidden = !showSendTab });
|
||||
},
|
||||
|
||||
initPageContextMenu(contextMenu) {
|
||||
|
@ -427,13 +451,20 @@ var gFxAccounts = {
|
|||
|
||||
const remoteClientPresent = this.remoteClients.length > 0;
|
||||
// showSendLink and showSendPage are mutually exclusive
|
||||
const showSendLink = remoteClientPresent
|
||||
&& (contextMenu.onSaveableLink || contextMenu.onPlainTextLink);
|
||||
let showSendLink = remoteClientPresent
|
||||
&& (contextMenu.onSaveableLink || contextMenu.onPlainTextLink);
|
||||
const showSendPage = !showSendLink && remoteClientPresent
|
||||
&& !(contextMenu.isContentSelected ||
|
||||
contextMenu.onImage || contextMenu.onCanvas ||
|
||||
contextMenu.onVideo || contextMenu.onAudio ||
|
||||
contextMenu.onLink || contextMenu.onTextInput);
|
||||
contextMenu.onLink || contextMenu.onTextInput)
|
||||
&& this.isSendableURI(contextMenu.browser.currentURI.spec);
|
||||
|
||||
if (showSendLink) {
|
||||
// This isn't part of the condition above since we don't want to try and
|
||||
// send the page if a link is clicked on or selected but is not sendable.
|
||||
showSendLink = this.isSendableURI(contextMenu.linkURL);
|
||||
}
|
||||
|
||||
["context-sendpagetodevice", "context-sep-sendpagetodevice"]
|
||||
.forEach(id => contextMenu.showItem(id, showSendPage));
|
||||
|
|
|
@ -7866,7 +7866,7 @@ var TabContextMenu = {
|
|||
this.contextTab.addEventListener("TabAttrModified", this);
|
||||
aPopupMenu.addEventListener("popuphiding", this);
|
||||
|
||||
gFxAccounts.updateTabContextMenu(aPopupMenu);
|
||||
gFxAccounts.updateTabContextMenu(aPopupMenu, this.contextTab);
|
||||
},
|
||||
handleEvent(aEvent) {
|
||||
switch (aEvent.type) {
|
||||
|
|
|
@ -18,6 +18,8 @@ add_task(function* test() {
|
|||
|
||||
|
||||
if (gFxAccounts.sendTabToDeviceEnabled) {
|
||||
const origIsSendableURI = gFxAccounts.isSendableURI;
|
||||
gFxAccounts.isSendableURI = () => true;
|
||||
// Check the send tab to device menu item
|
||||
const oldGetter = setupRemoteClientsFixture(remoteClientsFixture);
|
||||
yield updateTabContextMenu(origTab, function* () {
|
||||
|
@ -28,7 +30,11 @@ add_task(function* test() {
|
|||
is(targets[0].getAttribute("label"), "Foo", "Foo target is present");
|
||||
is(targets[1].getAttribute("label"), "Bar", "Bar target is present");
|
||||
is(targets[3].getAttribute("label"), "All Devices", "All Devices target is present");
|
||||
gFxAccounts.isSendableURI = () => false;
|
||||
updateTabContextMenu(origTab);
|
||||
is(document.getElementById("context_sendTabToDevice").hidden, true, "Send tab to device is hidden");
|
||||
restoreRemoteClients(oldGetter);
|
||||
gFxAccounts.isSendableURI = origIsSendableURI;
|
||||
}
|
||||
|
||||
// Hide the original tab.
|
||||
|
|
|
@ -30,7 +30,7 @@ pref("services.sync.engine.history", true);
|
|||
pref("services.sync.engine.passwords", true);
|
||||
pref("services.sync.engine.prefs", true);
|
||||
pref("services.sync.engine.tabs", true);
|
||||
pref("services.sync.engine.tabs.filteredUrls", "^(about:.*|chrome://weave/.*|wyciwyg:.*|file:.*|blob:.*)$");
|
||||
pref("services.sync.engine.tabs.filteredUrls", "^(about:.*|resource:.*|chrome:.*|wyciwyg:.*|file:.*|blob:.*)$");
|
||||
|
||||
pref("services.sync.jpake.serverURL", "https://setup.services.mozilla.com/");
|
||||
pref("services.sync.jpake.pollInterval", 1000);
|
||||
|
|
Загрузка…
Ссылка в новой задаче