Bug 986975 - do_QueryInterface abuse in nsAndroidHandlerApp.cpp. r=mak
This change is tested in detail as part of
bug 1355585.
MozReview-Commit-ID: 5z4evaUQDFI
--- a/uriloader/exthandler/android/nsAndroidHandlerApp.cpp
+++ b/uriloader/exthandler/android/nsAndroidHandlerApp.cpp
@@ -50,29 +50,30 @@ nsAndroidHandlerApp::GetDetailedDescript
NS_IMETHODIMP
nsAndroidHandlerApp::SetDetailedDescription(const nsAString & aDescription)
{
mDescription.Assign(aDescription);
return NS_OK;
}
-// XXX Workaround for bug 986975 to maintain the existing broken semantics
-template<>
-struct nsISharingHandlerApp::COMTypeInfo<nsAndroidHandlerApp, void> {
- static const nsIID kIID;
-};
-const nsIID nsISharingHandlerApp::COMTypeInfo<nsAndroidHandlerApp, void>::kIID = NS_IHANDLERAPP_IID;
-
NS_IMETHODIMP
nsAndroidHandlerApp::Equals(nsIHandlerApp *aHandlerApp, bool *aRetval)
{
- nsCOMPtr<nsAndroidHandlerApp> aApp = do_QueryInterface(aHandlerApp);
- *aRetval = aApp && aApp->mName.Equals(mName) &&
- aApp->mDescription.Equals(mDescription);
+ *aRetval = false;
+ if (!aHandlerApp) {
+ return NS_OK;
+ }
+
+ nsString name;
+ nsString detailedDescription;
+ aHandlerApp->GetName(name);
+ aHandlerApp->GetDetailedDescription(detailedDescription);
+
+ *aRetval = name.Equals(mName) && detailedDescription.Equals(mDescription);
return NS_OK;
}
NS_IMETHODIMP
nsAndroidHandlerApp::LaunchWithURI(nsIURI *aURI, nsIInterfaceRequestor *aWindowContext)
{
nsCString uriSpec;
aURI->GetSpec(uriSpec);
--- a/uriloader/exthandler/android/nsMIMEInfoAndroid.cpp
+++ b/uriloader/exthandler/android/nsMIMEInfoAndroid.cpp
@@ -399,29 +399,30 @@ nsMIMEInfoAndroid::SystemChooser::GetDet
return NS_OK;
}
nsresult
nsMIMEInfoAndroid::SystemChooser::SetDetailedDescription(const nsAString&) {
return NS_OK;
}
-// XXX Workaround for bug 986975 to maintain the existing broken semantics
-template<>
-struct nsIHandlerApp::COMTypeInfo<nsMIMEInfoAndroid::SystemChooser, void> {
- static const nsIID kIID;
-};
-const nsIID nsIHandlerApp::COMTypeInfo<nsMIMEInfoAndroid::SystemChooser, void>::kIID = NS_IHANDLERAPP_IID;
-
nsresult
nsMIMEInfoAndroid::SystemChooser::Equals(nsIHandlerApp *aHandlerApp, bool *aRetVal) {
- nsCOMPtr<nsMIMEInfoAndroid::SystemChooser> info = do_QueryInterface(aHandlerApp);
- if (info)
- return mOuter->Equals(info->mOuter, aRetVal);
*aRetVal = false;
+ if (!aHandlerApp) {
+ return NS_OK;
+ }
+
+ nsString name;
+ nsString detailedDescription;
+ aHandlerApp->GetName(name);
+ aHandlerApp->GetDetailedDescription(detailedDescription);
+
+ *aRetVal = name.Equals(u"Android chooser") &&
+ detailedDescription.Equals(u"Android's default handler application chooser");
return NS_OK;
}
nsresult
nsMIMEInfoAndroid::SystemChooser::LaunchWithURI(nsIURI* aURI, nsIInterfaceRequestor*)
{
return mOuter->LoadUriInternal(aURI);
}