forked from mirrors/gecko-dev
Add a new nsExternalHelperAppService derived class named nsOSHelperAppServiceChild to be used for the MIME service, external helper app service, and external protocol service interfaces in child processes. nsOSHelperAppServiceChild overrides some methods used to get MIME and external protocol handler information from the OS and implements these methods by remoting the calls to the parent process. This is necessary because, on Mac, querying the OS for helper application info from sandboxed content processes is unreliable and has buggy side effects. For now, only use the new class on Mac. Android and unix file changes r+ by gcp. Windows files changes r+ by bobowen. Sync messages review r+ by nfroyd. MozReview-Commit-ID: 63BiS6VCxfn Differential Revision: https://phabricator.services.mozilla.com/D15620 --HG-- extra : moz-landing-system : lando
53 lines
2.1 KiB
C++
53 lines
2.1 KiB
C++
/* -*- Mode: c++; c-basic-offset: 2; tab-width: 20; indent-tabs-mode: nil; -*-
|
|
* 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 "nsOSHelperAppService.h"
|
|
#include "nsMIMEInfoAndroid.h"
|
|
#include "AndroidBridge.h"
|
|
|
|
nsOSHelperAppService::nsOSHelperAppService() : nsExternalHelperAppService() {}
|
|
|
|
nsOSHelperAppService::~nsOSHelperAppService() {}
|
|
|
|
nsresult nsOSHelperAppService::GetMIMEInfoFromOS(const nsACString& aMIMEType,
|
|
const nsACString& aFileExt,
|
|
bool* aFound,
|
|
nsIMIMEInfo** aMIMEInfo) {
|
|
RefPtr<nsMIMEInfoAndroid> mimeInfo;
|
|
*aFound = false;
|
|
if (!aMIMEType.IsEmpty())
|
|
*aFound = nsMIMEInfoAndroid::GetMimeInfoForMimeType(
|
|
aMIMEType, getter_AddRefs(mimeInfo));
|
|
if (!*aFound)
|
|
*aFound = nsMIMEInfoAndroid::GetMimeInfoForFileExt(
|
|
aFileExt, getter_AddRefs(mimeInfo));
|
|
|
|
// Code that calls this requires an object regardless if the OS has
|
|
// something for us, so we return the empty object.
|
|
if (!*aFound) mimeInfo = new nsMIMEInfoAndroid(aMIMEType);
|
|
|
|
mimeInfo.forget(aMIMEInfo);
|
|
return NS_OK;
|
|
}
|
|
|
|
nsresult nsOSHelperAppService::OSProtocolHandlerExists(const char* aScheme,
|
|
bool* aExists) {
|
|
*aExists = mozilla::AndroidBridge::Bridge()->GetHandlersForURL(
|
|
NS_ConvertUTF8toUTF16(aScheme));
|
|
return NS_OK;
|
|
}
|
|
|
|
nsresult nsOSHelperAppService::GetProtocolHandlerInfoFromOS(
|
|
const nsACString& aScheme, bool* found, nsIHandlerInfo** info) {
|
|
return nsMIMEInfoAndroid::GetMimeInfoForURL(aScheme, found, info);
|
|
}
|
|
|
|
nsIHandlerApp* nsOSHelperAppService::CreateAndroidHandlerApp(
|
|
const nsAString& aName, const nsAString& aDescription,
|
|
const nsAString& aPackageName, const nsAString& aClassName,
|
|
const nsACString& aMimeType, const nsAString& aAction) {
|
|
return new nsAndroidHandlerApp(aName, aDescription, aPackageName, aClassName,
|
|
aMimeType, aAction);
|
|
}
|