chromium中增加默认主题的一个方法
来源:互联网 发布:科研大数据平台建设 编辑:程序博客网 时间:2024/05/22 01:54
首先,chromium除了默认主题外,其它都是以chrome拓展的方式安装的,所以对于一个新的主题,需要定一个主题id,这个主题id可以先自己定一个,只要长度一致就可以了,但是主题id会有字母范围的限制,所以可以找一个现成的id,然后直接交换几个字母的位置就可以,后继这个id并不会真正用到。
src\chrome\browser\themes\theme_service.ccconst char* ThemeService::kDefaultThemeID = "";const char* ThemeService::kNewDefaultThemeID = "ndoippcjlipfddffdcimakhebaemnmgn";
在theme_service_factory.cc中设置默认注册的主题id为新的主题id。
src\chrome\browser\themes\theme_service_factory.cc registry->RegisterStringPref( prefs::kCurrentThemeID, ThemeService::kNewDefaultThemeID, user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
在chrome启动后,会调用ThemeService::Init函数,进而进入LoadThemePrefs函数,但是进入LoadThemePrefs后,这里是不载入主题的,因为当前current_id等于kNewDefaultThemeID,kCurrentThemePackFilename为空。ThemeService会监听NOTIFICATION_EXTENSIONS_READY信号,当extension系统启动完成后,调用ThemeService的OnExtensionServiceReady函数,接下来就可以通过extension系统加载主题。在OnExtensionServiceReady函数中,ready_当前的值为false,因为没有载入任何主题。调用MigrateTheme函数,将函数修改为
void ThemeService::MigrateTheme() { // TODO(erg): We need to pop up a dialog informing the user that their // theme is being migrated. ExtensionService* service = extensions::ExtensionSystem::Get(profile_)->extension_service(); const Extension* extension = service ? service->GetExtensionById(GetThemeID(), false) : NULL; if (extension) { DLOG(ERROR) << "Migrating theme"; BuildFromExtension(extension); content::RecordAction(UserMetricsAction("Themes.Migrated")); } else {if (GetThemeID() == kNewDefaultThemeID) {base::FilePath dir_exe;PathService::Get(base::DIR_EXE, &dir_exe);base::FilePath new_theme_dir(dir_exe.value() + FILE_PATH_LITERAL("/new_theme"));extensions::UnpackedInstaller::Create(service)->Load(new_theme_dir);} else { DLOG(ERROR) << "Theme is mysteriously gone."; ClearAllThemeData(); content::RecordAction(UserMetricsAction("Themes.Gone")); } }}由于初始的主题id是kNewDefaultThemeID,会需要从给定文件夹new_theme_dir载入主题拓展。MigrateTheme运行完毕调用NotifyThemeChanged,主题加载完成。
在重置主题时,会调用ClearAllThemeData函数,该函数重新设置主题id,并重新载入主题。
void ThemeService::ClearAllThemeData() { if (!ready_) return; SwapThemeSupplier(NULL); FreePlatformCaches(); profile_->GetPrefs()->ClearPref(prefs::kCurrentThemePackFilename); SaveThemeID(kNewDefaultThemeID); base::MessageLoop::current()->PostTask(FROM_HERE, base::Bind(&ThemeService::RemoveUnusedThemes, weak_ptr_factory_.GetWeakPtr(), true)); MigrateTheme();}
0 0
- chromium中增加默认主题的一个方法
- 在chromium源码中增加默认的搜索引擎
- Liferay:主题中增加滚动图片的方法 之一
- openwrt修改默认主题的方法
- 在chromium中加入默认的启动页
- Discuz!手机版版块页面主题列表中隔几个主题插入一个广告位的方法
- Discuz!手机版版块页面主题列表中隔几个主题插入一个广告位的方法
- vmware中增加一个虚拟磁盘的方法
- Chromium本地化的方法
- Chromium本地化的方法
- Chromium本地化的方法
- Chromium本地化的方法
- [chromium] Android中替换chromium_org中的skia库的方法
- SQL的一个查询中增加一个序列号【三种不同的方法】
- wordpress 中默认主题模板文件的说明
- GridView增加一个统计行的方法
- GridView增加一个统计行的方法
- Flex3 LIST 增加一个ITEM 的方法
- [csdn markdown]使用摘记三 简便快捷的流程图
- tomcat7启动报错
- Instant Client ODBC驱动安装步骤
- 像流水一样装着发行版
- 软件包 junit.framework 不存在的解决方法
- chromium中增加默认主题的一个方法
- android多线程使用实例之AsynTask和handler的使用
- 微信公众平台开发教程(五)自定义菜单
- map 通过迭代器 遍历
- java中判断传入的字符串是否是时间格式
- div层实现文字垂直显示
- linux内核编程
- OpenGL 喷泉效果部分解释
- ICMP协议