blob: ffbc4f98f4b053dd38c99e95ab617bfc342d665c [file] [log] [blame]
// Copyright 2019 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_COOKIE_STORE_COOKIE_STORE_MANAGER_H_
#define THIRD_PARTY_BLINK_RENDERER_MODULES_COOKIE_STORE_COOKIE_STORE_MANAGER_H_
#include "third_party/blink/public/mojom/cookie_store/cookie_store.mojom-blink.h"
#include "third_party/blink/renderer/bindings/core/v8/script_promise.h"
#include "third_party/blink/renderer/modules/service_worker/service_worker_registration.h"
#include "third_party/blink/renderer/platform/bindings/script_wrappable.h"
#include "third_party/blink/renderer/platform/heap/handle.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/supplementable.h"
#include "third_party/blink/renderer/platform/weborigin/kurl.h"
#include "third_party/blink/renderer/platform/wtf/vector.h"
namespace blink {
class CookieStoreGetOptions;
class ExceptionState;
class ScriptPromiseResolver;
class ScriptState;
class CookieStoreManager final : public ScriptWrappable,
public Supplement<ServiceWorkerRegistration> {
DEFINE_WRAPPERTYPEINFO();
public:
static const char kSupplementName[];
// Web Exposed as registration.cookies
static CookieStoreManager* cookies(ServiceWorkerRegistration& registration);
explicit CookieStoreManager(ServiceWorkerRegistration& registration);
~CookieStoreManager() override = default;
ScriptPromise subscribe(
ScriptState* script_state,
const HeapVector<Member<CookieStoreGetOptions>>& subscriptions,
ExceptionState& exception_state);
ScriptPromise unsubscribe(
ScriptState* script_state,
const HeapVector<Member<CookieStoreGetOptions>>& subscription,
ExceptionState& exception_state);
ScriptPromise getSubscriptions(ScriptState* script_state,
ExceptionState& exception_state);
// GarbageCollected
void Trace(Visitor* visitor) const override;
private:
// The non-static callbacks keep CookieStoreManager alive during mojo calls.
//
// The browser-side implementation of the mojo calls assumes the SW
// registration is live. When CookieStoreManager is used from a Window global,
// the CookieStoreManager needs to live through the mojo call, so it can keep
// its ServiceWorkerRegistration alive.
void OnSubscribeResult(ScriptPromiseResolver* resolver, bool backend_result);
void OnGetSubscriptionsResult(
ScriptPromiseResolver* resolver,
Vector<mojom::blink::CookieChangeSubscriptionPtr> backend_result,
bool backend_success);
// SW registration whose cookie change subscriptions are managed by this.
Member<ServiceWorkerRegistration> registration_;
// Wraps a Mojo pipe for managing service worker cookie change subscriptions.
HeapMojoRemote<mojom::blink::CookieStore,
HeapMojoWrapperMode::kWithoutContextObserver>
backend_;
// Default for cookie_url in CookieStoreGetOptions.
//
// This is the Service Worker registration's scope.
const KURL default_cookie_url_;
// The context in which cookies are accessed.
const scoped_refptr<SecurityOrigin> default_top_frame_origin_;
};
} // namespace blink
#endif // THIRD_PARTY_BLINK_RENDERER_MODULES_COOKIE_STORE_COOKIE_STORE_MANAGER_H_