runtime_data.cc revision 0529e5d033099cbfc42635f6f6183833b09dff6e
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. 4 5#include "extensions/browser/runtime_data.h" 6 7#include "extensions/browser/extension_registry.h" 8#include "extensions/common/extension.h" 9#include "extensions/common/manifest_handlers/background_info.h" 10 11namespace extensions { 12 13RuntimeData::RuntimeData(ExtensionRegistry* registry) : registry_(registry) { 14 registry_->AddObserver(this); 15} 16 17RuntimeData::~RuntimeData() { 18 registry_->RemoveObserver(this); 19} 20 21bool RuntimeData::IsBackgroundPageReady(const Extension* extension) const { 22 if (!BackgroundInfo::HasPersistentBackgroundPage(extension)) 23 return true; 24 return HasFlag(extension, BACKGROUND_PAGE_READY); 25} 26 27void RuntimeData::SetBackgroundPageReady(const Extension* extension, 28 bool value) { 29 SetFlag(extension, BACKGROUND_PAGE_READY, value); 30} 31 32bool RuntimeData::IsBeingUpgraded(const Extension* extension) const { 33 return HasFlag(extension, BEING_UPGRADED); 34} 35 36void RuntimeData::SetBeingUpgraded(const Extension* extension, bool value) { 37 SetFlag(extension, BEING_UPGRADED, value); 38} 39 40bool RuntimeData::HasUsedWebRequest(const Extension* extension) const { 41 return HasFlag(extension, HAS_USED_WEBREQUEST); 42} 43 44void RuntimeData::SetHasUsedWebRequest(const Extension* extension, bool value) { 45 SetFlag(extension, HAS_USED_WEBREQUEST, value); 46} 47 48bool RuntimeData::HasExtensionForTesting(const Extension* extension) const { 49 return extension_flags_.find(extension->id()) != extension_flags_.end(); 50} 51 52void RuntimeData::ClearAll() { 53 extension_flags_.clear(); 54} 55 56void RuntimeData::OnExtensionUnloaded(content::BrowserContext* browser_context, 57 const Extension* extension, 58 UnloadedExtensionInfo::Reason reason) { 59 extension_flags_.erase(extension->id()); 60} 61 62bool RuntimeData::HasFlag(const Extension* extension, RuntimeFlag flag) const { 63 ExtensionFlagsMap::const_iterator it = extension_flags_.find(extension->id()); 64 if (it == extension_flags_.end()) 65 return false; 66 return !!(it->second & flag); 67} 68 69void RuntimeData::SetFlag(const Extension* extension, 70 RuntimeFlag flag, 71 bool value) { 72 if (value) 73 extension_flags_[extension->id()] |= flag; 74 else 75 extension_flags_[extension->id()] &= ~flag; 76} 77 78} // namespace extensions 79