WebKit中一个设置项起作用的流程
来源:互联网 发布:绵阳软件培训学校 编辑:程序博客网 时间:2024/06/05 10:33
1在Source/WebKit2/Shared/WebPreferencesDefinitions.h中增加一个宏,格式要和那文件里已有的宏相一致.
如:macro(DoNotTrack,doNotTrack, Bool, bool, true) \
2在Source/WebCore/page/Settings.in中添加内容,设定初始值,依照下面的形式
如:doNotTrackinitial=false
该文件的改动会引起编译时重新生成DerivedSources/WebCore目录中的文件.
这两步之后,就在内核的设置中增加了一个新的设置项.这些设置项就可以在Source/WebKit2/UIProcess/WebPreferences.h中使用了,该文件中的宏
#defineDECLARE_PREFERENCE_GETTER_AND_SETTERS(KeyUpper, KeyLower, TypeName,Type, DefaultValue) \
voidset##KeyUpper(const Type& value); \
TypeKeyLower() const;
让Source/WebKit2/Shared/WebPreferencesDefinitions.h中的宏在WebPreferences中生效,相应的设置函数和取得相应的设置值的函数就可以在Source/WebKit2/UIProcess/API/gtk/WebKitSettings.cpp中使用了,
如:
得到doNotTrack设置值的priv->preferences->doNotTrack()和设置doNotTrack的priv->preferences->setDoNotTrack(enabled);
然后就可以在Source/WebKit2/UIProcess/API/gtk/WebKitSettings.h中添加相应的设置函数给应用层调用了.
3要让设置值起作用,还需要在webpage这一层添加一个函数,格式是:
settings.setDoNotTrack(store.getBoolValueForKey(WebPreferencesKey::doNotTrackKey()));
4整个设置起作用的流程,函数的调用关系为:
当界面进行设置,调用了Source/WebKit2/UIProcess/API/gtk/WebKitSettings.h中提供的设置函数时,如果设置值和WebPreferences里的值不一致时,就会调用WebPreferences里的设置函数.
voidwebkit_settings_set_enable_do_not_track(WebKitSettings* settings,gboolean enabled)
{
g_return_if_fail(WEBKIT_IS_SETTINGS(settings));
WebKitSettingsPrivate*priv = settings->priv;
boolcurrentValue = priv->preferences->doNotTrack();
if(currentValue == enabled)
return;
priv->preferences->setDoNotTrack(enabled);
g_object_notify(G_OBJECT(settings),"do-not-track");
}
当调用到priv->preferences->setDoNotTrack(enabled)函数设置一个新的布尔值时,会调用WebPreferences::updateBoolValueForKey进行bool数据更新,该函数会调用WebPreferences::update()函数,update()函数会调用到webPageProxy->preferencesDidChange(),webPageProxy是web进程中webPage结构的代理类.在webPageProxy->preferencesDidChange()函数中,会通过语句:
m_process->send(Messages::WebPage::PreferencesDidChange(preferencesStore()),m_pageID, m_isPerformingDOMPrintOperation ?IPC::DispatchMessageEvenWhenWaitingForSyncReply :0);来向webPage类发送信号,从而在该类的PreferencesDidChange中作相应的数值更新操作.
在webPage类中相关函数的调用为:
首先会调用WebPage::preferencesDidChange()函数,在该函数中,会调用WebPage::updatePreferences()函数,在updatePreferences函数中完成相应的设置工作,通过上面添加的语句settings.setDoNotTrack(store.getBoolValueForKey(WebPreferencesKey::doNotTrackKey()));来完成设置.
整个添加代码和函数调用的流程就是这样,具体里面的一些语句是如何生成的,以及这其中的各个类和这些类之间的关系,还需要继续对WebKit原码的研读来做更深入的了解.
- WebKit中一个设置项起作用的流程
- WebKit中CSS处理流程
- WebKit中CSS处理流程
- WebKit加载网页的流程
- WebKit加载网页的流程
- WebKit加载网页的流程
- WebKit加载网页的流程
- WebKit焦点切换的流程
- WebKit加载网页的流程
- WebKit加载网页的流程
- WebKit 的事件处理流程
- WebKit中CSS处理流程(一)
- WebKit中CSS处理流程(二)
- WebKit中CSS处理流程(三)
- WebKit中CSS处理流程(四)
- 让MFC中Object的版本号起作用的注意事项
- WebKit加载网页的流程(dlmu2001)
- WebKit加载网页的流程(dlmu2001)
- 【Markdown】回车换行
- arcgis api for android MapView的索引
- POJ 2299 Ultra-QuickSort 分治法求逆序数
- Vim命令整理
- android自定义View之(四)------一键清除动画
- WebKit中一个设置项起作用的流程
- 点评10款Github上最火爆的国产开源项目
- 树状数组之逆序数
- 一款基于jQuery饼状图比例分布数据报表
- Docker Dockerfile详解
- 嵌入式 视频处理前端
- oracle patch from 2014 10
- memcached缓存技术
- 设置屏幕常亮 switch