路過,爪機,不貼 URL 的瞎聊。
答案是,真的很復雜。
10年前,俺們給Chrome組幹活兒弄 w3 規範往實作上套的時候,就有這種吐槽了——」瀏覽器是天下最難實作(好/完美)的軟體」
拿 chromium 來說,相容規範什麽的「真」核心程式碼不說了就,這個光看看知乎裏,前端以前的現在的相容性(異常性)吐糟,和相關回答就能感覺到那是一坨屎山了。
chromium 程式碼(算上依賴的第三方庫和test case)拉回來20G+ (上次弄的好像是23G來著),編譯個 debug 版……,變成占 80G 空間……
這裏就光說說,周邊程式碼裏,俺試圖弄個代理URL重設的CDP介面,已經卡了好幾周了。
為啥呢,因為跨了 content\render\network service 這幾個行程模型,IPC 又是 mojom 封裝的,gn 時候 自動生成的程式碼,呼叫關系類關系動不動看實作程式碼的時候就斷了。然後 cdp 的呼叫也是類似 pdl 聲明,自動生成中間呼叫,一條 cdp 方法發出來,是落render 還是 content。還是先落 render 再 mojom 到。centent 就夠剛接觸的人喝一尿壺的。
到 proxy 層,一邊跟 profile (沒現查程式碼記不太清了)連著,一邊跟 requestcontext 連著,mode/pac/system/direct 不說,生改貌似還不行,因為兩邊都沒 change 出來,不生效。
而且吧,這proxy 還不帶 auth,認證是其他類控制,還會進 auth cache,也不是隨便改改就能行的。
更麻煩的是,還不支持 socks5 auth,實作程式碼裏寫死了用非認證模式。要想支持,先得改了它的狀態機,起碼加4個狀態吧。然後還得想辦法弄到 auth 相關類裏。看這類是 http 下的,不管socks 啥事兒……
光是改設個代理,還沒牽扯到具體代理底層實作,就這麽亂七八糟的一坨了,累不累。
對了,想在 cs.chromium.org 上跟程式碼,還得最好拉他最新版本的,要不這幫人成天改,要是本地版本低那麽兩三個version……能連類名能都不一樣,本地找對應檔是 not found…… 要死了……這得多少bug或者設計不合理要這麽改啊…… 弄的我這基本間隔2-3個ver 更新一下的連patch都留不住……打上一準出毛病(>_<)