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

This commit is contained in:
rob_strong@exchangecode.com 2008-04-17 15:20:19 -07:00
Родитель 0015914ff7
Коммит 5e5f5b3ec1
5 изменённых файлов: 108 добавлений и 5 удалений

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

@ -95,6 +95,7 @@ protected:
void *aClosure);
void appendArg(const char* arg);
void resolveShortcutURL(nsILocalFile* aFile, nsACString& outURL);
nsresult EnumerateHandlers(EnumerateHandlersCallback 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();
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));
rv = lf->InitWithPath(aArgument);
if (NS_SUCCEEDED(rv)) {
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;
if (mWorkingDir) {
io->NewFileURI(mWorkingDir, getter_AddRefs(workingDirURI));
return io->NewFileURI(lf, aResult);
}
return io->NewURI(NS_ConvertUTF16toUTF8(aArgument),
@ -477,6 +488,22 @@ nsCommandLine::appendArg(const char* arg)
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
nsCommandLine::Init(PRInt32 argc, char** argv, nsIFile* aWorkingDir,
PRUint32 aState)

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

@ -45,9 +45,14 @@ VPATH = @srcdir@
include $(DEPTH)/config/autoconf.mk
MODULE = test_harness_commandlines
TESTROOT = $(shell cd $(DEPTH) && pwd)/_tests/xpcshell-simple/$(MODULE)
XPCSHELL_TESTS = \
unit \
$(NULL)
include $(topsrcdir)/config/rules.mk
# Hack to allow preprocessing of test_bug410156.js
libs:: unit/test_bug410156.js.in
$(PYTHON) $(MOZILLA_DIR)/config/Preprocessor.py $(DEFINES) $(ACDEFINES) $^ > $(TESTROOT)/unit/test_bug410156.js

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

@ -0,0 +1,7 @@
[Desktop Entry]
Version=1.0
Encoding=UTF-8
Name=test_bug410156
Type=Link
URL=http://www.bug410156.com/
Icon=gnome-fs-bookmark

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

@ -0,0 +1,9 @@
[InternetShortcut]
URL=http://www.bug410156.com/
IDList=
HotKey=0
[{000214A0-0000-0000-C000-000000000046}]
Prop3=19,2
[InternetShortcut.A]
[InternetShortcut.W]
URL=http://www.bug410156.com/

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

@ -0,0 +1,55 @@
/* ***** 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() {
const Cc = Components.classes;
var clClass = Cc["@mozilla.org/toolkit/command-line;1"];
var commandLine = clClass.createInstance();
#ifdef XP_WIN
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/");
#endif
#ifdef XP_UNIX
#ifndef XP_MACOSX
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/");
#endif
#endif
}