File: URLClassifierChild.h

package info (click to toggle)
firefox 147.0-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 4,683,324 kB
  • sloc: cpp: 7,607,156; javascript: 6,532,492; ansic: 3,775,158; python: 1,415,368; xml: 634,556; asm: 438,949; java: 186,241; sh: 62,751; makefile: 18,079; objc: 13,092; perl: 12,808; yacc: 4,583; cs: 3,846; pascal: 3,448; lex: 1,720; ruby: 1,003; php: 436; lisp: 258; awk: 247; sql: 66; sed: 54; csh: 10; exp: 6
file content (132 lines) | stat: -rw-r--r-- 4,115 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
/* 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 mozilla_dom_URLClassifierChild_h
#define mozilla_dom_URLClassifierChild_h

#include "mozilla/dom/PURLClassifierChild.h"
#include "mozilla/dom/PURLClassifierLocalByNameChild.h"
#include "mozilla/dom/PURLClassifierLocalChild.h"
#include "mozilla/ipc/URIUtils.h"
#include "mozilla/net/UrlClassifierFeatureResult.h"
#include "nsIURIClassifier.h"
#include "nsIUrlClassifierFeature.h"

namespace mozilla::dom {

class URLClassifierChild : public PURLClassifierChild {
 public:
  void SetCallback(nsIURIClassifierCallback* aCallback) {
    mCallback = aCallback;
  }

  mozilla::ipc::IPCResult Recv__delete__(const Maybe<ClassifierInfo>& aInfo,
                                         const nsresult& aResult) {
    MOZ_ASSERT(mCallback);
    if (aInfo.isSome()) {
      mCallback->OnClassifyComplete(aResult, aInfo.ref().list(),
                                    aInfo.ref().provider(),
                                    aInfo.ref().fullhash());
    }
    return IPC_OK();
  }

 private:
  nsCOMPtr<nsIURIClassifierCallback> mCallback;
};

class URLClassifierLocalChild : public PURLClassifierLocalChild {
 public:
  void SetFeaturesAndCallback(
      const nsTArray<RefPtr<nsIUrlClassifierFeature>>& aFeatures,
      nsIUrlClassifierFeatureCallback* aCallback) {
    mCallback = aCallback;
    mFeatures = aFeatures.Clone();
  }

  mozilla::ipc::IPCResult Recv__delete__(
      nsTArray<URLClassifierLocalResult>&& aResults) {
    nsTArray<RefPtr<nsIUrlClassifierFeatureResult>> finalResults;

    nsTArray<URLClassifierLocalResult> results = std::move(aResults);
    for (URLClassifierLocalResult& result : results) {
      for (nsIUrlClassifierFeature* feature : mFeatures) {
        nsAutoCString name;
        nsresult rv = feature->GetName(name);
        if (NS_WARN_IF(NS_FAILED(rv))) {
          continue;
        }

        if (result.featureName() != name) {
          continue;
        }

        RefPtr<nsIURI> uri = result.uri();
        if (NS_WARN_IF(!uri)) {
          continue;
        }

        RefPtr<net::UrlClassifierFeatureResult> r =
            new net::UrlClassifierFeatureResult(uri, feature,
                                                result.matchingList());
        finalResults.AppendElement(r);
        break;
      }
    }

    mCallback->OnClassifyComplete(finalResults);
    return IPC_OK();
  }

 private:
  nsCOMPtr<nsIUrlClassifierFeatureCallback> mCallback;
  nsTArray<RefPtr<nsIUrlClassifierFeature>> mFeatures;
};

class URLClassifierLocalByNameChild : public PURLClassifierLocalByNameChild {
 public:
  void SetFeaturesAndCallback(const nsTArray<nsCString>& aFeatures,
                              nsIUrlClassifierFeatureCallback* aCallback) {
    mCallback = aCallback;
    mFeatures = aFeatures.Clone();
  }

  mozilla::ipc::IPCResult Recv__delete__(
      nsTArray<URLClassifierLocalResult>&& aResults) {
    nsTArray<RefPtr<nsIUrlClassifierFeatureResult>> finalResults;

    nsTArray<URLClassifierLocalResult> results = std::move(aResults);
    for (URLClassifierLocalResult& result : results) {
      for (nsCString feature : mFeatures) {
        if (result.featureName() != feature) {
          continue;
        }

        RefPtr<nsIURI> uri = result.uri();
        if (NS_WARN_IF(!uri)) {
          continue;
        }

        RefPtr<net::UrlClassifierFeatureResult> r =
            new net::UrlClassifierFeatureResult(uri, nullptr,
                                                result.matchingList());
        finalResults.AppendElement(r);
        break;
      }
    }

    mCallback->OnClassifyComplete(finalResults);
    return IPC_OK();
  }

 private:
  nsCOMPtr<nsIUrlClassifierFeatureCallback> mCallback;
  nsTArray<nsCString> mFeatures;
};

}  // namespace mozilla::dom

#endif  // mozilla_dom_URLClassifierChild_h