Class: Dommy::Permissions

Inherits:
Object
  • Object
show all
Includes:
Bridge::Methods
Defined in:
lib/dommy/navigator.rb

Overview

navigator.permissions — query returns a PermissionStatus whose state defaults to "granted" for every recognized name. Tests can override via permissions.set("name", "denied") before exercising user code.

Constant Summary collapse

KNOWN_NAMES =
%w[
geolocation
notifications
push
midi
camera
microphone
clipboard-read
clipboard-write
background-fetch
background-sync
persistent-storage
accelerometer
gyroscope
magnetometer
screen-wake-lock
storage-access
window-management
    ]
.freeze

Instance Method Summary collapse

Methods included from Bridge::Methods

included

Constructor Details

#initialize(window) ⇒ Permissions

Returns a new instance of Permissions.



255
256
257
258
# File 'lib/dommy/navigator.rb', line 255

def initialize(window)
  @window = window
  @overrides = {}
end

Instance Method Details

#__js_call__(method, args) ⇒ Object



295
296
297
298
299
300
# File 'lib/dommy/navigator.rb', line 295

def __js_call__(method, args)
  case method
  when "query"
    query(args[0])
  end
end

#__js_get__(_key) ⇒ Object



285
286
287
# File 'lib/dommy/navigator.rb', line 285

def __js_get__(_key)
  nil
end

#__js_set__(_key, _value) ⇒ Object



289
290
291
# File 'lib/dommy/navigator.rb', line 289

def __js_set__(_key, _value)
  Bridge::UNHANDLED
end

#query(descriptor) ⇒ Object



272
273
274
275
276
277
278
279
280
281
282
283
# File 'lib/dommy/navigator.rb', line 272

def query(descriptor)
  name = if descriptor.is_a?(Hash)
    (descriptor["name"] || descriptor[:name]).to_s
  else
    descriptor.to_s
  end

  state = @overrides[name] || "granted"
  @statuses ||= {}
  status = @statuses[name] ||= PermissionStatus.new(@window, name, state)
  PromiseValue.resolve(@window, status)
end

#set(name, state) ⇒ Object

Test helper: override the resolved state for a permission name. Subsequent query() calls will see the new value, and existing PermissionStatus objects fire change events.



263
264
265
266
267
268
269
270
# File 'lib/dommy/navigator.rb', line 263

def set(name, state)
  key = name.to_s
  @overrides[key] = state.to_s
  @statuses ||= {}
  status = @statuses[key]
  status&.__internal_set_state__(state.to_s)
  nil
end