WebKit内核分析之FrameLoader

参考地址:http://blog.csdn.net/dlmu2001/article/details/6168545

FrameLoader类负责一个Frame的加载,在Frame的流程中起到非常重要的作用,同很多组件都有交互,本文将分析FrameLoader类的代码

1. 概述

顾名思义,FrameLoader是一个Frame的loader,它的作用就是为客户端提供一个下载一个Frame的一系列的接口。这里的客户指的是类的客户,比如Frame类,间接客户是上层应用,比如 qwebframe

从它的定义看,最容易想到的是一个load接口,用来将一个frame load下来。任何一个页面都需要一个mainframe,因此一个页面的下载一般就是从load 一个 mainframe开始

在 load frame的过程中,通过FrameLoaderClient接口将load过程的不同阶段告知客户

FrameLoader通过 setDocumentLoader相当于把load的工作委托给了 DocumentLoader类

FrameLoader同 DocumentLoader是has-a的关系。一般在load的时候创建 DocumentLoader。Frame调用DocumentLoader的startLoadingMainResource开始 load frame

类数据代码:

 1 class FrameLoader {
 2     WTF_MAKE_NONCOPYABLE(FrameLoader);
 3 private:
 4     Frame* m_frame;
 5     FrameLoaderClient* m_client;
 6
 7     mutable PolicyChecker m_policyChecker;
 8     mutable HistoryController m_history;
 9     mutable ResourceLoadNotifier m_notifer;
10     mutable SubframeLoader m_subframeLoader;
11     mutable FrameLoaderStateMachine m_stateMachine;
12
13     FrameState m_state;
14     FrameLoadType m_loadType;
15
16     // Document loaders for the three phases of frame loading. Note that while
17     // a new request is being loaded, the old document loader may still be referenced.
18     // E.g. while a new request is in the "policy" state, the old document loader may
19     // be consulted in particular as it makes sense to imply certain settings on the new loader.
20     RefPtr<DocumentLoader> m_documentLoader;
21     RefPtr<DocumentLoader> m_provisionalDocumentLoader;
22     RefPtr<DocumentLoader> m_policyDocumentLoader;
23
24     bool m_delegateIsHandlingProvisionalLoadError;
25
26     bool m_quickRedirectComing;
27     bool m_sentRedirectNotification;
28     bool m_inStopAllLoaders;
29
30     String m_outgoingReferrer;
31
32     bool m_isExecutingJavaScriptFormAction;
33
34     bool m_didCallImplicitClose;
35     bool m_wasUnloadEventEmitted;
36     bool m_pageDismissalEventBeingDispatched;
37     bool m_isComplete;
38     bool m_isLoadingMainResource;
39
40     RefPtr<SerializedScriptValue> m_pendingStateObject;
41
42     KURL m_workingURL;
43
44     OwnPtr<IconLoader> m_iconLoader;
45     bool m_mayLoadIconLater;
46
47     bool m_needsClear;
48
49     KURL m_submittedFormURL;
50
51     Timer<FrameLoader> m_checkTimer;
52     bool m_shouldCallCheckCompleted;
53     bool m_shouldCallCheckLoadComplete;
54
55     Frame* m_opener;
56     HashSet<Frame*> m_openedFrames;
57
58     bool m_didPerformFirstNavigation;
59     bool m_loadingFromCachedPage;
60     bool m_suppressOpenerInNewFrame;
61
62     SandboxFlags m_sandboxFlags;
63     SandboxFlags m_forcedSandboxFlags;
64
65     RefPtr<FrameNetworkingContext> m_networkingContext;
66
67     KURL m_previousUrl;
68 }

2. 类关系

时间: 2024-08-25 01:21:27

WebKit内核分析之FrameLoader的相关文章

webkit内核分析之 Frame

参考地址:http://blog.csdn.net/dlmu2001/article/details/6164873 1.    描述 Frame类是WebCore内核同应用之间联系的一个重要的类.它有点像设计模式中的Façade,将内核的各个不同的零配件组装在了一起,但又不是Façade,因为用户很多时候还是要直接去操作里面的组件.除了设计上的考虑,Frame还有语法上的意义,它对应于Page里面的帧. 看一下类定义: 1 class Frame : public RefCounted<Fra

[WebKit内核] JavaScript引擎深度解析--基础篇(一)字节码生成及语法树的构建详情分析

[WebKit内核] JavaScript引擎深度解析--基础篇(一)字节码生成及语法树的构建详情分析 标签: webkit内核JavaScriptCore 2015-03-26 23:26 2285人阅读 评论(1) 收藏 举报  分类: Webkit(34)  JavascriptCore/JIT(3)  版权声明:本文为博主原创文章,未经博主允许不得转载. 看到HorkeyChen写的文章<[WebKit] JavaScriptCore解析--基础篇(三)从脚本代码到JIT编译的代码实现>

八大Webkit内核浏览器

列举出时下最流行的Webkit内核浏览器,所以我们并不会做出评测和对比.PS:本文列举的浏览器有一部分为IE+Webkit双核浏览器,如果您对其他IE内核浏览器很感兴趣<抛弃数据!用体验和感觉告诉你什么才是最好用的浏览器!>一文可能会对你有所帮助.尖端技术的Webkit内核WebKit 是一个开源的浏览器引擎,与之相对应的引擎有Gecko(Mozilla Firefox 等使用)和Trident(也称MSHTML,IE 使用).同时WebKit 也是苹果Mac OS X 系统引擎框架版本的名称

PostgreSQL数据库内核分析 笔记(这本书没有怎么很好的看,主要就是一些数据结构、概念和流程的文字介绍)

PostgreSQL数据库内核分析 跳转至: 导航. 搜索 目录 1系统概述 2体系结构 3存储管理 4索引 5查询编译 6查询执行 7事务处理与并发控制 8数据库安全 9附录A 用Eclipse开发和调试 系统概述 初始化数据库:./initdb --no-locale -D ../data ./pg_ctl start -D ../data 数据库命令:initdb createuser dropuser createdb dropdb pg_dump pg_restore pg_ctl v

《linux 内核分析》 第4周

王一 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.linux 系统的状态 Linux在x86平台下支持0内核态和3用户态.在内核态32位平台能访问0x00000000以上的空间,而用户态只能访问小于0xc0000000一下的地址空间 (此处的地址空间为逻辑地址).当用户态切换到内核态的时候主要方式为中断. 1.当int128调用时,系统会自动的两个状态下的cs:eip,ss:es

《linux 内核分析》 第二周 实验

王一 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 本次课的核心是通过中断机制完成进程的调度 ,在本次课程中__init my_start_kernel作为入口函数,定义0号进程的tPCB结构体,通过复制来制造其他进程的tPCB数据结构,中断时间函数被 my_timer_handler周期性的调用来修改my_need_sched 的值,而0号进程一直在检测my_need_sched 的

Linux内核分析8

周子轩 原创作品转载请注明出处  <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 实验目的: 使用gdb跟踪分析一个schedule()函数,理解Linux系统中进程调度的时机. 实验过程: 登陆实验楼虚拟机http://www.shiyanlou.com/courses/195 打开shell终端,执行以下命令: cd LinuxKernel rm -rf menu git clone https://git

《Linux内核分析》课程第七周学习总结

姓名:何伟钦 学号:20135223 ( *原创作品转载请注明出处*) ( 学习课程:<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-100002900 学习内容:Linux内核如何装载和启动一个可执行程序 理解编译链接的过程和ELF可执行文件格式: 编程使用exec*库函数加载一个可执行文件,动态链接分为可执行程序装载时动态链接和运行时动态链接,编程练习动态链接库的这两种使用方式: 使用gdb跟踪分析一个execve系统调用内核处

LINUX内核分析第七周学习总结——可执行程序的装载

LINUX内核分析第六周学习总结——进程的描述和进程的创建 张忻(原创作品转载请注明出处) <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.知识概要 (一)预处理.编译.链接和目标文件的格式 1.可执行程序是怎么得来的 2.目标文件的格式ELF 3.静态链接的ELF可执行文件和进程的地址空间 (二)可执行程序.共享库和动态加载 1.装载可执行程序之前的工作 2.装载时动态链接和运行时动态链接应用举例 (三)