| // Copyright 2014 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "extensions/browser/runtime_data.h" |
| |
| #include "extensions/browser/extension_registry.h" |
| #include "extensions/common/extension.h" |
| #include "extensions/common/manifest_handlers/background_info.h" |
| |
| namespace extensions { |
| |
| RuntimeData::RuntimeData(ExtensionRegistry* registry) : registry_(registry) { |
| registry_->AddObserver(this); |
| } |
| |
| RuntimeData::~RuntimeData() { |
| registry_->RemoveObserver(this); |
| } |
| |
| bool RuntimeData::IsBackgroundPageReady(const Extension* extension) const { |
| if (!BackgroundInfo::HasPersistentBackgroundPage(extension)) |
| return true; |
| return HasFlag(extension->id(), BACKGROUND_PAGE_READY); |
| } |
| |
| void RuntimeData::SetBackgroundPageReady(const std::string& extension_id, |
| bool value) { |
| SetFlag(extension_id, BACKGROUND_PAGE_READY, value); |
| } |
| |
| bool RuntimeData::IsBeingUpgraded(const std::string& extension_id) const { |
| return HasFlag(extension_id, BEING_UPGRADED); |
| } |
| |
| void RuntimeData::SetBeingUpgraded(const std::string& extension_id, |
| bool value) { |
| SetFlag(extension_id, BEING_UPGRADED, value); |
| } |
| |
| bool RuntimeData::HasUsedWebRequest(const std::string& extension_id) const { |
| return HasFlag(extension_id, HAS_USED_WEBREQUEST); |
| } |
| |
| void RuntimeData::SetHasUsedWebRequest(const std::string& extension_id, |
| bool value) { |
| SetFlag(extension_id, HAS_USED_WEBREQUEST, value); |
| } |
| |
| bool RuntimeData::HasExtensionForTesting( |
| const std::string& extension_id) const { |
| return extension_flags_.find(extension_id) != extension_flags_.end(); |
| } |
| |
| void RuntimeData::ClearAll() { |
| extension_flags_.clear(); |
| } |
| |
| void RuntimeData::OnExtensionUnloaded(content::BrowserContext* browser_context, |
| const Extension* extension, |
| UnloadedExtensionInfo::Reason reason) { |
| ExtensionFlagsMap::iterator iter = extension_flags_.find(extension->id()); |
| if (iter != extension_flags_.end()) |
| iter->second = iter->second & kPersistAcrossUnloadMask; |
| } |
| |
| bool RuntimeData::HasFlag(const std::string& extension_id, |
| RuntimeFlag flag) const { |
| ExtensionFlagsMap::const_iterator it = extension_flags_.find(extension_id); |
| if (it == extension_flags_.end()) |
| return false; |
| return !!(it->second & flag); |
| } |
| |
| void RuntimeData::SetFlag(const std::string& extension_id, |
| RuntimeFlag flag, |
| bool value) { |
| if (value) |
| extension_flags_[extension_id] |= flag; |
| else |
| extension_flags_[extension_id] &= ~flag; |
| } |
| |
| } // namespace extensions |