-
-
Notifications
You must be signed in to change notification settings - Fork 36
/
browser_context.rb
113 lines (98 loc) · 3.49 KB
/
browser_context.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
class Puppeteer::BrowserContext
include Puppeteer::EventCallbackable
using Puppeteer::DefineAsyncMethod
# @param {!Puppeteer.Connection} connection
# @param {!Browser} browser
# @param {?string} contextId
def initialize(connection, browser, context_id)
@connection = connection
@browser = browser
@id = context_id
end
# @param event_name [Symbol] either of :disconnected, :targetcreated, :targetchanged, :targetdestroyed
def on(event_name, &block)
unless Events::BrowserContext.values.include?(event_name.to_s)
raise ArgumentError.new("Unknown event name: #{event_name}. Known events are #{Events::BrowserContext.values.to_a.join(", ")}")
end
super(event_name.to_s, &block)
end
# @param event_name [Symbol]
def once(event_name, &block)
unless Events::BrowserContext.values.include?(event_name.to_s)
raise ArgumentError.new("Unknown event name: #{event_name}. Known events are #{Events::BrowserContext.values.to_a.join(", ")}")
end
super(event_name.to_s, &block)
end
# @return {!Array<!Target>} target
def targets
@browser.targets.select { |target| target.browser_context == self }
end
# @param predicate [Proc(Puppeteer::Target -> Boolean)]
# @return [Puppeteer::Target]
def wait_for_target(predicate:, timeout: nil)
@browser.wait_for_target(
predicate: ->(target) { target.browser_context == self && predicate.call(target) },
timeout: timeout,
)
end
# @!method async_wait_for_target(predicate:, timeout: nil)
#
# @param predicate [Proc(Puppeteer::Target -> Boolean)]
define_async_method :async_wait_for_target
# @return {!Promise<!Array<!Puppeteer.Page>>}
def pages
targets.select { |target| target.type == 'page' }.map(&:page).reject { |page| !page }
end
def incognito?
!!@id
end
# /**
# * @param {string} origin
# * @param {!Array<string>} permissions
# */
# async overridePermissions(origin, permissions) {
# const webPermissionToProtocol = new Map([
# ['geolocation', 'geolocation'],
# ['midi', 'midi'],
# ['notifications', 'notifications'],
# ['push', 'push'],
# ['camera', 'videoCapture'],
# ['microphone', 'audioCapture'],
# ['background-sync', 'backgroundSync'],
# ['ambient-light-sensor', 'sensors'],
# ['accelerometer', 'sensors'],
# ['gyroscope', 'sensors'],
# ['magnetometer', 'sensors'],
# ['accessibility-events', 'accessibilityEvents'],
# ['clipboard-read', 'clipboardRead'],
# ['clipboard-write', 'clipboardWrite'],
# ['payment-handler', 'paymentHandler'],
# // chrome-specific permissions we have.
# ['midi-sysex', 'midiSysex'],
# ]);
# permissions = permissions.map(permission => {
# const protocolPermission = webPermissionToProtocol.get(permission);
# if (!protocolPermission)
# throw new Error('Unknown permission: ' + permission);
# return protocolPermission;
# });
# await this._connection.send('Browser.grantPermissions', {origin, browserContextId: this._id || undefined, permissions});
# }
# async clearPermissionOverrides() {
# await this._connection.send('Browser.resetPermissions', {browserContextId: this._id || undefined});
# }
# @return [Future<Puppeteer::Page>]
def new_page
@browser.create_page_in_context(@id)
end
# @return [Browser]
def browser
@browser
end
def close
unless @id
raise 'Non-incognito profiles cannot be closed!'
end
@browser.dispose_context(@id)
end
end