コードリーディング

https://deepwiki.com/search/where-is-the-implementation-of_9f3c9e42-09db-42f9-9981-7f1f6ef012c9?mode=deep

  1. JSで fetch() を呼ぶ
  2. WindowOrWorkerGlobalScopeFetch::fetch() が呼ばれる(たぶん)
  3. IDLで呼び出し部分を自動生成しているらしい?
  4. WebCore::doFetch() が呼ばれる
  5. doFetch() が FetchRequest::create() を読んで FetchRequest のインスタンスを作成
    1. create() は initializeWith() を呼ぶ
    2. initializeWith() は setBody() に init.body を渡して呼ぶ
    3. この init は WindowOrWorkerGlobalScopeFetch::fetch() に渡されたもので、生成部分は自動生成っぽい
      4. WindowOr(略) では FetchRequest::Init となっているが、 これは FetchRequest クラスで using Init = FetchRequestInit しているからであり、定義としては FetchRequestInit.h である
      1. bodyがoptionalなんですが
    4. setBody() が(FetchRequestが継承しているFetchBodyOwnerのメソッドである)extractBody() を呼ぶ
    5. (initializeWith() は2つあるが、ここではStringを引数として取る方を読んだ)
    6. FetchBody::extract() で FetchBody を作成して FetchBodyOwner::m_body に代入する
      3. ここで m_bodyはVariant で、value (== init.body) の値に基づいて値が代入される
  6. FetchResponse::fetch() を呼ぶ
  7. m_loader.start() が本質っぽさある

response.bytes() を呼ぶとどうなる?

  1. FetchBodyOwner::bytes() が呼ばれ、 m_bodybytes() を呼ぶ
  2. FetchBodyOwner::m_body は FetchBody
  3. FetchBody::consume() がm_body (Variant) の値を元に consumeFooBar() を呼んでreturn