chromium之revocable_store
// |RevocableStore| is a container of items that can be removed from the store.
Revoke: 撤销
RevocableStore 是个items容器,items可以从store中删除。
还是老样子,看看头文件
class RevocableStore {
public:
// A |StoreRef| is used to link the |RevocableStore| to its items. There is
// one StoreRef per store, and each item holds a reference to it. If the
// store wishes to revoke its items, it sets |store_| to null. Items are
// permitted to release their reference to the |StoreRef| when they no longer
// require the store.
class StoreRef : public base::RefCounted<StoreRef> {
public:
StoreRef(RevocableStore* store) : store_(store) { }
void set_store(RevocableStore* store) { store_ = store; }
RevocableStore* store() const { return store_; }
private:
RevocableStore* store_;
DISALLOW_EVIL_CONSTRUCTORS(StoreRef);
};
// An item in the store. On construction, the object adds itself to the
// store.
class Revocable {
public:
Revocable(RevocableStore* store);
~Revocable();
// This item has been revoked if it no longer has a pointer to the store.
bool revoked() const { return !store_reference_->store(); }
private:
// We hold a reference to the store through this ref pointer. We release
// this reference on destruction.
scoped_refptr<StoreRef> store_reference_;
DISALLOW_EVIL_CONSTRUCTORS(Revocable);
};
RevocableStore();
~RevocableStore();
// Revokes all the items in the store.
void RevokeAll();
// Returns true if there are no items in the store.
bool empty() const { return count_ == ; }
private:
friend class Revocable;
// Adds an item to the store. To add an item to the store, construct it
// with a pointer to the store.
void Add(Revocable* item);
// This is the reference the unrevoked items in the store hold.
scoped_refptr<StoreRef> owning_reference_;
// The number of unrevoked items in the store.
int count_;
DISALLOW_EVIL_CONSTRUCTORS(RevocableStore);
};
想一想怎么用
总共有3个类,RevocableStore,StoreRef,Revocable,其中两个嵌套类,StoreRef,Revocable
头文件的开头说,这是个items容器,猜测RevocableStore是容器,Revocable对应items
RevocableStore *store = new RevocableStore();
Revocable *item = new Revocable(store);
...
store->RevokeAll();
Revocable构造函数传递了一个store进去,应该会调用store的Add方法,瞄一下实现
RevocableStore::Revocable::Revocable(RevocableStore* store)
: store_reference_(store->owning_reference_) {
// We AddRef() the owning reference.
DCHECK(store_reference_->store());
store_reference_->store()->Add(this);
}
chromium之revocable_store的更多相关文章
- chromium之task
// A task is a generic runnable thingy, usually used for running code on a // different thread or fo ...
- QT5利用chromium内核与HTML页面交互
在QT5.4之前,做QT开发浏览器只能选择QWebkit,但是有过使用的都会发现,这个webkit不是出奇的慢,简直是慢的令人发指,Release模式下还行,debug下你就无语了,但是webkit毕 ...
- Google之Chromium浏览器源码学习——base公共通用库(一)
Google的优秀C++开源项目繁多,其中的Chromium浏览器项目可以说是很具有代表性的,此外还包括其第三开发开源库或是自己的优秀开源库,可以根据需要抽取自己感兴趣的部分.在研究.学习该项目前的时 ...
- 如何在windows上编译Chromium (CEF3) 并加入MP3支持(二)
时隔一年,再次编译cef3,独一无二的目的仍为加入mp3支持.新版本的编译环境和注意事项都已经发生了变化,于是再记录一下. 一.编译版本 cef版本号格式为X.YYYY.A.gHHHHHHH X为主版 ...
- 如何在Windows上从源码编译Chromium (CEF3) 加入mp3支持
一.什么是CEF CEF即Chromium Embeded Framework,由谷歌的开源浏览器项目Chromium扩展而来,可方便地嵌入其它程序中以得到浏览器功能. CEF包括CEF1和CEF3两 ...
- 构建基于Chromium的应用程序
chromium是google chrome浏览器所采用的内核,最开始由苹果的webkit发展而出,由于webkit在发展上存在分歧,而google希望在开发上有更大的自由度,2013年google决 ...
- ubuntu中chromium无法播放flash,安装flash
ubuntu14.0.4中系统自带的chromium无法播放flash,后来查了下,得知chromium已经不支持adobe flash了,用户可使用pepper flash替代.安装pepper f ...
- windows下编译chromium浏览器的15个流程整理
编译chromium 系统为windows, 国内在windows上编译chromium的资料比较少, 我这篇文章只能作为参考, 记录我遇到的一些问题,因为chromium团队也会修改了代码,或者编译 ...
- Google之Chromium浏览器源码学习——base公共通用库(二)
上次提到Chromium浏览器中base公共通用库中的内存分配器allocator,其中用到了三方库tcmalloc.jemalloc:对于这两个内存分配器,个人建议,对于内存,最好是自己维护内存池: ...
随机推荐
- win10下MySQL 5.7.20解压版安装步骤
1.从官网下载MySQL5.7.20解压版64位:https://dev.mysql.com/downloads/file/?id=473309. 2.解压(我的解压路径为:E:\mysql-5.7. ...
- webpack、babel模块、模块化
一.webpack介绍 webpack这个工具非常强大,解决了前端很繁琐的一些工具流程繁琐的事情.中文官网链接地址:https://www.webpackjs.com/ 1.为什么要使用webpack ...
- Angular选项卡
前几天我发的东西,可能对于没有基础的人很难理解,那么今天,咱们就发点简单点的东西吧! Angular显示隐藏,选项卡! 还是那句话,话不多说,上代码: <!DOCTYPE html> &l ...
- c语言进制转化
#include <stdio.h> // 进制转化 int main(void) { ; ; int i3 = 0x32C; printf( printf( printf("十 ...
- Java—集合框架 Collections.sort()、Comparable接口和Comparator接口
Collentions工具类--java.util.Collections Collentions是Java集合框架中,用来操作集合对象的工具类,也是Java集合框架的成员,与List.Map和Set ...
- java面试题全集(上)--java基础
本文转载自:https://blog.csdn.net/jackfrued/article/details/44921941 1.面向对象的特征有哪些方面? 答:面向对象的特征主要有以下几个方面: - ...
- SOL的补充
之前写过一些关于远程安装系统的文档,但是对于SOL还是糊涂不清. Serial Console 可以将输入输出转发到串行接口(com1, com2), 假如你有串行读取设备,就可以看到显示,控制输入. ...
- SQLServer存储过程 实例,很多语法可以以后参考
SQL代码 alter PROCEDURE sp_addnewdtgtype ( ), @dtgdllcontent image, ) ) AS BEGIN ); declare @v_count i ...
- 控制台执行java找不到或无法加载主类
- windows网络命令汇总
分类: 网络技术2011-10-26 09:43 2557人阅读 评论(0) 收藏 举报 windows网络路由器dns服务器internetinterface Ping命令: ping命令通过发送I ...