• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2013 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/process_map.h"
6 
7 namespace extensions {
8 
9 // Item
10 struct ProcessMap::Item {
Itemextensions::ProcessMap::Item11   Item() : process_id(0), site_instance_id(0) {
12   }
13 
14   // Purposely implicit constructor needed on older gcc's. See:
15   // http://codereview.chromium.org/8769022/
Itemextensions::ProcessMap::Item16   explicit Item(const ProcessMap::Item& other)
17       : extension_id(other.extension_id),
18         process_id(other.process_id),
19         site_instance_id(other.site_instance_id) {
20   }
21 
Itemextensions::ProcessMap::Item22   Item(const std::string& extension_id, int process_id,
23        int site_instance_id)
24       : extension_id(extension_id),
25         process_id(process_id),
26         site_instance_id(site_instance_id) {
27   }
28 
~Itemextensions::ProcessMap::Item29   ~Item() {
30   }
31 
operator <extensions::ProcessMap::Item32   bool operator<(const ProcessMap::Item& other) const {
33     if (extension_id < other.extension_id)
34       return true;
35 
36     if (extension_id == other.extension_id &&
37         process_id < other.process_id) {
38       return true;
39     }
40 
41     if (extension_id == other.extension_id &&
42         process_id == other.process_id &&
43         site_instance_id < other.site_instance_id) {
44       return true;
45     }
46 
47     return false;
48   }
49 
50   std::string extension_id;
51   int process_id;
52   int site_instance_id;
53 };
54 
55 
56 // ProcessMap
ProcessMap()57 ProcessMap::ProcessMap() {
58 }
59 
~ProcessMap()60 ProcessMap::~ProcessMap() {
61 }
62 
Insert(const std::string & extension_id,int process_id,int site_instance_id)63 bool ProcessMap::Insert(const std::string& extension_id, int process_id,
64                         int site_instance_id) {
65   return items_.insert(Item(extension_id, process_id, site_instance_id)).second;
66 }
67 
Remove(const std::string & extension_id,int process_id,int site_instance_id)68 bool ProcessMap::Remove(const std::string& extension_id, int process_id,
69                         int site_instance_id) {
70   return items_.erase(Item(extension_id, process_id, site_instance_id)) > 0;
71 }
72 
RemoveAllFromProcess(int process_id)73 int ProcessMap::RemoveAllFromProcess(int process_id) {
74   int result = 0;
75   for (ItemSet::iterator iter = items_.begin(); iter != items_.end(); ) {
76     if (iter->process_id == process_id) {
77       items_.erase(iter++);
78       ++result;
79     } else {
80       ++iter;
81     }
82   }
83   return result;
84 }
85 
Contains(const std::string & extension_id,int process_id) const86 bool ProcessMap::Contains(const std::string& extension_id,
87                           int process_id) const {
88   for (ItemSet::const_iterator iter = items_.begin(); iter != items_.end();
89        ++iter) {
90     if (iter->process_id == process_id && iter->extension_id == extension_id)
91       return true;
92   }
93   return false;
94 }
95 
Contains(int process_id) const96 bool ProcessMap::Contains(int process_id) const {
97   for (ItemSet::const_iterator iter = items_.begin(); iter != items_.end();
98        ++iter) {
99     if (iter->process_id == process_id)
100       return true;
101   }
102   return false;
103 }
104 
GetExtensionsInProcess(int process_id) const105 std::set<std::string> ProcessMap::GetExtensionsInProcess(int process_id) const {
106   std::set<std::string> result;
107   for (ItemSet::const_iterator iter = items_.begin(); iter != items_.end();
108        ++iter) {
109     if (iter->process_id == process_id)
110       result.insert(iter->extension_id);
111   }
112   return result;
113 }
114 
115 }  // extensions
116