blob: 44c0e2d7b240e8ffaa9bedb869ec635cb25ad097 [file] [log] [blame]
// Copyright 2017 The Chromium Authors. All rights reserved.
// 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 "mojo/public/cpp/bindings/remote.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/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/heap/handle.h"
#include "third_party/blink/renderer/platform/mojo/heap_mojo_receiver.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 ScriptPromiseResolver;
class ScriptState;
class ServiceWorkerRegistration;
class RequestOrUSVString;
// Represents an individual Background Fetch registration. Gives developers
// access to its properties, options, and enables them to abort the fetch.
class BackgroundFetchRegistration final
: public EventTargetWithInlineData,
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 match(ScriptState* script_state,
const RequestOrUSVString& request,
const CacheQueryOptions* options,
ExceptionState& exception_state);
ScriptPromise matchAll(ScriptState* scrip_state,
ExceptionState& exception_state);
ScriptPromise matchAll(ScriptState* script_state,
const RequestOrUSVString& 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;
const String result() const;
const String failureReason() const;
DEFINE_ATTRIBUTE_EVENT_LISTENER(progress, kProgress)
ScriptPromise abort(ScriptState* script_state);
// EventTargetWithInlineData 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* resolver,
mojom::blink::BackgroundFetchError error);
ScriptPromise MatchImpl(
ScriptState* script_state,
base::Optional<RequestOrUSVString> request,
mojom::blink::CacheQueryOptionsPtr cache_query_options,
ExceptionState& exception_state,
bool match_all);
void DidGetMatchingRequests(
ScriptPromiseResolver* 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_;
mojo::Remote<mojom::blink::BackgroundFetchRegistrationService>
registration_service_;
HeapMojoReceiver<blink::mojom::blink::BackgroundFetchRegistrationObserver,
BackgroundFetchRegistration,
HeapMojoWrapperMode::kWithoutContextObserver>
observer_receiver_;
};
} // namespace blink
#endif // THIRD_PARTY_BLINK_RENDERER_MODULES_BACKGROUND_FETCH_BACKGROUND_FETCH_REGISTRATION_H_