1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86
|
// 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.
#ifndef CHROME_BROWSER_EXTENSIONS_SERVICE_WORKER_APITEST_H_
#define CHROME_BROWSER_EXTENSIONS_SERVICE_WORKER_APITEST_H_
#include "chrome/browser/extensions/extension_apitest.h"
#include "chrome/browser/profiles/profile.h"
#include "content/public/common/page_type.h"
#include "extensions/browser/process_manager.h"
class GURL;
namespace blink {
class StorageKey;
} // namespace blink
namespace content {
class WebContents;
} // namespace content
namespace extensions {
class ServiceWorkerTest : public ExtensionApiTest {
public:
ServiceWorkerTest(const ServiceWorkerTest&) = delete;
ServiceWorkerTest& operator=(const ServiceWorkerTest&) = delete;
protected:
ServiceWorkerTest() = default;
~ServiceWorkerTest() override = default;
void SetUpOnMainThread() override;
// Returns the ProcessManager for the test's profile.
ProcessManager* process_manager() { return ProcessManager::Get(profile()); }
// Starts running a test from the background page test extension.
//
// This registers a service worker with `script_name`, and fetches the
// registration result.
const Extension* StartTestFromBackgroundPage(const char* script_name);
// Navigates the browser to a new tab at `url`, waits for it to load, then
// returns it.
content::WebContents* Navigate(const GURL& url);
// Navigates the browser to `url` and returns the new tab's page type.
content::PageType NavigateAndGetPageType(const GURL& url);
// Extracts the innerText from `contents`.
std::string ExtractInnerText(content::WebContents* contents);
// Navigates the browser to `url`, then returns the innerText of the new
// tab's WebContents' main frame.
std::string NavigateAndExtractInnerText(const GURL& url);
size_t GetWorkerRefCount(const blink::StorageKey& key);
};
class ServiceWorkerBasedBackgroundTest : public ServiceWorkerTest {
public:
ServiceWorkerBasedBackgroundTest() = default;
ServiceWorkerBasedBackgroundTest(const ServiceWorkerBasedBackgroundTest&) =
delete;
ServiceWorkerBasedBackgroundTest& operator=(
const ServiceWorkerBasedBackgroundTest&) = delete;
~ServiceWorkerBasedBackgroundTest() override = default;
void SetUpOnMainThread() override;
// Returns the only running worker id for `extension_id`.
// Returns std::nullopt if there isn't any worker running or more than one
// worker is running for `extension_id`.
std::optional<WorkerId> GetUniqueRunningWorkerId(
const ExtensionId& extension_id);
bool ExtensionHasRenderProcessHost(const ExtensionId& extension_id);
};
} // namespace extensions
#endif // CHROME_BROWSER_EXTENSIONS_SERVICE_WORKER_APITEST_H_
|