From fae32ada54e495aef02e03dca202f61e11afd26d Mon Sep 17 00:00:00 2001 From: Matt Brubeck Date: Fri, 14 Oct 2011 19:58:04 -0700 Subject: [PATCH] Bug 694622 - [birch] Handle links from other apps on the command line [r=mfinkle] --- embedding/android/GeckoAppShell.java | 2 +- mobile/components/BrowserCLH.js | 22 +++++++++++++++++----- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/embedding/android/GeckoAppShell.java b/embedding/android/GeckoAppShell.java index 7e06657cd575..8e85428e71c4 100644 --- a/embedding/android/GeckoAppShell.java +++ b/embedding/android/GeckoAppShell.java @@ -413,7 +413,7 @@ public class GeckoAppShell if (args != null) combinedArgs += " " + args; if (url != null) - combinedArgs += " " + url; + combinedArgs += " -remote " + url; // and go GeckoAppShell.nativeRun(combinedArgs); diff --git a/mobile/components/BrowserCLH.js b/mobile/components/BrowserCLH.js index a3e4f0579e2d..a8a21dd9124e 100644 --- a/mobile/components/BrowserCLH.js +++ b/mobile/components/BrowserCLH.js @@ -13,6 +13,17 @@ function dump(a) { .logStringMessage(a); } +function openWindow(aParent, aURL, aTarget, aFeatures, aArgs) { + let argString = null; + if (aArgs && !(aArgs instanceof Ci.nsISupportsArray)) { + argString = Cc["@mozilla.org/supports-string;1"].createInstance(Ci.nsISupportsString); + argString.data = aArgs; + } + + return Services.ww.openWindow(aParent, aURL, aTarget, aFeatures, argString || aArgs); +} + + function BrowserCLH() { } BrowserCLH.prototype = { @@ -20,11 +31,6 @@ BrowserCLH.prototype = { handle: function fs_handle(aCmdLine) { let urlParam = aCmdLine.handleFlagWithParam("remote", false); if (urlParam) { - // TODO: - // browserWin.browserDOMWindow will be null if - // the chrome page hasn't loaded yet. We - // should test for this, and reschedule the - // event. aCmdLine.preventDefault = true; try { dump("fs_handle"); @@ -36,6 +42,12 @@ BrowserCLH.prototype = { dump("fs_handle: " + uri); let browserWin = Services.wm.getMostRecentWindow("navigator:browser"); + if (!browserWin) + browserWin = openWindow(null, "chrome://browser/content/browser.xul", "_blank", "chrome,dialog=no,all", urlParam); + + while (!browserWin.browserDOMWindow) + Services.tm.currentThread.processNextEvent(true); + browserWin.browserDOMWindow.openURI(uri, null, Ci.nsIBrowserDOMWindow.OPEN_CURRENTWINDOW,