diff options
author | benwells@chromium.org <benwells@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-11-14 06:30:34 +0000 |
---|---|---|
committer | benwells@chromium.org <benwells@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-11-14 06:30:34 +0000 |
commit | 50de9aa22a2635c65678e62928ed8cc32969bb31 (patch) | |
tree | 3213daecf81fa94d2f73a8622ffa7de93dc75326 /extensions/browser/process_map.cc | |
parent | df5e9eaaf88d8ab2dab563e5bd9be1760d116f6e (diff) | |
download | chromium_src-50de9aa22a2635c65678e62928ed8cc32969bb31.zip chromium_src-50de9aa22a2635c65678e62928ed8cc32969bb31.tar.gz chromium_src-50de9aa22a2635c65678e62928ed8cc32969bb31.tar.bz2 |
Moved ProcessMap to extensions/
TBR=isherman@chromium.org
BUG=162530
Review URL: https://codereview.chromium.org/68113008
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@235064 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'extensions/browser/process_map.cc')
-rw-r--r-- | extensions/browser/process_map.cc | 115 |
1 files changed, 115 insertions, 0 deletions
diff --git a/extensions/browser/process_map.cc b/extensions/browser/process_map.cc new file mode 100644 index 0000000..899940e --- /dev/null +++ b/extensions/browser/process_map.cc @@ -0,0 +1,115 @@ +// Copyright 2013 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/process_map.h" + +namespace extensions { + +// Item +struct ProcessMap::Item { + Item() : process_id(0), site_instance_id(0) { + } + + // Purposely implicit constructor needed on older gcc's. See: + // http://codereview.chromium.org/8769022/ + explicit Item(const ProcessMap::Item& other) + : extension_id(other.extension_id), + process_id(other.process_id), + site_instance_id(other.site_instance_id) { + } + + Item(const std::string& extension_id, int process_id, + int site_instance_id) + : extension_id(extension_id), + process_id(process_id), + site_instance_id(site_instance_id) { + } + + ~Item() { + } + + bool operator<(const ProcessMap::Item& other) const { + if (extension_id < other.extension_id) + return true; + + if (extension_id == other.extension_id && + process_id < other.process_id) { + return true; + } + + if (extension_id == other.extension_id && + process_id == other.process_id && + site_instance_id < other.site_instance_id) { + return true; + } + + return false; + } + + std::string extension_id; + int process_id; + int site_instance_id; +}; + + +// ProcessMap +ProcessMap::ProcessMap() { +} + +ProcessMap::~ProcessMap() { +} + +bool ProcessMap::Insert(const std::string& extension_id, int process_id, + int site_instance_id) { + return items_.insert(Item(extension_id, process_id, site_instance_id)).second; +} + +bool ProcessMap::Remove(const std::string& extension_id, int process_id, + int site_instance_id) { + return items_.erase(Item(extension_id, process_id, site_instance_id)) > 0; +} + +int ProcessMap::RemoveAllFromProcess(int process_id) { + int result = 0; + for (ItemSet::iterator iter = items_.begin(); iter != items_.end(); ) { + if (iter->process_id == process_id) { + items_.erase(iter++); + ++result; + } else { + ++iter; + } + } + return result; +} + +bool ProcessMap::Contains(const std::string& extension_id, + int process_id) const { + for (ItemSet::const_iterator iter = items_.begin(); iter != items_.end(); + ++iter) { + if (iter->process_id == process_id && iter->extension_id == extension_id) + return true; + } + return false; +} + +bool ProcessMap::Contains(int process_id) const { + for (ItemSet::const_iterator iter = items_.begin(); iter != items_.end(); + ++iter) { + if (iter->process_id == process_id) + return true; + } + return false; +} + +std::set<std::string> ProcessMap::GetExtensionsInProcess(int process_id) const { + std::set<std::string> result; + for (ItemSet::const_iterator iter = items_.begin(); iter != items_.end(); + ++iter) { + if (iter->process_id == process_id) + result.insert(iter->extension_id); + } + return result; +} + +} // extensions |