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

Side by Side Diff: extensions/common/features/simple_feature.cc

Issue 1047943002: Cache --whitelisted-extension-id in SimpleFeature. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Address comments. Created 5 years, 8 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
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 "extensions/common/features/simple_feature.h" 5 #include "extensions/common/features/simple_feature.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <map> 8 #include <map>
9 #include <vector> 9 #include <vector>
10 10
11 #include "base/bind.h" 11 #include "base/bind.h"
12 #include "base/command_line.h" 12 #include "base/command_line.h"
13 #include "base/debug/alias.h" 13 #include "base/debug/alias.h"
14 #include "base/macros.h"
14 #include "base/sha1.h" 15 #include "base/sha1.h"
15 #include "base/stl_util.h" 16 #include "base/stl_util.h"
16 #include "base/strings/string_number_conversions.h" 17 #include "base/strings/string_number_conversions.h"
17 #include "base/strings/string_util.h" 18 #include "base/strings/string_util.h"
18 #include "base/strings/stringprintf.h" 19 #include "base/strings/stringprintf.h"
19 #include "extensions/common/extension_api.h" 20 #include "extensions/common/extension_api.h"
20 #include "extensions/common/features/feature_provider.h" 21 #include "extensions/common/features/feature_provider.h"
21 #include "extensions/common/switches.h" 22 #include "extensions/common/switches.h"
22 23
23 namespace extensions { 24 namespace extensions {
(...skipping 332 matching lines...) Expand 10 before | Expand all | Expand 10 after
356 if (IsIdInBlacklist(extension_id)) 357 if (IsIdInBlacklist(extension_id))
357 return CreateAvailability(FOUND_IN_BLACKLIST, type); 358 return CreateAvailability(FOUND_IN_BLACKLIST, type);
358 359
359 // TODO(benwells): don't grant all component extensions. 360 // TODO(benwells): don't grant all component extensions.
360 // See http://crbug.com/370375 for more details. 361 // See http://crbug.com/370375 for more details.
361 // Component extensions can access any feature. 362 // Component extensions can access any feature.
362 // NOTE: Deliberately does not match EXTERNAL_COMPONENT. 363 // NOTE: Deliberately does not match EXTERNAL_COMPONENT.
363 if (component_extensions_auto_granted_ && location == Manifest::COMPONENT) 364 if (component_extensions_auto_granted_ && location == Manifest::COMPONENT)
364 return CreateAvailability(IS_AVAILABLE, type); 365 return CreateAvailability(IS_AVAILABLE, type);
365 366
366 if (!whitelist_.empty()) { 367 if (!whitelist_.empty() && !IsIdInWhitelist(extension_id) &&
367 if (!IsIdInWhitelist(extension_id)) { 368 !IsWhitelistedByCommandLine(extension_id)) {
368 // TODO(aa): This is gross. There should be a better way to test the 369 return CreateAvailability(NOT_FOUND_IN_WHITELIST, type);
369 // whitelist.
370 base::CommandLine* command_line = base::CommandLine::ForCurrentProcess();
371 if (!command_line->HasSwitch(switches::kWhitelistedExtensionID))
372 return CreateAvailability(NOT_FOUND_IN_WHITELIST, type);
373
374 std::string whitelist_switch_value =
375 base::CommandLine::ForCurrentProcess()->GetSwitchValueASCII(
376 switches::kWhitelistedExtensionID);
377 if (extension_id != whitelist_switch_value)
378 return CreateAvailability(NOT_FOUND_IN_WHITELIST, type);
379 }
380 } 370 }
381 371
382 if (!MatchesManifestLocation(location)) 372 if (!MatchesManifestLocation(location))
383 return CreateAvailability(INVALID_LOCATION, type); 373 return CreateAvailability(INVALID_LOCATION, type);
384 374
385 if (!platforms_.empty() && !ContainsValue(platforms_, platform)) 375 if (!platforms_.empty() && !ContainsValue(platforms_, platform))
386 return CreateAvailability(INVALID_PLATFORM, type); 376 return CreateAvailability(INVALID_PLATFORM, type);
387 377
388 if (min_manifest_version_ != 0 && manifest_version < min_manifest_version_) 378 if (min_manifest_version_ != 0 && manifest_version < min_manifest_version_)
389 return CreateAvailability(INVALID_MIN_MANIFEST_VERSION, type); 379 return CreateAvailability(INVALID_MIN_MANIFEST_VERSION, type);
(...skipping 225 matching lines...) Expand 10 before | Expand all | Expand 10 after
615 // static 605 // static
616 bool SimpleFeature::IsValidExtensionId(const std::string& extension_id) { 606 bool SimpleFeature::IsValidExtensionId(const std::string& extension_id) {
617 // Belt-and-suspenders philosophy here. We should be pretty confident by this 607 // Belt-and-suspenders philosophy here. We should be pretty confident by this
618 // point that we've validated the extension ID format, but in case something 608 // point that we've validated the extension ID format, but in case something
619 // slips through, we avoid a class of attack where creative ID manipulation 609 // slips through, we avoid a class of attack where creative ID manipulation
620 // leads to hash collisions. 610 // leads to hash collisions.
621 // 128 bits / 4 = 32 mpdecimal characters 611 // 128 bits / 4 = 32 mpdecimal characters
622 return (extension_id.length() == 32); 612 return (extension_id.length() == 32);
623 } 613 }
624 614
615 // static
616 bool SimpleFeature::IsWhitelistedByCommandLine(
617 const std::string& extension_id) {
618 // A singleton copy of the --whitelisted-extension-id so that we don't need to
619 // copy it from the CommandLine each time.
620 CR_DEFINE_STATIC_LOCAL(
621 std::string, whitelisted_extension_id,
622 (base::CommandLine::ForCurrentProcess()->GetSwitchValueASCII(
623 switches::kWhitelistedExtensionID)));
624 return !whitelisted_extension_id.empty() &&
625 whitelisted_extension_id == extension_id;
626 }
627
625 } // namespace extensions 628 } // namespace extensions
OLDNEW
« extensions/common/features/simple_feature.h ('K') | « extensions/common/features/simple_feature.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698