process_map.cc revision f2477e01787aa58f445919b809d89e252beef54f
1f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "extensions/browser/process_map.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace extensions { 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Item 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct ProcessMap::Item { 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Item() : process_id(0), site_instance_id(0) { 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Purposely implicit constructor needed on older gcc's. See: 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // http://codereview.chromium.org/8769022/ 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) explicit Item(const ProcessMap::Item& other) 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : extension_id(other.extension_id), 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) process_id(other.process_id), 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) site_instance_id(other.site_instance_id) { 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Item(const std::string& extension_id, int process_id, 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int site_instance_id) 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : extension_id(extension_id), 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) process_id(process_id), 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) site_instance_id(site_instance_id) { 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ~Item() { 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool operator<(const ProcessMap::Item& other) const { 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (extension_id < other.extension_id) 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (extension_id == other.extension_id && 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) process_id < other.process_id) { 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (extension_id == other.extension_id && 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) process_id == other.process_id && 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) site_instance_id < other.site_instance_id) { 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string extension_id; 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int process_id; 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int site_instance_id; 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// ProcessMap 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ProcessMap::ProcessMap() { 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ProcessMap::~ProcessMap() { 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ProcessMap::Insert(const std::string& extension_id, int process_id, 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int site_instance_id) { 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return items_.insert(Item(extension_id, process_id, site_instance_id)).second; 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ProcessMap::Remove(const std::string& extension_id, int process_id, 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int site_instance_id) { 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return items_.erase(Item(extension_id, process_id, site_instance_id)) > 0; 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int ProcessMap::RemoveAllFromProcess(int process_id) { 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int result = 0; 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (ItemSet::iterator iter = items_.begin(); iter != items_.end(); ) { 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (iter->process_id == process_id) { 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) items_.erase(iter++); 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ++result; 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ++iter; 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return result; 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ProcessMap::Contains(const std::string& extension_id, 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int process_id) const { 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (ItemSet::const_iterator iter = items_.begin(); iter != items_.end(); 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ++iter) { 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (iter->process_id == process_id && iter->extension_id == extension_id) 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ProcessMap::Contains(int process_id) const { 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (ItemSet::const_iterator iter = items_.begin(); iter != items_.end(); 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ++iter) { 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (iter->process_id == process_id) 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::set<std::string> ProcessMap::GetExtensionsInProcess(int process_id) const { 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::set<std::string> result; 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (ItemSet::const_iterator iter = items_.begin(); iter != items_.end(); 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ++iter) { 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (iter->process_id == process_id) 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) result.insert(iter->extension_id); 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return result; 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // extensions 116