Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(550)

Side by Side Diff: chrome/browser/extensions/api/declarative/rules_registry_storage_delegate.cc

Issue 10831008: Refactor and fix declarative webRequest API permissions (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Nits Created 8 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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_registry_storage_deleg ate.h" 5 #include "chrome/browser/extensions/api/declarative/rules_registry_storage_deleg ate.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "chrome/browser/extensions/extension_service.h"
8 #include "chrome/browser/extensions/extension_system.h" 9 #include "chrome/browser/extensions/extension_system.h"
9 #include "chrome/browser/extensions/state_store.h" 10 #include "chrome/browser/extensions/state_store.h"
11 #include "chrome/browser/profiles/profile.h"
10 #include "chrome/common/chrome_notification_types.h" 12 #include "chrome/common/chrome_notification_types.h"
11 #include "chrome/common/extensions/extension.h" 13 #include "chrome/common/extensions/extension.h"
12 #include "content/public/browser/browser_thread.h" 14 #include "content/public/browser/browser_thread.h"
13 #include "content/public/browser/notification_details.h" 15 #include "content/public/browser/notification_details.h"
14 #include "content/public/browser/notification_source.h" 16 #include "content/public/browser/notification_source.h"
15 17
16 namespace extensions { 18 namespace extensions {
17 19
18 namespace { 20 namespace {
19 21
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
57 Inner(Profile* profile, 59 Inner(Profile* profile,
58 RulesRegistryWithCache* rules_registry, 60 RulesRegistryWithCache* rules_registry,
59 const std::string& storage_key); 61 const std::string& storage_key);
60 62
61 private: 63 private:
62 friend class base::RefCountedThreadSafe<Inner>; 64 friend class base::RefCountedThreadSafe<Inner>;
63 friend class RulesRegistryStorageDelegate; 65 friend class RulesRegistryStorageDelegate;
64 66
65 ~Inner(); 67 ~Inner();
66 68
69 // Initialization of the storage delegate if it is used in the context of
70 // an incognito profile.
71 void InitForOTRProfile();
72
67 // NotificationObserver 73 // NotificationObserver
68 virtual void Observe( 74 virtual void Observe(
69 int type, 75 int type,
70 const content::NotificationSource& source, 76 const content::NotificationSource& source,
71 const content::NotificationDetails& details) OVERRIDE; 77 const content::NotificationDetails& details) OVERRIDE;
72 78
73 // Read/write a list of rules serialized to Values. 79 // Read/write a list of rules serialized to Values.
74 void ReadFromStorage(const std::string& extension_id); 80 void ReadFromStorage(const std::string& extension_id);
75 void ReadFromStorageCallback(const std::string& extension_id, 81 void ReadFromStorageCallback(const std::string& extension_id,
76 scoped_ptr<base::Value> value); 82 scoped_ptr<base::Value> value);
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
157 RulesRegistryStorageDelegate::Inner::Inner( 163 RulesRegistryStorageDelegate::Inner::Inner(
158 Profile* profile, 164 Profile* profile,
159 RulesRegistryWithCache* rules_registry, 165 RulesRegistryWithCache* rules_registry,
160 const std::string& storage_key) 166 const std::string& storage_key)
161 : registrar_(new content::NotificationRegistrar()), 167 : registrar_(new content::NotificationRegistrar()),
162 profile_(profile), 168 profile_(profile),
163 storage_key_(storage_key), 169 storage_key_(storage_key),
164 rules_registry_thread_(rules_registry->GetOwnerThread()), 170 rules_registry_thread_(rules_registry->GetOwnerThread()),
165 rules_registry_(rules_registry), 171 rules_registry_(rules_registry),
166 ready_(false) { 172 ready_(false) {
167 registrar_->Add(this, chrome::NOTIFICATION_EXTENSION_LOADED, 173 if (!profile_->IsOffTheRecord()) {
168 content::Source<Profile>(profile)); 174 registrar_->Add(this, chrome::NOTIFICATION_EXTENSION_LOADED,
169 registrar_->Add(this, chrome::NOTIFICATION_EXTENSIONS_READY, 175 content::Source<Profile>(profile));
170 content::Source<Profile>(profile)); 176 registrar_->Add(this, chrome::NOTIFICATION_EXTENSIONS_READY,
177 content::Source<Profile>(profile));
178 } else {
179 registrar_->Add(this, chrome::NOTIFICATION_EXTENSION_LOADED,
180 content::Source<Profile>(profile));
Matt Perry 2012/07/25 21:27:56 You need to register for the notification for prof
Yoyo Zhou 2012/07/25 21:44:45 You probably want profile->GetOriginalProfile() he
battre 2012/07/26 16:38:43 Done.
battre 2012/07/26 16:38:43 Done.
181 InitForOTRProfile();
Matt Perry 2012/07/25 21:27:56 You should also set ready_ = true.
battre 2012/07/26 16:38:43 I think the better approach is to call CheckIfRead
Matt Perry 2012/07/26 18:42:41 No, then it will be considered "not ready" for som
182 }
171 } 183 }
172 184
173 RulesRegistryStorageDelegate::Inner::~Inner() { 185 RulesRegistryStorageDelegate::Inner::~Inner() {
174 DCHECK(!registrar_.get()); 186 DCHECK(!registrar_.get());
175 } 187 }
176 188
189 void RulesRegistryStorageDelegate::Inner::InitForOTRProfile() {
Matt Perry 2012/07/25 21:27:56 May as well do this step for both types of profile
battre 2012/07/26 16:38:43 This is not quite clear to me. Note the check whet
Matt Perry 2012/07/26 18:42:41 OK, I take that back then.
190 ExtensionService* extension_service =
191 extensions::ExtensionSystem::Get(profile_)->extension_service();
192 const ExtensionSet* extensions = extension_service->extensions();
193 for (ExtensionSet::const_iterator i = extensions->begin();
194 i != extensions->end(); ++i) {
195 if ((*i)->HasAPIPermission(APIPermission::kDeclarativeWebRequest) &&
196 extension_service->IsIncognitoEnabled((*i)->id()))
197 ReadFromStorage((*i)->id());
198 }
199 }
200
177 void RulesRegistryStorageDelegate::Inner::Observe( 201 void RulesRegistryStorageDelegate::Inner::Observe(
178 int type, 202 int type,
179 const content::NotificationSource& source, 203 const content::NotificationSource& source,
180 const content::NotificationDetails& details) { 204 const content::NotificationDetails& details) {
181 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); 205 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
182 if (type == chrome::NOTIFICATION_EXTENSION_LOADED) { 206 if (type == chrome::NOTIFICATION_EXTENSION_LOADED) {
183 const extensions::Extension* extension = 207 const extensions::Extension* extension =
184 content::Details<const extensions::Extension>(details).ptr(); 208 content::Details<const extensions::Extension>(details).ptr();
185 // TODO(mpcomplete): This API check should generalize to any use of 209 // TODO(mpcomplete): This API check should generalize to any use of
186 // declarative rules, not just webRequest. 210 // declarative rules, not just webRequest.
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
246 void RulesRegistryStorageDelegate::Inner::NotifyReadyOnRegistryThread() { 270 void RulesRegistryStorageDelegate::Inner::NotifyReadyOnRegistryThread() {
247 DCHECK(content::BrowserThread::CurrentlyOn(rules_registry_thread_)); 271 DCHECK(content::BrowserThread::CurrentlyOn(rules_registry_thread_));
248 if (ready_) 272 if (ready_)
249 return; // we've already notified our readiness 273 return; // we've already notified our readiness
250 274
251 ready_ = true; 275 ready_ = true;
252 rules_registry_->OnReady(); 276 rules_registry_->OnReady();
253 } 277 }
254 278
255 } // namespace extensions 279 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698