mirror of
https://github.com/lightpanda-io/browser.git
synced 2026-03-22 04:34:44 +00:00
implement storage size limit per origin
This commit is contained in:
@@ -60,6 +60,9 @@ pub const Bucket = struct { local: Lookup = .{}, session: Lookup = .{} };
|
|||||||
|
|
||||||
pub const Lookup = struct {
|
pub const Lookup = struct {
|
||||||
_data: std.StringHashMapUnmanaged([]const u8) = .empty,
|
_data: std.StringHashMapUnmanaged([]const u8) = .empty,
|
||||||
|
_size: usize = 0,
|
||||||
|
|
||||||
|
const max_size = 5 * 1024 * 1024;
|
||||||
|
|
||||||
pub fn getItem(self: *const Lookup, key_: ?[]const u8) ?[]const u8 {
|
pub fn getItem(self: *const Lookup, key_: ?[]const u8) ?[]const u8 {
|
||||||
const k = key_ orelse return null;
|
const k = key_ orelse return null;
|
||||||
@@ -69,6 +72,11 @@ pub const Lookup = struct {
|
|||||||
pub fn setItem(self: *Lookup, key_: ?[]const u8, value: []const u8, page: *Page) !void {
|
pub fn setItem(self: *Lookup, key_: ?[]const u8, value: []const u8, page: *Page) !void {
|
||||||
const k = key_ orelse return;
|
const k = key_ orelse return;
|
||||||
|
|
||||||
|
if (self._size + value.len > max_size) {
|
||||||
|
return error.QuotaExceeded;
|
||||||
|
}
|
||||||
|
defer self._size += value.len;
|
||||||
|
|
||||||
const key_owned = try page.dupeString(k);
|
const key_owned = try page.dupeString(k);
|
||||||
const value_owned = try page.dupeString(value);
|
const value_owned = try page.dupeString(value);
|
||||||
|
|
||||||
@@ -112,7 +120,7 @@ pub const Lookup = struct {
|
|||||||
|
|
||||||
pub const length = bridge.accessor(Lookup.getLength, null, .{});
|
pub const length = bridge.accessor(Lookup.getLength, null, .{});
|
||||||
pub const getItem = bridge.function(Lookup.getItem, .{});
|
pub const getItem = bridge.function(Lookup.getItem, .{});
|
||||||
pub const setItem = bridge.function(Lookup.setItem, .{});
|
pub const setItem = bridge.function(Lookup.setItem, .{ .dom_exception = true });
|
||||||
pub const removeItem = bridge.function(Lookup.removeItem, .{});
|
pub const removeItem = bridge.function(Lookup.removeItem, .{});
|
||||||
pub const clear = bridge.function(Lookup.clear, .{});
|
pub const clear = bridge.function(Lookup.clear, .{});
|
||||||
pub const key = bridge.function(Lookup.key, .{});
|
pub const key = bridge.function(Lookup.key, .{});
|
||||||
|
|||||||
Reference in New Issue
Block a user