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

#include "base/files/file_path.h"
#include "base/functional/callback_helpers.h"
#include "chrome/browser/extensions/extension_apitest.h"
#include "content/public/test/browser_test.h"
#include "extensions/browser/extension_host.h"
#include "extensions/browser/process_manager.h"
#include "extensions/test/extension_background_page_waiter.h"
#include "extensions/test/extension_test_message_listener.h"

namespace extensions {

// This tests an extension that starts a shared worker.
IN_PROC_BROWSER_TEST_F(ExtensionApiTest, SharedWorker) {
  EXPECT_TRUE(RunExtensionTest("shared_worker/basic")) << message_;
}

// This tests an extension that is controlled by a service worker and starts a
// shared worker. The requests for the shared worker scripts and the requests
// initiated by the shared worker should be seen by the service worker.
IN_PROC_BROWSER_TEST_F(ExtensionApiTest,
                       SharedWorker_ControlledByServiceWorker) {
  // Load the extension. It will register a service worker.
  ExtensionTestMessageListener listener("READY");
  listener.set_failure_message("FAIL");
  const Extension* extension = LoadExtension(
      test_data_dir_.AppendASCII("shared_worker/service_worker_controlled"));
  EXPECT_TRUE(listener.WaitUntilSatisfied());
  EXPECT_TRUE(extension);
  ProcessManager* process_manager = ProcessManager::Get(profile());
  ExtensionHost* background_page =
      process_manager->GetBackgroundHostForExtension(extension->id());

  // Close the background page and start it again, so it is controlled
  // by the service worker.
  ExtensionTestMessageListener listener2("CONTROLLED");
  listener2.set_failure_message("FAIL");
  background_page->Close();
  ExtensionBackgroundPageWaiter(profile(), *extension)
      .WaitForBackgroundClosed();
  background_page = nullptr;
  process_manager->WakeEventPage(extension->id(), base::DoNothing());
  ExtensionBackgroundPageWaiter(profile(), *extension).WaitForBackgroundOpen();
  EXPECT_TRUE(listener2.WaitUntilSatisfied());

  // The background page should conduct the tests.
  ExtensionTestMessageListener listener3("PASS");
  listener3.set_failure_message("FAIL");
  EXPECT_TRUE(listener3.WaitUntilSatisfied());
}

}  // namespace extensions
