Relanding Bug 410156 - r=bsmedberg, approval1.9=beltzner, blocking-firefox3=beltzner

This commit is contained in:
rob_strong@exchangecode.com 2008-04-18 13:43:49 -07:00
Родитель e97bfb06ed
Коммит 4480f7f954
4 изменённых файлов: 126 добавлений и 5 удалений

Просмотреть файл

@ -95,6 +95,7 @@ protected:
void *aClosure); void *aClosure);
void appendArg(const char* arg); void appendArg(const char* arg);
void resolveShortcutURL(nsILocalFile* aFile, nsACString& outURL);
nsresult EnumerateHandlers(EnumerateHandlersCallback aCallback, void *aClosure); nsresult EnumerateHandlers(EnumerateHandlersCallback aCallback, void *aClosure);
nsresult EnumerateValidators(EnumerateValidatorsCallback aCallback, void *aClosure); nsresult EnumerateValidators(EnumerateValidatorsCallback aCallback, void *aClosure);
@ -442,16 +443,26 @@ nsCommandLine::ResolveURI(const nsAString& aArgument, nsIURI* *aResult)
nsCOMPtr<nsIIOService> io = do_GetIOService(); nsCOMPtr<nsIIOService> io = do_GetIOService();
NS_ENSURE_TRUE(io, NS_ERROR_OUT_OF_MEMORY); NS_ENSURE_TRUE(io, NS_ERROR_OUT_OF_MEMORY);
nsCOMPtr<nsIURI> workingDirURI;
if (mWorkingDir) {
io->NewFileURI(mWorkingDir, getter_AddRefs(workingDirURI));
}
nsCOMPtr<nsILocalFile> lf (do_CreateInstance(NS_LOCAL_FILE_CONTRACTID)); nsCOMPtr<nsILocalFile> lf (do_CreateInstance(NS_LOCAL_FILE_CONTRACTID));
rv = lf->InitWithPath(aArgument); rv = lf->InitWithPath(aArgument);
if (NS_SUCCEEDED(rv)) { if (NS_SUCCEEDED(rv)) {
lf->Normalize(); lf->Normalize();
return io->NewFileURI(lf, aResult); nsCAutoString url;
} // Try to resolve the url for .url files.
resolveShortcutURL(lf, url);
if (!url.IsEmpty()) {
return io->NewURI(url,
nsnull,
workingDirURI,
aResult);
}
nsCOMPtr<nsIURI> workingDirURI; return io->NewFileURI(lf, aResult);
if (mWorkingDir) {
io->NewFileURI(mWorkingDir, getter_AddRefs(workingDirURI));
} }
return io->NewURI(NS_ConvertUTF16toUTF8(aArgument), return io->NewURI(NS_ConvertUTF16toUTF8(aArgument),
@ -477,6 +488,22 @@ nsCommandLine::appendArg(const char* arg)
mArgs.AppendString(warg); mArgs.AppendString(warg);
} }
void
nsCommandLine::resolveShortcutURL(nsILocalFile* aFile, nsACString& outURL)
{
nsCOMPtr<nsIFileProtocolHandler> fph;
nsresult rv = NS_GetFileProtocolHandler(getter_AddRefs(fph));
if (NS_FAILED(rv))
return;
nsCOMPtr<nsIURI> uri;
rv = fph->ReadURLFile(aFile, getter_AddRefs(uri));
if (NS_FAILED(rv))
return;
uri->GetSpec(outURL);
}
NS_IMETHODIMP NS_IMETHODIMP
nsCommandLine::Init(PRInt32 argc, char** argv, nsIFile* aWorkingDir, nsCommandLine::Init(PRInt32 argc, char** argv, nsIFile* aWorkingDir,
PRUint32 aState) PRUint32 aState)

Просмотреть файл

@ -50,4 +50,12 @@ XPCSHELL_TESTS = \
unit \ unit \
$(NULL) $(NULL)
ifeq ($(OS_ARCH),WINNT)
XPCSHELL_TESTS += unit/win
else
ifneq (,$(filter-out OS2 Darwin,$(OS_ARCH)))
XPCSHELL_TESTS += unit/unix
endif
endif
include $(topsrcdir)/config/rules.mk include $(topsrcdir)/config/rules.mk

Просмотреть файл

@ -0,0 +1,43 @@
/* ***** BEGIN LICENSE BLOCK *****
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
*
* The contents of this file are subject to the Mozilla Public License Version
* 1.1 (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
* http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
* for the specific language governing rights and limitations under the
* License.
*
* The Original Code is Command Line tests.
*
* The Initial Developer of the Original Code is
* Robert Strong <robert_bugzila@gmail.com>.
* Portions created by the Initial Developer are Copyright (C) 2007
* the Initial Developer. All Rights Reserved.
*
* Contributor(s):
*
* Alternatively, the contents of this file may be used under the terms of
* either the GNU General Public License Version 2 or later (the "GPL"), or
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
* in which case the provisions of the GPL or the LGPL are applicable instead
* of those above. If you wish to allow use of your version of this file only
* under the terms of either the GPL or the LGPL, and not to allow others to
* use your version of this file under the terms of the MPL, indicate your
* decision by deleting the provisions above and replace them with the notice
* and other provisions required by the GPL or the LGPL. If you do not delete
* the provisions above, a recipient may use your version of this file under
* the terms of any one of the MPL, the GPL or the LGPL.
*
* ***** END LICENSE BLOCK ***** */
function run_test() {
var clClass = Components.classes["@mozilla.org/toolkit/command-line;1"];
var commandLine = clClass.createInstance();
var urlFile = do_get_file("toolkit/components/commandlines/test/unit/data/test_bug410156.desktop");
var uri = commandLine.resolveURI(urlFile.path);
do_check_eq(uri.spec, "http://www.bug410156.com/");
}

Просмотреть файл

@ -0,0 +1,43 @@
/* ***** BEGIN LICENSE BLOCK *****
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
*
* The contents of this file are subject to the Mozilla Public License Version
* 1.1 (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
* http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
* for the specific language governing rights and limitations under the
* License.
*
* The Original Code is Command Line tests.
*
* The Initial Developer of the Original Code is
* Robert Strong <robert_bugzila@gmail.com>.
* Portions created by the Initial Developer are Copyright (C) 2007
* the Initial Developer. All Rights Reserved.
*
* Contributor(s):
*
* Alternatively, the contents of this file may be used under the terms of
* either the GNU General Public License Version 2 or later (the "GPL"), or
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
* in which case the provisions of the GPL or the LGPL are applicable instead
* of those above. If you wish to allow use of your version of this file only
* under the terms of either the GPL or the LGPL, and not to allow others to
* use your version of this file under the terms of the MPL, indicate your
* decision by deleting the provisions above and replace them with the notice
* and other provisions required by the GPL or the LGPL. If you do not delete
* the provisions above, a recipient may use your version of this file under
* the terms of any one of the MPL, the GPL or the LGPL.
*
* ***** END LICENSE BLOCK ***** */
function run_test() {
var clClass = Components.classes["@mozilla.org/toolkit/command-line;1"];
var commandLine = clClass.createInstance();
var urlFile = do_get_file("toolkit/components/commandlines/test/unit/data/test_bug410156.url");
var uri = commandLine.resolveURI(urlFile.path);
do_check_eq(uri.spec, "http://www.bug410156.com/");
}