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

#include "content/browser/site_instance_group.h"

#include "base/memory/scoped_refptr.h"
#include "content/browser/browsing_instance.h"
#include "content/browser/renderer_host/render_process_host_impl.h"
#include "content/browser/web_exposed_isolation_info.h"
#include "content/public/test/browser_task_environment.h"
#include "content/public/test/mock_render_process_host.h"
#include "content/public/test/test_browser_context.h"
#include "testing/gtest/include/gtest/gtest.h"

namespace content {

using SiteInstanceGroupTest = testing::Test;

// Check that a SiteInstanceGroup's BrowsingInstance outlives the
// SiteInstanceGroups within it.
TEST_F(SiteInstanceGroupTest, BrowsingInstanceLifetime) {
  BrowserTaskEnvironment environment;
  TestBrowserContext browser_context;
  std::unique_ptr<MockRenderProcessHost> process =
      std::make_unique<MockRenderProcessHost>(&browser_context);
  scoped_refptr<SiteInstanceGroup> group = nullptr;
  BrowsingInstanceId browsing_instance_id;
  {
    scoped_refptr<BrowsingInstance> browsing_instance = new BrowsingInstance(
        &browser_context, WebExposedIsolationInfo::CreateNonIsolated(),
        /*is_guest=*/false, /*is_fenced=*/false, /*coop_related_group=*/nullptr,
        /*common_coop_origin=*/absl::nullopt);
    group = new SiteInstanceGroup(browsing_instance.get(), process.get());
    browsing_instance_id = group->browsing_instance_id();
  }

  // The BrowsingInstanceId is accessed by calling into BrowsingInstance rather
  // than being stored on SiteInstanceGroup. Even though `browsing_instance` has
  // gone out of scope here, it has not been destructed since it is kept alive
  // by a scoped_refptr to it in `group`.
  // Note that if this test fails, and the SiteInstanceGroup does outlive the
  // BrowsingInstance (i.e. in the case SiteInstanceGroup holds
  // `browsing_instance_` as a raw pointer, its value will be nullptr here), it
  // will only fail on an ASAN build. In other builds, it will still pass and be
  // a use-after-free.
  EXPECT_EQ(browsing_instance_id, group->browsing_instance_id());
}

}  // namespace content
