`
jiagou
  • 浏览: 2588967 次
文章分类
社区版块
存档分类
最新评论

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)
分享到:
评论

相关推荐

    WebKit分析报告2

    #### WebKit DOM代码解析流程 - **解析HTML文档**:生成DOM树。 - **解析CSS样式表**:生成样式规则。 - **合并DOM树和样式规则**:生成渲染树。 ### WebKit之布局分析 #### 基本概念 - **CSS布局相关标准介绍**...

    WebKit和Chromium源码及原理剖析.pdf

    - Chromium广泛使用这两种机制来简化复杂的异步操作流程。 #### 第11篇 Chromium的沙盒Sandbox - **Sandbox概念**: - Sandboxing(沙盒)是一种安全机制,用于隔离应用程序的不同部分,限制它们访问系统的权限...

    webkit研究报告

    在具体的代码实现中,WebKit 会调用一系列的函数和类来完成上述步骤。例如,在解析 HTML 时,WebKit 会使用 `HTMLParser` 类来解析 HTML 文档,并构建 DOM 树;在计算样式时,则会调用 `CSSStyleResolver` 来解析 ...

    X5内核的调用

    因此,X5内核在WebKit的基础上做了很多本地化改进,比如对国内常用网站的兼容优化、广告拦截、视频播放等功能的增强。 调用X5内核涉及到的技术层面广泛,包括以下几个核心知识点: 1. **渲染流程**:当浏览器接收...

    C#发送并获取请求的内容,得到源代码

    5. **等待响应**:调用`Wait`或使用`await`关键字等待异步操作完成,并检查响应状态。 ```csharp HttpResponseMessage response = await responseTask; if (response.IsSuccessStatusCode) { // 请求成功 } else {...

    Qt和js互相通信demo

    页面中可能有JavaScript代码调用Qt对象的功能,例如获取系统时间或者执行其他操作。同时,Qt应用也可能有一个对象,提供一些方法供JavaScript调用,如改变UI状态或者处理来自JavaScript的数据。 通过这样的交互,...

    Web页面生成PDF(html to pdf)

    wkhtmltopdf是这个领域内一个广泛使用的开源工具,它基于WebKit浏览器引擎,能够提供出色的页面渲染效果和良好的兼容性。 wkhtmltopdf的优势在于它的易用性和与各种HTML元素的兼容性。通过这个工具,开发者可以...

    生成pdf文件

    5. **流程概述**:当用户在SendInvoice.aspx上完成操作后,后端代码(SendInvoice.aspx.cs)会被触发执行以下步骤: - HTML页面内容可能被提取,或者如果是动态生成的,可能会直接获取HTML源码。 - 使用iTextSharp...

    Less Web Development Cookbook

    - **变量作用**:用于存储常用的颜色、尺寸或其他 CSS 值,方便全局调用和修改。 - **变量替换**:可以直接在属性值中使用变量 `$variable-name`。 2. **混合(Mixins)**: - **定义混合**:使用 `.mixin-name...

    浏览器0.1版本

    - JavaScript交互:使用WebView的addJavascriptInterface方法,让Java代码与JavaScript代码相互调用,实现更丰富的功能。 在iOS中,WKWebView的使用流程类似,但需要使用Swift或Objective-C编程。创建WKWebView、...

    猪哥的嵌入式linux公房菜

    - **常用命令**:比较不同VCS的命令语法。 **15. 利用vmmaretools来实现共享的具体操作** - **安装步骤**:安装vmware tools。 - **配置方法**:设置共享文件夹。 **16. 献给初学者的10个Git技巧** - **基本操作**...

    html转成pdf文件

    3. PhantomJS:这是一个无头Webkit浏览器,支持通过JavaScript API进行操作,可以用来捕获整个网页的屏幕快照。然而,由于PhantomJS项目已停止维护,推荐使用Puppeteer代替。 第二部分:图片转PDF 将HTML转换为...

    HTML转换成PDF和压缩包的方法

    `wkhtmltopdf`支持命令行调用,可以方便地集成到自动化流程中。此外,还有许多在线服务和API,如Puppeteer(基于Chrome的Node.js库)和PDF.js,它们提供了编程接口来实现HTML到PDF的转换。 接着,我们讨论如何将...

    静态网页抓取

    通过这个例子,我们可以了解到网络爬虫的基本流程和常用工具。需要注意的是,在实际操作中应当遵守网站的robots.txt文件规定,尊重版权法律法规,合理合法地使用爬虫技术。 以上就是关于“静态网页抓取”中豆瓣网...

    how browsers work

    在互联网时代,浏览器作为最常用的软件之一,几乎成为每个人日常生活中不可或缺的一部分。它不仅让我们能够访问各种网站和服务,还承载着丰富的多媒体内容。然而,对于大多数用户来说,浏览器背后的运作机制仍然是一...

    用HTML5CSS3实现媲美原生应用的交互体验_尤雨溪

    CSS3 transform属性允许对元素进行旋转、缩放、移动或倾斜操作。常用函数包括: - `rotate(ndeg)`:按指定度数旋转元素。 - `translate(xpx, ypx)`:沿水平和垂直方向移动元素。 - `scale(n)`:缩放元素大小。 - `...

    工程硕士学位论文 基于Android+HTML5的移动Web项目高效开发探究

    Android 一种基于Linux的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由Google公司和开放手机联盟领导开发 IOS 由苹果公司开发的移动操作系统 Webkit 一个开源的浏览器引擎,在手机上的...

    svg2png-test

    例如,开发者可以将这个工具整合到持续集成/持续部署(CI/CD)流程,确保每次代码更新后,所有SVG图标都被转换为PNG,以备不支持SVG的环境使用。 总结起来,"svg2png-test"项目是一个使用JavaScript编写的工具,其...

    Beginning Android 4

    - 第一步:创建Android项目的基础流程。 - **第3章:你的第一个Android项目(Your First Android Project)** - **主要内容**:手把手指导读者完成第一个简单的Android项目的创建过程。 - **关键知识点**: - ...

Global site tag (gtag.js) - Google Analytics