Opened 10 months ago

Closed 10 months ago

Last modified 10 months ago

#4332 closed defect (fixed)

Objects produced by the wrapped WebSocket aren't considered WebSocket instances

Reported by: trev Assignee: kzar
Priority: P1 Milestone: Adblock-Plus-1.12.2-for-Chrome-Opera-Safari
Module: Platform Keywords:
Cc: sebastian, kzar, Ross, scheer Blocked By:
Blocking: #1727 Platform: Unknown / Cross platform
Ready: yes Confidential: no
Tester: Scheer Verified working: yes
Review URL(s):

https://codereview.adblockplus.org/29349816/

Description

Environment

Adblock Plus 1.12.1.1640 on Chrome 52.

How to reproduce

  1. Go to https://google.com/
  2. Press Ctrl-Shift-J/Cmd-Option-J to open JavaScript console.
  3. Type new WebSocket("wss://google.com/") instanceof WebSocket and press Enter.

Observed behaviour

You see false printed to console.

Expected behaviour

It should be true, as you get for the new tab page where WebSocket isn't wrapped.

Background

It seems that we need to set .prototype property on the original WebSocket function as well, not merely the bound function. As http://www.ecma-international.org/ecma-262/5.1/#sec-15.3.5.3 explains, bound functions will redirect to their target function for subclass tests, so this one has to be associated with the right prototype.

Change History (5)

comment:1 Changed 10 months ago by kzar

  • Owner set to kzar
  • Priority changed from Unknown to P1
  • Review URL(s) modified (diff)

comment:2 Changed 10 months ago by kzar

  • Status changed from new to reviewing

comment:3 Changed 10 months ago by kzar

  • Cc Ross scheer added
  • Milestone set to Adblock-Plus-1.12.2-for-Chrome-Opera-Safari
  • Resolution set to fixed
  • Status changed from reviewing to closed

A commit referencing this issue has landed:
Fixes 4331, 4332 - WebSocket.length and instanceof WebSocket

comment:4 Changed 10 months ago by scheer

  • Tester changed from Unknown to Scheer
  • Verified working set
  • When entering the above I now receive:
-new WebSocket("wss://google.com/") instanceof WebSocket
-true
-WebSocket connection to 'wss://google.com/' failed: Error during WebSocket handshake: Unexpected response code: 400

Chrome 52
ABP 1.12.1.1644

comment:5 Changed 10 months ago by rraceanu

Same results on Safari 9 and Opera 39.0.2256.48- ABP 1.21.1.1644

-true
-WebSocket connection to 'wss://google.com/' failed: Error during WebSocket handshake: Unexpected response code: 400

Note: See TracTickets for help on using tickets.