blob: 0756676c4a9a7075e285218ee8b0f17c69d7d98e [file] [log] [blame]
// Copyright 2024 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef EXTENSIONS_BROWSER_API_STORAGE_STORAGE_UTILS_H_
#define EXTENSIONS_BROWSER_API_STORAGE_STORAGE_UTILS_H_
#include "content/public/browser/browser_context.h"
#include "extensions/browser/api/storage/session_storage_manager.h"
#include "extensions/browser/api/storage/storage_area_namespace.h"
#include "extensions/common/api/storage.h"
#include "extensions/common/extension_id.h"
namespace content {
class RenderFrameHost;
class RenderProcessHost;
} // namespace content
namespace extensions::storage_utils {
// Returns the session storage access level for `extension_id`.
api::storage::AccessLevel GetAccessLevelForArea(
const ExtensionId& extension_id,
content::BrowserContext& browser_context,
StorageAreaNamespace storage_area);
// Sets the session storage access level for `extension_id` to `access_level`.
void SetAccessLevelForArea(const ExtensionId& extension_id,
content::BrowserContext& browser_context,
StorageAreaNamespace storage_area,
api::storage::AccessLevel access_level);
// Returns a nested dictionary Value converted from a ValueChange.
base::Value ValueChangeToValue(
std::vector<SessionStorageManager::ValueChange> changes);
// Returns true if `render_frame_host` should be able to access `storage_area`
// for `extension`. If `storage_area` is not present, skips access level checks
// and only checks that the extension has the storage permission and has run in
// this context.
bool CanRendererAccessExtensionStorage(
content::BrowserContext& browser_context,
const Extension& extension,
std::optional<StorageAreaNamespace> storage_area,
content::RenderFrameHost* render_frame_host,
content::RenderProcessHost& render_process_host);
} // namespace extensions::storage_utils
#endif // EXTENSIONS_BROWSER_API_STORAGE_STORAGE_UTILS_H_