зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1541958 - remove nsIUserInfo which is unused, r=mossop
Differential Revision: https://phabricator.services.mozilla.com/D26212 --HG-- extra : moz-landing-system : lando
This commit is contained in:
Родитель
abcec64af8
Коммит
0e774ff83f
|
@ -3,42 +3,39 @@
|
|||
|
||||
const {MockRegistrar} = ChromeUtils.import("resource://testing-common/MockRegistrar.jsm");
|
||||
|
||||
function userInfo(username) {
|
||||
this.username = username;
|
||||
function platformInfo(injectedValue) {
|
||||
this.platformVersion = injectedValue;
|
||||
}
|
||||
|
||||
userInfo.prototype = {
|
||||
fullname: "fullname",
|
||||
emailAddress: "emailAddress",
|
||||
domain: "domain",
|
||||
QueryInterface: ChromeUtils.generateQI([Ci.nsIUserInfo]),
|
||||
platformInfo.prototype = {
|
||||
platformVersion: "some version",
|
||||
platformBuildID: "some id",
|
||||
QueryInterface: ChromeUtils.generateQI([Ci.nsIPlatformInfo]),
|
||||
};
|
||||
|
||||
add_test(function test_register() {
|
||||
let localUserInfo = {
|
||||
fullname: "fullname",
|
||||
username: "localusername",
|
||||
emailAddress: "emailAddress",
|
||||
domain: "domain",
|
||||
QueryInterface: ChromeUtils.generateQI([Ci.nsIUserInfo]),
|
||||
let localPlatformInfo = {
|
||||
platformVersion: "local version",
|
||||
platformBuildID: "local id",
|
||||
QueryInterface: ChromeUtils.generateQI([Ci.nsIPlatformInfo]),
|
||||
};
|
||||
|
||||
MockRegistrar.register("@mozilla.org/userinfo;1", localUserInfo);
|
||||
Assert.equal(Cc["@mozilla.org/userinfo;1"].createInstance(Ci.nsIUserInfo).username, "localusername");
|
||||
MockRegistrar.register("@mozilla.org/xre/app-info;1", localPlatformInfo);
|
||||
Assert.equal(Cc["@mozilla.org/xre/app-info;1"].createInstance(Ci.nsIPlatformInfo).platformVersion, "local version");
|
||||
run_next_test();
|
||||
});
|
||||
|
||||
add_test(function test_register_with_arguments() {
|
||||
MockRegistrar.register("@mozilla.org/userinfo;1", userInfo, ["username"]);
|
||||
Assert.equal(Cc["@mozilla.org/userinfo;1"].createInstance(Ci.nsIUserInfo).username, "username");
|
||||
MockRegistrar.register("@mozilla.org/xre/app-info;1", platformInfo, ["override"]);
|
||||
Assert.equal(Cc["@mozilla.org/xre/app-info;1"].createInstance(Ci.nsIPlatformInfo).platformVersion, "override");
|
||||
run_next_test();
|
||||
});
|
||||
|
||||
add_test(function test_register_twice() {
|
||||
MockRegistrar.register("@mozilla.org/userinfo;1", userInfo, ["originalname"]);
|
||||
Assert.equal(Cc["@mozilla.org/userinfo;1"].createInstance(Ci.nsIUserInfo).username, "originalname");
|
||||
MockRegistrar.register("@mozilla.org/xre/app-info;1", platformInfo, ["override"]);
|
||||
Assert.equal(Cc["@mozilla.org/xre/app-info;1"].createInstance(Ci.nsIPlatformInfo).platformVersion, "override");
|
||||
|
||||
MockRegistrar.register("@mozilla.org/userinfo;1", userInfo, ["newname"]);
|
||||
Assert.equal(Cc["@mozilla.org/userinfo;1"].createInstance(Ci.nsIUserInfo).username, "newname");
|
||||
MockRegistrar.register("@mozilla.org/xre/app-info;1", platformInfo, ["override again"]);
|
||||
Assert.equal(Cc["@mozilla.org/xre/app-info;1"].createInstance(Ci.nsIPlatformInfo).platformVersion, "override again");
|
||||
run_next_test();
|
||||
});
|
||||
|
|
|
@ -157,13 +157,6 @@ Classes = [
|
|||
'headers': ['/toolkit/components/url-classifier/nsUrlClassifierUtils.h'],
|
||||
'constructor': 'nsUrlClassifierUtils::GetXPCOMSingleton',
|
||||
},
|
||||
{
|
||||
'name': 'UserInfo',
|
||||
'cid': '{14c13684-1dd2-11b2-9463-bb10ba742554}',
|
||||
'contract_ids': ['@mozilla.org/userinfo;1'],
|
||||
'type': 'nsUserInfo',
|
||||
'headers': ['/toolkit/components/startup/nsUserInfo.h'],
|
||||
},
|
||||
]
|
||||
|
||||
if defined('MOZ_UPDATER') and not IS_ANDROID:
|
||||
|
|
|
@ -18,20 +18,6 @@ UNIFIED_SOURCES += [
|
|||
'StartupTimeline.cpp',
|
||||
]
|
||||
|
||||
if CONFIG['OS_ARCH'] == 'WINNT':
|
||||
# This file cannot be built in unified mode because of name clashes with Windows headers.
|
||||
SOURCES += [
|
||||
'nsUserInfoWin.cpp',
|
||||
]
|
||||
elif CONFIG['MOZ_WIDGET_TOOLKIT'] == 'cocoa':
|
||||
UNIFIED_SOURCES += [
|
||||
'nsUserInfoMac.mm',
|
||||
]
|
||||
else:
|
||||
UNIFIED_SOURCES += [
|
||||
'nsUserInfoUnix.cpp',
|
||||
]
|
||||
|
||||
FINAL_LIBRARY = 'xul'
|
||||
|
||||
with Files('**'):
|
||||
|
|
|
@ -1,23 +0,0 @@
|
|||
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
#ifndef __nsUserInfo_h
|
||||
#define __nsUserInfo_h
|
||||
|
||||
#include "nsIUserInfo.h"
|
||||
|
||||
class nsUserInfo : public nsIUserInfo
|
||||
|
||||
{
|
||||
public:
|
||||
nsUserInfo(void);
|
||||
|
||||
NS_DECL_ISUPPORTS
|
||||
NS_DECL_NSIUSERINFO
|
||||
|
||||
protected:
|
||||
virtual ~nsUserInfo();
|
||||
};
|
||||
|
||||
#endif /* __nsUserInfo_h */
|
|
@ -1,24 +0,0 @@
|
|||
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
#ifndef __nsUserInfoMac_h
|
||||
#define __nsUserInfoMac_h
|
||||
|
||||
#include "nsIUserInfo.h"
|
||||
#include "nsReadableUtils.h"
|
||||
|
||||
class nsUserInfo : public nsIUserInfo {
|
||||
public:
|
||||
nsUserInfo();
|
||||
|
||||
NS_DECL_ISUPPORTS
|
||||
NS_DECL_NSIUSERINFO
|
||||
|
||||
nsresult GetPrimaryEmailAddress(nsACString &aEmailAddress);
|
||||
|
||||
protected:
|
||||
virtual ~nsUserInfo() {}
|
||||
};
|
||||
|
||||
#endif /* __nsUserInfo_h */
|
|
@ -1,73 +0,0 @@
|
|||
/* -*- Mode: Objective-C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
#include "nsUserInfoMac.h"
|
||||
#include "nsObjCExceptions.h"
|
||||
#include "nsString.h"
|
||||
#include "mozilla/Span.h"
|
||||
|
||||
#import <Cocoa/Cocoa.h>
|
||||
#import <AddressBook/AddressBook.h>
|
||||
|
||||
NS_IMPL_ISUPPORTS(nsUserInfo, nsIUserInfo)
|
||||
|
||||
nsUserInfo::nsUserInfo() {}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsUserInfo::GetFullname(nsAString& aFullname) {
|
||||
NS_OBJC_BEGIN_TRY_ABORT_BLOCK_NSRESULT
|
||||
|
||||
CopyUTF8toUTF16(mozilla::MakeStringSpan([NSFullUserName() UTF8String]), aFullname);
|
||||
return NS_OK;
|
||||
|
||||
NS_OBJC_END_TRY_ABORT_BLOCK_NSRESULT
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsUserInfo::GetUsername(nsACString& aUsername) {
|
||||
NS_OBJC_BEGIN_TRY_ABORT_BLOCK_NSRESULT
|
||||
|
||||
aUsername.Assign([NSUserName() UTF8String]);
|
||||
return NS_OK;
|
||||
|
||||
NS_OBJC_END_TRY_ABORT_BLOCK_NSRESULT
|
||||
}
|
||||
|
||||
nsresult nsUserInfo::GetPrimaryEmailAddress(nsACString& aEmailAddress) {
|
||||
NS_OBJC_BEGIN_TRY_ABORT_BLOCK_NSRESULT
|
||||
|
||||
// Try to get this user's primary email from the system addressbook's "me card"
|
||||
// (if they've filled it)
|
||||
ABPerson* me = [[ABAddressBook sharedAddressBook] me];
|
||||
ABMultiValue* emailAddresses = [me valueForProperty:kABEmailProperty];
|
||||
if ([emailAddresses count] > 0) {
|
||||
// get the index of the primary email, in case there are more than one
|
||||
int primaryEmailIndex = [emailAddresses indexForIdentifier:[emailAddresses primaryIdentifier]];
|
||||
aEmailAddress.Assign([[emailAddresses valueAtIndex:primaryEmailIndex] UTF8String]);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
return NS_ERROR_FAILURE;
|
||||
|
||||
NS_OBJC_END_TRY_ABORT_BLOCK_NSRESULT
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsUserInfo::GetEmailAddress(nsACString& aEmailAddress) {
|
||||
return GetPrimaryEmailAddress(aEmailAddress);
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsUserInfo::GetDomain(nsACString& aDomain) {
|
||||
nsAutoCString email;
|
||||
if (NS_SUCCEEDED(GetPrimaryEmailAddress(email))) {
|
||||
int32_t index = email.FindChar('@');
|
||||
if (index != -1) {
|
||||
// chop off everything before, and including the '@'
|
||||
aDomain.Assign(Substring(email, index + 1));
|
||||
}
|
||||
}
|
||||
return NS_OK;
|
||||
}
|
|
@ -1,141 +0,0 @@
|
|||
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
#include "nsUserInfo.h"
|
||||
#include "nsCRT.h"
|
||||
|
||||
#include <pwd.h>
|
||||
#include <sys/types.h>
|
||||
#include <unistd.h>
|
||||
#include <sys/utsname.h>
|
||||
|
||||
#include "nsString.h"
|
||||
#include "nsReadableUtils.h"
|
||||
#include "nsNativeCharsetUtils.h"
|
||||
|
||||
/* Some UNIXy platforms don't have pw_gecos. In this case we use pw_name */
|
||||
#if defined(NO_PW_GECOS)
|
||||
# define PW_GECOS pw_name
|
||||
#else
|
||||
# define PW_GECOS pw_gecos
|
||||
#endif
|
||||
|
||||
nsUserInfo::nsUserInfo() {}
|
||||
|
||||
nsUserInfo::~nsUserInfo() {}
|
||||
|
||||
NS_IMPL_ISUPPORTS(nsUserInfo, nsIUserInfo)
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsUserInfo::GetFullname(nsAString& aFullname) {
|
||||
struct passwd* pw = nullptr;
|
||||
|
||||
pw = getpwuid(geteuid());
|
||||
|
||||
if (!pw || !pw->PW_GECOS) return NS_ERROR_FAILURE;
|
||||
|
||||
#ifdef DEBUG_sspitzer
|
||||
printf("fullname = %s\n", pw->PW_GECOS);
|
||||
#endif
|
||||
|
||||
nsAutoCString fullname(pw->PW_GECOS);
|
||||
|
||||
// now try to parse the GECOS information, which will be in the form
|
||||
// Full Name, <other stuff> - eliminate the ", <other stuff>
|
||||
// also, sometimes GECOS uses "&" to mean "the user name" so do
|
||||
// the appropriate substitution
|
||||
|
||||
// truncate at first comma (field delimiter)
|
||||
int32_t index;
|
||||
if ((index = fullname.Find(",")) != kNotFound) fullname.Truncate(index);
|
||||
|
||||
// replace ampersand with username
|
||||
if (pw->pw_name) {
|
||||
nsAutoCString username(pw->pw_name);
|
||||
if (!username.IsEmpty() && nsCRT::IsLower(username.CharAt(0)))
|
||||
username.SetCharAt(nsCRT::ToUpper(username.CharAt(0)), 0);
|
||||
|
||||
fullname.ReplaceSubstring("&", username.get());
|
||||
}
|
||||
|
||||
NS_CopyNativeToUnicode(fullname, aFullname);
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsUserInfo::GetUsername(nsACString& aUsername) {
|
||||
struct passwd* pw = nullptr;
|
||||
|
||||
// is this portable? those are POSIX compliant calls, but I need to check
|
||||
pw = getpwuid(geteuid());
|
||||
|
||||
if (!pw || !pw->pw_name) return NS_ERROR_FAILURE;
|
||||
|
||||
#ifdef DEBUG_sspitzer
|
||||
printf("username = %s\n", pw->pw_name);
|
||||
#endif
|
||||
|
||||
aUsername.Assign(pw->pw_name);
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsUserInfo::GetDomain(nsACString& aDomain) {
|
||||
nsresult rv = NS_ERROR_FAILURE;
|
||||
|
||||
struct utsname buf;
|
||||
char* domainname = nullptr;
|
||||
|
||||
if (uname(&buf) < 0) {
|
||||
return rv;
|
||||
}
|
||||
|
||||
#if defined(__linux__)
|
||||
domainname = buf.domainname;
|
||||
#endif
|
||||
|
||||
if (domainname && domainname[0]) {
|
||||
aDomain.Assign(domainname);
|
||||
rv = NS_OK;
|
||||
} else {
|
||||
// try to get the hostname from the nodename
|
||||
// on machines that use DHCP, domainname may not be set
|
||||
// but the nodename might.
|
||||
if (buf.nodename[0]) {
|
||||
// if the nodename is foo.bar.org, use bar.org as the domain
|
||||
char* pos = strchr(buf.nodename, '.');
|
||||
if (pos) {
|
||||
aDomain.Assign(pos + 1);
|
||||
rv = NS_OK;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return rv;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsUserInfo::GetEmailAddress(nsACString& aEmailAddress) {
|
||||
// use username + "@" + domain for the email address
|
||||
nsresult rv;
|
||||
|
||||
nsCString username;
|
||||
nsCString domain;
|
||||
|
||||
rv = GetUsername(username);
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
|
||||
rv = GetDomain(domain);
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
|
||||
if (username.IsEmpty() || domain.IsEmpty()) {
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
aEmailAddress = username + NS_LITERAL_CSTRING("@") + domain;
|
||||
return NS_OK;
|
||||
}
|
|
@ -1,115 +0,0 @@
|
|||
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
#include "nsUserInfo.h"
|
||||
|
||||
#include "mozilla/ArrayUtils.h" // ArrayLength
|
||||
#include "mozilla/Span.h" // MakeStringSpan
|
||||
#include "nsString.h"
|
||||
#include "windows.h"
|
||||
#include "nsCRT.h"
|
||||
|
||||
#define SECURITY_WIN32
|
||||
#include "lm.h"
|
||||
#include "security.h"
|
||||
|
||||
nsUserInfo::nsUserInfo() {}
|
||||
|
||||
nsUserInfo::~nsUserInfo() {}
|
||||
|
||||
NS_IMPL_ISUPPORTS(nsUserInfo, nsIUserInfo)
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsUserInfo::GetUsername(nsACString& aUsername) {
|
||||
// UNLEN is the max username length as defined in lmcons.h
|
||||
wchar_t username[UNLEN + 1];
|
||||
DWORD size = mozilla::ArrayLength(username);
|
||||
if (!GetUserNameW(username, &size)) return NS_ERROR_FAILURE;
|
||||
|
||||
CopyUTF16toUTF8(nsDependentString(username), aUsername);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsUserInfo::GetFullname(nsAString& aFullname) {
|
||||
wchar_t fullName[512];
|
||||
DWORD size = mozilla::ArrayLength(fullName);
|
||||
|
||||
if (GetUserNameExW(NameDisplay, fullName, &size)) {
|
||||
aFullname.Assign(fullName);
|
||||
} else {
|
||||
DWORD getUsernameError = GetLastError();
|
||||
|
||||
// Try to use the net APIs regardless of the error because it may be
|
||||
// able to obtain the information.
|
||||
wchar_t username[UNLEN + 1];
|
||||
size = mozilla::ArrayLength(username);
|
||||
if (!GetUserNameW(username, &size)) {
|
||||
// ERROR_NONE_MAPPED means the user info is not filled out on this
|
||||
// computer
|
||||
return getUsernameError == ERROR_NONE_MAPPED ? NS_ERROR_NOT_AVAILABLE
|
||||
: NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
const DWORD level = 2;
|
||||
LPBYTE info;
|
||||
// If the NetUserGetInfo function has no full name info it will return
|
||||
// success with an empty string.
|
||||
NET_API_STATUS status = NetUserGetInfo(nullptr, username, level, &info);
|
||||
if (status != NERR_Success) {
|
||||
// We have an error with NetUserGetInfo but we know the info is not
|
||||
// filled in because GetUserNameExW returned ERROR_NONE_MAPPED.
|
||||
return getUsernameError == ERROR_NONE_MAPPED ? NS_ERROR_NOT_AVAILABLE
|
||||
: NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
nsDependentString fullName = nsDependentString(
|
||||
reinterpret_cast<USER_INFO_2*>(info)->usri2_full_name);
|
||||
|
||||
// NetUserGetInfo returns an empty string if the full name is not filled out
|
||||
if (fullName.Length() == 0) {
|
||||
NetApiBufferFree(info);
|
||||
return NS_ERROR_NOT_AVAILABLE;
|
||||
}
|
||||
|
||||
aFullname.Assign(fullName);
|
||||
NetApiBufferFree(info);
|
||||
}
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsUserInfo::GetDomain(nsACString& aDomain) {
|
||||
const DWORD level = 100;
|
||||
LPBYTE info;
|
||||
NET_API_STATUS status = NetWkstaGetInfo(nullptr, level, &info);
|
||||
if (status != NERR_Success) {
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
CopyUTF16toUTF8(nsDependentString(
|
||||
reinterpret_cast<WKSTA_INFO_100*>(info)->wki100_langroup),
|
||||
aDomain);
|
||||
NetApiBufferFree(info);
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsUserInfo::GetEmailAddress(nsACString& aEmailAddress) {
|
||||
// RFC3696 says max length of an email address is 254
|
||||
wchar_t emailAddress[255];
|
||||
DWORD size = mozilla::ArrayLength(emailAddress);
|
||||
|
||||
if (!GetUserNameExW(NameUserPrincipal, emailAddress, &size)) {
|
||||
DWORD getUsernameError = GetLastError();
|
||||
return getUsernameError == ERROR_NONE_MAPPED ? NS_ERROR_NOT_AVAILABLE
|
||||
: NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
CopyUTF16toUTF8(nsDependentString(emailAddress), aEmailAddress);
|
||||
return NS_OK;
|
||||
}
|
|
@ -6,7 +6,6 @@
|
|||
|
||||
XPIDL_SOURCES += [
|
||||
'nsIAppStartup.idl',
|
||||
'nsIUserInfo.idl',
|
||||
]
|
||||
|
||||
XPIDL_MODULE = 'appstartup'
|
||||
|
|
|
@ -1,32 +0,0 @@
|
|||
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
#include "nsISupports.idl"
|
||||
|
||||
[scriptable, uuid(6c1034f0-1dd2-11b2-aa14-e6657ed7bb0b)]
|
||||
interface nsIUserInfo : nsISupports
|
||||
{
|
||||
/* these are things the system may know about the current user */
|
||||
|
||||
readonly attribute AString fullname;
|
||||
|
||||
readonly attribute ACString emailAddress;
|
||||
|
||||
/* should this be an AString? */
|
||||
readonly attribute ACString username;
|
||||
|
||||
readonly attribute ACString domain;
|
||||
};
|
||||
|
||||
%{C++
|
||||
|
||||
// 14c13684-1dd2-11b2-9463-bb10ba742554
|
||||
#define NS_USERINFO_CID \
|
||||
{ 0x14c13684, 0x1dd2, 0x11b2, \
|
||||
{0x94, 0x63, 0xbb, 0x10, 0xba, 0x74, 0x25, 0x54}}
|
||||
|
||||
#define NS_USERINFO_CONTRACTID "@mozilla.org/userinfo;1"
|
||||
|
||||
%}
|
Загрузка…
Ссылка в новой задаче