webkit_remote 0.4.1 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 95ab18456b034195d0905cf56ab3a5d7915ce186
4
+ data.tar.gz: fc8dad063ba5493c45e6ff9017b9c954d1a09453
5
+ SHA512:
6
+ metadata.gz: 8170978254202fcfba7393ceeb536292302d1c4710ac6e77d03f271e0faccd0ccc5a9fcdf58549edbe342301a2af241c0eab0822845444dc9f64d09ae9fc35c2
7
+ data.tar.gz: 90c803cb8956bc3da08a4c474aae08f80632528b4f5f3dbdaff555845150724ad4681530a2acd1a7034687d19770daa332dda2c9563df439ee309f7ba03db6d8
data/.travis.yml CHANGED
@@ -1,8 +1,10 @@
1
1
  language: ruby
2
2
  rvm:
3
3
  - 1.9.3
4
+ - 2.0.0
5
+ - 2.1.0
4
6
  before_install:
5
- - "sudo sh -c \"echo \\\"deb https://dl.google.com/linux/deb/ stable main\\\" >> /etc/apt/sources.list\""
7
+ - "sudo sh -c \"echo \\\"deb http://dl.google.com/linux/deb/ stable main\\\" >> /etc/apt/sources.list\""
6
8
  - "sudo wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | sudo apt-key add -"
7
9
  - "sudo apt-get -qq update"
8
10
  - "sudo apt-get -qq install google-chrome-stable"
data/Gemfile CHANGED
@@ -1,18 +1,16 @@
1
1
  source 'http://rubygems.org'
2
- gem 'eventmachine', '>= 1.0.0'
3
- gem 'faye-websocket', '>= 0.4.6'
4
- gem 'posix-spawn', '>= 0.3.6'
2
+ gem 'ws_sync_client', '>= 0.1.1'
3
+ gem 'posix-spawn', '>= 0.3.8'
5
4
 
6
5
  group :development do
7
- gem 'bundler', '>= 1.2.1'
8
- gem 'debugger', '>= 1.2.1'
9
- gem 'jeweler', '>= 1.8.4'
10
- gem 'minitest', '>= 4.1.0'
11
- gem 'puma', '>= 1.6.3'
12
- gem 'rack', '>= 1.4.1'
6
+ gem 'bundler', '>= 1.5.3'
7
+ gem 'debugger', '>= 1.6.6'
8
+ gem 'jeweler', '>= 2.0.1'
9
+ gem 'minitest', '>= 5.3.0'
10
+ gem 'puma', '>= 2.8.0'
11
+ gem 'rack', '>= 1.5.2'
13
12
  gem 'rack-contrib', '>= 1.1.0'
14
- gem 'rdoc', '>= 3.12'
15
- gem 'ruby-prof', '>= 0.11.2'
16
- gem 'simplecov', '>= 0.7.1'
17
- gem 'yard', '>= 0.8.3'
13
+ gem 'rdoc', '>= 4.1.1'
14
+ gem 'simplecov', '>= 0.8.2'
15
+ gem 'yard', '>= 0.8.7.3'
18
16
  end
data/Gemfile.lock CHANGED
@@ -1,57 +1,89 @@
1
1
  GEM
2
2
  remote: http://rubygems.org/
3
3
  specs:
4
+ addressable (2.3.5)
5
+ builder (3.2.2)
4
6
  columnize (0.3.6)
5
- debugger (1.2.1)
7
+ debugger (1.6.6)
6
8
  columnize (>= 0.3.1)
7
- debugger-linecache (~> 1.1.1)
8
- debugger-ruby_core_source (~> 1.1.4)
9
- debugger-linecache (1.1.2)
10
- debugger-ruby_core_source (>= 1.1.1)
11
- debugger-ruby_core_source (1.1.4)
12
- eventmachine (1.0.0)
13
- faye-websocket (0.4.6)
14
- eventmachine (>= 0.12.0)
15
- git (1.2.5)
16
- jeweler (1.8.4)
17
- bundler (~> 1.0)
9
+ debugger-linecache (~> 1.2.0)
10
+ debugger-ruby_core_source (~> 1.3.2)
11
+ debugger-linecache (1.2.0)
12
+ debugger-ruby_core_source (1.3.2)
13
+ descendants_tracker (0.0.3)
14
+ docile (1.1.3)
15
+ faraday (0.9.0)
16
+ multipart-post (>= 1.2, < 3)
17
+ git (1.2.6)
18
+ github_api (0.11.3)
19
+ addressable (~> 2.3)
20
+ descendants_tracker (~> 0.0.1)
21
+ faraday (~> 0.8, < 0.10)
22
+ hashie (>= 1.2)
23
+ multi_json (>= 1.7.5, < 2.0)
24
+ nokogiri (~> 1.6.0)
25
+ oauth2
26
+ hashie (2.0.5)
27
+ highline (1.6.21)
28
+ jeweler (2.0.1)
29
+ builder
30
+ bundler (>= 1.0)
18
31
  git (>= 1.2.5)
32
+ github_api
33
+ highline (>= 1.6.15)
34
+ nokogiri (>= 1.5.10)
19
35
  rake
20
36
  rdoc
21
- json (1.7.5)
22
- minitest (4.2.0)
23
- multi_json (1.3.7)
24
- posix-spawn (0.3.6)
25
- puma (1.6.3)
37
+ json (1.8.1)
38
+ jwt (0.1.11)
39
+ multi_json (>= 1.5)
40
+ mini_portile (0.5.2)
41
+ minitest (5.3.1)
42
+ multi_json (1.9.0)
43
+ multi_xml (0.5.5)
44
+ multipart-post (2.0.0)
45
+ nokogiri (1.6.1)
46
+ mini_portile (~> 0.5.0)
47
+ oauth2 (0.9.3)
48
+ faraday (>= 0.8, < 0.10)
49
+ jwt (~> 0.1.8)
50
+ multi_json (~> 1.3)
51
+ multi_xml (~> 0.5)
26
52
  rack (~> 1.2)
27
- rack (1.4.1)
53
+ posix-spawn (0.3.8)
54
+ puma (2.8.1)
55
+ rack (>= 1.1, < 2.0)
56
+ rack (1.5.2)
28
57
  rack-contrib (1.1.0)
29
58
  rack (>= 0.9.1)
30
- rake (10.0.1)
31
- rdoc (3.12)
59
+ rake (10.1.1)
60
+ rdoc (4.1.1)
32
61
  json (~> 1.4)
33
- ruby-prof (0.11.2)
34
- simplecov (0.7.1)
35
- multi_json (~> 1.0)
36
- simplecov-html (~> 0.7.1)
37
- simplecov-html (0.7.1)
38
- yard (0.8.3)
62
+ simplecov (0.8.2)
63
+ docile (~> 1.1.0)
64
+ multi_json
65
+ simplecov-html (~> 0.8.0)
66
+ simplecov-html (0.8.0)
67
+ websocket (1.1.2)
68
+ websocket-native (1.0.0)
69
+ ws_sync_client (0.1.1)
70
+ websocket (>= 1.1.2)
71
+ websocket-native (>= 1.0.0)
72
+ yard (0.8.7.3)
39
73
 
40
74
  PLATFORMS
41
75
  ruby
42
76
 
43
77
  DEPENDENCIES
44
- bundler (>= 1.2.1)
45
- debugger (>= 1.2.1)
46
- eventmachine (>= 1.0.0)
47
- faye-websocket (>= 0.4.6)
48
- jeweler (>= 1.8.4)
49
- minitest (>= 4.1.0)
50
- posix-spawn (>= 0.3.6)
51
- puma (>= 1.6.3)
52
- rack (>= 1.4.1)
78
+ bundler (>= 1.5.3)
79
+ debugger (>= 1.6.6)
80
+ jeweler (>= 2.0.1)
81
+ minitest (>= 5.3.0)
82
+ posix-spawn (>= 0.3.8)
83
+ puma (>= 2.8.0)
84
+ rack (>= 1.5.2)
53
85
  rack-contrib (>= 1.1.0)
54
- rdoc (>= 3.12)
55
- ruby-prof (>= 0.11.2)
56
- simplecov (>= 0.7.1)
57
- yard (>= 0.8.3)
86
+ rdoc (>= 4.1.1)
87
+ simplecov (>= 0.8.2)
88
+ ws_sync_client (>= 0.1.1)
89
+ yard (>= 0.8.7.3)
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.4.1
1
+ 0.5.0
@@ -66,6 +66,10 @@ class Browser
66
66
  debug_url = json_tab['webSocketDebuggerUrl']
67
67
  Tab.new self, debug_url, title: title, url: url
68
68
  end
69
+ # HACK(pwnall): work around the nasty Google Hangouts integration
70
+ tabs.select do |tab|
71
+ tab.url != 'chrome-extension://nkeimhogjdpnpccoofpliimaahmaaome/background.html'
72
+ end
69
73
  end
70
74
 
71
75
  # @return [Boolean] if true, a WebkitRemote::Process will be stopped when
@@ -104,55 +104,6 @@ class NetworkCacheHit < WebkitRemote::Event
104
104
  end
105
105
  end # class WebkitRemote::Event::NetworkCacheHit
106
106
 
107
- # Emitted when a resource is served from the local cache.
108
- class NetworkMemoryCacheHit < WebkitRemote::Event
109
- register 'Network.requestServedFromMemoryCache'
110
-
111
- # @return [WebkitRemote::Client::NetworkResource] information about the
112
- # resource fetched by this network operation
113
- attr_reader :resource
114
-
115
- # @return [WebkitRemote::Client::NetworkCacheEntry] cached information used
116
- # to produce the resource
117
- attr_reader :cache_data
118
-
119
- # @return [String] the URL of the document that caused this network request
120
- attr_reader :document_url
121
-
122
- # @return [WebkitRemote::Client::NetworkRequestInitiator] cause for this
123
- # network request
124
- attr_reader :initiator
125
-
126
- # @return [Number] the event timestamp
127
- attr_reader :timestamp
128
-
129
- # @private Use Event#for instead of calling this constructor directly.
130
- def initialize(rpc_event, client)
131
- super
132
-
133
- if raw_data['resource']
134
- @cache_data = WebkitRemote::Client::NetworkCacheEntry.new(
135
- raw_data['resource'])
136
- end
137
- @document_url = raw_data['documentURL']
138
- if raw_data['initiator']
139
- @initiator = WebkitRemote::Client::NetworkRequestInitiator.new(
140
- raw_data['initiator'])
141
- end
142
- @loader_id = raw_data['loaderId']
143
- @timestamp = raw_data['timestamp']
144
-
145
- @resource = client.network_resource raw_data['requestId']
146
- @resource.set_document_url @document_url
147
- @resource.set_initiator @initiator
148
- if @cache_data
149
- @resource.set_response @cache_data.response
150
- @resource.set_type @cache_data.type
151
- end
152
- @resource.add_event self
153
- end
154
- end # class WebkitRemote::Event::NetworkMemoryCacheHit
155
-
156
107
  # Emitted right before a network request.
157
108
  class NetworkRequest < WebkitRemote::Event
158
109
  register 'Network.requestWillBeSent'
@@ -28,12 +28,25 @@ class Process
28
28
  @data_dir = Dir.mktmpdir 'webkit-remote'
29
29
  @pid = nil
30
30
  @xvfb_pid = nil
31
- @cli = chrome_cli opts
31
+ if opts[:window]
32
+ @window = opts[:window]
33
+ else
34
+ @window = { }
35
+ end
32
36
  if opts[:xvfb]
33
37
  @xvfb_cli = xvfb_cli opts
38
+ if opts[:xvfb].respond_to? :[]
39
+ @window[:width] ||= opts[:xvfb][:width]
40
+ @window[:height] ||= opts[:xvfb][:height]
41
+ end
34
42
  else
35
43
  @xvfb_cli = nil
36
44
  end
45
+ @window[:top] ||= 0
46
+ @window[:left] ||= 0
47
+ @window[:width] ||= 256
48
+ @window[:height] ||= 256
49
+ @cli = chrome_cli opts
37
50
  end
38
51
 
39
52
  # Starts the browser process.
@@ -52,7 +65,7 @@ class Process
52
65
  end
53
66
 
54
67
  unless @pid = POSIX::Spawn.spawn(*@cli)
55
- # The launch failed
68
+ # The launch failed.
56
69
  stop
57
70
  return nil
58
71
  end
@@ -135,20 +148,21 @@ class Process
135
148
  [
136
149
  chrome_env(opts),
137
150
  self.class.chrome_binary,
151
+ '--bwsi', # disable extensions, sync, bookmarks
138
152
  '--disable-default-apps', # no bundled apps
139
- '--disable-desktop-shortcuts', # don't mess with the desktop
140
153
  '--disable-extensions', # no extensions
141
- '--disable-internal-flash', # no plugins
142
154
  '--disable-java', # no plugins
143
155
  '--disable-logging', # don't trash stdout / stderr
144
156
  '--disable-plugins', # no native content
145
157
  '--disable-prompt-on-repost', # no confirmation dialog on POST refresh
146
158
  '--disable-sync', # no talking with the Google servers
159
+ '--disable-translate', # no Google Translate calls
147
160
  '--incognito', # don't use old state, don't preserve state
148
161
  '--homepage=about:blank', # don't go to Google in new tabs
149
162
  '--keep-alive-for-test', # don't kill process if the last window dies
150
163
  '--lang=en-US', # set a default language
151
164
  '--log-level=3', # FATAL, because there's no setting for "none"
165
+ '--mute-audio', # don't let the computer make noise
152
166
  '--no-default-browser-check', # don't hang when Chrome isn't default
153
167
  '--no-experiments', # not sure this is useful
154
168
  '--no-first-run', # don't show the help UI
@@ -158,8 +172,9 @@ class Process
158
172
  '--noerrdialogs', # don't hang on error dialogs
159
173
  "--remote-debugging-port=#{@port}", # Webkit remote debugging
160
174
  "--user-data-dir=#{@data_dir}", # really ensure a clean slate
161
- '--window-position=0,0', # remove randomness source
162
- '--window-size=256,256', # remove randomness source
175
+ "--window-position=#{@window[:left]},#{@window[:top]}", # randomness--
176
+ "--window-size=#{@window[:width]},#{@window[:height]}", # randomness--
177
+
163
178
  'about:blank', # don't load the homepage
164
179
  {
165
180
  chdir: @data_dir,
@@ -1,7 +1,5 @@
1
- require 'eventmachine'
2
- require 'faye/websocket'
3
1
  require 'json'
4
- require 'thread'
2
+ require 'ws_sync_client'
5
3
 
6
4
  module WebkitRemote
7
5
 
@@ -17,21 +15,17 @@ class Rpc
17
15
  raise ArgumentError, 'Target tab not specified'
18
16
  end
19
17
  @closed = false
20
- @send_queue = EventMachine::Queue.new
21
- @recv_queue = Queue.new
22
18
  @next_id = 2
23
19
  @events = []
24
20
 
25
- self.class.em_start
26
21
  @debug_url = tab.debug_url
27
- @web_socket = Faye::WebSocket::Client.new @debug_url
28
- setup_web_socket
22
+ @web_socket = WsSyncClient.new @debug_url
29
23
  end
30
24
 
31
25
  # Remote debugging RPC call.
32
26
  #
33
27
  # See the following URL for implemented calls.
34
- # https://developers.google.com/chrome-developer-tools/docs/protocol/1.0/index
28
+ # https://developers.google.com/chrome-developer-tools/docs/protocol/1.1/index
35
29
  #
36
30
  # @param [String] method name of the RPC method to be invoked
37
31
  # @param [Hash<String, Object>, nil] params parameters for the RPC method to
@@ -47,7 +41,7 @@ class Rpc
47
41
  }
48
42
  request[:params] = params if params
49
43
  request_json = JSON.dump request
50
- @send_queue.push request_json
44
+ @web_socket.send_frame request_json
51
45
 
52
46
  loop do
53
47
  result = receive_message request_id
@@ -83,7 +77,6 @@ class Rpc
83
77
  @closed = true
84
78
  @web_socket.close
85
79
  @web_socket = nil
86
- self.class.em_stop
87
80
  self
88
81
  end
89
82
 
@@ -95,39 +88,6 @@ class Rpc
95
88
  # @return [String] points to this client's Webkit remote debugging server
96
89
  attr_reader :debug_url
97
90
 
98
- # Hooks up the event handlers of the WebSocket client.
99
- def setup_web_socket
100
- @web_socket.onopen = lambda do |event|
101
- send_request
102
- @web_socket.onmessage = lambda do |event|
103
- data = event.data
104
- EventMachine.defer do
105
- @recv_queue.push data
106
- end
107
- end
108
- @web_socket.onclose = lambda do |event|
109
- code = event.code
110
- EventMachine.defer do
111
- @recv_queue.push code
112
- end
113
- end
114
- end
115
- end
116
- private :setup_web_socket
117
-
118
- # One iteration of the request sending loop.
119
- #
120
- # RPC requests are JSON-serialized on the sending thread, then pushed into
121
- # the send queue, which is an EventMachine queue. On the reactor thread, the
122
- # serialized message is sent as a WebSocket frame.
123
- def send_request
124
- @send_queue.pop do |json|
125
- @web_socket.send json
126
- send_request
127
- end
128
- end
129
- private :send_request
130
-
131
91
  # Blocks until a WebKit message is received, then parses it.
132
92
  #
133
93
  # RPC notifications are added to the @events array.
@@ -137,11 +97,7 @@ class Rpc
137
97
  # @return [Hash<String, Object>, nil] a Hash containing the RPC result if an
138
98
  # expected RPC response was received; nil if an RPC notice was received
139
99
  def receive_message(expected_id)
140
- json = @recv_queue.pop
141
- unless json.respond_to? :to_str
142
- close
143
- raise RuntimeError, 'The Webkit debugging server closed the WebSocket'
144
- end
100
+ json = @web_socket.recv_frame
145
101
  begin
146
102
  data = JSON.parse json
147
103
  rescue JSONError
@@ -155,7 +111,9 @@ class Rpc
155
111
  raise RuntimeError, 'Out of sequence RPC response id'
156
112
  end
157
113
  if data['error']
158
- raise RuntimeError, "Error #{data['error']['code']}"
114
+ code = data['error']['code']
115
+ message = data['error']['message']
116
+ raise RuntimeError, "RPC Error #{code}: #{message}"
159
117
  end
160
118
  return data['result']
161
119
  elsif data['method']
@@ -169,41 +127,6 @@ class Rpc
169
127
  end
170
128
  end
171
129
  private :receive_message
172
-
173
- # Sets up an EventMachine reactor if necessary.
174
- def self.em_start
175
- @em_start_lock.synchronize do
176
- if @em_clients == 0 and @em_thread.nil?
177
- em_ready = ConditionVariable.new
178
- @em_thread = Thread.new do
179
- EventMachine.run do
180
- @em_start_lock.synchronize { em_ready.signal }
181
- end
182
- end
183
- em_ready.wait @em_start_lock
184
- end
185
- @em_clients += 1
186
- end
187
- end
188
- @em_clients = 0
189
- @em_start_lock = Mutex.new
190
- @em_thread = nil
191
-
192
- # Shuts down an EventMachine reactor if necessary.
193
- def self.em_stop
194
- @em_start_lock.synchronize do
195
- @em_clients -= 1
196
- if @em_clients == 0
197
- if @em_thread
198
- EventMachine.stop_event_loop
199
- # HACK(pwnall): having these in slows down the code a lot
200
- # EventMachine.reactor_thread.join
201
- # @em_thread.join
202
- end
203
- @em_thread = nil
204
- end
205
- end
206
- end
207
130
  end # class WebkitRemote::Rpc
208
131
 
209
- end # namespace webkitRemote
132
+ end # namespace WebkitRemote
@@ -3,6 +3,7 @@ module WebkitRemote
3
3
  # Launches a WebKit process locally, and sets up a debugger client for it.
4
4
  #
5
5
  # @param (see WebkitRemote::Process#initialize)
6
+ # @option (see WebkitRemote::Process#initialize)
6
7
  # @return [WebkitRemote::Client] a debugging client connected to a local
7
8
  # WebKit process; the client will automatically stop the process when
8
9
  # closed
data/test/helper.rb CHANGED
@@ -7,7 +7,7 @@ rescue Bundler::BundlerError => e
7
7
  $stderr.puts "Run `bundle install` to install missing gems"
8
8
  exit e.status_code
9
9
  end
10
- require 'minitest/unit'
10
+ require 'minitest/autorun'
11
11
  require 'minitest/spec'
12
12
 
13
13
  require 'simplecov'
@@ -23,20 +23,35 @@ require 'thread'
23
23
  Thread.abort_on_exception = true
24
24
 
25
25
  # Launch a dev server and wait until it starts.
26
- pid = Process.spawn 'bundle exec puma --port 9969 --quiet --threads 1:1 ' +
27
- 'test/fixtures/config.ru', :in => '/dev/null', :out => '/dev/null'
28
- Process.detach pid
29
- at_exit { Process.kill 'TERM', pid }
30
- loop do
31
- begin
32
- response = Net::HTTP.get_response URI.parse('http://localhost:9969')
33
- break if response.kind_of?(Net::HTTPSuccess)
34
- rescue SystemCallError
35
- sleep 0.1
26
+ module RunPumaInMinitest
27
+ def before_setup
28
+ super
29
+ @_puma_pid = Process.spawn 'bundle exec puma --port 9969 --quiet ' +
30
+ '--threads 1:1 test/fixtures/config.ru', in: '/dev/null',
31
+ out: '/dev/null'
32
+ Process.detach @_puma_pid
33
+
34
+ loop do
35
+ begin
36
+ response = Net::HTTP.get_response URI.parse('http://localhost:9969')
37
+ break if response.kind_of?(Net::HTTPSuccess)
38
+ rescue SystemCallError
39
+ sleep 0.1
40
+ end
41
+ end
42
+ end
43
+
44
+ def after_teardown
45
+ Process.kill 'TERM', @_puma_pid
46
+ super
36
47
  end
37
48
  end
49
+ class MiniTest::Test
50
+ include RunPumaInMinitest
51
+ end
38
52
 
39
- class MiniTest::Unit::TestCase
53
+ #class MiniTest::Test
54
+ class MiniTest::Test
40
55
  # URL for a file in the test/fixtures directory.
41
56
  def fixture_url(name, type = :html)
42
57
  "http://localhost:9969/#{type}/#{name}.#{type}"
@@ -46,5 +61,3 @@ class MiniTest::Unit::TestCase
46
61
  File.join File.dirname(__FILE__), "fixtures/#{type}/#{name}.#{type}"
47
62
  end
48
63
  end
49
-
50
- MiniTest::Unit.autorun
@@ -37,21 +37,6 @@ describe WebkitRemote::Client::JsObject do
37
37
  keys.sort.must_equal ['answer', 'test']
38
38
  end
39
39
 
40
- it 'recognizes writable properties' do
41
- @object.properties['answer'].writable?.must_equal true
42
- @object.properties['constructor'].writable?.must_equal false
43
- end
44
-
45
- it 'recognizes configurable properties' do
46
- @object.properties['answer'].configurable?.must_equal true
47
- @object.properties['constructor'].configurable?.must_equal false
48
- end
49
-
50
- it 'recognizes enumerable properties' do
51
- @object.properties['answer'].enumerable?.must_equal true
52
- @object.properties['constructor'].enumerable?.must_equal false
53
- end
54
-
55
40
  describe 'after property update' do
56
41
  before do
57
42
  @object.properties['DONE']
@@ -73,15 +58,52 @@ describe WebkitRemote::Client::JsObject do
73
58
  end
74
59
  end
75
60
 
76
- describe 'with the XMHttpRequest built-in' do
61
+ describe 'with an object with custom properties' do
77
62
  before :each do
78
- @object = @client.remote_eval 'XMLHttpRequest'
79
- end
80
-
81
- it 'recognizes configurable, non-writable, enumerable properties' do
82
- @object.properties['DONE'].configurable?.must_equal true
83
- @object.properties['DONE'].writable?.must_equal false
84
- @object.properties['DONE'].enumerable?.must_equal true
63
+ @object = @client.remote_eval <<JS_END
64
+ (function() {
65
+ var o = new Object();
66
+ Object.defineProperty(o, 'hidden', {
67
+ enumerable: false, configurable: true,
68
+ get: function() { return 'hidden'; },
69
+ set: function(newValue) { }
70
+ });
71
+ Object.defineProperty(o, 'readOnly', {
72
+ enumerable: true, configurable: true,
73
+ get: function() { return 'hidden'; }
74
+ });
75
+ Object.defineProperty(o, 'writable', {
76
+ enumerable: true, configurable: true, writable: true,
77
+ value: 42
78
+ });
79
+ Object.defineProperty(o, 'fixed', {
80
+ enumerable: true, configurable: false,
81
+ get: function() { return 'hidden'; },
82
+ set: function(newValue) { }
83
+ });
84
+ return o;
85
+ })();
86
+ JS_END
87
+ end
88
+
89
+ it 'recognizes non-writable properties' do
90
+ @object.properties['readOnly'].writable?.must_equal false
91
+ @object.properties['readOnly'].configurable?.must_equal true
92
+ @object.properties['readOnly'].enumerable?.must_equal true
93
+
94
+ @object.properties['writable'].writable?.must_equal true
95
+ @object.properties['writable'].configurable?.must_equal true
96
+ @object.properties['writable'].enumerable?.must_equal true
97
+ end
98
+
99
+ it 'recognizes non-enumerable properties' do
100
+ @object.properties['hidden'].configurable?.must_equal true
101
+ @object.properties['hidden'].enumerable?.must_equal false
102
+ end
103
+
104
+ it 'recognizes non-configurable properties' do
105
+ @object.properties['fixed'].configurable?.must_equal false
106
+ @object.properties['fixed'].enumerable?.must_equal true
85
107
  end
86
108
  end
87
109
  end
@@ -1,12 +1,12 @@
1
1
  require File.expand_path('../../helper.rb', File.dirname(__FILE__))
2
2
 
3
3
  describe WebkitRemote::Client::Network do
4
- before :all do
4
+ before :each do
5
5
  @client = WebkitRemote.local port: 9669
6
6
  @client.console_events = true
7
7
  @client.disable_cache = true
8
8
  end
9
- after :all do
9
+ after :each do
10
10
  @client.close
11
11
  end
12
12
 
@@ -23,11 +23,11 @@ describe WebkitRemote::Client::Network do
23
23
  end
24
24
 
25
25
  describe 'without network events enabled' do
26
- before :all do
26
+ before :each do
27
27
  @client.network_events = false
28
28
  @client.navigate_to fixture_url(:network)
29
29
  @events = @client.wait_for type: WebkitRemote::Event::ConsoleMessage,
30
- level: :log
30
+ level: :log, text: 'Test done'
31
31
  end
32
32
 
33
33
  it 'does not receive any network event' do
@@ -47,12 +47,12 @@ describe WebkitRemote::Client::Network do
47
47
  end
48
48
 
49
49
  describe 'with network events enabled' do
50
- before :all do
50
+ before :each do
51
51
  @client.disable_cache = true
52
52
  @client.network_events = true
53
53
  @client.navigate_to fixture_url(:network)
54
54
  @events = @client.wait_for type: WebkitRemote::Event::ConsoleMessage,
55
- level: :log
55
+ level: :log, text: 'Test done'
56
56
  @requests = @events.select do |event|
57
57
  event.kind_of? WebkitRemote::Event::NetworkRequest
58
58
  end
@@ -65,7 +65,7 @@ describe WebkitRemote::Client::Network do
65
65
  @chunks = @events.select do |event|
66
66
  event.kind_of? WebkitRemote::Event::NetworkData
67
67
  end
68
- @failures = @events.select do |event|
68
+ @failure_events = @events.select do |event|
69
69
  event.kind_of? WebkitRemote::Event::NetworkFailure
70
70
  end
71
71
  @resources = @client.network_resources
@@ -125,7 +125,7 @@ describe WebkitRemote::Client::Network do
125
125
  it 'parses the initial response inside a NetworkResponse event' do
126
126
  @responses[0].type.must_equal :document
127
127
  @responses[0].response.
128
- must_be_kind_of WebkitRemote::Client::NetworkResponse
128
+ must_be_kind_of WebkitRemote::Client::NetworkResponse
129
129
  @responses[0].response.url.must_equal fixture_url(:network)
130
130
  @responses[0].response.status.must_equal 200
131
131
  @responses[0].response.status_text.must_equal 'OK'
@@ -133,8 +133,8 @@ describe WebkitRemote::Client::Network do
133
133
  @responses[0].response.headers['X-Unit-Test'].must_equal 'webkit-remote'
134
134
  @responses[0].response.mime_type.must_equal 'text/html'
135
135
  @responses[0].response.request_headers.must_include 'User-Agent'
136
- @responses[0].response.request_headers['User-Agent']
137
- .must_match(/webkit/i)
136
+ @responses[0].response.request_headers['User-Agent'].
137
+ must_match(/webkit/i)
138
138
  @responses[0].response.from_cache.must_equal false
139
139
  @responses[0].response.connection_reused.must_equal false
140
140
  end
@@ -142,7 +142,7 @@ describe WebkitRemote::Client::Network do
142
142
  it 'parses a 404 response inside a NetworkResponse event' do
143
143
  @responses[1].type.must_equal :script
144
144
  @responses[1].response.
145
- must_be_kind_of WebkitRemote::Client::NetworkResponse
145
+ must_be_kind_of WebkitRemote::Client::NetworkResponse
146
146
  @responses[1].response.url.
147
147
  must_equal fixture_url(:network_not_found, :js)
148
148
  @responses[1].response.status.must_equal 404
@@ -151,8 +151,8 @@ describe WebkitRemote::Client::Network do
151
151
  @responses[1].response.headers['X-Unit-Test'].must_equal 'webkit-remote'
152
152
  @responses[1].response.mime_type.must_equal 'text/plain'
153
153
  @responses[1].response.request_headers.must_include 'User-Agent'
154
- @responses[1].response.request_headers['User-Agent']
155
- .must_match(/webkit/i)
154
+ @responses[1].response.request_headers['User-Agent'].
155
+ must_match(/webkit/i)
156
156
  @responses[1].response.from_cache.must_equal false
157
157
  end
158
158
 
@@ -183,13 +183,13 @@ describe WebkitRemote::Client::Network do
183
183
  end
184
184
 
185
185
  it 'receives NetworkFailure events' do
186
- @failures.wont_be :empty?
186
+ @failure_events.wont_be :empty?
187
187
  end
188
188
 
189
189
  it 'parses NetworkFailure events' do
190
- @failures[0].resource.must_equal @requests[1].resource
191
- @failures[0].error.wont_equal nil
192
- @failures[0].canceled.must_equal true
190
+ @failure_events[0].resource.must_equal @requests[1].resource
191
+ @failure_events[0].error.wont_equal nil
192
+ @failure_events[0].canceled.must_equal true
193
193
  end
194
194
 
195
195
  it 'collects request and response data in NetworkResources' do
@@ -200,8 +200,8 @@ describe WebkitRemote::Client::Network do
200
200
  @resources[1].document_url.must_equal fixture_url(:network)
201
201
  @resources[1].initiator.must_equal @requests[1].initiator
202
202
  @resources[1].canceled.must_equal true
203
- @resources[1].error.must_equal @failures[0].error
204
- @resources[1].last_event.must_equal @failures[0]
203
+ @resources[1].error.must_equal @failure_events[0].error
204
+ @resources[1].last_event.must_equal @failure_events[0]
205
205
  @resources[1].client.must_equal @client
206
206
 
207
207
  @resources[2].must_equal @requests[2].resource
@@ -215,7 +215,18 @@ describe WebkitRemote::Client::Network do
215
215
  @resources[2].last_event.must_equal @loads[1]
216
216
  @resources[2].client.must_equal @client
217
217
 
218
- @resources[-1].last_event.must_equal @chunks[-1]
218
+ @resources[3].must_equal @requests[3].resource
219
+ @resources[3].request.must_equal @requests[3].request
220
+ @resources[3].response.must_equal @responses[3].response
221
+ @resources[3].type.must_equal :xhr
222
+ @resources[3].document_url.must_equal fixture_url(:network)
223
+ @resources[3].initiator.must_equal @requests[3].initiator
224
+ @resources[3].canceled.must_equal false
225
+ @resources[3].error.must_equal nil
226
+ @resources[3].last_event.must_equal @loads[2]
227
+ @resources[3].client.must_equal @client
228
+
229
+ @resources[-1].last_event.must_equal @loads[-1]
219
230
  end
220
231
 
221
232
  it 'retrieves the body for a text NetworkResource' do
@@ -224,21 +235,22 @@ describe WebkitRemote::Client::Network do
224
235
 
225
236
  it 'retrieves the body for a binary NetworkResource' do
226
237
  skip 'waiting for http://crbug.com/160397'
227
- @resources[2].body.must_equal File.binread(fixture_path(:network, :png))
238
+ @resources[3].body.must_equal File.binread(fixture_path(:network, :png))
228
239
  end
229
240
  end
230
241
 
231
242
  describe 'and a cached request' do
232
- before :all do
243
+ before :each do
233
244
  @client.disable_cache = false
234
245
  @client.navigate_to fixture_url(:network)
235
- @client.wait_for type: WebkitRemote::Event::ConsoleMessage, level: :log
246
+ @client.wait_for type: WebkitRemote::Event::ConsoleMessage, level: :log,
247
+ text: 'Test done'
236
248
  @client.clear_all
237
249
 
238
250
  @client.network_events = true
239
251
  @client.navigate_to fixture_url(:network)
240
252
  @events = @client.wait_for type: WebkitRemote::Event::ConsoleMessage,
241
- level: :log
253
+ level: :log, text: 'Test done'
242
254
  @requests = @events.select do |event|
243
255
  event.kind_of? WebkitRemote::Event::NetworkRequest
244
256
  end
@@ -254,9 +266,6 @@ describe WebkitRemote::Client::Network do
254
266
  @hits = @events.select do |event|
255
267
  event.kind_of? WebkitRemote::Event::NetworkCacheHit
256
268
  end
257
- @memory_hits = @events.select do |event|
258
- event.kind_of? WebkitRemote::Event::NetworkMemoryCacheHit
259
- end
260
269
 
261
270
  @resources = @client.network_resources
262
271
  end
@@ -268,10 +277,5 @@ describe WebkitRemote::Client::Network do
268
277
  it 'parses NetworkCacheHits events' do
269
278
  @hits[0].resource.must_equal @requests[2].resource
270
279
  end
271
-
272
- it 'receives NetworkMemoryCacheHit events' do
273
- skip 'waiting for http://crbug.com/160404'
274
- @memory_hits.wont_be :empty?
275
- end
276
280
  end
277
281
  end
@@ -24,10 +24,10 @@ describe WebkitRemote::Event do
24
24
 
25
25
  describe 'matches' do
26
26
  it 'handles single conditions' do
27
- @event.matches?(:class => WebkitRemote::Event::PageLoaded).
27
+ @event.matches?(class: WebkitRemote::Event::PageLoaded).
28
28
  must_equal true
29
29
  @event.matches?(type: WebkitRemote::Event).must_equal true
30
- @event.matches?(:class => WebkitRemote::Event::PageDomReady).
30
+ @event.matches?(class: WebkitRemote::Event::PageDomReady).
31
31
  must_equal false
32
32
  @event.matches?(name: 'Page.loadEventFired').must_equal true
33
33
  @event.matches?(name: 'loadEventFired').must_equal false
@@ -51,6 +51,8 @@ describe WebkitRemote::Process do
51
51
  pass
52
52
  rescue Errno::ECONNRESET
53
53
  pass
54
+ rescue Errno::ECONNREFUSED
55
+ pass
54
56
  end
55
57
  end
56
58
  end
@@ -96,6 +98,8 @@ describe WebkitRemote::Process do
96
98
  pass
97
99
  rescue Errno::ECONNRESET
98
100
  pass
101
+ rescue Errno::ECONNREFUSED
102
+ pass
99
103
  end
100
104
  end
101
105
  end
@@ -17,7 +17,7 @@ describe WebkitRemote::Rpc do
17
17
  describe 'call' do
18
18
  before do
19
19
  @result = @rpc.call 'Runtime.evaluate', expression: '1 + 2',
20
- returnByValue: true
20
+ returnByValue: true
21
21
  end
22
22
 
23
23
  it 'produces the correct result' do
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "webkit_remote"
8
- s.version = "0.4.1"
8
+ s.version = "0.5.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Victor Costan"]
12
- s.date = "2012-11-16"
12
+ s.date = "2014-03-18"
13
13
  s.description = "Launches Google Chrome instances and controls them via the Remote Debugging server"
14
14
  s.email = "victor@costan.us"
15
15
  s.extra_rdoc_files = [
@@ -69,58 +69,52 @@ Gem::Specification.new do |s|
69
69
  s.homepage = "http://github.com/pwnall/webkit_remote"
70
70
  s.licenses = ["MIT"]
71
71
  s.require_paths = ["lib"]
72
- s.rubygems_version = "1.8.24"
72
+ s.rubygems_version = "2.0.14"
73
73
  s.summary = "Client for the Webkit Remote Debugging server"
74
74
 
75
75
  if s.respond_to? :specification_version then
76
- s.specification_version = 3
76
+ s.specification_version = 4
77
77
 
78
78
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
79
- s.add_runtime_dependency(%q<eventmachine>, [">= 1.0.0"])
80
- s.add_runtime_dependency(%q<faye-websocket>, [">= 0.4.6"])
81
- s.add_runtime_dependency(%q<posix-spawn>, [">= 0.3.6"])
82
- s.add_development_dependency(%q<bundler>, [">= 1.2.1"])
83
- s.add_development_dependency(%q<debugger>, [">= 1.2.1"])
84
- s.add_development_dependency(%q<jeweler>, [">= 1.8.4"])
85
- s.add_development_dependency(%q<minitest>, [">= 4.1.0"])
86
- s.add_development_dependency(%q<puma>, [">= 1.6.3"])
87
- s.add_development_dependency(%q<rack>, [">= 1.4.1"])
79
+ s.add_runtime_dependency(%q<ws_sync_client>, [">= 0.1.1"])
80
+ s.add_runtime_dependency(%q<posix-spawn>, [">= 0.3.8"])
81
+ s.add_development_dependency(%q<bundler>, [">= 1.5.3"])
82
+ s.add_development_dependency(%q<debugger>, [">= 1.6.6"])
83
+ s.add_development_dependency(%q<jeweler>, [">= 2.0.1"])
84
+ s.add_development_dependency(%q<minitest>, [">= 5.3.0"])
85
+ s.add_development_dependency(%q<puma>, [">= 2.8.0"])
86
+ s.add_development_dependency(%q<rack>, [">= 1.5.2"])
88
87
  s.add_development_dependency(%q<rack-contrib>, [">= 1.1.0"])
89
- s.add_development_dependency(%q<rdoc>, [">= 3.12"])
90
- s.add_development_dependency(%q<ruby-prof>, [">= 0.11.2"])
91
- s.add_development_dependency(%q<simplecov>, [">= 0.7.1"])
92
- s.add_development_dependency(%q<yard>, [">= 0.8.3"])
88
+ s.add_development_dependency(%q<rdoc>, [">= 4.1.1"])
89
+ s.add_development_dependency(%q<simplecov>, [">= 0.8.2"])
90
+ s.add_development_dependency(%q<yard>, [">= 0.8.7.3"])
93
91
  else
94
- s.add_dependency(%q<eventmachine>, [">= 1.0.0"])
95
- s.add_dependency(%q<faye-websocket>, [">= 0.4.6"])
96
- s.add_dependency(%q<posix-spawn>, [">= 0.3.6"])
97
- s.add_dependency(%q<bundler>, [">= 1.2.1"])
98
- s.add_dependency(%q<debugger>, [">= 1.2.1"])
99
- s.add_dependency(%q<jeweler>, [">= 1.8.4"])
100
- s.add_dependency(%q<minitest>, [">= 4.1.0"])
101
- s.add_dependency(%q<puma>, [">= 1.6.3"])
102
- s.add_dependency(%q<rack>, [">= 1.4.1"])
92
+ s.add_dependency(%q<ws_sync_client>, [">= 0.1.1"])
93
+ s.add_dependency(%q<posix-spawn>, [">= 0.3.8"])
94
+ s.add_dependency(%q<bundler>, [">= 1.5.3"])
95
+ s.add_dependency(%q<debugger>, [">= 1.6.6"])
96
+ s.add_dependency(%q<jeweler>, [">= 2.0.1"])
97
+ s.add_dependency(%q<minitest>, [">= 5.3.0"])
98
+ s.add_dependency(%q<puma>, [">= 2.8.0"])
99
+ s.add_dependency(%q<rack>, [">= 1.5.2"])
103
100
  s.add_dependency(%q<rack-contrib>, [">= 1.1.0"])
104
- s.add_dependency(%q<rdoc>, [">= 3.12"])
105
- s.add_dependency(%q<ruby-prof>, [">= 0.11.2"])
106
- s.add_dependency(%q<simplecov>, [">= 0.7.1"])
107
- s.add_dependency(%q<yard>, [">= 0.8.3"])
101
+ s.add_dependency(%q<rdoc>, [">= 4.1.1"])
102
+ s.add_dependency(%q<simplecov>, [">= 0.8.2"])
103
+ s.add_dependency(%q<yard>, [">= 0.8.7.3"])
108
104
  end
109
105
  else
110
- s.add_dependency(%q<eventmachine>, [">= 1.0.0"])
111
- s.add_dependency(%q<faye-websocket>, [">= 0.4.6"])
112
- s.add_dependency(%q<posix-spawn>, [">= 0.3.6"])
113
- s.add_dependency(%q<bundler>, [">= 1.2.1"])
114
- s.add_dependency(%q<debugger>, [">= 1.2.1"])
115
- s.add_dependency(%q<jeweler>, [">= 1.8.4"])
116
- s.add_dependency(%q<minitest>, [">= 4.1.0"])
117
- s.add_dependency(%q<puma>, [">= 1.6.3"])
118
- s.add_dependency(%q<rack>, [">= 1.4.1"])
106
+ s.add_dependency(%q<ws_sync_client>, [">= 0.1.1"])
107
+ s.add_dependency(%q<posix-spawn>, [">= 0.3.8"])
108
+ s.add_dependency(%q<bundler>, [">= 1.5.3"])
109
+ s.add_dependency(%q<debugger>, [">= 1.6.6"])
110
+ s.add_dependency(%q<jeweler>, [">= 2.0.1"])
111
+ s.add_dependency(%q<minitest>, [">= 5.3.0"])
112
+ s.add_dependency(%q<puma>, [">= 2.8.0"])
113
+ s.add_dependency(%q<rack>, [">= 1.5.2"])
119
114
  s.add_dependency(%q<rack-contrib>, [">= 1.1.0"])
120
- s.add_dependency(%q<rdoc>, [">= 3.12"])
121
- s.add_dependency(%q<ruby-prof>, [">= 0.11.2"])
122
- s.add_dependency(%q<simplecov>, [">= 0.7.1"])
123
- s.add_dependency(%q<yard>, [">= 0.8.3"])
115
+ s.add_dependency(%q<rdoc>, [">= 4.1.1"])
116
+ s.add_dependency(%q<simplecov>, [">= 0.8.2"])
117
+ s.add_dependency(%q<yard>, [">= 0.8.7.3"])
124
118
  end
125
119
  end
126
120
 
metadata CHANGED
@@ -1,240 +1,183 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: webkit_remote
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.1
5
- prerelease:
4
+ version: 0.5.0
6
5
  platform: ruby
7
6
  authors:
8
7
  - Victor Costan
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2012-11-16 00:00:00.000000000 Z
11
+ date: 2014-03-18 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
- name: eventmachine
14
+ name: ws_sync_client
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
- - - ! '>='
17
+ - - '>='
20
18
  - !ruby/object:Gem::Version
21
- version: 1.0.0
19
+ version: 0.1.1
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
- - - ! '>='
24
+ - - '>='
28
25
  - !ruby/object:Gem::Version
29
- version: 1.0.0
30
- - !ruby/object:Gem::Dependency
31
- name: faye-websocket
32
- requirement: !ruby/object:Gem::Requirement
33
- none: false
34
- requirements:
35
- - - ! '>='
36
- - !ruby/object:Gem::Version
37
- version: 0.4.6
38
- type: :runtime
39
- prerelease: false
40
- version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
- requirements:
43
- - - ! '>='
44
- - !ruby/object:Gem::Version
45
- version: 0.4.6
26
+ version: 0.1.1
46
27
  - !ruby/object:Gem::Dependency
47
28
  name: posix-spawn
48
29
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
30
  requirements:
51
- - - ! '>='
31
+ - - '>='
52
32
  - !ruby/object:Gem::Version
53
- version: 0.3.6
33
+ version: 0.3.8
54
34
  type: :runtime
55
35
  prerelease: false
56
36
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
37
  requirements:
59
- - - ! '>='
38
+ - - '>='
60
39
  - !ruby/object:Gem::Version
61
- version: 0.3.6
40
+ version: 0.3.8
62
41
  - !ruby/object:Gem::Dependency
63
42
  name: bundler
64
43
  requirement: !ruby/object:Gem::Requirement
65
- none: false
66
44
  requirements:
67
- - - ! '>='
45
+ - - '>='
68
46
  - !ruby/object:Gem::Version
69
- version: 1.2.1
47
+ version: 1.5.3
70
48
  type: :development
71
49
  prerelease: false
72
50
  version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
51
  requirements:
75
- - - ! '>='
52
+ - - '>='
76
53
  - !ruby/object:Gem::Version
77
- version: 1.2.1
54
+ version: 1.5.3
78
55
  - !ruby/object:Gem::Dependency
79
56
  name: debugger
80
57
  requirement: !ruby/object:Gem::Requirement
81
- none: false
82
58
  requirements:
83
- - - ! '>='
59
+ - - '>='
84
60
  - !ruby/object:Gem::Version
85
- version: 1.2.1
61
+ version: 1.6.6
86
62
  type: :development
87
63
  prerelease: false
88
64
  version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
65
  requirements:
91
- - - ! '>='
66
+ - - '>='
92
67
  - !ruby/object:Gem::Version
93
- version: 1.2.1
68
+ version: 1.6.6
94
69
  - !ruby/object:Gem::Dependency
95
70
  name: jeweler
96
71
  requirement: !ruby/object:Gem::Requirement
97
- none: false
98
72
  requirements:
99
- - - ! '>='
73
+ - - '>='
100
74
  - !ruby/object:Gem::Version
101
- version: 1.8.4
75
+ version: 2.0.1
102
76
  type: :development
103
77
  prerelease: false
104
78
  version_requirements: !ruby/object:Gem::Requirement
105
- none: false
106
79
  requirements:
107
- - - ! '>='
80
+ - - '>='
108
81
  - !ruby/object:Gem::Version
109
- version: 1.8.4
82
+ version: 2.0.1
110
83
  - !ruby/object:Gem::Dependency
111
84
  name: minitest
112
85
  requirement: !ruby/object:Gem::Requirement
113
- none: false
114
86
  requirements:
115
- - - ! '>='
87
+ - - '>='
116
88
  - !ruby/object:Gem::Version
117
- version: 4.1.0
89
+ version: 5.3.0
118
90
  type: :development
119
91
  prerelease: false
120
92
  version_requirements: !ruby/object:Gem::Requirement
121
- none: false
122
93
  requirements:
123
- - - ! '>='
94
+ - - '>='
124
95
  - !ruby/object:Gem::Version
125
- version: 4.1.0
96
+ version: 5.3.0
126
97
  - !ruby/object:Gem::Dependency
127
98
  name: puma
128
99
  requirement: !ruby/object:Gem::Requirement
129
- none: false
130
100
  requirements:
131
- - - ! '>='
101
+ - - '>='
132
102
  - !ruby/object:Gem::Version
133
- version: 1.6.3
103
+ version: 2.8.0
134
104
  type: :development
135
105
  prerelease: false
136
106
  version_requirements: !ruby/object:Gem::Requirement
137
- none: false
138
107
  requirements:
139
- - - ! '>='
108
+ - - '>='
140
109
  - !ruby/object:Gem::Version
141
- version: 1.6.3
110
+ version: 2.8.0
142
111
  - !ruby/object:Gem::Dependency
143
112
  name: rack
144
113
  requirement: !ruby/object:Gem::Requirement
145
- none: false
146
114
  requirements:
147
- - - ! '>='
115
+ - - '>='
148
116
  - !ruby/object:Gem::Version
149
- version: 1.4.1
117
+ version: 1.5.2
150
118
  type: :development
151
119
  prerelease: false
152
120
  version_requirements: !ruby/object:Gem::Requirement
153
- none: false
154
121
  requirements:
155
- - - ! '>='
122
+ - - '>='
156
123
  - !ruby/object:Gem::Version
157
- version: 1.4.1
124
+ version: 1.5.2
158
125
  - !ruby/object:Gem::Dependency
159
126
  name: rack-contrib
160
127
  requirement: !ruby/object:Gem::Requirement
161
- none: false
162
128
  requirements:
163
- - - ! '>='
129
+ - - '>='
164
130
  - !ruby/object:Gem::Version
165
131
  version: 1.1.0
166
132
  type: :development
167
133
  prerelease: false
168
134
  version_requirements: !ruby/object:Gem::Requirement
169
- none: false
170
135
  requirements:
171
- - - ! '>='
136
+ - - '>='
172
137
  - !ruby/object:Gem::Version
173
138
  version: 1.1.0
174
139
  - !ruby/object:Gem::Dependency
175
140
  name: rdoc
176
141
  requirement: !ruby/object:Gem::Requirement
177
- none: false
178
- requirements:
179
- - - ! '>='
180
- - !ruby/object:Gem::Version
181
- version: '3.12'
182
- type: :development
183
- prerelease: false
184
- version_requirements: !ruby/object:Gem::Requirement
185
- none: false
186
- requirements:
187
- - - ! '>='
188
- - !ruby/object:Gem::Version
189
- version: '3.12'
190
- - !ruby/object:Gem::Dependency
191
- name: ruby-prof
192
- requirement: !ruby/object:Gem::Requirement
193
- none: false
194
142
  requirements:
195
- - - ! '>='
143
+ - - '>='
196
144
  - !ruby/object:Gem::Version
197
- version: 0.11.2
145
+ version: 4.1.1
198
146
  type: :development
199
147
  prerelease: false
200
148
  version_requirements: !ruby/object:Gem::Requirement
201
- none: false
202
149
  requirements:
203
- - - ! '>='
150
+ - - '>='
204
151
  - !ruby/object:Gem::Version
205
- version: 0.11.2
152
+ version: 4.1.1
206
153
  - !ruby/object:Gem::Dependency
207
154
  name: simplecov
208
155
  requirement: !ruby/object:Gem::Requirement
209
- none: false
210
156
  requirements:
211
- - - ! '>='
157
+ - - '>='
212
158
  - !ruby/object:Gem::Version
213
- version: 0.7.1
159
+ version: 0.8.2
214
160
  type: :development
215
161
  prerelease: false
216
162
  version_requirements: !ruby/object:Gem::Requirement
217
- none: false
218
163
  requirements:
219
- - - ! '>='
164
+ - - '>='
220
165
  - !ruby/object:Gem::Version
221
- version: 0.7.1
166
+ version: 0.8.2
222
167
  - !ruby/object:Gem::Dependency
223
168
  name: yard
224
169
  requirement: !ruby/object:Gem::Requirement
225
- none: false
226
170
  requirements:
227
- - - ! '>='
171
+ - - '>='
228
172
  - !ruby/object:Gem::Version
229
- version: 0.8.3
173
+ version: 0.8.7.3
230
174
  type: :development
231
175
  prerelease: false
232
176
  version_requirements: !ruby/object:Gem::Requirement
233
- none: false
234
177
  requirements:
235
- - - ! '>='
178
+ - - '>='
236
179
  - !ruby/object:Gem::Version
237
- version: 0.8.3
180
+ version: 0.8.7.3
238
181
  description: Launches Google Chrome instances and controls them via the Remote Debugging
239
182
  server
240
183
  email: victor@costan.us
@@ -295,29 +238,25 @@ files:
295
238
  homepage: http://github.com/pwnall/webkit_remote
296
239
  licenses:
297
240
  - MIT
241
+ metadata: {}
298
242
  post_install_message:
299
243
  rdoc_options: []
300
244
  require_paths:
301
245
  - lib
302
246
  required_ruby_version: !ruby/object:Gem::Requirement
303
- none: false
304
247
  requirements:
305
- - - ! '>='
248
+ - - '>='
306
249
  - !ruby/object:Gem::Version
307
250
  version: '0'
308
- segments:
309
- - 0
310
- hash: 3710674464370196221
311
251
  required_rubygems_version: !ruby/object:Gem::Requirement
312
- none: false
313
252
  requirements:
314
- - - ! '>='
253
+ - - '>='
315
254
  - !ruby/object:Gem::Version
316
255
  version: '0'
317
256
  requirements: []
318
257
  rubyforge_project:
319
- rubygems_version: 1.8.24
258
+ rubygems_version: 2.0.14
320
259
  signing_key:
321
- specification_version: 3
260
+ specification_version: 4
322
261
  summary: Client for the Webkit Remote Debugging server
323
262
  test_files: []