Skip to content

Commit 39dec02

Browse files
committed
[rb] implement endpoint for adding permissions in Chrome
1 parent 5eaa6e4 commit 39dec02

File tree

7 files changed

+100
-12
lines changed

7 files changed

+100
-12
lines changed

rb/lib/selenium/webdriver/chrome/driver.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ class Driver < WebDriver::Driver
3434
DriverExtensions::HasWebStorage,
3535
DriverExtensions::HasLaunching,
3636
DriverExtensions::HasLocation,
37+
DriverExtensions::HasPermissions,
3738
DriverExtensions::DownloadsFiles,
3839
DriverExtensions::HasDevTools,
3940
DriverExtensions::HasAuthentication,

rb/lib/selenium/webdriver/chrome/features.rb

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ module Features
3232
get_network_conditions: [:get, 'session/:session_id/chromium/network_conditions'],
3333
set_network_conditions: [:post, 'session/:session_id/chromium/network_conditions'],
3434
delete_network_conditions: [:delete, 'session/:session_id/chromium/network_conditions'],
35+
set_permission: [:post, 'session/:session_id/permissions'],
3536
send_command: [:post, 'session/:session_id/goog/cdp/execute'],
3637
get_available_log_types: [:get, 'session/:session_id/se/log/types'],
3738
get_log: [:post, 'session/:session_id/se/log']
@@ -65,6 +66,10 @@ def stop_casting(name)
6566
execute :stop_casting, {}, {sinkName: name}
6667
end
6768

69+
def set_permission(name, value)
70+
execute :set_permission, {}, {descriptor: {name: name}, state: value}
71+
end
72+
6873
def network_conditions
6974
execute :get_network_conditions
7075
end

rb/lib/selenium/webdriver/common.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@
5858
require 'selenium/webdriver/common/driver_extensions/has_network_conditions'
5959
require 'selenium/webdriver/common/driver_extensions/has_network_connection'
6060
require 'selenium/webdriver/common/driver_extensions/has_network_interception'
61+
require 'selenium/webdriver/common/driver_extensions/has_apple_permissions'
6162
require 'selenium/webdriver/common/driver_extensions/has_permissions'
6263
require 'selenium/webdriver/common/driver_extensions/has_debugger'
6364
require 'selenium/webdriver/common/driver_extensions/prints_page'
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
# frozen_string_literal: true
2+
3+
# Licensed to the Software Freedom Conservancy (SFC) under one
4+
# or more contributor license agreements. See the NOTICE file
5+
# distributed with this work for additional information
6+
# regarding copyright ownership. The SFC licenses this file
7+
# to you under the Apache License, Version 2.0 (the
8+
# "License"); you may not use this file except in compliance
9+
# with the License. You may obtain a copy of the License at
10+
#
11+
# http://www.apache.org/licenses/LICENSE-2.0
12+
#
13+
# Unless required by applicable law or agreed to in writing,
14+
# software distributed under the License is distributed on an
15+
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16+
# KIND, either express or implied. See the License for the
17+
# specific language governing permissions and limitations
18+
# under the License.
19+
20+
module Selenium
21+
module WebDriver
22+
module DriverExtensions
23+
module HasApplePermissions
24+
25+
#
26+
# Returns permissions.
27+
#
28+
# @return [Hash]
29+
#
30+
31+
def permissions
32+
@bridge.permissions
33+
end
34+
35+
#
36+
# Sets permissions.
37+
#
38+
# @example
39+
# driver.permissions = {'getUserMedia' => true}
40+
#
41+
# @param [Hash<Symbol, Boolean>] permissions
42+
#
43+
44+
def permissions=(permissions)
45+
@bridge.permissions = permissions
46+
end
47+
48+
end # HasPermissions
49+
end # DriverExtensions
50+
end # WebDriver
51+
end # Selenium

rb/lib/selenium/webdriver/common/driver_extensions/has_permissions.rb

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -23,26 +23,26 @@ module DriverExtensions
2323
module HasPermissions
2424

2525
#
26-
# Returns permissions.
26+
# Set one permission.
2727
#
28-
# @return [Hash]
28+
# @param [String] name which permission to set
29+
# @param [String] value what to set the permission to
2930
#
3031

31-
def permissions
32-
@bridge.permissions
32+
def add_permission(name, value)
33+
@bridge.set_permission(name, value)
3334
end
3435

3536
#
36-
# Sets permissions.
37+
# Set multiple permissions.
3738
#
38-
# @example
39-
# driver.permissions = {'getUserMedia' => true}
40-
#
41-
# @param [Hash<Symbol, Boolean>] permissions
39+
# @param [Hash] opt key/value pairs to set permissions
4240
#
4341

44-
def permissions=(permissions)
45-
@bridge.permissions = permissions
42+
def add_permissions(opt)
43+
opt.each do |key, value|
44+
@bridge.set_permission(key, value)
45+
end
4646
end
4747

4848
end # HasPermissions

rb/lib/selenium/webdriver/safari/driver.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ module Safari
2828

2929
class Driver < WebDriver::Driver
3030
EXTENSIONS = [DriverExtensions::HasDebugger,
31-
DriverExtensions::HasPermissions,
31+
DriverExtensions::HasApplePermissions,
3232
DriverExtensions::HasWebStorage].freeze
3333

3434
def browser

rb/spec/integration/selenium/webdriver/chrome/driver_spec.rb

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,36 @@ module Chrome
151151
driver.stop_casting(device_name)
152152
end
153153
end
154+
155+
def get_permission(name)
156+
driver.execute_async_script("callback = arguments[arguments.length - 1];" \
157+
"callback(navigator.permissions.query({name: arguments[0]}));", name)['state']
158+
end
159+
160+
it 'can set single permissions' do
161+
driver.navigate.to url_for('xhtmlTest.html')
162+
163+
expect(get_permission('clipboard-read')).to eq('prompt')
164+
expect(get_permission('clipboard-write')).to eq('granted')
165+
166+
driver.add_permission('clipboard-read', 'denied')
167+
driver.add_permission('clipboard-write', 'prompt')
168+
169+
expect(get_permission('clipboard-read')).to eq('denied')
170+
expect(get_permission('clipboard-write')).to eq('prompt')
171+
end
172+
173+
it 'can set multiple permissions' do
174+
driver.navigate.to url_for('xhtmlTest.html')
175+
176+
expect(get_permission('clipboard-read')).to eq('prompt')
177+
expect(get_permission('clipboard-write')).to eq('granted')
178+
179+
driver.add_permissions('clipboard-read' => 'denied','clipboard-write' => 'prompt')
180+
181+
expect(get_permission('clipboard-read')).to eq('denied')
182+
expect(get_permission('clipboard-write')).to eq('prompt')
183+
end
154184
end
155185
end # Chrome
156186
end # WebDriver

0 commit comments

Comments
 (0)