webkit 常用操作代码调用流程

构造 HTML/XML tokenizer

[HTML]Document::createTokenizer()
  [HTML]Document::implicitOpen()
  FrameLoader::begin(const KURL&, bool dispatch, SecurityOrigin*)
  FrameLoader::receivedFirstData()

Tokenizing HTML/XML document

From the moment, piece by piece of an HTML document is obtained from the network, this is what happens:

[HTML,XML]Tokenizer::write(const SegmentedString& str, bool appendData)
  FrameLoader::write(const char* data, int len, bool flush)
  FrameLoader::addData(const char* bytes, int length)
  FrameLoaderClientQt::committedLoad(DocumentLoader* loader, const char* data, int length)
  FrameLoader::committedLoad(DocumentLoader* loader, const char* data, int length)
  DocumentLoader::commitLoad(const char* data, int length)
  DocumentLoader::receivedData(const char* data, int length)
  FrameLoader::receivedData(const char* data, int length)
  MainResourceLoader::addData(const char* data, int length, bool allAtOnce)
  ResourceLoader::didReceivedData(const char* data, int length, long long received, bool allAtOnce)
  ResourceLoader::didReceiveData(ResourceHandle*, const char* data, int len, long long received)

绘制一个push按钮

RenderTheme[Gtk,Wx,Qt]::paintButton(RenderObject*, const RenderObject::PaintInfo&, const IntRect&)
  RenderTheme::paint(RenderObject*, const RenderObject::PaintInfo&, const IntRect&)
  RenderBox::paintBoxDecorations(RenderObject::PaintInfo& paintInfo, int tx, int ty)
  RenderBlock::paintObject(RenderObject::PaintInfo& paintInfo, int tx, int ty)
  RenderBlock::paint(RenderObject::PaintInfo& paintInfo, int tx, int ty)
  InlineBox::paint(RenderObject::PaintInfo& paintInfo, int tx, int ty)
  InlineFlowBox::paint(RenderObject::PaintInfo& paintInfo, int tx, int ty)
  RootInlineBox::paint(RenderObject::PaintInfo& paintInfo, int tx, int ty)
  RenderLineBoxList::paint(RenderBoxModelObject* renderer, RenderObject::PaintInfo& paintInfo, int tx, int ty)
  RenderBlock::paintContents(RenderObject::PaintInfo& paintInfo, int tx, int ty)
  RenderBlock::paintObject(RenderObject::PaintInfo& paintInfo, int tx, int ty)
  RenderBlock::paint(RenderObject::PaintInfo& paintInfo, int tx, int ty)
  RenderBlock::paintChildren(RenderObject::PaintInfo& paintInfo, int tx, int ty)
  RenderBlock::paintContents(RenderObject::PaintInfo& paintInfo, int tx, int ty)
  RenderBlock::paintObject(RenderObject::PaintInfo& paintInfo, int tx, int ty)
  RenderBlock::paint(RenderObject::PaintInfo& paintInfo, int tx, int ty)
  RenderBlock::paintChildren(RenderObject::PaintInfo& paintInfo, int tx, int ty)
  RenderBlock::paintContents(RenderObject::PaintInfo& paintInfo, int tx, int ty)
  RenderBlock::paintObject(RenderObject::PaintInfo& paintInfo, int tx, int ty)
  RenderBlock::paint(RenderObject::PaintInfo& paintInfo, int tx, int ty)
  RenderLayer::paintLayer(RenderLayer*, GraphicsContext*, const IntRect& paintDirtyRect,
  PaintRestriction paintRestriction, RenderObject* paintingRoot, 
  RenderObject::OverlapTestRequestMap* overlapTestRequests, PaintLayerFlags paintFlags)
  RenderLayer::paint(GraphicsContext* p, const IntRect& damageRect, PaintRestriction paintRestriction, RenderObject *paintingRoot)
  FrameView::paintContents(GraphicsContext* p, const IntRect& rect)
  ScrollView::paint(GraphicsContext* p, const IntRect& rect)
解码图片

Shown here for the Qt port, might vary a bit for other ports.

ImageDecoderQt::setData(const IncomingData &data, bool allDataReceived)
  ImageSource::setData(SharedBuffer* data, bool allDataReceived)
  BitmapImage::dataChanged(bool allDataReceived)
  Image::setData(PassRefPtr<SharedBuffer> data, bool allDataReceived)
  CachedImage::data(PassRefPtr<SharedBuffer> data, bool allDataReceived)
  Loader::Host::didReceiveData(SubresourceLoader* loader, const char* data, int size)
  SubresourceLoader::didReceiveData(const char* data, int length, long long lengthReceived, bool allAtOnce)
  ResourceLoader::didReceiveData(ResourceHandle*, const char* data, int length, int lengthReceived)

G获取网络数据

Shown here for the Qt port, might vary a bit for other ports.

QNetworkReplyHandler::start()
  QNetworkReplyHandler(ResourceHandle* handle, LoadMode loadMode)
  ResourceHandle::start(Frame* frame)
  ResourceHandle::create(const ResourceRequest& request, ResourceHandleClient* client,
      Frame* frame, bool defersLoading, bool shouldContentSniff, bool mightDownloadFromHandle)
  MainResourceLoader::loadNow(ResourceRequest& r)
  MainResourceLoader::load(const ResourceRequest& r, const SubstituteData& substituteData)
  DocumentLoader::startLoadingMainResource(unsigned long identifier)
  FrameLoader::continueLoadAfterWillSubmitForm(PolicyAction)
  FrameLoader::continueLoadAfterNavigationPolicy(const ResourceRequest&, PassRefPtr<FormState> formState, bool shouldContinue)
  FrameLoader::callContinueLoadAfterNavigationPolicy(void* argument,
      const ResourceRequest& request, PassRefPtr<FormState> formState, bool shouldContinue)
  PolicyCheck::call(bool shouldContinue)
  FrameLoader::continueAfterNavigationPolicy(PolicyAction policy)
  FrameLoaderClientQt::callPolicyFunction(FramePolicyFunction function, PolicyAction action)
  FrameLoaderClientQt::dispatchDecidePolicyForNavigationAction(FramePolicyFunction function, 
      const WebCore::NavigationAction& action, const WebCore::ResourceRequest& request,
      PassRefPtr<WebCore::FormState>)
  FrameLoader::checkNavigationPolicy(const ResourceRequest& request, DocumentLoader* loader,
      PassRefPtr<FormState> formState, NavigationPolicyDecisionFunction function, void* argument)
  FrameLoader::loadWithDocumentLoader(DocumentLoader* loader, FrameLoadType type, PassRefPtr<FormState> prpFormState)
  FrameLoader::load(DocumentLoader* newDocumentLoader)
  FrameLoader::load(const ResourceRequest& request, const String& frameName, bool lockHistory)
  FrameLoader::load(const ResourceRequest& request, bool lockHistory)
  QWebFrame::load(const QNetworkRequest &req, QNetworkAccessManager::Operation operation,
      const QByteArray &body)
  QWebFrame::load(const QUrl &url)

相关推荐