webkit_remote 0.4.1 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
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: []