Open5

Requestlyのchrome拡張のコードを読む

nakaakistnakaakist

マニフェスト。v3に対応している。

  • 任意のサイトで、content scriptsとしてclient.cs.jsが実行される
  • service workerとして、serviceWorker.jsが実行される。ここでリクエスト書き換えをやっていると思われる。
  • declarative_net_requestに、delay_rulesというものが登録されている。何の目的かは謎
  • permissionsに、webRequest、declarativeNetRequest、declarativeNetRequestFeedbackというものが指定されている。これにより、ホスト権限なしで、リクエストの書き換えなどができるようになる

https://github.com/requestly/requestly/blob/master/browser-extension/mv3/src/manifest.chrome.json

nakaakistnakaakist

実際に、リクエスト書き換えをやっている箇所は下記のあたり。

https://github.com/requestly/requestly/blob/master/browser-extension/mv3/src/service-worker/services/responseRuleHandler.ts

chrome拡張の、webRequestというAPIを使って、ページからのリクエスト送信をlistenし、レスポンスの書き換えを行なっている。
https://developer.chrome.com/docs/extensions/reference/webRequest/

ただ、Web Request APIは、Declarative Net Requestへの移行が推奨されている。なので、後々使えなくなる可能性がありそう。
https://developers-jp.googleblog.com/2019/07/web-request-declarative-net-request.html

nakaakistnakaakist

Requestlyは、任意のwebリクエストの書き換えを実現しようとしているためwebRequestを使っているが、事前に書き換えるべきルールが拡張のship時に決まっているケースであれば、declarative net requestでやっていくのが良さそう。