Bug 1318768 - Part 3: Make nsIURIClassifier::ClassifyLocalWithTables() usable in the content process; r=gcp,baku

This commit is contained in:
Ehsan Akhgari 2016-11-18 16:43:28 -05:00
Родитель 7009c0e03a
Коммит e8ea6c8ccf
5 изменённых файлов: 66 добавлений и 3 удалений

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

@ -4859,3 +4859,24 @@ ContentParent::DeallocPURLClassifierParent(PURLClassifierParent* aActor)
dont_AddRef(static_cast<URLClassifierParent*>(aActor));
return true;
}
mozilla::ipc::IPCResult
ContentParent::RecvClassifyLocal(const URIParams& aURI, const nsCString& aTables,
nsCString* aResults)
{
MOZ_ASSERT(aResults);
nsCOMPtr<nsIURI> uri = DeserializeURI(aURI);
if (!uri) {
return IPC_FAIL_NO_REASON(this);
}
nsCOMPtr<nsIURIClassifier> uriClassifier =
do_GetService(NS_URICLASSIFIERSERVICE_CONTRACTID);
if (!uriClassifier) {
return IPC_FAIL_NO_REASON(this);
}
nsresult rv = uriClassifier->ClassifyLocalWithTables(uri, aTables, *aResults);
if (NS_WARN_IF(NS_FAILED(rv))) {
return IPC_FAIL(this, "ClassifyLocalWithTables error");
}
return IPC_OK();
}

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

@ -534,6 +534,11 @@ public:
virtual bool
DeallocPURLClassifierParent(PURLClassifierParent* aActor) override;
virtual mozilla::ipc::IPCResult
RecvClassifyLocal(const URIParams& aURI,
const nsCString& aTables,
nsCString* aResults) override;
// Use the PHangMonitor channel to ask the child to repaint a tab.
void ForceTabPaint(TabParent* aTabParent, uint64_t aLayerObserverEpoch);

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

@ -830,6 +830,8 @@ parent:
sync PURLClassifier(Principal principal, bool useTrackingProtection)
returns (bool success);
sync ClassifyLocal(URIParams uri, nsCString tables)
returns (nsCString results);
// Services remoting

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

@ -53,6 +53,7 @@
#include "mozilla/dom/ContentChild.h"
#include "mozilla/dom/PermissionMessageUtils.h"
#include "mozilla/dom/URLClassifierChild.h"
#include "mozilla/ipc/URIUtils.h"
namespace mozilla {
namespace safebrowsing {
@ -1466,9 +1467,26 @@ nsUrlClassifierDBService::ClassifyLocalWithTables(nsIURI *aURI,
const nsACString & aTables,
nsACString & aTableResults)
{
PROFILER_LABEL_FUNC(js::ProfileEntry::Category::OTHER);
MOZ_ASSERT(NS_IsMainThread(), "ClassifyLocalWithTables must be on main thread");
if (XRE_IsContentProcess()) {
using namespace mozilla::dom;
using namespace mozilla::ipc;
URIParams uri;
SerializeURI(aURI, uri);
nsAutoCString tables(aTables);
nsAutoCString results;
bool result = ContentChild::GetSingleton()->SendClassifyLocal(uri, tables,
&results);
if (result) {
aTableResults = results;
return NS_OK;
}
return NS_ERROR_FAILURE;
}
PROFILER_LABEL_FUNC(js::ProfileEntry::Category::OTHER);
nsCOMPtr<nsIURI> uri = NS_GetInnermostURI(aURI);
NS_ENSURE_TRUE(uri, NS_ERROR_FAILURE);

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

@ -43,50 +43,62 @@ const Cr = SpecialPowers.Cr;
var testURLs = [
{ url: "http://example.com",
trackingProtection: false,
table: "",
result: Cr.NS_OK
},
{ url: "http://example.com",
trackingProtection: true,
table: "",
result: Cr.NS_OK
},
{ url: "http://malware.example.com",
trackingProtection: false,
table: "test-malware-simple",
result: Cr.NS_ERROR_MALWARE_URI,
},
{ url: "http://malware.example.com",
trackingProtection: true,
table: "test-malware-simple",
result: Cr.NS_ERROR_MALWARE_URI,
},
{ url: "http://unwanted.example.com",
trackingProtection: false,
table: "test-unwanted-simple",
result: Cr.NS_ERROR_UNWANTED_URI
},
{ url: "http://unwanted.example.com",
trackingProtection: true,
table: "test-unwanted-simple",
result: Cr.NS_ERROR_UNWANTED_URI
},
{ url: "http://itisatrap.org/firefox/its-a-trap.html",
trackingProtection: false,
table: "test-phish-simple",
result: Cr.NS_ERROR_PHISHING_URI
},
{ url: "http://itisatrap.org/firefox/its-a-trap.html",
trackingProtection: true,
table: "test-phish-simple",
result: Cr.NS_ERROR_PHISHING_URI
},
{ url: "http://tracking.example.com",
trackingProtection: false,
table: "test-track-simple",
result: Cr.NS_OK
},
{ url: "http://tracking.example.com",
trackingProtection: true,
table: "test-track-simple",
result: Cr.NS_ERROR_TRACKING_URI
},
{ url: "http://blocked.example.com",
trackingProtection: false,
table: "test-block-simple",
result: Cr.NS_ERROR_BLOCKED_URI
},
{ url: "http://blocked.example.com",
trackingProtection: true,
table: "test-block-simple",
result: Cr.NS_ERROR_BLOCKED_URI
}
];
@ -123,9 +135,14 @@ function testService() {
return;
}
let test = testURLs.shift();
let prin = ssm.createCodebasePrincipal(ios.newURI(test.url, null, null), {});
let tables = "test-malware-simple,test-unwanted-simple,test-phish-simple,test-track-simple,test-block-simple";
let uri = ios.newURI(test.url, null, null);
let prin = ssm.createCodebasePrincipal(uri, {});
is(service.classifyLocalWithTables(uri, tables), test.table,
`Successful synchronous classification of ${test.url} with TP=${test.trackingProtection}`);
let result = service.classify(prin, test.trackingProtection, function(errorCode) {
is(errorCode, test.result, `Successful classification of ${test.url} with TP=${test.trackingProtection}`);
is(errorCode, test.result,
`Successful asynchronous classification of ${test.url} with TP=${test.trackingProtection}`);
runNextTest();
});
}