Sunday, October 25, 2015

Chromium 분석: 웹페이지 로드의 시작과 끝

웹페이지 로드의 시작과 끝은 어떻게 알수있을까?

WebContents가 생성되고 destory될때라고 짐작해볼수 있겠지만 확답은 할수없다.
최근에 https://codereview.chromium.org/1413923002/ 패치를 구현하면서 알게된 내용을  정리하고자 한다.

https://codereview.chromium.org/1413923002/ 는 chrome.tabs.onUpdate() API에 document.title이 변경될때 호출되도록 하는 패치인데 contents::WebContentsObserver를 사용하도록 리팩토링하였다.



로드의 시작: WebContents::Observer::NavigationEntryCommitted()

로드의 끝: TabStripModelObserver::TabChangedAt()
그리고 web_contents()->IsLoading == false 일때


왜 아래 함수들을 쓰지않았을까?
  virtual void DidStartLoading() {}
  virtual void DidStopLoading() {}
  virtual void DidFinishLoad(RenderFrameHost* render_frame_host,

이유는 iframe과 같이 여러 webcontents로 구성된 페이지는 해당 함수가 여러번 호출되기 때문이다. 사용자가 느낄때는 하나의 페이지인데 여러번 호출될 필요는 없지않은가?

No comments:

Post a Comment