// Copyright 2014 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 EXTENSIONS_BROWSER_EXTENSION_PROTOCOLS_H_
#define EXTENSIONS_BROWSER_EXTENSION_PROTOCOLS_H_

#include <memory>
#include <string>

#include "base/callback.h"
#include "base/memory/ref_counted.h"
#include "services/metrics/public/cpp/ukm_source_id.h"
#include "services/network/public/mojom/url_loader_factory.mojom.h"

namespace base {
class FilePath;
}

namespace content {
class BrowserContext;
}

namespace net {
class HttpResponseHeaders;
}

namespace extensions {

using ExtensionProtocolTestHandler =
    base::RepeatingCallback<void(base::FilePath* directory_path,
                                 base::FilePath* relative_path)>;

// Allows tests to set a special handler for chrome-extension:// urls. Note
// that this goes through all the normal security checks; it's essentially a
// way to map extra resources to be included in extensions.
void SetExtensionProtocolTestHandler(ExtensionProtocolTestHandler* handler);

// Creates a new network::mojom::URLLoaderFactory implementation suitable for
// handling navigation requests to extension URLs.
mojo::PendingRemote<network::mojom::URLLoaderFactory>
CreateExtensionNavigationURLLoaderFactory(
    content::BrowserContext* browser_context,
    ukm::SourceIdObj ukm_source_id,
    bool is_web_view_request);

// Creates a new network::mojom::URLLoaderFactory implementation suitable for
// handling dedicated/shared worker main script requests initiated by the
// browser process to extension URLs.
mojo::PendingRemote<network::mojom::URLLoaderFactory>
CreateExtensionWorkerMainResourceURLLoaderFactory(
    content::BrowserContext* browser_context);

// Creates a new network::mojom::URLLoaderFactory implementation suitable for
// handling service worker main/imported script requests initiated by the
// browser process to extension URLs when PlzServiceWorker is enabled or during
// service worker update check.
mojo::PendingRemote<network::mojom::URLLoaderFactory>
CreateExtensionServiceWorkerScriptURLLoaderFactory(
    content::BrowserContext* browser_context);

// Creates a network::mojom::URLLoaderFactory implementation suitable for
// handling subresource requests for extension URLs for the frame identified by
// |render_process_id| and |render_frame_id|.
// This function can also be used to make a factory for other non-subresource
// requests to extension URLs, such as for the service worker script when
// starting a service worker. In that case, render_frame_id will be
// MSG_ROUTING_NONE.
mojo::PendingRemote<network::mojom::URLLoaderFactory>
CreateExtensionURLLoaderFactory(int render_process_id, int render_frame_id);

void EnsureExtensionURLLoaderFactoryShutdownNotifierFactoryBuilt();

}  // namespace extensions

#endif  // EXTENSIONS_BROWSER_EXTENSION_PROTOCOLS_H_
