File: background_fetch_registration.h

package info (click to toggle)
chromium 139.0.7258.127-1
  • links: PTS, VCS
  • area: main
  • in suites:
  • size: 6,122,068 kB
  • sloc: cpp: 35,100,771; ansic: 7,163,530; javascript: 4,103,002; python: 1,436,920; asm: 946,517; xml: 746,709; pascal: 187,653; perl: 88,691; sh: 88,436; objc: 79,953; sql: 51,488; cs: 44,583; fortran: 24,137; makefile: 22,147; tcl: 15,277; php: 13,980; yacc: 8,984; ruby: 7,485; awk: 3,720; lisp: 3,096; lex: 1,327; ada: 727; jsp: 228; sed: 36
file content (150 lines) | stat: -rw-r--r-- 6,102 bytes parent folder | download | duplicates (6)
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
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
// Copyright 2017 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef THIRD_PARTY_BLINK_RENDERER_MODULES_BACKGROUND_FETCH_BACKGROUND_FETCH_REGISTRATION_H_
#define THIRD_PARTY_BLINK_RENDERER_MODULES_BACKGROUND_FETCH_BACKGROUND_FETCH_REGISTRATION_H_

#include "third_party/blink/public/mojom/background_fetch/background_fetch.mojom-blink.h"
#include "third_party/blink/renderer/bindings/core/v8/active_script_wrappable.h"
#include "third_party/blink/renderer/bindings/core/v8/script_promise.h"
#include "third_party/blink/renderer/bindings/core/v8/script_promise_resolver.h"
#include "third_party/blink/renderer/bindings/core/v8/v8_typedefs.h"
#include "third_party/blink/renderer/core/dom/events/event_target.h"
#include "third_party/blink/renderer/platform/bindings/script_wrappable.h"
#include "third_party/blink/renderer/platform/heap/garbage_collected.h"
#include "third_party/blink/renderer/platform/mojo/heap_mojo_receiver.h"
#include "third_party/blink/renderer/platform/mojo/heap_mojo_remote.h"
#include "third_party/blink/renderer/platform/mojo/heap_mojo_wrapper_mode.h"
#include "third_party/blink/renderer/platform/wtf/text/wtf_string.h"

namespace blink {

class BackgroundFetchRecord;
class CacheQueryOptions;
class ExceptionState;
class ScriptState;
class ServiceWorkerRegistration;
class V8BackgroundFetchFailureReason;
class V8BackgroundFetchResult;

// Represents an individual Background Fetch registration. Gives developers
// access to its properties, options, and enables them to abort the fetch.
class BackgroundFetchRegistration final
    : public EventTarget,
      public ActiveScriptWrappable<BackgroundFetchRegistration>,
      public blink::mojom::blink::BackgroundFetchRegistrationObserver {
  DEFINE_WRAPPERTYPEINFO();

 public:
  BackgroundFetchRegistration(
      ServiceWorkerRegistration* service_worker_registration,
      mojom::blink::BackgroundFetchRegistrationPtr registration);

  ~BackgroundFetchRegistration() override;

  // BackgroundFetchRegistrationObserver implementation.
  void OnProgress(uint64_t upload_total,
                  uint64_t uploaded,
                  uint64_t download_total,
                  uint64_t downloaded,
                  mojom::BackgroundFetchResult result,
                  mojom::BackgroundFetchFailureReason failure_reason) override;
  void OnRecordsUnavailable() override;

  // Called when the |request| is complete. |response| points to the response
  // received, if any.
  void OnRequestCompleted(mojom::blink::FetchAPIRequestPtr request,
                          mojom::blink::FetchAPIResponsePtr response) override;

  // Web Exposed attribute defined in the IDL file. Corresponds to the
  // |developer_id| used elsewhere in the codebase.
  String id() const;
  ScriptPromise<BackgroundFetchRecord> match(ScriptState* script_state,
                                             const V8RequestInfo* request,
                                             const CacheQueryOptions* options,
                                             ExceptionState& exception_state);
  ScriptPromise<IDLSequence<BackgroundFetchRecord>> matchAll(
      ScriptState* scrip_state,
      ExceptionState& exception_state);
  ScriptPromise<IDLSequence<BackgroundFetchRecord>> matchAll(
      ScriptState* script_state,
      const V8RequestInfo* request,
      const CacheQueryOptions* options,
      ExceptionState& exception_state);

  uint64_t uploadTotal() const;
  uint64_t uploaded() const;
  uint64_t downloadTotal() const;
  uint64_t downloaded() const;
  bool recordsAvailable() const;
  V8BackgroundFetchResult result() const;
  V8BackgroundFetchFailureReason failureReason() const;

  DEFINE_ATTRIBUTE_EVENT_LISTENER(progress, kProgress)

  ScriptPromise<IDLBoolean> abort(ScriptState*, ExceptionState&);

  // EventTarget implementation.
  const AtomicString& InterfaceName() const override;
  ExecutionContext* GetExecutionContext() const override;

  void Trace(Visitor* visitor) const override;

  // Keeps the object alive until there are non-zero number of |observers_|.
  bool HasPendingActivity() const final;

  void UpdateUI(
      const String& in_title,
      const SkBitmap& in_icon,
      mojom::blink::BackgroundFetchRegistrationService::UpdateUICallback
          callback);

 private:
  void DidAbort(ScriptPromiseResolver<IDLBoolean>* resolver,
                mojom::blink::BackgroundFetchError error);
  void MatchImpl(ScriptState* script_state,
                 ScriptPromiseResolverBase*,
                 const V8RequestInfo* request,
                 mojom::blink::CacheQueryOptionsPtr cache_query_options,
                 ExceptionState& exception_state,
                 bool match_all);

  void DidGetMatchingRequests(
      ScriptPromiseResolverBase* resolver,
      bool return_all,
      Vector<mojom::blink::BackgroundFetchSettledFetchPtr> settled_fetches);

  // Updates the |record| with a |response|, if one is available, else marks
  // the |record|'s request as aborted or failed.
  void UpdateRecord(BackgroundFetchRecord* record,
                    mojom::blink::FetchAPIResponsePtr& response);

  bool IsAborted();

  Member<ServiceWorkerRegistration> registration_;

  // Corresponds to IDL 'id' attribute. Not unique - an active registration can
  // have the same |developer_id_| as one or more inactive registrations.
  String developer_id_;

  uint64_t upload_total_;
  uint64_t uploaded_;
  uint64_t download_total_;
  uint64_t downloaded_;
  bool records_available_ = true;
  mojom::BackgroundFetchResult result_;
  mojom::BackgroundFetchFailureReason failure_reason_;
  HeapVector<Member<BackgroundFetchRecord>> observers_;

  HeapMojoRemote<mojom::blink::BackgroundFetchRegistrationService>
      registration_service_;

  HeapMojoReceiver<blink::mojom::blink::BackgroundFetchRegistrationObserver,
                   BackgroundFetchRegistration>
      observer_receiver_;
};

}  // namespace blink

#endif  // THIRD_PARTY_BLINK_RENDERER_MODULES_BACKGROUND_FETCH_BACKGROUND_FETCH_REGISTRATION_H_