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()和设置doNotTrackpriv->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()webPageProxyweb进程中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原码的研读来做更深入的了解.

0 0
原创粉丝点击