1
0
mirror of https://github.com/MontFerret/ferret.git synced 2025-04-21 12:16:53 +02:00
ferret/pkg/drivers/cdp/dom/frame.go

131 lines
2.0 KiB
Go
Raw Normal View History

package dom
import (
"sync"
"github.com/mafredri/cdp/protocol/page"
)
type (
Frame struct {
tree page.FrameTree
node *HTMLDocument
ready bool
}
AtomicFrameID struct {
mu sync.Mutex
value page.FrameID
}
AtomicFrameCollection struct {
mu sync.Mutex
value map[page.FrameID]Frame
}
)
func NewAtomicFrameID() *AtomicFrameID {
return &AtomicFrameID{}
}
func (id *AtomicFrameID) Get() page.FrameID {
id.mu.Lock()
defer id.mu.Unlock()
return id.value
}
func (id *AtomicFrameID) Set(value page.FrameID) {
id.mu.Lock()
defer id.mu.Unlock()
id.value = value
}
func (id *AtomicFrameID) Reset() {
id.mu.Lock()
defer id.mu.Unlock()
id.value = ""
}
func (id *AtomicFrameID) IsEmpty() bool {
id.mu.Lock()
defer id.mu.Unlock()
return id.value == ""
}
func NewAtomicFrameCollection() *AtomicFrameCollection {
return &AtomicFrameCollection{
value: make(map[page.FrameID]Frame),
}
}
func (fc *AtomicFrameCollection) Length() int {
fc.mu.Lock()
defer fc.mu.Unlock()
return len(fc.value)
}
func (fc *AtomicFrameCollection) ForEach(predicate func(value Frame, key page.FrameID) bool) {
fc.mu.Lock()
defer fc.mu.Unlock()
for k, v := range fc.value {
if predicate(v, k) == false {
break
}
}
}
func (fc *AtomicFrameCollection) Has(key page.FrameID) bool {
fc.mu.Lock()
defer fc.mu.Unlock()
_, ok := fc.value[key]
return ok
}
func (fc *AtomicFrameCollection) Get(key page.FrameID) (Frame, bool) {
fc.mu.Lock()
defer fc.mu.Unlock()
found, ok := fc.value[key]
if ok {
return found, ok
}
return Frame{}, false
}
func (fc *AtomicFrameCollection) Set(key page.FrameID, value Frame) {
fc.mu.Lock()
defer fc.mu.Unlock()
fc.value[key] = value
}
func (fc *AtomicFrameCollection) Remove(key page.FrameID) {
fc.mu.Lock()
defer fc.mu.Unlock()
delete(fc.value, key)
}
func (fc *AtomicFrameCollection) ToSlice() []Frame {
fc.mu.Lock()
defer fc.mu.Unlock()
slice := make([]Frame, 0, len(fc.value))
for _, v := range fc.value {
slice = append(slice, v)
}
return slice
}