// |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的更多相关文章

  1. chromium之task

    // A task is a generic runnable thingy, usually used for running code on a // different thread or fo ...

  2. QT5利用chromium内核与HTML页面交互

    在QT5.4之前,做QT开发浏览器只能选择QWebkit,但是有过使用的都会发现,这个webkit不是出奇的慢,简直是慢的令人发指,Release模式下还行,debug下你就无语了,但是webkit毕 ...

  3. Google之Chromium浏览器源码学习——base公共通用库(一)

    Google的优秀C++开源项目繁多,其中的Chromium浏览器项目可以说是很具有代表性的,此外还包括其第三开发开源库或是自己的优秀开源库,可以根据需要抽取自己感兴趣的部分.在研究.学习该项目前的时 ...

  4. 如何在windows上编译Chromium (CEF3) 并加入MP3支持(二)

    时隔一年,再次编译cef3,独一无二的目的仍为加入mp3支持.新版本的编译环境和注意事项都已经发生了变化,于是再记录一下. 一.编译版本 cef版本号格式为X.YYYY.A.gHHHHHHH X为主版 ...

  5. 如何在Windows上从源码编译Chromium (CEF3) 加入mp3支持

    一.什么是CEF CEF即Chromium Embeded Framework,由谷歌的开源浏览器项目Chromium扩展而来,可方便地嵌入其它程序中以得到浏览器功能. CEF包括CEF1和CEF3两 ...

  6. 构建基于Chromium的应用程序

    chromium是google chrome浏览器所采用的内核,最开始由苹果的webkit发展而出,由于webkit在发展上存在分歧,而google希望在开发上有更大的自由度,2013年google决 ...

  7. ubuntu中chromium无法播放flash,安装flash

    ubuntu14.0.4中系统自带的chromium无法播放flash,后来查了下,得知chromium已经不支持adobe flash了,用户可使用pepper flash替代.安装pepper f ...

  8. windows下编译chromium浏览器的15个流程整理

    编译chromium 系统为windows, 国内在windows上编译chromium的资料比较少, 我这篇文章只能作为参考, 记录我遇到的一些问题,因为chromium团队也会修改了代码,或者编译 ...

  9. Google之Chromium浏览器源码学习——base公共通用库(二)

    上次提到Chromium浏览器中base公共通用库中的内存分配器allocator,其中用到了三方库tcmalloc.jemalloc:对于这两个内存分配器,个人建议,对于内存,最好是自己维护内存池: ...

随机推荐

  1. Resharper 的快捷键

      编辑   Ctrl + Space 代码完成 Ctrl + Shift + Space代码完成 Ctrl + Alt + Space代码完成 Ctrl + P 显示参数信息 Alt + Inser ...

  2. HTML 5中的新特性

    HTML 5中的新特性 html5新增了一些语义化更好的标签元素.首先,让我们来了解一下HTML语义化. 1.什么是HTML语义化? 根据内容的结构化(内容语义化),选择合适的标签(代码语义化)便于开 ...

  3. jQuery之设置元素内容(移动和复制元素,使用append(),appendTo()方法)

    jQuery之设置元素内容(移动和复制元素,使用append(),appendTo()方法) ---------- 如果想把内容添加到现有内容末尾,可以利用append()命令.append()命令语 ...

  4. 03_CronTrigger

    [Cron表达式] Quartz使用类似于Linux下的Cron表达式定义的时间规则,Cron表达式由6到7个空格分隔的时间字段组成. [ 字符说明 ] * :可以用在所有字段中,表示对应时间域内的每 ...

  5. 【Linux】IPC-消息队列

    问题 消息队列id 和键值KEY区别? 首先要注意一个概念:IPC结构都是内核的结构.也就是说IPC结构由内核维护,对于每个进程都是公共的,不属于某个特定进程.只有这样,IPC结构才能支持它们&quo ...

  6. ElasticSearch索引快照

    参考文档:https://www.elastic.co/guide/en/elasticsearch/reference/5.1/modules-snapshots.html 备份数据之前,要创建一个 ...

  7. 设计模式——工厂方法模式(Factory Method)

    原文地址:http://www.cnblogs.com/Bobby0322/p/4179921.html 介绍 在简单工厂模式中,我们提到,工厂方法模式是简单工厂模式的一个延伸,它属于Gof23中设计 ...

  8. python操作excel (openpyxl)

    最近看到好几次群里有人问xlwt.wlrd的问题,怎么说呢,如果是office2007刚出来,大家用xlsx文件用不习惯,还可以理解,这都10年过去了喂,就算没有进化到office2016,还在用of ...

  9. Blob, Uint8Aray, atob/btoa in lt IE9 browser

    Blob, Uint8Aray, atob/btoa in lt IE9 browser 标签(空格分隔): compatibility 之前写的代码全部在Chrome调试,用IE打开发现各种问题. ...

  10. 基于ssh的多节点之间互信通信的实现

    实现条件:node1:192.168.176.6 主机名称是node1.magedu.com: node2:192.168.176.6 主机名称是node1.magedu.com: 实现目的:在节点n ...