From 5f6ea81f7c3d5ca271e29a1001e1d655eaa9d03c Mon Sep 17 00:00:00 2001 From: Frank Yan Date: Tue, 26 Oct 2010 15:34:52 -0700 Subject: [PATCH] Bug 601695 - Paste & Go should only appear when clipboard is URL; r=dao a=blocking2.0-final+ --- browser/base/content/urlbarBindings.xml | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/browser/base/content/urlbarBindings.xml b/browser/base/content/urlbarBindings.xml index a533dc9da82f..e175736427ca 100644 --- a/browser/base/content/urlbarBindings.xml +++ b/browser/base/content/urlbarBindings.xml @@ -130,11 +130,24 @@ if (!pasteAndGo) return; var controller = document.commandDispatcher.getControllerForCommand("cmd_paste"); - var enabled = controller.isCommandEnabled("cmd_paste"); - if (enabled) - pasteAndGo.removeAttribute("disabled"); - else - pasteAndGo.setAttribute("disabled", "true"); + var couldBeURL = controller.isCommandEnabled("cmd_paste"); + if (couldBeURL) { + let cbSvc = Cc["@mozilla.org/widget/clipboard;1"]. + getService(Ci.nsIClipboard); + let xferable = Cc["@mozilla.org/widget/transferable;1"]. + createInstance(Ci.nsITransferable); + xferable.addDataFlavor("text/unicode"); + cbSvc.getData(xferable, cbSvc.kGlobalClipboard); + let data = {}; + xferable.getTransferData("text/unicode", data, {}); + data = data.value.QueryInterface(Ci.nsISupportsString).data; + try { + makeURI(data); + } catch (ex) { // clipboard data is not a URL + couldBeURL = false; + } + } + pasteAndGo.hidden = !couldBeURL; }, false); var insertLocation = cxmenu.firstChild;