Bug 986975 - do_QueryInterface abuse in nsAndroidHandlerApp.cpp. r=mak draft
authorPaolo Amadini <paolo.mozmail@amadzone.org>
Fri, 14 Apr 2017 18:31:16 +0100
changeset 562931 98d17809392a4b5a8fd403a047c29f4eeaeb64d8
parent 562930 3e70d2516749bbb586b419d71c298bc6cfb365c4
child 562932 52721e85ff92ffd9f8aa0765663c3bde5b6eab47
push id54169
push userpaolo.mozmail@amadzone.org
push dateFri, 14 Apr 2017 19:16:47 +0000
reviewersmak
bugs986975, 1355585
milestone55.0a1
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
uriloader/exthandler/android/nsAndroidHandlerApp.cpp
uriloader/exthandler/android/nsMIMEInfoAndroid.cpp
--- 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);
 }