Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(874)

Side by Side Diff: chrome/browser/extensions/extension_info_map.cc

Issue 4200005: Part 4/4 of immutable Extension refactor: Kill Extension::StaticData and put (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 10 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/extensions/extension_info_map.h" 5 #include "chrome/browser/extensions/extension_info_map.h"
6 6
7 #include "chrome/browser/browser_thread.h" 7 #include "chrome/browser/browser_thread.h"
8 #include "chrome/common/extensions/extension.h"
8 #include "chrome/common/url_constants.h" 9 #include "chrome/common/url_constants.h"
9 10
10 namespace { 11 namespace {
11 12
12 static void CheckOnValidThread() { 13 static void CheckOnValidThread() {
13 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 14 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
14 } 15 }
15 16
16 } // namespace 17 } // namespace
17 18
18 ExtensionInfoMap::ExtensionInfoMap() { 19 ExtensionInfoMap::ExtensionInfoMap() {
19 } 20 }
20 21
21 ExtensionInfoMap::~ExtensionInfoMap() { 22 ExtensionInfoMap::~ExtensionInfoMap() {
22 } 23 }
23 24
24 void ExtensionInfoMap::AddExtension(const Extension::StaticData* data) { 25 void ExtensionInfoMap::AddExtension(const Extension* extension) {
25 CheckOnValidThread(); 26 CheckOnValidThread();
26 extension_info_[data->id] = data; 27 extension_info_[extension->id()] = extension;
27 28
28 // Our map has already added a reference. Balance the reference given at the 29 // Our map has already added a reference. Balance the reference given at the
29 // call-site. 30 // call-site.
30 data->Release(); 31 extension->Release();
31 } 32 }
32 33
33 void ExtensionInfoMap::RemoveExtension(const std::string& id) { 34 void ExtensionInfoMap::RemoveExtension(const std::string& id) {
34 CheckOnValidThread(); 35 CheckOnValidThread();
35 Map::iterator iter = extension_info_.find(id); 36 Map::iterator iter = extension_info_.find(id);
36 if (iter != extension_info_.end()) { 37 if (iter != extension_info_.end()) {
37 extension_info_.erase(iter); 38 extension_info_.erase(iter);
38 } else { 39 } else {
39 // NOTE: This can currently happen if we receive multiple unload 40 // NOTE: This can currently happen if we receive multiple unload
40 // notifications, e.g. setting incognito-enabled state for a 41 // notifications, e.g. setting incognito-enabled state for a
41 // disabled extension (e.g., via sync). See 42 // disabled extension (e.g., via sync). See
42 // http://code.google.com/p/chromium/issues/detail?id=50582 . 43 // http://code.google.com/p/chromium/issues/detail?id=50582 .
43 NOTREACHED() << id; 44 NOTREACHED() << id;
44 } 45 }
45 } 46 }
46 47
47 48
48 std::string ExtensionInfoMap::GetNameForExtension(const std::string& id) const { 49 std::string ExtensionInfoMap::GetNameForExtension(const std::string& id) const {
49 Map::const_iterator iter = extension_info_.find(id); 50 Map::const_iterator iter = extension_info_.find(id);
50 if (iter != extension_info_.end()) 51 if (iter != extension_info_.end())
51 return iter->second->name; 52 return iter->second->name();
52 else 53 else
53 return std::string(); 54 return std::string();
54 } 55 }
55 56
56 FilePath ExtensionInfoMap::GetPathForExtension(const std::string& id) const { 57 FilePath ExtensionInfoMap::GetPathForExtension(const std::string& id) const {
57 Map::const_iterator iter = extension_info_.find(id); 58 Map::const_iterator iter = extension_info_.find(id);
58 if (iter != extension_info_.end()) 59 if (iter != extension_info_.end())
59 return iter->second->path; 60 return iter->second->path();
60 else 61 else
61 return FilePath(); 62 return FilePath();
62 } 63 }
63 64
64 bool ExtensionInfoMap::ExtensionHasWebExtent(const std::string& id) const { 65 bool ExtensionInfoMap::ExtensionHasWebExtent(const std::string& id) const {
65 Map::const_iterator iter = extension_info_.find(id); 66 Map::const_iterator iter = extension_info_.find(id);
66 return iter != extension_info_.end() && !iter->second->extent.is_empty(); 67 return iter != extension_info_.end() &&
68 !iter->second->web_extent().is_empty();
67 } 69 }
68 70
69 bool ExtensionInfoMap::ExtensionCanLoadInIncognito( 71 bool ExtensionInfoMap::ExtensionCanLoadInIncognito(
70 const std::string& id) const { 72 const std::string& id) const {
71 Map::const_iterator iter = extension_info_.find(id); 73 Map::const_iterator iter = extension_info_.find(id);
72 // Only split-mode extensions can load in incognito profiles. 74 // Only split-mode extensions can load in incognito profiles.
73 return iter != extension_info_.end() && iter->second->incognito_split_mode; 75 return iter != extension_info_.end() && iter->second->incognito_split_mode();
74 } 76 }
75 77
76 std::string ExtensionInfoMap::GetDefaultLocaleForExtension( 78 std::string ExtensionInfoMap::GetDefaultLocaleForExtension(
77 const std::string& id) const { 79 const std::string& id) const {
78 Map::const_iterator iter = extension_info_.find(id); 80 Map::const_iterator iter = extension_info_.find(id);
79 std::string result; 81 std::string result;
80 if (iter != extension_info_.end()) 82 if (iter != extension_info_.end())
81 result = iter->second->default_locale; 83 result = iter->second->default_locale();
82 84
83 return result; 85 return result;
84 } 86 }
85 87
86 ExtensionExtent ExtensionInfoMap::GetEffectiveHostPermissionsForExtension( 88 ExtensionExtent ExtensionInfoMap::GetEffectiveHostPermissionsForExtension(
87 const std::string& id) const { 89 const std::string& id) const {
88 Map::const_iterator iter = extension_info_.find(id); 90 Map::const_iterator iter = extension_info_.find(id);
89 ExtensionExtent result; 91 ExtensionExtent result;
90 if (iter != extension_info_.end()) 92 if (iter != extension_info_.end())
91 result = iter->second->effective_host_permissions; 93 result = iter->second->GetEffectiveHostPermissions();
92 94
93 return result; 95 return result;
94 } 96 }
95 97
96 bool ExtensionInfoMap::CheckURLAccessToExtensionPermission( 98 bool ExtensionInfoMap::CheckURLAccessToExtensionPermission(
97 const GURL& url, 99 const GURL& url,
98 const char* permission_name) const { 100 const char* permission_name) const {
99 Map::const_iterator info; 101 Map::const_iterator info;
100 if (url.SchemeIs(chrome::kExtensionScheme)) { 102 if (url.SchemeIs(chrome::kExtensionScheme)) {
101 // If the url is an extension scheme, we just look it up by extension id. 103 // If the url is an extension scheme, we just look it up by extension id.
102 std::string id = url.host(); 104 std::string id = url.host();
103 info = extension_info_.find(id); 105 info = extension_info_.find(id);
104 } else { 106 } else {
105 // Otherwise, we scan for a matching extent. Overlapping extents are 107 // Otherwise, we scan for a matching extent. Overlapping extents are
106 // disallowed, so only one will match. 108 // disallowed, so only one will match.
107 info = extension_info_.begin(); 109 info = extension_info_.begin();
108 while (info != extension_info_.end() && 110 while (info != extension_info_.end() &&
109 !info->second->extent.ContainsURL(url)) 111 !info->second->web_extent().ContainsURL(url))
110 ++info; 112 ++info;
111 } 113 }
112 114
113 if (info == extension_info_.end()) 115 if (info == extension_info_.end())
114 return false; 116 return false;
115 117
116 const std::set<std::string>& api_permissions = info->second->api_permissions; 118 return info->second->api_permissions().count(permission_name) != 0;
117 return api_permissions.count(permission_name) != 0;
118 } 119 }
119 120
120 bool ExtensionInfoMap::URLIsForExtensionIcon(const GURL& url) const { 121 bool ExtensionInfoMap::URLIsForExtensionIcon(const GURL& url) const {
121 DCHECK(url.SchemeIs(chrome::kExtensionScheme)); 122 DCHECK(url.SchemeIs(chrome::kExtensionScheme));
122 123
123 Map::const_iterator iter = extension_info_.find(url.host()); 124 Map::const_iterator iter = extension_info_.find(url.host());
124 if (iter == extension_info_.end()) 125 if (iter == extension_info_.end())
125 return false; 126 return false;
126 127
127 std::string path = url.path(); 128 std::string path = url.path();
128 DCHECK(path.length() > 0 && path[0] == '/'); 129 DCHECK(path.length() > 0 && path[0] == '/');
129 path = path.substr(1); 130 path = path.substr(1);
130 return iter->second->icons.ContainsPath(path); 131 return iter->second->icons().ContainsPath(path);
131 } 132 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698