OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/extensions/api/declarative/rules_cache_delegate.h" | 5 #include "chrome/browser/extensions/api/declarative/rules_cache_delegate.h" |
6 | 6 |
7 #include "chrome/browser/chrome_notification_types.h" | 7 #include "chrome/browser/chrome_notification_types.h" |
8 #include "chrome/browser/extensions/api/declarative/rules_registry.h" | 8 #include "chrome/browser/extensions/api/declarative/rules_registry.h" |
9 #include "chrome/browser/extensions/extension_service.h" | 9 #include "chrome/browser/extensions/extension_service.h" |
10 #include "chrome/browser/extensions/extension_system.h" | 10 #include "chrome/browser/extensions/extension_system.h" |
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
72 profile_->IsOffTheRecord()); | 72 profile_->IsOffTheRecord()); |
73 rules_stored_key_ = GetRulesStoredKey(registry->event_name(), | 73 rules_stored_key_ = GetRulesStoredKey(registry->event_name(), |
74 profile_->IsOffTheRecord()); | 74 profile_->IsOffTheRecord()); |
75 rules_registry_thread_ = registry->owner_thread(); | 75 rules_registry_thread_ = registry->owner_thread(); |
76 | 76 |
77 ExtensionSystem& system = *ExtensionSystem::Get(profile_); | 77 ExtensionSystem& system = *ExtensionSystem::Get(profile_); |
78 extensions::StateStore* store = system.rules_store(); | 78 extensions::StateStore* store = system.rules_store(); |
79 if (store) | 79 if (store) |
80 store->RegisterKey(storage_key_); | 80 store->RegisterKey(storage_key_); |
81 | 81 |
82 registrar_.Add(this, | |
83 chrome::NOTIFICATION_EXTENSION_LOADED, | |
84 content::Source<Profile>(profile_->GetOriginalProfile())); | |
85 | |
86 if (profile_->IsOffTheRecord()) | 82 if (profile_->IsOffTheRecord()) |
87 log_storage_init_delay_ = false; | 83 log_storage_init_delay_ = false; |
88 | 84 |
89 system.ready().Post( | 85 system.ready().Post( |
90 FROM_HERE, | 86 FROM_HERE, |
91 base::Bind(&RulesCacheDelegate::ReadRulesForInstalledExtensions, | 87 base::Bind(&RulesCacheDelegate::ReadRulesForInstalledExtensions, |
92 weak_ptr_factory_.GetWeakPtr())); | 88 weak_ptr_factory_.GetWeakPtr())); |
93 system.ready().Post(FROM_HERE, | 89 system.ready().Post(FROM_HERE, |
94 base::Bind(&RulesCacheDelegate::CheckIfReady, | 90 base::Bind(&RulesCacheDelegate::CheckIfReady, |
95 weak_ptr_factory_.GetWeakPtr())); | 91 weak_ptr_factory_.GetWeakPtr())); |
(...skipping 11 matching lines...) Expand all Loading... |
107 bool store_rules = !rules->empty(); | 103 bool store_rules = !rules->empty(); |
108 SetDeclarativeRulesStored(extension_id, store_rules); | 104 SetDeclarativeRulesStored(extension_id, store_rules); |
109 if (!rules_stored_previously && !store_rules) | 105 if (!rules_stored_previously && !store_rules) |
110 return; | 106 return; |
111 | 107 |
112 StateStore* store = ExtensionSystem::Get(profile_)->rules_store(); | 108 StateStore* store = ExtensionSystem::Get(profile_)->rules_store(); |
113 if (store) | 109 if (store) |
114 store->SetExtensionValue(extension_id, storage_key_, value.Pass()); | 110 store->SetExtensionValue(extension_id, storage_key_, value.Pass()); |
115 } | 111 } |
116 | 112 |
117 void RulesCacheDelegate::Observe( | |
118 int type, | |
119 const content::NotificationSource& source, | |
120 const content::NotificationDetails& details) { | |
121 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); | |
122 DCHECK_EQ(chrome::NOTIFICATION_EXTENSION_LOADED, type); | |
123 | |
124 const extensions::Extension* extension = | |
125 content::Details<const extensions::Extension>(details).ptr(); | |
126 // TODO(mpcomplete): This API check should generalize to any use of | |
127 // declarative rules, not just webRequest. | |
128 if (extension->HasAPIPermission(APIPermission::kDeclarativeContent) || | |
129 extension->HasAPIPermission(APIPermission::kDeclarativeWebRequest)) { | |
130 InfoMap* extension_info_map = ExtensionSystem::Get(profile_)->info_map(); | |
131 if (profile_->IsOffTheRecord() && | |
132 !extension_info_map->IsIncognitoEnabled(extension->id())) { | |
133 // Ignore this extension. | |
134 } else { | |
135 ReadFromStorage(extension->id()); | |
136 } | |
137 } | |
138 } | |
139 | |
140 void RulesCacheDelegate::CheckIfReady() { | 113 void RulesCacheDelegate::CheckIfReady() { |
141 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); | 114 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); |
142 if (notified_registry_ || !waiting_for_extensions_.empty()) | 115 if (notified_registry_ || !waiting_for_extensions_.empty()) |
143 return; | 116 return; |
144 | 117 |
145 content::BrowserThread::PostTask( | 118 content::BrowserThread::PostTask( |
146 rules_registry_thread_, | 119 rules_registry_thread_, |
147 FROM_HERE, | 120 FROM_HERE, |
148 base::Bind( | 121 base::Bind( |
149 &RulesRegistry::MarkReady, registry_, storage_init_time_)); | 122 &RulesRegistry::MarkReady, registry_, storage_init_time_)); |
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
241 bool rules_stored) { | 214 bool rules_stored) { |
242 CHECK(profile_); | 215 CHECK(profile_); |
243 ExtensionScopedPrefs* extension_prefs = ExtensionPrefs::Get(profile_); | 216 ExtensionScopedPrefs* extension_prefs = ExtensionPrefs::Get(profile_); |
244 extension_prefs->UpdateExtensionPref( | 217 extension_prefs->UpdateExtensionPref( |
245 extension_id, | 218 extension_id, |
246 rules_stored_key_, | 219 rules_stored_key_, |
247 new base::FundamentalValue(rules_stored)); | 220 new base::FundamentalValue(rules_stored)); |
248 } | 221 } |
249 | 222 |
250 } // namespace extensions | 223 } // namespace extensions |
OLD | NEW |