1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "extensions/browser/runtime_data.h"
7 #include "extensions/browser/extension_registry.h"
8 #include "extensions/common/extension.h"
9 #include "extensions/common/manifest_handlers/background_info.h"
11 namespace extensions
{
13 RuntimeData::RuntimeData(ExtensionRegistry
* registry
) : registry_(registry
) {
14 registry_
->AddObserver(this);
17 RuntimeData::~RuntimeData() {
18 registry_
->RemoveObserver(this);
21 bool RuntimeData::IsBackgroundPageReady(const Extension
* extension
) const {
22 if (!BackgroundInfo::HasPersistentBackgroundPage(extension
))
24 return HasFlag(extension
, BACKGROUND_PAGE_READY
);
27 void RuntimeData::SetBackgroundPageReady(const Extension
* extension
,
29 SetFlag(extension
, BACKGROUND_PAGE_READY
, value
);
32 bool RuntimeData::IsBeingUpgraded(const Extension
* extension
) const {
33 return HasFlag(extension
, BEING_UPGRADED
);
36 void RuntimeData::SetBeingUpgraded(const Extension
* extension
, bool value
) {
37 SetFlag(extension
, BEING_UPGRADED
, value
);
40 bool RuntimeData::HasUsedWebRequest(const Extension
* extension
) const {
41 return HasFlag(extension
, HAS_USED_WEBREQUEST
);
44 void RuntimeData::SetHasUsedWebRequest(const Extension
* extension
, bool value
) {
45 SetFlag(extension
, HAS_USED_WEBREQUEST
, value
);
48 bool RuntimeData::HasExtensionForTesting(const Extension
* extension
) const {
49 return extension_flags_
.find(extension
->id()) != extension_flags_
.end();
52 void RuntimeData::ClearAll() {
53 extension_flags_
.clear();
56 void RuntimeData::OnExtensionUnloaded(content::BrowserContext
* browser_context
,
57 const Extension
* extension
,
58 UnloadedExtensionInfo::Reason reason
) {
59 extension_flags_
.erase(extension
->id());
62 bool RuntimeData::HasFlag(const Extension
* extension
, RuntimeFlag flag
) const {
63 ExtensionFlagsMap::const_iterator it
= extension_flags_
.find(extension
->id());
64 if (it
== extension_flags_
.end())
66 return !!(it
->second
& flag
);
69 void RuntimeData::SetFlag(const Extension
* extension
,
73 extension_flags_
[extension
->id()] |= flag
;
75 extension_flags_
[extension
->id()] &= ~flag
;
78 } // namespace extensions