chromium/third_party/blink/renderer/platform/mojo/heap_mojo_associated_receiver_set_test.cc

// Copyright 2020 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "third_party/blink/renderer/platform/mojo/heap_mojo_associated_receiver_set.h"

#include <utility>

#include "base/memory/raw_ptr.h"
#include "base/test/null_task_runner.h"
#include "mojo/public/cpp/bindings/associated_receiver.h"
#include "mojo/public/cpp/bindings/associated_receiver_set.h"
#include "mojo/public/cpp/bindings/associated_remote.h"
#include "mojo/public/interfaces/bindings/tests/sample_service.mojom-blink.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "third_party/blink/renderer/platform/context_lifecycle_notifier.h"
#include "third_party/blink/renderer/platform/heap/heap_test_utilities.h"
#include "third_party/blink/renderer/platform/heap/persistent.h"
#include "third_party/blink/renderer/platform/heap_observer_set.h"
#include "third_party/blink/renderer/platform/mojo/heap_mojo_wrapper_mode.h"
#include "third_party/blink/renderer/platform/mojo/mojo_binding_context.h"
#include "third_party/blink/renderer/platform/testing/mock_context_lifecycle_notifier.h"

namespace blink {

namespace {

template <HeapMojoWrapperMode Mode>
class GCOwner;

template <HeapMojoWrapperMode Mode>
class HeapMojoAssociatedReceiverSetGCBaseTest : public TestSupportingGC {};

template <HeapMojoWrapperMode Mode>
class GCOwner : public GarbageCollected<GCOwner<Mode>>,
                public sample::blink::Service {};

}  // namespace

class HeapMojoAssociatedReceiverSetGCWithContextObserverTest
    : public HeapMojoAssociatedReceiverSetGCBaseTest<
          HeapMojoWrapperMode::kWithContextObserver> {};
class HeapMojoAssociatedReceiverSetGCWithoutContextObserverTest
    : public HeapMojoAssociatedReceiverSetGCBaseTest<
          HeapMojoWrapperMode::kForceWithoutContextObserver> {};

// Remove() a PendingAssociatedReceiver from HeapMojoAssociatedReceiverSet and
// verify that the receiver is no longer part of the set.
TEST_F(HeapMojoAssociatedReceiverSetGCWithContextObserverTest,
       RemovesReceiver) {}

// Same, without ContextObserver.
TEST_F(HeapMojoAssociatedReceiverSetGCWithoutContextObserverTest,
       RemovesReceiver) {}

// Check that the wrapper does not outlive the owner when ConservativeGC finds
// the wrapper.
TEST_F(HeapMojoAssociatedReceiverSetGCWithContextObserverTest,
       NoClearOnConservativeGC) {}

// Clear() a HeapMojoAssociatedReceiverSet and verify that it is empty.
TEST_F(HeapMojoAssociatedReceiverSetGCWithContextObserverTest,
       ClearLeavesSetEmpty) {}

// Same, without ContextObserver.
TEST_F(HeapMojoAssociatedReceiverSetGCWithoutContextObserverTest,
       ClearLeavesSetEmpty) {}

}  // namespace blink