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

Side by Side Diff: chrome/common/pepper_permission_util.cc

Issue 264923011: Add a whitelist check for nacl-nonsfi mode (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: feedback Created 6 years, 7 months 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 2013 The Chromium Authors. All rights reserved. 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 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/common/pepper_permission_util.h" 5 #include "chrome/common/pepper_permission_util.h"
6 6
7 #include <vector> 7 #include <vector>
8 8
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/sha1.h" 10 #include "base/sha1.h"
11 #include "base/strings/string_number_conversions.h" 11 #include "base/strings/string_number_conversions.h"
12 #include "base/strings/string_tokenizer.h" 12 #include "base/strings/string_tokenizer.h"
13 #include "extensions/common/constants.h" 13 #include "extensions/common/constants.h"
14 #include "extensions/common/extension.h" 14 #include "extensions/common/extension.h"
15 #include "extensions/common/extension_set.h" 15 #include "extensions/common/extension_set.h"
16 #include "extensions/common/manifest_handlers/shared_module_info.h" 16 #include "extensions/common/manifest_handlers/shared_module_info.h"
17 17
18 using extensions::Extension; 18 using extensions::Extension;
19 using extensions::Manifest; 19 using extensions::Manifest;
20 using extensions::SharedModuleInfo;
20 21
21 namespace chrome { 22 namespace chrome {
22 23
23 namespace { 24 namespace {
24 25
25 std::string HashHost(const std::string& host) { 26 std::string HashHost(const std::string& host) {
26 const std::string id_hash = base::SHA1HashString(host); 27 const std::string id_hash = base::SHA1HashString(host);
27 DCHECK_EQ(id_hash.length(), base::kSHA1Length); 28 DCHECK_EQ(id_hash.length(), base::kSHA1Length);
28 return base::HexEncode(id_hash.c_str(), id_hash.length()); 29 return base::HexEncode(id_hash.c_str(), id_hash.length());
29 } 30 }
30 31
31 bool HostIsInSet(const std::string& host, const std::set<std::string>& set) { 32 bool HostIsInSet(const std::string& host, const std::set<std::string>& set) {
32 return set.count(host) > 0 || set.count(HashHost(host)) > 0; 33 return set.count(host) > 0 || set.count(HashHost(host)) > 0;
33 } 34 }
34 35
35 } // namespace 36 } // namespace
36 37
37 bool IsExtensionOrSharedModuleWhitelisted( 38 bool IsExtensionOrSharedModuleWhitelisted(
jln (very slow on Chromium) 2014/05/08 23:22:41 I didn't find pepper_permission_util.h very clear.
elijahtaylor1 2014/05/09 00:33:28 Done.
38 const GURL& url, 39 const GURL& url,
39 const extensions::ExtensionSet* extension_set, 40 const extensions::ExtensionSet* extension_set,
40 const std::set<std::string>& whitelist) { 41 const std::set<std::string>& whitelist) {
41 if (!url.is_valid() || !url.SchemeIs(extensions::kExtensionScheme)) 42 if (!url.is_valid() || !url.SchemeIs(extensions::kExtensionScheme))
42 return false; 43 return false;
43 44
44 const std::string host = url.host(); 45 const std::string host = url.host();
45 if (HostIsInSet(host, whitelist)) 46 if (HostIsInSet(host, whitelist))
46 return true; 47 return true;
47 48
48 // Check the modules that are imported by this extension to see if any of them 49 // Check the modules that are imported by this extension to see if any of them
49 // is whitelisted. 50 // is whitelisted.
50 const Extension* extension = extension_set ? extension_set->GetByID(host) 51 const Extension* extension = extension_set ? extension_set->GetByID(host)
51 : NULL; 52 : NULL;
52 if (extension) { 53 if (extension) {
jln (very slow on Chromium) 2014/05/08 23:22:41 Nit: I would find "if (!extension) { return false;
elijahtaylor1 2014/05/09 00:33:28 Done.
53 typedef std::vector<extensions::SharedModuleInfo::ImportInfo> 54 typedef std::vector<SharedModuleInfo::ImportInfo> ImportInfoVector;
54 ImportInfoVector; 55 const ImportInfoVector& imports = SharedModuleInfo::GetImports(extension);
55 const ImportInfoVector& imports =
56 extensions::SharedModuleInfo::GetImports(extension);
57 for (ImportInfoVector::const_iterator it = imports.begin(); 56 for (ImportInfoVector::const_iterator it = imports.begin();
58 it != imports.end(); ++it) { 57 it != imports.end(); ++it) {
59 const Extension* imported_extension = extension_set->GetByID( 58 const Extension* imported_extension = extension_set->GetByID(
60 it->extension_id); 59 it->extension_id);
61 if (imported_extension && 60 if (imported_extension &&
62 extensions::SharedModuleInfo::IsSharedModule(imported_extension) && 61 SharedModuleInfo::IsSharedModule(imported_extension) &&
62 // We check the whitelist explicitly even though the extension should
63 // never have been allowed to be installed in the first place if this
64 // fails.
65 SharedModuleInfo::IsExportAllowedByWhitelist(imported_extension,
66 host) &&
63 HostIsInSet(it->extension_id, whitelist)) { 67 HostIsInSet(it->extension_id, whitelist)) {
64 return true; 68 return true;
65 } 69 }
66 } 70 }
67 } 71 }
68 72
69 return false; 73 return false;
70 } 74 }
71 75
72 bool IsHostAllowedByCommandLine(const GURL& url, 76 bool IsHostAllowedByCommandLine(const GURL& url,
(...skipping 23 matching lines...) Expand all
96 base::StringTokenizer t(allowed_list, ","); 100 base::StringTokenizer t(allowed_list, ",");
97 while (t.GetNext()) { 101 while (t.GetNext()) {
98 if (t.token() == host) 102 if (t.token() == host)
99 return true; 103 return true;
100 } 104 }
101 105
102 return false; 106 return false;
103 } 107 }
104 108
105 } // namespace chrome 109 } // namespace chrome
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698